LRC creates, scaffolds and migrates repositories from a declarative spec, deterministically: the same spec
gives the same bytes, the same plan_id and (with @git) the same initial commit id, on any machine.
- Plan first. Every operation compiles to a sorted plan you can inspect (
lrc compile,--dry-run). - All or nothing.
createbuilds in a private staging directory, verifies it against the plan, then renames it into place.scaffoldandmigrateare journaled transactions with automatic rollback, andlrc rollbackundoes the last one later. If one is killed part-way, LRC refuses further changes untillrc recoverrestores the state from before it. - Collision-proof names. Case/Unicode collisions, file/directory conflicts, module shadowing (
x.pybesidex/__init__.py), Windows-reserved names, traversal and escaping symlinks are rejected before anything is written. Generated Python packages cannot shadow the standard library. - Manifest. Every repository LRC writes carries
.lrc/manifest.json, solrc validatecan report drift andlrc migratecan tell LRC's files from yours. .blux/generation, BLUX capabilities and DAT handoff. LRC works standalone with no dependencies. Through BLUX it exposesrepo.create,repo.scaffold,repo.compile,repo.migrateandrepo.validate, and every result names DAT'srepo.auditas the next step.
pipx install outervoid-lrc # or: pip install outervoid-lrc (Python 3.11+)
./lrc --help # or run from a checkout without installingThe PyPI name lrc belongs to an unrelated project; the distribution is outervoid-lrc, the command is lrc.
# Project: Hello Tool
# Description: A small CLI
@template python-cli
@git
docs/
NOTES.md <<MD
Notes for ${PROJECT}.
MD
lrc compile hello.lrc # the plan, nothing written
lrc create hello.lrc -o hello-tool # all or nothing; prints plan id, tree digest and commit
lrc validate hello-tool # PASS, or the files that drifted
lrc create hello.lrc -o h2 --audit # also hand the new repository to DAT
lrc migrate hello-v2.lrc -o hello-tool --dry-run
lrc rollback hello-tool # undo the last scaffold/migrate
lrc recover hello-tool # after a scaffold/migrate was killed part-way
lrc templates # python-cli, node-cli, rust-cliExit codes: 0 done, 1 blocked by a check (validation failed, migration conflicts, DAT gate failed; nothing
was changed), 2 usage, 3 failed (rolled back), 4 failed and the rollback failed too.
The LRC 1.x form lrc schema.lrc [-o DIR] [--dry-run] [--force] [--audit] still works.
| Getting started | first repository in five minutes |
| Usage | every command, option and exit code |
| Spec format | .lrc text schemas and lrc.spec JSON |
| Templates | built-in templates and their variables |
| Naming | what "collision-proof" checks |
| Engine | create, scaffold, migrate, journal and rollback |
| Manifest | .lrc/manifest.json, plan_id and tree_digest |
| BLUX | capabilities, receipts and the LRC → DAT operation chain |
| DAT | the audit handoff |
| Audit of LRC 1.0 | what was wrong and how 2.0 fixes it |
| Troubleshooting | common errors |
pip install -e '.[dev]'
make ci # ruff, mypy --strict, pytest, clean-venv wheel check, examplesOuter-Void Proprietary License (proprietary). Copyright (c) 2026 Outer-Void / Justadudeinspace (JADIS). All rights reserved. See LICENSE.
Copies and releases obtained before 2026-10-25 remain available under the MIT License they were published with; every change and release from that date on is proprietary.
Templates never add a licence to the repositories they generate: choosing one is the owner's decision (DAT reports its absence).
Contact: [email protected] (main) · [email protected] (fallback)
