Skip to content

Build with Opaque core

Opaque's local applications and separately packaged management services consume the same public libraries and protocols. A local installation builds and runs without private source, organization services or enterprise credentials.

Surface Responsibility Consumer requirement
opaque-core Canonical operation and identity types, policy evaluation, signed policy/report contracts and evidence primitives Obtain trusted identity; policy evaluation alone is not a complete execution authorization
opaque-bounded-work Task manifests, consumption ledger and bounded executors Preserve durable reservation before dispatch, current authority and consumed unknown outcomes
opaque-approval Trusted review binding, enrolled signatures and durable decisions Preserve full review and current reviewer/requester verification
opaque-federation-runtime Signed policy application, attestation, audit export and broker reporting Retain tenant/broker binding and consumer-owned replay state where specified
opaque-web Local dashboard application and trusted view composition Route private data through protected APIs; honor lock, cancellation and response generations

The independent policy example is a separate Cargo project. It demonstrates library consumption without private dependencies. Fleet wire verification also has a standalone example under crates/opaque-federation-runtime/examples/.

These are Rust source interfaces, not a stable C ABI or a promise that every crate supports every operating system. Pin a reviewed Git revision and run integration tests when upgrading. The public core uses Apache-2.0; see licensing for documentation and third-party terms. These interfaces are not published packages.

Compose a dashboard

opaque_web::run_dashboard(DashboardOptions, DashboardExtension) runs the local application. application_with_extension exposes the router for applications that own their listener. An extension supplies compile-time tab/panel/style/script fragments and an Axum router. All extension routes require the owner token, including paths outside /api/, and retain the local Host/Origin checks.

Client code registers a view with registerDashboardView(id, {load, clear}). Use apiJson for protected reads and capture auth.generation; check currentAuth(generation) before changing the page after any asynchronous work. clear must remove the view's private state when the dashboard locks. The same design assets, navigation and locked shell serve every consumer.

Extensions are trusted application code, not an untrusted plugin mechanism. Shell fragments must never contain credentials or runtime private records. Keep provider execution and trusted approval outside browser view handlers.

Verify portable evidence

opaque_core::evidence_checkpoint contains the public producer/checkpoint and retention-receipt contracts; opaque_core::audit::checkpoint provides local verified snapshots and explicit legacy upgrades. The opaque-evidence binary in the opaque package can verify exact export bytes against independently supplied producer and custodian trust pins without running a broker or opening its database. Follow the executable examples to build it from the reviewed checkout and check declared coverage and explicit reference pins. Single-checkpoint CLI verification reports history as unchecked; the consuming service must enforce predecessor continuity and retain its own high-water reference.

This is an evidence boundary: a receipt cannot restore authority, prove provider effects or establish that its signer has independent custody. Consumers must retain their high-water state, reject gaps/substitutions as appropriate and keep administrative enrollment assertions distinct from measured facts.

Storage boundaries

Public identity lifecycle and signed-report contracts do not expose a database driver. Existing local persistence implementations still use SQLite. Backend replacement requires migration and crash/replay/revocation acceptance; choosing another engine does not remove those guarantees. Analytics and graph projections must not silently become authoritative authorization state.