Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/0x-unkwn0wn/simterm/llms.txt

Use this file to discover all available pages before exploring further.

This guide walks you from a fresh machine to a running Simterm session, then shows you every CLI flag the frontend understands, and finally steps you through creating your first campaign by copying the bundled sample. By the end you will have a custom campaign loading, validated, and playable.

Prerequisites

1

Install Rust stable

Simterm requires Rust stable, edition 2021. Install it from rustup.rs:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Verify the installation:
rustc --version
cargo --version

Run the sample campaign

Clone the repository and launch the bundled sample campaign with a single cargo run:
git clone https://github.com/0x-unkwn0wn/simterm.git
cd simterm
cargo run -p simterm
If no --campaign path is provided, Simterm automatically loads examples/sample_campaign. The TUI opens in an alternate screen and is fully playable from the first command.

CLI flags

The simterm binary accepts the following flags. Pass them after -- when using cargo run: Select a campaign --campaign (or its short form -c) specifies the path to a campaign directory or .ron file. You can also pass the path as a bare positional argument without the flag.
cargo run -p simterm -- --campaign ./examples/sample_campaign
cargo run -p simterm -- -c ./examples/sample_campaign
cargo run -p simterm -- ./examples/sample_campaign
Validate without opening the TUI --check confirms the campaign loads and contains missions. It prints a summary and exits immediately — no TUI is opened.
cargo run -p simterm -- --check --campaign ./examples/sample_campaign
Deep semantic validation --doctor runs a full semantic analysis: dangling references, unreachable content, bad numeric ranges, and more. It exits with a non-zero code if there are errors, making it suitable for CI.
cargo run -p simterm -- --doctor --campaign ./examples/sample_campaign
Automated playthrough --autoplay injects real commands into the normal TUI with visible pauses. Use it as an end-to-end playability check.
cargo run -p simterm -- --autoplay --campaign ./examples/sample_campaign
Deterministic automated playthrough --autoplay-deterministic is a stricter variant that avoids Unstable exploits and probabilistic privilege escalation. If no deterministic route is available, it stops and writes the reason to the log — ideal for repeatable CI runs.
cargo run -p simterm -- --autoplay-deterministic --campaign ./examples/sample_campaign
Combine --autoplay-deterministic with --doctor in your CI pipeline: --doctor catches data errors before runtime, and --autoplay-deterministic confirms the campaign is completable without relying on random outcomes.
Control autoplay speed --autoplay-delay <ms> sets the pause between injected commands (default 900 ms). Works with both autoplay modes.
cargo run -p simterm -- --autoplay --autoplay-delay 300 --campaign ./examples/sample_campaign
Disable music Simterm plays looped WAV audio when a campaign provides music/mission_N_theme.wav files alongside campaign.ron. Pass --no-music (or its alias --mute) to silence it regardless.
cargo run -p simterm -- --no-music --campaign ./examples/sample_campaign
cargo run -p simterm -- --mute --campaign ./examples/sample_campaign
Print help --help (or -h) prints the usage summary and exits immediately without loading any campaign.
cargo run -p simterm -- --help

Create your first campaign

The fastest path to a custom campaign is copying the sample and iterating from there.
1

Copy the sample campaign

cp -r examples/sample_campaign campaigns/my_campaign
The campaigns/ directory is the conventional local workspace for campaigns under development. It is gitignored by default so private campaign content stays out of the public repository.
2

Edit campaign.ron

Open campaigns/my_campaign/campaign.ron in your editor and change the name, description, and any mission or host fields you want to customize. The file is plain RON — no Rust knowledge required.
$EDITOR campaigns/my_campaign/campaign.ron
3

Validate the campaign loads

Run --check to confirm the loader can parse your changes and that the campaign has at least one mission:
cargo run -p simterm -- --check --campaign ./campaigns/my_campaign
A successful check prints the campaign name and mission count, then exits cleanly.
4

Run the semantic validator

Run --doctor for a deeper analysis. It catches problems like dangling references to non-existent commands, unreachable missions, or malformed numeric ranges:
cargo run -p simterm -- --doctor --campaign ./campaigns/my_campaign
Fix any reported errors before moving on. Warnings are informational — the campaign is still playable.
5

Play your campaign

Once the campaign passes validation, launch the full TUI:
cargo run -p simterm -- --campaign ./campaigns/my_campaign

What to do next

Campaign overview

Understand the full structure of a campaign directory, the root campaign.ron format, missions, themes, and achievements.

Commands overview

Learn which commands are built into the engine, which are frontend-only, and how to define your own declarative commands in campaign data.

Build docs developers (and LLMs) love