Quint ITF Trace Explorer

January 30, 2026 · View on GitHub

A terminal UI tool for exploring Quint/Apalache traces in the Informal Trace Format (ITF).

This is a toy, vibe-coded project. We advise you to use agents to change the code if changes are needed. Vibe-coded PRs are welcome if the feature/fix is clearly described and easy to validate.

Overview

An interactive CLI tool to navigate, inspect, and debug ITF traces produced by Quint, Apalache and (soon) TLC.

The main goal is to make it easier to see what has changed from one state to another in a trace. We optimize the usage of available space (vertical and horizontal) to best show the changes, collapsing sub-trees that are unchanged (unless there is spare space).

Demo

Requirements

  • Rust 1.70 or later (2021 edition) - not needed if using Nix
  • A terminal emulator with Unicode support

Installation

Using Nix

If you have Nix with flakes enabled:

nix run github:informalsystems/quint-trace-explorer -- <trace-file.itf.json>

Using Cargo

# Install from source
git clone https://github.com/informalsystems/quint-trace-explorer.git
cd quint-trace-explorer
cargo build --release

# Run the tool
./target/release/quint-trace-explorer <trace-file.itf.json>

Usage

Generating ITF Traces

First, generate an ITF trace from your Quint specification using one of these commands:

# Generate a trace with a single random execution
quint run file.qnt --max-samples=1 --out-itf=trace.itf.json

This tool is particularly useful for investigating problematic executions, such as when an invariant is violated. The trace will show you the sequence of states leading to the violation.

# Generate a trace checking an invariant (useful for investigating violations)
quint run file.qnt --invariant=myInvariant --out-itf=trace.itf.json

All these commands support ITF output:

quint run file.qnt --out-itf=trace.itf.json

quint test file.qnt --out-itf=trace.itf.json

quint verify file.qnt --out-itf=trace.itf.json

Exploring Traces

Basic usage:

quint-trace-explorer <path-to-trace.itf.json>

If running from the repository (not installed):

cargo run -- <path-to-trace.itf.json>

Try it with one of the included examples:

# Using installed binary
quint-trace-explorer examples/tendermint.itf.json

# Or from repository
cargo run -- examples/clock.itf.json
cargo run -- examples/consensus.itf.json

Once running, use the keyboard navigation (see below) or your mouse to explore states and inspect values.

ITF Format Reference

ITF is a JSON-based trace format. See ADR-015 for full spec.

Trace Structure

{
  "#meta": { "source": "spec.qnt" },
  "vars": ["activeTimeouts", "msgBuffer", "system"],
  "states": [
    { "#meta": { "index": 0 }, "activeTimeouts": ..., "msgBuffer": ..., "system": ... },
    { "#meta": { "index": 1 }, ... }
  ],
  "loop": null
}

ITF Value Types

ITF FormMeaningQuint equivalent
{ "#bigint": "123" }Integer123
{ "#set": [x, ...] }SetSet(x, ...)
{ "#map": [[k,v], ...] }Map/FunctionMap(k -> v, ...)
{ "#tup": [x, ...] }Tuple(x, ...)
{ "tag": "X", "value": v }VariantX(v)
[1, 2, 3]Sequence/List[1, 2, 3]
{ "field": v, ... } (no #)Record{ field: v, ... }
"hello"String"hello"
true / falseBooleantrue / false

State Navigation

KeyAction
/ hPrevious state
/ lNext state
gGo to state (prompts for number)
HomeFirst state
EndLast state

Tree Navigation

KeyAction
/ kMove cursor up
/ jMove cursor down
Enter / Expand node under cursor
/ BackspaceCollapse node (or jump to parent)

Other

KeyAction
/Search/filter states
vToggle variable visibility menu
dToggle side-by-side state view
q / EscQuit