How to create and release a Drupal module on - Super quick guide

Whenever it's time to add a module to the contrib repository, I flounder a bit. Here's a little documentation on the steps I took when recently adding the Evernote module.

From the command line...

First, you need to login using your CVS account username (replace cvs_username below):


cvs login

Next, check out the drupal contrib repository. From the command line, do:

cvs checkout -l contributions/modules

Copy the module folder over to the modules/ directory and add it with the following commands:

cvs add example

cvs add example/*

Commit it with the following:

cvs commit -m "Super helpful commit message here"

Create a project on As Boris points out below, some people like to do this before adding the project to CVS. I prefer doing it this way so that when any 'new project' alerts go out on RSS, there's something for people to download and play with right away.

To create a development branch, cd to the module directory

cvscalvar tag -b DRUPAL-6--1

To create an official release, cd to the module directory

cvs tag DRUPAL-6--1-0-BETA1

To update your current checkout to use the development version:

cvs update -dP -r DRUPAL-6--1

Now, you need to add any releases to the module project page by clicking the "Add new release" link on the project page.

In order to get the development release showing on the project page, you need to click on the "Administer releases" link (see image above). Then, check the "Show snapshot release" checkbox (see below)

Useful links:

Downloads Version e.x-l.O-betal Downloads Download (19.16 kb) Date 2010- View all releases Add new release Administer releases Resources Development Read documentation View pending patches E3 documentation Down loads 6.x- 1.0- beta LOL 10- DOWNLOADS (15. 6.x Major version Current Release Supported Show snapshot release 6.x-1.0-betal Recommended major version: None Advanced options 6.8- 1.0-betal Beta


Hi Chris -- while this is useful, I think the "Step by Step" page that is part of quickstart is actually pretty good:

In your version above, you forgot the very import step of commiting -- with a useful commit message!

Also, you can create your project (and you should) before you do the CVS bits.

Updating the handbooks directly on d.o. will help many more people than just posting to your blog, so please dive in and help out by editing them directly. "Synthesis" pages that make things more visible (like this one) are also useful, so please create them if you feel they are missing! You can create them here first, and then copy them to d.o. along with an attribution.

Thanks for the insights, Borris, I appreciate your encouragement and gentle prodding to centralize any good ideas in documentation. It got me thinking about a number of things probably well beyond the realm of what you intended by the comment. :) You articulated some of my own thoughts about what would be the ideal way to approach documenting anything (hone, craft and centralize). This post is definitely an example of satisficing, a step in one direction before I get pulled in another direction.

I should put together a pat disclaimer that runs about the same lines as your comment, something like "Kids, if you're trying this at home, begin by consulting the already stellar documentation at and then use your experiences to better the resources that guided you. Pay it forward, spend the time, do it right." Maybe when I start following that advice myself. :)

Hey, thanks Chris!
Helped me a lot creating the new

Information is too "spread" in the handbooks, so your post is useful.
Note that after tagging the version it took like 30 seconds to show in the "Administer releases" tab.

And marking with "This is the recommended version" will show the row in green instead of yellow.

Maybe easy for veterans, but not so obvious the first time. :)

Good tip about the "recommended version" selection. If enough folks find it this post useful, maybe it will push me to review the current docs on and see if there's a place for something like this.

Mmmm... if you wait too much, it will be late :D

Touche! :)