Development  »  CVS

Horde now uses Git for all new development, however Horde 3 code continues to live in the CVS repository. All NEW development should be done against Git code, with CVS code only being used for bug and security fixes.

You can use the Horde CVS repository as an anonymous user, or as a developer.

You will need a CVS client, if you don't already have one. CVS should be installed with most modern Linux distributions, easily available on *BSD systems, and there are clients for Win32, MacOS, and GUI clients for the Unices. A number of them are available at

These command lines should be the bare-bones needed to get you started with Horde and CVS; this is not a CVS tutorial, however. The standard CVS documentation is available here, and there are many HOWTOs available on the web.

 The CVS Repository

All of the code in our repository is split into a set of modules. However, sometimes there are multiple branches available of a module. A CVS branch is a mechanism for keeping multiple versions of a module; for instance, a stable branch and a development branch.

Our branches and release engineering can seem a little convoluted at first, but follows some pretty simple rules. When you check something out of CVS, by default, you get the HEAD branch. HEAD is always the latest development code. It may be undocumented, it may be broken, it may cause tofu to turn purple. You never know.

The branches that hold release versions of applications - code that is documented, tested, and recommended for production use - are named FRAMEWORK_3, where _3 means that this includes Horde 3.x and any applications that are compatible to Horde 3. So, the release branch for IMP 4.x and Horde 3.x is both FRAMEWORK_3. Note that this doesn't give you a way to distinguish between IMP 4.0 and IMP 4.1 - they live in the same CVS branch, because one supercedes the other. However, we do tag releases, so you can check out IMP 4.0 with the IMP_4_0 tag.

There are some old branches available that hold old release versions of applications, named RELENG_*, where * is the major version of the application in question. So, the release branch for IMP 3.x is RELENG_3. The release branch for Horde 2.x is RELENG_2. Note that this doesn't give you a way to distinguish between IMP 3.0 and IMP 3.1 - they live in the same CVS branch, because one supercedes the other. However, we do tag releases, so you can check out IMP 3.0 with the IMP_3_0 tag.

 Anonymous CVS

Anonymous CVS access is available using pserver. To log in to the server, use the following commands:

sh, ksh, bash, zsh:


csh, tcsh:

          setenv CVSROOT

then for all:

         # password: horde
         cvs login

In order to reduce the load on our anonymous CVS server, and to promote fairness amongst users who retrieve our source code via anonymous CVS, each client host is limited to a maximum of four connections a minute. The server supports a maximum of eight anonymous CVS connections simultaneously.

 Developer CVS

Access to the live CVS tree is only available over SSH. You must set the CVS_RSH variable to ssh, or the location of the ssh binary on your machine. You will probably want to create an SSH key and use that with your account to avoid having to enter your password on every checkout/update/commit. You will also have to set the CVSROOT environment variable. For sh shells, here is the syntax:

sh, ksh, bash, zsh:


csh, tcsh:

         setenv CVSROOT

... where username is your account name.

Checking code out

Once you have performed the steps above, and you are sure the CVSROOT environment variable is set correctly, you can check out a module from CVS with this command:

        cvs co [ -r <TAG> ] <MODULE>

where -r <TAG> is optional, and specifies a tag or branch to check out (see the general CVS info for what the branches mean), and <MODULE> is one of the available modules. The modules list also says what tags are available for each module.

This will create a <MODULE> directory in your current directory. It may take a bit of time, especially if your network connection is slow or the module is an espeicially large one. But once it is done, you will have an up to date copy of the master CVS source for that module. You can then at any time cd into this directory and type:

        cvs update -Pd

to update your source tree to be in sync with the master tree. (The -P means to prune empty directories, and -d makes sure that you get new directories which have been added to the repository since your last update/checkout).