Skip to content

Architecture

sarr-io edited this page Jun 15, 2026 · 21 revisions

Architecture

Zinc sits between Circuitry, packages, and Limbo.

Circuitry       confirms shaped YAML and variables
Zinc            stores package facts, fragments, heads, and config
Packages        own software, settings, docs, and behavior
Limbo           stores rows and bytes

Boundary map

Boundary Zinc's responsibility Package responsibility
Shape bytes Store exact bytes and confirm shape facts with Circuitry. Decide how to interpret or use the shape.
Package request Build a request file from shape and variable facts. Read the request and return result bytes.
Package result Store exact result bytes in a fragment. Choose the result format and meaning.
Package identity Record name, version, root, and source facts. Own manifest structure and package internals.
Execution Run package software at a file boundary. Implement the behavior.

Why this split exists

The core should not know every provider, shell, model, policy, or command format. Those details belong in packages.

Zinc only needs enough structure to find package roots, read manifests, build request files, run package software, and remember the resulting bytes.

Storage shape

Zinc uses a small SQLite schema through Limbo:

packages(package, version, root, source_git, source_ref, source_path)
fragments(fragment, target, request, result, time)
heads(head, fragment)
config(key, value)

The tables are intentionally simple. Zinc does not add application-specific semantics on top of them.

Design reason

A small boundary is easier to inspect, migrate, and reason about. Zinc remembers facts. Packages define behavior.

Clone this wiki locally