Verifiable, repairable, generation-based package manager for UdonBSD.
This repository contains the current Rust implementation of Iris.
- content-addressed BLAKE3 store
- generation-based install / remove / rollback model
- SQLite-backed state tracking
- repository indexing for local paths and
file://repositories - Ed25519 trusted-key manifest verification during
repo sync - dependency-aware install / update planning
- managed
iris self status|updatesupport on top of the normal generation-based update path - fast
verifyand fullverify --full - UI-neutral request/response core API and a minimal
irisdUnix-socket daemon - orphaned config preservation,
repair,history,pin, andwhy - package source/provenance visibility for repository and installed metadata, including Ports-style origin metadata
The long-form architecture and CLI specification live in:
docs/overview.mddocs/operations.mdspec/system-spec.mdspec/manifest-spec.mdspec/cli-spec.md
The current implementation is suitable as a release-hardened core for the Iris model described in the spec. It includes a local irisd Unix-socket daemon that performs startup and periodic full verification, persists the latest daemon verify status under the state root, exposes read-only, fail-closed CLI access to persisted daemon status/log artifacts, supports explicit CLI delegation while keeping the default CLI path direct and fail-closed, and rejects long-running root execution unless an explicit privilege-drop target is configured.
cargo testcargo clippy --all-targets --all-features -- -D warningscargo build --release
- package ops:
install,remove,purge,update,search,info,self status|update - integrity ops:
verify,repair,audit - generation ops:
generation list|switch|rollback|diff|gc - repository ops:
repo add <url> <trusted-key>,repo sync - state introspection:
history,pin,why,orphan list|show|purge - local daemon:
irisd --root <path>serving JSON over<state-root>/run/irisd.sock - root-start hardening:
irisd --user <name|uid> [--group <name|gid>] ... - daemon verification controls:
irisd --no-verify-on-start,irisd --verify-interval-secs <n> - explicit daemon transport:
iris --transport daemon [--socket <path>] ... - daemon observability:
iris daemon status,iris daemon log [--lines <n>]
iris repo add stores a trusted Ed25519 public key for a repository. During repo sync, each package manifest must:
- declare
signature.algorithm = "ed25519" - reference the configured trusted public key
- contain a valid base64 Ed25519 signature over the unsigned manifest payload
If any manifest fails trust validation, the sync fails and the repository index is not replaced.
- default
verify: fast integrity checks for generation layout, symlink/store presence, and managed file existence verify --full: recomputes BLAKE3 for managed store-backed files and config files- config drift is reported as a warning rather than a hard corruption error
audit: aggregates repository trust checks, full verification results, and orphan-config warnings into a structured reportirisdbackground verification uses full verify, records the latest result inrun/daemon-status.json, and appends per-run records tolog/daemon-verify.jsonl
iris repo add file:///srv/iris/repo <base64-ed25519-public-key>iris repo synciris install helloiris verifyiris verify --fulliris history
- the implementation is developed and tested in this repository on Linux, while targeting the FreeBSD-oriented Iris design
- integration coverage for lifecycle, signature rejection, dependency resolution, and full verification lives in
tests/iris_flow.rs