ADR-0001: Embed templates in the binary at compile time
- Status: Accepted
- Date: 2026-06-02
- Deciders: DecisionNerd (maintainer)
Context
DocSlime’s job is to write a tree of Markdown templates into a user’s repo. Those templates
have to reach the user’s machine somehow. The tool’s requirements call for a portable,
zero-runtime-dependency binary that works offline (NFR-1, FR-7) and installs cleanly via
Homebrew, a shell script, or cargo install (NFR-3). Whatever mechanism delivers the
templates must not require the user to also have a separate templates directory present, or
network access, at runtime.
Options considered
Option A — Embed templates in the binary at compile time
- Pros: Single self-contained artifact; works offline; nothing to locate or install
alongside the binary; trivial to distribute via Homebrew / shell installer /cargo install. - Cons: Editing a template requires recompiling and re-releasing; templates can’t be
customized by the user without a rebuild.
Option B — Ship templates as separate data files installed next to the binary
- Pros: Templates editable in place; could allow user overrides without recompiling.
- Cons: Must reliably locate the data directory across platforms and install methods;
packaging is more complex; risk of the binary and its templates getting out of sync or the
data files going missing.
Option C — Fetch templates from a remote source at runtime
- Pros: Templates updatable without releasing a new binary.
- Cons: Requires network access (violates the offline requirement); adds latency and a
failure mode; introduces a hosting dependency for a tool that should be instant and local.
Decision
We will embed the entire template tree in the binary at compile time, using include_dir!
for the init tree and include_str! for the standalone ADR template. This makes DocSlime a
single self-contained binary with no runtime dependencies, satisfying the portability,
offline, and distribution requirements directly.
Consequences
- Positive: DocSlime ships as one artifact that runs anywhere with no setup, no network,
and nothing to locate at runtime — which keeps installation and usage friction low. - Negative: Any template change requires recompiling and cutting a new release; users
cannot customize the templates without rebuilding from source. - Follow-up: If user-customizable layouts become a requirement (tracked as an open
question in../../REQUIREMENTS.md), revisit with a new ADR that supersedes this one —
e.g. allowing an external template directory to override the embedded default.