---
title: "BIND 9 Technical Contributors' Guide"
slug: "bind-9-technical-contributors-guide"
description: "Steps to follow if you would like to contribute to BIND 9 code."
updated: 2021-07-01T20:04:04Z
published: 2021-07-01T20:04:04Z
canonical: "kb.isc.org/bind-9-technical-contributors-guide"
---

> ## Documentation Index
> Fetch the complete documentation index at: https://kb.isc.org/llms.txt
> Use this file to discover all available pages before exploring further.

# BIND 9 Technical Contributors' Guide

### Technical Advice for Submitters

Those wanting to write code for BIND 9 may be interested in the [developer information](https://gitlab.isc.org/isc-projects/bind9/-/blob/main/doc/dev/dev.md) page, which includes information about BIND design and coding practices, including discussion of internal APIs and overall system architecture.

Every patch submitted will be reviewed by ISC engineers following our [code review process](https://gitlab.isc.org/isc-projects/bind9/-/blob/main/doc/dev/dev.md#reviews) before it is merged.

It may take considerable time to review patch submissions, especially if they don't meet ISC style and quality guidelines. If the patch is a good idea, we can and will do additional work to bring it up to par, but if we're busy with other work, it may take us a long time to get to it.

To ensure your patch is acted on as promptly as possible, please:

- Try to adhere to the [BIND 9 coding style.](https://gitlab.isc.org/isc-projects/bind9/-/blob/main/doc/dev/style.md)
- Run `make check` to ensure your change hasn't caused any functional regressions.
- Document your work, both in the patch itself and in the accompanying GitLab issue.
- In patches that make non-trivial functional changes, include system tests if possible; when introducing or substantially altering a library API, include unit tests. See [Testing](https://gitlab.isc.org/isc-projects/bind9/-/blob/main/doc/dev/dev.md#testing) for more information.

Patches for BIND may be submitted directly via merge requests in [ISC's GitLab](https://gitlab.isc.org/isc-projects/bind9/) source repository for BIND.

### Changes to configure

If you need to make changes to `configure`, you should not edit it directly; instead, edit `configure.in`, then run `autoconf`. Similarly, instead of editing `config.h.in` directly, edit `configure.in` and run `autoheader`.

When submitting your patch, it is fine to omit the `configure` diffs. Just send the `configure.in` diffs and we'll generate the new `configure` during the review process.

### Documentation

All functional changes should be documented. There are three types of documentation in the BIND source tree:

- Man pages are kept alongside the source code for the commands they document, in files ending in .rst: for example, the `named` man page is bin/named/named.rst.
- The BIND 9 Administrator Reference Manual is in the .rst files in doc/arm/; the PDF and HTML versions are automatically generated from the .rst files.
- API documentation is in the header file describing the API, in Doxygen-formatted comments.

It is not necessary to edit any documentation files other than these; the PDF, HTML, and `nroff`-format files are generated automatically from the `rst` files by a script whenever a documentation change is merged to a release branch.

### Contrib Code

The software in the `contrib` directory of the BIND 9 `tar` archive is not formally supported by ISC, but is included for the convenience of users. These are things we consider useful or informative, but are not able to support at the same level as BIND.

`contrib` includes some useful DNS-related open source tools such as `zkt`, `nslint`, and the `idnkit` library for internationalized domain name support; useful scripts such as `nanny.pl` and `mkdane.sh`; performance testers including `queryperf` and `perftcpdns`; and drivers and modules for DLZ.
