3. Context and Scope
Where denver stops and the tools it drives begin.
3.1 Business context
denver sits between whoever starts an environment and the tools that build
it. It owns none of those tools. It decides when to call them and with
which arguments, from denver.yml.
flowchart LR
dev[Developer]
ci[CI runner]
cfg[(denver.yml<br/>+ imports)]
denver[denver]
tools[uv, conan, west, docker,<br/>git, bash scripts]
shell[Shell or command<br/>in the built env]
dev --> denver
ci --> denver
cfg --> denver
denver -->|subprocess| tools
denver -->|exec| shell
In |
a |
Out |
an assembled environment, and the final command |
Not denver’s job |
what the tools themselves do. denver does not know what a Conan recipe is, only that |
3.2 Technical context
External system |
Interface |
Driven by |
Notes |
|---|---|---|---|
|
subprocess ( |
|
Found on |
|
subprocess, plus |
|
The scripts are treated like any other external tool. |
|
subprocess ( |
|
Always the first |
|
subprocess ( |
|
Host side only. Inert once already inside a container. |
|
subprocess |
|
Clone/fetch pinned to one revision; read-only elsewhere. |
HTTP(S) servers |
|
|
Release archives, checksum-verified, with |
Shell scripts |
sourced or executed via |
hooks, |
Sourced scripts fold their exports back into the environment. |
The OS environment |
|
|
|
The filesystem |
direct reads/writes |
everywhere |
Reads config and the files it names; writes only under the env’s state dir. |
PyYAML |
Python library |
config loading |
The only third-party runtime dependency. |
denver itself opens no network connections. Anything network-bound happens
inside a tool it called, or in the download provider’s own transfer.
3.3 Scope boundaries
denver does:
resolve config (imports, stacking, overrides, defaults),
decide which stages run,
run them in order and collect their effect on the environment,
relocate the run into a container when a wrapper stage says so,
hand the result to a command.
denver does not:
build software itself,
resolve dependencies (that is uv’s, conan’s or west’s job),
manage remote infrastructure, credentials or registries beyond passing configured values through,
keep any state between runs except its own cache under the env’s state directory.