/!\ This page is primarily intended for Mercurial's developers.


Guidelines for making Mercurial binary packages.

1. Keeping up with Mercurial

There are no official binary releases of Mercurial. All builds are made by volunteers. Source code release are made approximately once a month by Matt Mackall according to the TimeBasedReleasePlan. Packagers should be prepared to make a release on the first of every month. Packagers should be subscribed to the mercurial-packaging list for release announcements and other packaging notes.

2. Priorities

Every package should aim to:

3. Things to note

4. SSL support

Packagers are encouraged to integrate as well as possible with the platforms existing PKI, for example by distributing a hgrc.d/cacert.rc with configuration of web.cacerts. If the platform doesn't have a suitable CA list you might want to distribute your own - for example the one from cURL/Mozilla. See CACertificates.

5. Make nightly builds available

Nightly builds help users give quick feedback on bugfixes. These should be made from the tip of the stable branch.

6. Version information protocol

Mercurial.selenic.com runs a cron job that polls a set of package publishers to build a set of available binary packages. For instance, it polls http://mercurial.selenic.com/latest.dat, which contains lines of the form:

100     1.7.1   .*      http://mercurial.selenic.com/release/mercurial-1.7.1.tar.gz     Mercurial source release

The fields are:



sort order, with 100 being lowest

version number


version of the advertised package

user agent regex


a regex to match against web browser User-Agent strings (the source packages matches all)



address of the binary to download


Mercurial source release

description to display in link anchor

The cron job will poll all known sources and build a javascript include that can be used to find the best package for a given user. Typically, this would mean listing the first entry with a matching regex (and possibly any others that matched the same expression).

To add a .dat file to the poll list, mail a URL to mpm.

6.1. Example .dat file URLs

7. Stay in touch

Announcements of releases and code freezes are made on the Mercurial-packaging list.

8. See also


Packaging (last edited 2017-05-02 23:04:09 by NathanGoldbaum)