Darcs — распределённая система управления версиями с ориентиром на патчи (изменения), разработанная для хранения и обмена истории изменений в виде независимых патчей. Проект возник в начале 2000-х годов и реализован преимущественно на языке Haskell. В своей архитектуре Darcs фокусируется на представлении истории как множества изменений, которые можно выбирать, переставлять и частично переносить между репозиториями, что отличает его от более традиционных систем, основанных на дереве коммитов.
Основные концептуальные особенности Darcs включают интерактивную работу с патчами, возможность выборочного применения изменений и разрешение конфликтов на уровне патчей с использованием теории коммутативности патчей. Darcs использует формальный аппарат для определения зависимости и независимости изменений, что позволяет производить операцию "перемещения" или "вишинга" патчей между ветками без необходимости применения всего набора коммитов подряд. Разработка и поддержка были ориентированы на исследование новых подходов к управлению историей разработки, хотя в практике он конкурировал с другими системами контроля версий и со временем утратил часть популярности.
- Патч-ориентированная модель: история представлена как набор патчей, каждый из которых описывает изменение, и с которыми можно работать как с первичными сущностями.
 - Распределённость: поддержка автономных локальных репозиториев и обмена патчами между ними без центрального сервера.
 - Выборочное применение изменений: возможность выбирать отдельные патчи для передачи или применения, а не обязательная линейная последовательность коммитов.
 - Интерактивное разрешение зависимостей: пользователю предоставляются механизмы для интерактивного управления зависимостями между патчами при их перемещении.
 - Алгоритмы коммутативности патчей: формальные методы для определения, какие патчи можно переставлять местами или применять в другом порядке без потери целостности истории.
 - Реализация на Haskell: большая часть кода написана на Haskell, что повлияло на стиль реализации и подход к формальным свойствам патчей.
 - Инструменты работы с конфликтами: механизмы обнаружения и разрешения конфликтов на уровне патчей, а также комбинирования изменений.
 - Командная строка и скриптируемость: набор команд для управления репозиториями, патчами и синхронизацией, подходящий для автоматизации.
 - Поддержка исторических операций: возможности отката, исследования и реорганизации истории посредством манипуляций с патчами.
 - Применение в исследованиях и нишевых проектах: используем в проектах и образовательных задачах, где интересен альтернативный подход к представлению истории изменений.