Skip to main content
This guide walks you through installing Conseqa from source, writing a minimal model, running your first verification, and exploring the result in the interactive visualizer. By the end you will have a working model on disk and know how to extend it.
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:
  • target/release/conseqa — the validator and verifier
  • target/release/conseqa-viz — the visualization tool
Optionally add them to your PATH:
Confirm both tools are reachable:
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 model.yaml. The model below declares a single backend service, a canonical schema for a completed upload, and a keyed topic that carries it. It has no operations or requirements yet, so there is nothing to verify — but it is a valid, parseable starting point.
The completeness: complete declaration tells the verifier this schema describes the full logical shape. Fields absent from a complete schema are treated as nonexistent. Use partial when the real schema may contain undeclared fields.
3

Run the verifier

Pass your model to conseqa:
With no operations declared, there are no requirements to discharge:
Now try the fuller example from the repository’s test fixtures, which models a complete video streaming pipeline with four services and every obligation proven:
For a model with deliberate gaps, run the flash checkout fixture. The checker reports each gap honestly:
unknown is epistemic — it means the verifier could not establish the property from the declared facts. It is not evidence of a violation. The flash checkout model deliberately leaves tx.reserve_inventory without keyed-commit deduplication, which is why its idempotency and recoverability obligations are unknown.
To save the full obligation report as JSON for later use or visualization:
The JSON report follows the ProverReport format (format: 2). Each obligation object carries an id, property, subject, status, summary, assumptions, and evidence array.
4

Generate a visualization

Run conseqa-viz with --verify to produce and overlay the obligation report in one step:
You can also overlay a report you produced earlier:
Other useful options:
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:
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.
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).
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.
When a report is loaded, every vertex gains a status ring and a rollup chip (worst status wins: 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.