Holger guards your artifacts at rest
Immutable artifact repository in pure Rust.
⚡ GATLING — one all-core engine · zero rayon · zero-copy · ~11/12 cores
- Airgap: transfer from internet, Nexus, Artifactory → immutable znippy archive
- Versioned: atomic transactions, content-addressed (Blake3), O(1) file random access
- Extreme performance: Apache Arrow zero-copy, multi-core parallel I/O
- Zero dependencies: no OS packages, no shell, no Python — 100% Rust (even decompressors rewritten from C)
- Embeddable: runs on bare-metal/OS-free devices, 2 MB RSS
Biggest gap —
p50_ms: holger leads naive by 785.3× (0.15 vs 118.82).
v0.1.0 · oden · 32 cores · 2026-07-23
| workload | ops_per_sec | plans_per_sec | records_per_sec | p50_ms | p99_ms | p999_ms | iters | metadata_mbs | served_mbs | mean_ms |
|---|---|---|---|---|---|---|---|---|---|---|
| holger | 181863 | 761.95 | 3.8097M | 0.15 | 0.46 | 1.10 | 2000 | 348.79 | 108.43 | 0.17 |
| artifactory | 20578 | 1.10 | 6.11 | 37.63 | 12.24 | 1.53 | ||||
| dryrun | 100 | |||||||||
| naive | 8.38 | 0.0419M | 118.82 | 131.88 | 24 | 3.84 | 119.35 | |||
| nexus | 15832 | 1.40 | 7.96 | 62.64 | 10.60 | 2.00 |
holger vs Nexus vs Artifactory, served over HTTP on all sides, measured
identically. Fair hardware — no throttled rival: each JVM competitor gets every
core on the host and ~75 % of its RAM as a fair JVM heap; holger runs in-process on
the same cores. The host and core count these numbers were taken on are stamped in the
table header above and in the provenance block below — never assume a number from one
host is comparable with one from another. Full method + every metric:
README-full.
Where these numbers come from
v0.1.0 · oden · 32 cores · 2026-07-23
| host | oden · 32 cores |
| version | 0.1.0 |
| measured | 2026-07-23 |
| arms | 16 |
| tests | 16/16 passed |
| publishable | yes |
The mashup and bench_status tables above are a static snapshot of the v0.1.0
run (the installed nornir predates those two docs render sections). The rest of
this page is still rendered by nornir docs render holger; refresh these two by
hand at release time, or restore their nornir:gen blocks once a newer nornir is
on PATH.
Read the real docs
- 📖 The complete manual —
docs/manual.pdf— every subsystem chapter (server, agent, storage, auth, release & history). - 📄 Full overview —
.nornir/README-full.md— the detailed pitch, quickstart, design, the full competitive matrix, and all measured benchmarks. - 📝
docs/book.md— the manual, as Markdown. Search it withnornir docs search holger "<query>".
Development setup
The generated docs in this repo are kept in sync by git hooks in .githooks/.
Point git at them once per clone:
On every commit that stages Rust source, a Cargo.toml, or
.nornir/ai-context.toml, the pre-commit hook regenerates the AI-context packs
(docs/ai-context.md + docs/ai-context-full.md) with
kvasir and stages them, so they never drift;
it also re-renders README/CHANGELOG via nornir. A missing tool warns and skips; a
kvasir validation error aborts the commit. kvasir is taken from PATH (install it
with cargo install --path ../kvasir) or a sibling ../kvasir release build.