Readablewiki

Darcs

Content sourced from Wikipedia, licensed under CC BY-SA 3.0.

Darcs is a distributed version control system created by David Roundy. It lets you choose exactly which changes to accept from other repositories and works with both local repositories on your computer and remote ones over SSH, HTTP, or email. Darcs aims to be highly interactive, with fewer commands that give you precise control over which patches you exchange. The name stands for Darcs Advanced Revision Control System.

Key ideas and how it works
- Patches are first-class: a repository is a set of patches, and patches don’t have to be strictly ordered. You can often move patches around between repositories.
- Interactive workflow: you can decide which specific patches to pull or push, rather than pulling a fixed snapshot.
- Patch theory: patches may depend on other patches. A patch B depends on A if A provides the content B changes. Patches that modify different parts of the code are usually independent, but you can set explicit dependencies when needed.
- Commutation: Darcs can automatically figure out when patches can be reordered to minimize conflicts.
- Patience diff: since version 2.10, Darcs uses patience diff by default to compare changes.

What makes Darcs different
- It treats patches as the core unit, making several common version-control tasks possible with a small set of commands.
- You can easily merge, cherry-pick, and share specific patches between repositories.

History and development
- Darcs grew from ideas about patch formats in 2002, with the first public release in 2003.
- Darcs 2.0 appeared in 2008, introducing a more robust repository format and the darcs-2 patch semantics to reduce merge conflicts.
- The project continues to focus on optimizations and new features while keeping the same repository format.

Performance and criticisms
- Darcs has faced performance criticisms, especially with some merge scenarios in its early versions.
- While improvements have reduced some exponential merge costs, some recursive merge conflicts can still be tricky to resolve.

Current status
- Stable release: 2.18.5 (January 9, 2025).
- Original release: March 3, 2003.
- Written in Haskell and runs on Unix, Linux, BSD, macOS, and Windows.


This page was last edited on 3 February 2026, at 15:53 (CET).