389 Directory Server Development

Directory Server is huge! Where do I even start?

The best way to start is not to try and write code straight up. Install a Directory Server instance, and use it. Join our users list and ask questions - We are nice people, no question is bad (read our archives if you don’t believe me).

As you use a piece of software, you’ll start to see rough edges, things that could be better, even ways you wish you could use it differently. Talk to us, and see if you could help by giving us ideas, or even writing it yourself. We’ll help guide you in the process. Raising a bug is just as important as the potential to write a fix.

Many of us in the team started by asking questions and raising bugs - Not by jumping in the deep end with patches.


Developers should check out our building and install guides to see how to build and install the server from source. Then you can get working on fixing bugs, adding new features, adding new test cases to lib389 Continuous Integration, or improving our documentation. For other ideas see ways to contribute.

To browse through our backlog of development tickets, access the 389 Trac instance. The team can help advise you on the potential complexity or simpliticy of any issue want to attempt.

If you want to contribute code to the project you should look at our ICLA on this page. It contains information on the process you have to go through to be able to submit patches we will accept as well as getting a git. From a more technical standpoint, before submitting a patch you should check out our coding style guide. Once your patch is approved, see the Git rules before checking anything in.

Please take some time to review our license.


Source Code and Build Instructions

Download Source Code - Click Here

Component GIT Repository Clone the Repository
Directory Server (build & debug instructions) https://git@pagure.io/389-ds-base.git git clone https://git@pagure.io/389-ds-base.git
git clone ssh://git@pagure.io/389-ds-base.git
Nunc-Stans (build & debug instructions) https://git.fedorahosted.org/git/nunc-stans.git git clone git://git.fedorahosted.org/git/nunc-stans.git
git clone ssh://git.fedorahosted.org/git/nunc-stans.git
AdminUtil (build instructions) https://git.fedorahosted.org/git/389/adminutil.git git clone git://git.fedorahosted.org/git/389/adminutil.git
git clone ssh://git.fedorahosted.org/git/389/adminutil.git
Admin Server (build & debug instructions) https://git.fedorahosted.org/git/389/admin.git git clone git://git.fedorahosted.org/git/389/admin.git
git clone ssh://git.fedorahosted.org/git/389/admin.git
IDM Console Framework (build & debug instructions) https://git.fedorahosted.org/git/idm-console-framework.git git clone git://git.fedorahosted.org/git/idm-console-framework.git
git clone ssh://git.fedorahosted.org/git/idm-console-framework.git
389 Console (build & debug instructions) https://git.fedorahosted.org/git/389/console.git git clone git://git.fedorahosted.org/git/389/console.git
git clone ssh://git.fedorahosted.org/git/389/console.git
DS Console (build & debug instructions) https://git.fedorahosted.org/git/389/ds-console.git git clone git://git.fedorahosted.org/git/389/ds-console.git
git clone ssh://git.fedorahosted.org/git/389/ds-console.git
Admin Console (build & debug instructions) https://git.fedorahosted.org/git/389/admin-console.git git clone git://git.fedorahosted.org/git/389/admin-console.git
git clone ssh://git.fedorahosted.org/git/389/admin-console.git
DSGW & Web Apps (build instructions) https://git.fedorahosted.org/git/389/dsgw.git git clone git://https://git.fedorahosted.org/git/389/dsgw.git
git clone ssh://https://git.fedorahosted.org/git/389/dsgw.git
DSML Gateway (build instructions) https://git.fedorahosted.org/git/389/dsmlgw.git git clone git://git.fedorahosted.org/git/389/dsmlgw.git
git clone ssh://git.fedorahosted.org/git/389/dsmlgw.git
Passync/Winsync (build instructions) https://git.fedorahosted.org/git/389/winsync.git git clone git://git.fedorahosted.org/git/389/winsync.git
git clone ssh://git.fedorahosted.org/git/389/winsync.git
Continuous Integration Testing (documentation) https://git.fedorahosted.org/git/389/lib389.git git clone git://git.fedorahosted.org/git/389/lib389.git
git clone ssh://git.fedorahosted.org/git/389/lib389.git
Rest Server (documentation) https://git.fedorahosted.org/git/389/rest389.git git clone git://git.fedorahosted.org/git/389/rest389.git
git clone ssh://git.fedorahosted.org/git/389/rest389.git
OpenLDAP (build instructions) Not Available git clone git://git.openldap.org/openldap.git
Svrcore (build instructions) https://pagure.io/svrcore.git git clone https://pagure.io/svrcore.git

Design Documents

Feature design documents describing the various features that were introduced with each release of 389-ds-base and 389-admin are located at the Feature Design Documents page.

FHS style packaging

389 can be built to use FHS style, /opt FHS style, or user specified prefix - see FHS Packaging

Directory Server Plugins

It is possible to write plugins that allow you to extend the functionality of the Directory Server. Our plugins page contains information on the API and the scope of the functionality. You might also want to look at our annotated license page for some legal information on using the plugin api.

Release Engineering

Release Procedure

Nightly Builds

Nightly Builds


Not a coder? No problem. You can help by finding new bugs, verifying existing bugs, polishing documentation and generally improving the quality of the server.

A good way to contribute to improving the quality of the server would be to add automated tests for each of the features. Developers and contributors to the 389 Project are encouraged to write unit tests for any new features, updates and bug fixes being contributed. Where possible, the tests should be data driven. This allows for greater numbers of test cases covering more of the feature under test, to be written with minimal effort. We suggest tests be written in a scripting language like python with lib389.

There are a number of other LDAP test tools available from other groups and companies which may be of interest:

If you know python, you can add to the Continuous Integration Testing Framework (lib389), and help make the product more stable, and have less regressions in new releases.

What can you do?


Contributor License Agreement

If you want to submit code and patches you need to sign the Fedora Individual Contributor License Agreement.

Individual Contributor License Agreement

This is easy to do. Just follow these steps:

Last modified on 5 April 2017