This workspace contains the BigConfig family of SDKs and packages, implemented across Clojure, Python, and TypeScript.
| Directory | Purpose | Languages |
|---|---|---|
selmer/ |
Django-style template engine and ports. | Clojure, Python, TypeScript |
big-config/ |
BigConfig SDK: workflow, render, command-runner, locking, and OpenTofu helper engine. | Clojure, Python, TypeScript |
once/ |
Infrastructure automation package for deploying ONCE with OpenTofu and Ansible. | Clojure, Python, TypeScript |
walter/ |
Infrastructure automation package for provisioning developer workstations. | Clojure, Python, TypeScript |
launcher/ |
bc-pkg bootstrap launcher for GitHub-pinned BigConfig packages. |
Python, TypeScript |
Dependency direction:
once / walter -> BigConfig SDK (`big-config`) -> selmer
launcher -> target package selected at runtime
bigconfig/
├── selmer/{clojure,python,typescript}
├── big-config/{clojure,python,typescript}
├── once/{clojure,python,typescript}
├── walter/{clojure,python,typescript}
├── launcher/{python,typescript}
└── plans/
Each leaf directory is an independent package with its own build system, tests, README, and development notes.
Run commands from the relevant leaf directory.
| Leaf type | Install / sync | Test | Typecheck / build | Run CLI |
|---|---|---|---|---|
*/clojure |
dependencies resolve via clojure / bb |
clojure -M:test |
— | bb run ... where supported |
*/python |
uv sync |
uv run pytest -q |
— | uv run <entry-point> -- ... |
*/typescript |
npm install |
npm test |
npm run check, npm run typecheck, or npm run build depending on the leaf |
npm run <script> -- ... |
Common examples:
cd selmer/typescript && npm test
cd big-config/python && uv run pytest -q
cd once/clojure && bb run once package build
cd walter/typescript && npm run walter -- package build
cd launcher/python && uv run bc-pkg bigconfig-ai/once@clojure package validateThe root run is a Babashka script (run it as bb run ...) that operates on the workspace itself rather than on any single leaf. It groups its commands under git:
bb run # top-level help
bb run git setup --dry-run # preview workspace clone/worktree/fetch/pull actions
bb run git setup # create/update the expected clone + worktree layout
bb run git report # dirty/clean status for every nested git repo
bb run git report --porcelain
bb run git commit --dry-run # preview committing & pushing each dirty repobb run git setup uses SSH remotes and recreates the workspace as eight primary clones plus nine linked worktrees for the language branches; existing repos are validated and updated with git pull --ff-only origin <branch>. bb run git commit runs pi --print --model deepseek-v4-flash "commit and push" in each dirty repo; --root-dir DIR targets somewhere other than the current directory.
BigConfig packages render templates and orchestrate tools through named workflow steps. The main runtime concepts are:
- an
optsmap/dict/object threaded through every step; - reserved namespaced keys such as
big-config/exit,big-config/err, andbig-config.workflow/steps; - Selmer-based rendering from
src/resources/.../tools/into.dist/; - pluggable workflow steps for package-specific behavior;
- a command-runner seam so tests can avoid spawning real processes.
Template conventions used by the packages:
<{ var }>renders BigConfig SDK/Selmer variables in file content;{{ var }}is used for directory/provider selection and for templates that must preserve Ansible-style braces.
Generated .dist/ directories are build artifacts and should not be edited directly.
Selmer is the template engine layer. The Clojure implementation tracks the upstream Selmer project; Python and TypeScript are ports used by the language-native BigConfig SDK implementations.
The SDK provides the workflow engine, renderer, shell runner, Git lock helpers, plugin registry, custom filters, and OpenTofu/Terraform construct helpers consumed by packages such as Once and Walter.
Once automates a six-stage create pipeline:
tofu -> tofu-smtp -> tofu-dns -> tofu-smtp-post -> ansible-local -> ansible
It supports cloud compute providers, DNS/SMTP setup, remote state backends, validation, description reports, and BC_PAR_* environment overrides.
Walter provisions or targets a host and configures it as a development environment. It reuses shared Once infrastructure stages where possible and owns its Walter-specific Ansible roles/data.
bc-pkg initializes a local BigConfig CLI from a GitHub spec such as:
uvx bc-pkg bigconfig-ai/once@clojure package validate
npx bc-pkg bigconfig-ai/walter@typescript package buildOn first run it resolves the ref to a commit SHA, writes a language-native manifest, copies the package run file, and forwards subsequent commands to the pinned target.
It also accepts a local path instead of a GitHub spec for live local development — it wires native local-path dependencies, symlinks the run file, and does no SHA pinning:
uvx bc-pkg ../once/python package build
npx bc-pkg ../once/typescript package build- Use
BC_PAR_*variables to override package parameters. - Keep private credentials out of source; use each leaf's
.envrc.privateconvention where present. - Destructive infrastructure operations should be run only with deliberate parameter overrides, for example
BC_PAR_COMPUTE_PREVENT_DESTROY=falsefor Once delete flows.
Start with the README in the leaf you are using:
selmer/*/README.mdbig-config/*/README.mdonce/*/README.mdwalter/*/README.mdlauncher/*/README.md
The plans/ directory records active and completed implementation plans for cross-language parity work.