# Tank v0.1.0 - Table of Contents

> A declarative container orchestrator for Linux, built on the public Linx API: declare pods of namespaced workloads as data, and a reconcile loop converges the machine onto them — host-reconciled macvlan networking, cgroup limits, and a Khepri-backed desired-state store.

## Pages

- [Tank](readme.md)
- [Tank by example](examples.md)
- [License](license.md)

## Modules

- [Tank](Tank.md): Tank — an opinionated, declarative container orchestrator built on Linx.
- [Tank.Container](Tank.Container.md): A container's desired state inside a pod.
- [Tank.Host](Tank.Host.md): The host-config seam: how Tank reads the *host's* network facts without owning
them — the uplink a macvlan attaches to, and the DNS servers a container
inherits.
- [Tank.Host.Static](Tank.Host.Static.md): The default `Tank.Host`: uplink + DNS read straight from application config.
Runs anywhere, with no host-network integration.
- [Tank.Image](Tank.Image.md): Pulls an OCI / Docker image and assembles it into a root filesystem a
container can run from.
- [Tank.Image.Registry](Tank.Image.Registry.md): Minimal OCI Distribution (registry HTTP API v2) client.
- [Tank.Image.Tar](Tank.Image.Tar.md): Extracts an OCI image layer -- a gzipped tar -- into a directory.
- [Tank.Image.User](Tank.Image.User.md): Resolves an image's `User` spec to a numeric `{uid, gid}`.
- [Tank.Mount](Tank.Mount.md): A `Tank.Volume` mounted into a container at an absolute in-rootfs `path`.
- [Tank.Nic](Tank.Nic.md): One network interface inside a pod's network namespace.
- [Tank.OCI](Tank.OCI.md): Interprets a pulled OCI image config against a `Tank.Container` spec to derive
the workload's run parameters, per the OCI rules
- [Tank.Pod](Tank.Pod.md): A pod's desired state: one or more containers sharing a single network
namespace, the pod-level network and volumes, and a restart policy. The pod
`name` is the unique key (the Khepri path leaf under `[:tank, :pods, name]`).
- [Tank.Pod.Network](Tank.Pod.Network.md): A pod's network namespace: a set of interfaces plus pod-level DNS (one
`/etc/resolv.conf` per netns). Loopback is always raised by the runtime.
- [Tank.Reconciler](Tank.Reconciler.md): The level-triggered control loop that converges running pods to the desired
state in `Tank.Store`. This is what closes the declarative loop: you
`Tank.apply/1` a pod and the reconciler starts it — you never start a
container imperatively.
- [Tank.Runtime](Tank.Runtime.md): Brings one pod to running reality and supervises it.
- [Tank.Runtime.Network](Tank.Runtime.Network.md): Configures a pod's network namespace at the `Linx.Process` `:ready`
checkpoint. A pod's `:network` is one of
- [Tank.Runtime.Rootfs](Tank.Runtime.Rootfs.md): Host-side container rootfs bring-up, run during the `Linx.Process` `:ready`
checkpoint. Builds the container's filesystem inside its mount namespace and
pivots into it, leaving the workload ready to `execve`.
- [Tank.Store](Tank.Store.md): The desired-state store seam: Tank's view of the `[:tank, :pods, …]` subtree
of a Khepri store.
- [Tank.Volume](Tank.Volume.md): A pod-level storage volume, mounted into containers via `Tank.Mount`.

