<!-- ⚠ GENERATED by nornir from .nornir/README.md — DO NOT EDIT this file -->

<p align="center">
  <img src=".nornir/assets/skidbladnir.webp" alt="Skíðblaðnir — the ice-longship hauling the ZNIPPY cargo across the gap, shield-rabbits down the hull, under the aurora" width="440">
</p>

# Skidbladnir

> **Skidbladnir** (Skíðblaðnir) is a 100% Rust airgap install framework: pack a whole
> deployment into one sealed, content-addressed bundle, carry it across the gap, and on the
> far side it creates the service, unpacks the znippy archive, and provisions the data & log
> dirs — starting every component in dependency order with no network and no shell on the target.

⚡ part of the **nordisk** constellation

## Mashup — one sealed bundle onto a zero-network target

Skidbladnir carries the *whole* deployment — infra **and** software — over an airgap in
one content-addressed bundle and brings it up with **no agent, no SSH, no shell** on the
target (it drives systemd straight over D-Bus). The rivals each cover only a slice:

| capability | **Skidbladnir** | Ansible | Packer | cloud-init |
|---|:--:|:--:|:--:|:--:|
| One sealed, content-addressed bundle — infra **+** software + images + config + data, verify-on-receipt | **✅** | ✗ | ◐ (image only) | ✗ |
| **Zero network, zero shell** on the target — drives systemd over D-Bus, no SSH/agent | **✅** | ✗ (SSH + Python) | ✗ | ◐ (first-boot shell) |
| **Provision the machine** (Redfish BMC · Terraform · KVM) **and** install the software, one tool | **✅** | ◐ | ✗ | ✗ |

*The full seven-capability matrix — the `ServiceSpec` → PKI/systemd renderer tree, atomic version-swap + rollback, all-Rust offline — is in [the full overview](.nornir/README-full.md).*

## Benchmarks

<!-- nornir:gen:start:bench_status -->
**Not benched.** This repo contributed no numbers to the latest run.

| | |
|---|---|
| `nornir-bench` entrypoint | **none** — nothing for the harness to run |
| criterion `[[bench]]` targets | **none** |
| host-stamped result | **none** |

There is no benchmark harness here at all — no `nornir-bench` entrypoint and no criterion `[[bench]]` target. Nothing was skipped and nothing failed: there is nothing to measure yet. Adding an `examples/nornir-bench.rs` puts this repo in the host-stamped tables.
<!-- nornir:gen:end:bench_status -->

<sub>This block is rendered, not written: the "no numbers" state is a **result**, probed
from this repo on every `nornir docs render Skidbladnir`. It is here so nobody has to
guess whether Skidbladnir was measured and came out slow, or was never measured at all —
an absent table would have read as the former.</sub>

## Read the real docs

- 📖 **[The complete manual — `docs/manual.pdf`](docs/manual.pdf)** — every subsystem chapter (pack · archive · move · unfold, PKI, layout, the Redfish/Terraform/KVM backends).
- 📄 **[Full overview — `.nornir/README-full.md`](.nornir/README-full.md)** — the detailed pitch, quickstart, the full capability matrix, packet format, and design.
- 📝 [`docs/book.md`](docs/book.md) — the manual, as Markdown.
