shipper-core 0.4.0

Core library behind the `shipper` CLI: engine, planning, state, registry, and remediation primitives for `cargo publish` workspaces.
Documentation

shipper-core

Lean engine library behind Shipper.

shipper-core is the stable embedding surface for Shipper's workspace-publish engine. It has no CLI dependencies — no clap, no indicatif, no progress rendering — and is intended for Rust tools, CI frameworks, and tests that need to drive cargo publish with Shipper's safety guarantees but do not need the operator-facing CLI.

Use this crate when

You want deterministic publish planning, preflight, publish/resume orchestration, and state/receipt/event handling without pulling the clap and terminal-UX graph.

If you just want to run Shipper from a terminal or CI, install shipper instead.

What lives here

  • Plan — deterministic dependency-ordered publish plan from cargo_metadata, with a stable plan_id.
  • Preflight — git cleanliness, registry reachability, dry-run, version-not-taken, optional ownership checks.
  • Publish / resume — per-crate cargo publish with retry/backoff, post-publish readiness verification, resumable state.
  • Reconciliation — ambiguous-outcome handling against registry truth (Published / NotPublished / StillUnknown).
  • State / events / receipts — append-only events.jsonl as truth, state.json as projection, receipt.json as summary.
  • Remediation planning — yank, reverse-topological containment, fix-forward planning.
  • Rehearsal — package + verify against an alternate registry before touching production.

What does not live here

  • CLI parsing (clap) — in shipper-cli.
  • Progress rendering (indicatif) — in shipper-cli.
  • Install-facing docs and binary — in shipper.

Minimal shape

use shipper_core::plan::build_plan;

// See docs/ and the engine entry points for the full API.
// The load-bearing pieces are:
//   - shipper_core::plan   — build a ReleasePlan from a workspace
//   - shipper_core::engine — run preflight / publish / resume
//   - shipper_core::state  — read persisted execution state
//   - shipper_core::store  — StateStore trait + filesystem impl
//   - shipper_core::types  — domain types (specs, receipts, state, events)
//   - shipper_core::config — load and merge `.shipper.toml`

Architecture

shipper (install face)
  -> shipper-cli (CLI adapter: clap, subcommands, output, pub fn run())
       -> shipper-core (this crate — engine, no CLI deps)

Related

Stability

Pre-1.0. The public API will move; breaking changes are called out in CHANGELOG.md.

License

MIT OR Apache-2.0.