1
Install Conseqa
Conseqa builds from source with the standard Rust toolchain. You need a recent stable Rust release; no other runtime dependencies are required.Clone the repository and build both binaries in release mode:This produces two binaries:Confirm both tools are reachable:
target/release/conseqa— the validator and verifiertarget/release/conseqa-viz— the visualization tool
PATH:The
conseqa-viz front end is a pre-built React bundle embedded in the binary at compile time. You do not need Node.js to run it — only to rebuild the front end itself after modifying viz/.2
Write a minimal model
Create a file called Each block serves a specific purpose:
model.yaml. The model below declares a single backend service, a canonical schema for a completed upload, a data model with an outbox for typed messages, a keyed topic, and a complete operation. A short runtime block at the end pins request routing and pool concurrency so the operation’s serialization requirement can be discharged.- Data model with an outbox (
data_models.data.videos.outboxes.outbox.video_events): A typed logical message collection that lives in the same transactional boundary as the data model’s objects. The transaction can atomically write objects and admit messages to this outbox in one commit. - Topic (
topics.topic.video_events): A logical channel that carriesschema.VideoUploadedwith keyed message identity onevent_id. - Operation (
operations.operation.complete_upload): A request-driven operation with a transaction containingdeduplicated_byon the request’supload_id, awrite_outboxstep stagingVideoUploadedatomically, and anestablish_transaction_outputstep exporting values for the return. - Runtime (
runtime.execution_poolsandruntime.routers): Realization facts. A serial execution pool plus a router that assigns request invocations onto that pool by consistent hash ofupload_id. Adding these lets the verifier discharge the operation’s serialization requirement.
3
Run the verifier
Pass your model to With the model above, the verifier checks idempotency and recoverability obligations and reports their verdicts:Now try the fuller example from the repository’s test fixtures, which models a transactional outbox with a relay and downstream consumer:For a model with deliberate gaps, run the flash checkout fixture. The checker reports each gap honestly:To save the full obligation report as JSON for later use or visualization:The JSON report follows the
conseqa:unknown is epistemic: the verifier could not establish the property from the declared facts. It is not evidence of a violation. The flash checkout model deliberately leaves gaps in recoverability and idempotency for illustration.ProverReport format (format: 2). Each obligation object carries an id, property, subject, status, summary, assumptions, evidence, and scope (l0_only or runtime_dependent).4
Generate a visualization
Run You can also overlay a report you produced earlier:Other useful options:
conseqa-viz with --verify to produce and overlay the obligation report in one step:5
Open the HTML output
Open the generated file in any browser. The visualization makes no external network requests and works directly from disk:The visualization has three main views:
When a report is loaded, every vertex gains a status ring and a rollup chip (worst status wins:
System view (#/system)
System view (#/system)
Services are drawn as boundary boxes with their operations inside. Topics, external systems, and a synthetic “clients” vertex sit around them. Edges are the model’s information routes: publications, subscriptions, request effects, and external effects. Solid edges carry program step details; dashed edges are declared but unexecuted capabilities. Click any vertex or edge for a structured detail panel.
Operation view (#/op/<id>)
Operation view (#/op/<id>)
Shows a page header with the operation’s facts, then its declared requirements (with obligation status when a report is loaded), its inputs, and a full program diagram — every step in order, transactions expanded in place, match/branch arms side by side, and step locations labeled as the checker names them (
3, 3.ok.1).State machine view (#/machine/<id>)
State machine view (#/machine/<id>)
Displays the state graph with legal states, the initial state, and transitions annotated with side effects. A transitions table shows from/to sets and the operations that execute each transition through an intent.
disproven > unknown > proven). The obligations panel groups obligations by the operation they anchor to, with a status filter and expandable evidence cards.Next steps
Core Concepts
Learn how operations, requirements, and the proof mechanics fit together.
CLI Reference
Full reference for every flag on
conseqa and conseqa-viz.