Monotone uses SHA-1 hashes to identify specific files or groups of files, as with Git and Mercurial, in place of linear revision numbers. Each participant maintains their own revision history, stored in a local SQLite database. Integrity Prior to some heavy optimisation in revision 0.27, Monotone's emphasis on correctness over optimisation was often blamed for poor initial experiences. The first action of a new user is often to synchronize (clone) a large existing Monotone database, an action which often took hours for large databases, due to the extensive validation and integrity checking which Monotone performs when revisions are moved through the network. Once the initial (clone) database is populated, subsequent actions usually proceed more rapidly. , there is still room for further optimisation on some rarer functions. Workflow Monotone is especially strong in its support for a diverge/merge workflow, which it achieves in part by always allowing commit before merge. Networking Although Monotone originally supported a variety of networking protocols for synchronizing trees, it now exclusively uses a custom protocol called netsync, which is more robust and efficient, and shares some conceptual ground with rsync and cvsup. (However, as of version 0.27, it is possible to use the netsync protocol over any stream, notably including ssh connections.) Netsync has its own IANA-assigned port (4691) and older versions of it are supported by a Wireshark plug-in for traffic analysis. There is no separate Monotone server because any Monotone client can act as a server. Other features Other features of Monotone include: Good support for internationalization and localization Portable design, implemented in C++ High integrity is a key design goal Monotone can import CVS projects. Signing of revisions using RSA certificates Easy to learn, due to a command set similar to that of CVS Very good at branching (both divergences within a branch and named branches) and merging Good documentation Very low maintenance Complete and comprehensive Perl library that allows you to completely control Monotone from a Perl script (mtn-browse makes use of this) Drawbacks , possible drawbacks of Monotone include: Potential users cannot check out (or commit) from behind a proxy (very common in corporate environments) due to non-http protocol. Performance issues for certain operations (most noticeable initial pull) Implementation Monotone is implemented in modern-dialect C++ on top of the Boost library, the Botan cryptography library, and the SQLite database library. Monotone supports customization and extension via hook functions written in