Version 3 (modified by Thomas Moschny, 11 years ago) (diff)

Added instructions on how to get the plugin, and some minor updates.

Welcome to the TracMonotone site

TracMonotone is a plugin for Trac that allows a Trac project to use a Monotone instead of a Subversion repository. The plugin enables you to browse your project's sourcecode, view changesets, etc., like in any other Trac project. Revisions can be linked to from wiki pages, tickets, and any other place that contains wiki text, e.g. commit messages, and they can be specified either using their hex-id, or via a tag or branch name, and later via Monotone selectors, too.


The plugin is currently neither stable nor optimized for high performance. Some things work, others don't.

However, your feedback is welcome!


  • A Monotone 0.29 (or later) binary. 0.31 (or later) is recommended, because it has some important improvements for the 'automate stdio' subcommand used by TracMonotone.
  • Python 2.4.
  • An installation of Trac. You can either use 0.10.X or 0.11b1.
  • Python setuptools >= 0.6.
  • The Python Bindings for BerkeleyDB (pyBSDdb), if you want to use the plugin together with mod_python. These bindings may or may not be part of your Python installation.


There are no releases yet. TracMonotone is hosted in the net.venge.monotone.trac-plugin branch on

You can checkout the latest version using this command:

mtn clone -b net.venge.monotone.trac-plugin tracmtn


  • Create a Python egg: run python ./ bdist_egg in the plugin's toplevel dir.
  • Put the generated egg into the plugins directory of your project.
  • Add repository_type = mtn and repository_dir = path_to_mtn_db options to the [trac] section of the conf/trac.ini file of your project.
  • Enable the plugin by adding the option tracmtn.* = enabled to the [components] section of the conf/trac.ini file.
  • (Re-)start the webserver or tracd.
  • That's it :)


All configuration options have to be placed in the [mtn] section of the conf/trac.ini file.

  • The full path to the Monotone binary can be specified using the mtn_binary option.
  • A caching method for Monotone manifests, certs, changesets, etc. can be specified using the cachespec option. The format is: cachespec = backend[:option1[:option2[...]]] Currently these backends are provided:
    • localmem: (default) uses local memory for caching. Takes no options.
    • dbmshelve:prefix: Persistent, uses Unix DBM databases named prefix*.{pag|dir}. All directories in prefix must exist. Not suited for concurrent access by more than one process.
    • bsddb:dir:prefix: Uses the bsddb3 binding to a persistent BerkeleyDB database. The directory 'dir' must be writable by trac.

Selecting the Caching Method

For better performance you should use a disk-based caching method. If you run a standalone version of Trac (tracd), you can either use 'dbmshelve' or 'bssdb'. If you use Trac via mod_python, you *must* use 'bsddb', because the 'dbmshelve' method doesn't support concurrent access by multiple processes.

It is not recommended to use the 'localmem' method other than for testing purposes, because it keeps all entries in memory until the server process is restarted.

Known Problems/Missing Features

  • Security: The monotone select functionality is exposed. Only Monotone binaries prior to version 0.27 are susceptible to SQL injections.
  • Locking: Monotone currently does not support simultaneous access to the database via netsync and automate. There are various ideas how to overcome this situation, none of which has been fully implemented yet.
  • Memory leak when using the bsddb caching method, see #6.
  • Revisions are almost always printed as complete 40-char string.
  • The changeset displays doesn't show attr changes.
  • Log on a per-file basis is missing.
  • The lifetime for cached data should be adjustable.
  • Support for trac-admin is missing. (?)


Thomas Moschny (thomas DOT moschny AT