DaCE is a data-centric workflow engine for the Pyramid / substanced / ZODB stack. It enables the definition and execution of complex business processes and the definition of objects of collaboration. In DaCE, rights management is based on the definition of roles.
This repository is a maintained fork of ecreall/dace (original development by Ecréall, 2014–2017), forked in July 2026 and maintained by Michaël Launay (Logikascium). Ecréall's intellectual property was acquired by Logikascium in 2024; the license is unchanged: AGPL v3+.
This fork is part of the modernisation effort of the Nova-Ideo / KuneAgi participatory-innovation platform. The master branch is dual-stack: the engine runs on the
certified legacy stack (tag legacy-golden-master, 88/88) and on
Python 3.12 (asyncio reactor, step A — same API, same zmq
transport; phase 3 / M1, 88/88). See CHANGES.md and the modern-stack
section of docs/en/architecture.md.
- Process definitions with Activity, Exclusive Gateway, Parallel Gateway, and Events (StartEvent, IntermediateThrowEvent, IntermediateCatchEvent) of the following kinds: Terminate, Timer, Signal, Conditional
- Process instances indexed in ZODB with the substanced catalog, based on hypatia indexes
- An event loop built on tornado and zmq handles conditional and timer events (legacy — scheduled for replacement by
asyncio, see roadmap)
- Python 3.6 only — the modernisation targets Python 3.12
- Pyramid 1.9.x, substanced 1.0a1, ZODB 5.x, tornado < 4, pyzmq
- Known-good dependency pins are provided in
constraints-legacy.txt, extracted from the historical nova-ideoversions.cfg(the last environment in which the whole stack was known to work together)
Add ecreall_dace to install_requires in your setup.py, then edit production.ini in your Pyramid application:
pyramid.includes =
...
daceFor an isolated legacy development environment:
python3.6 -m pip install -c constraints-legacy.txt -e .python setup.py testA best-effort GitHub Actions workflow (.github/workflows/tests.yml) runs the suite inside a python:3.6-buster container. It will be stabilised during Phase 1 of the roadmap (reproducible legacy build).
- nova-ideo and its variant KuneAgi
- l'agenda commun
Documentation lives in docs/:
Audits, design documents and the worklog are maintained in both languages. See docs/README.md for the documentation policy.
Design documents: architecture · usage scenarios (English originals; French mirrors under docs/fr/).
The plan follows the Nova-Ideo modernisation audit (Logikascium, July 2026):
- Phase 1 — Reproducible legacy build ("golden master"). Frozen environment and green CI replaying the existing test suite: the non-regression baseline for everything below.
- Phase 2 — Exhaustive documentation. Docstring pass over the whole package, documentation of the event-loop protocol and of every monkey-patch in
dace/patches.py, BPMN/mermaid diagrams generated automatically from the declarative process definitions. - Phase 3 — Modernisation (target: version 2.0.0).
- Port to Python 3.12; Pyramid 2.x; ZODB 6
- Replace the tornado < 4 + pyzmq event loop with
asyncio, behind the existing API - Move from the abandoned substanced 1.0a1 to a maintained, trimmed-down fork
- Migrate tests to pytest; packaging to PEP 621 (
pyproject.toml) withuv; ruff linting; gradual typing - Python module names (dotted paths) are frozen to preserve existing ZODB pickles
Versioning: 1.1.x = legacy maintenance on this fork; 2.0.0 = the modernised engine.
Open study (no decision taken): in the longer term, a possible migration to an external BPMN engine (such as Operaton) will be evaluated — deferred until the documentation phase is complete.
This product has been translated into: French.
- Issue tracker: https://github.com/michaellaunay/dace/issues
- Source code: https://github.com/michaellaunay/dace
- Historical upstream: https://github.com/ecreall/dace
The project is licensed under the AGPL v3 or later (AGPLv3+). See LICENSE.