Skip to main content

Crate Map

When a runtime grows, crate boundaries either explain the architecture or hide it. AppCore crates are split by ownership boundary, not by convenience.

LayerCratesWhy it exists
Foundationappcore-contracts, appcore-types, appcore-transport, appcore-dntreusable contracts, validated IDs, bounded transport, and encrypted file envelopes without concrete runtime composition
Lifecycleappcore-supervisorservice graph, restart policy, watchdog, and quarantine independent from command dispatch
Coreappcore-corecommand/event/state/decision registries, runtime identity, lifecycle, audit, idempotency
Runtime servicesappcore-api, appcore-storage, appcore-security, appcore-ops, appcore-scheduler, appcore-syncone infrastructure responsibility per crate
Distributedappcore-distributed-contracts, appcore-control-plane, appcore-capabilities, appcore-peer-rpc, appcore-gatewaywire contracts, presence, discovery, leases, capability routing, peer transport, and gateway relay
Compositionappcore-provider, appcore-update, provider adaptersprovider factories, deployment plans, coordination stores, update lifecycle
Hostappcore-binthe only crate allowed to compose concrete runtime infrastructure for applications
Toolsruntime-console, certification toolsoperator and release evidence workflows

The architecture rule is acyclic dependency direction. Contracts do not depend on implementations. Business code depends on the public application facade, not private host modules.

How should you read this map?

Start from the host and move downward. appcore-bin composes concrete runtime infrastructure. It depends on contracts, providers, core services, and lifecycle tools. Application code should stop at the public facade instead of importing private host internals.

If a crate owns a wire format or manifest type, treat it as compatibility-sensitive. If it owns a provider implementation, treat it as deployment-sensitive. If it owns business registration facades, treat it as application-facing.

Limitations

  • This map explains ownership boundaries; it is not an exhaustive API reference.
  • Crate names can expose experimental or certification tooling that is not part of the stable application surface.
  • Internal modules may change even when public manifest and application contracts remain compatible.