External campaigns
A campaign is a directory with campaign.ron or a
single .ron file. Load it without recompiling.
Campaign-specific achievements live there too.
Open source · MIT licensed
SimTerm is a Rust framework for structured, command-driven terminal games and interactive experiences.
The runtime provides campaign loading, state management, logs, objectives, branching outcomes, achievements, and validation tools. Campaign data defines the experience.
cargo run -p simterm
operator@console:~$ start
campaign loaded: sample_terminal_experience
operator@console:~$ inspect node-01
signal detected: incomplete route map
operator@console:~$ analyze signal
confidence updated: 74%
operator@console:~$ connect relay
session established
relay:/archive$ cat manifest.log
objective clue unlocked
relay:/archive$ choose 2
branch selected: silent extraction
Why SimTerm
Create new experiences as campaign data without changing the runtime. The framework handles reusable mechanics so authors can focus on content and structure.
A campaign is a directory with campaign.ron or a
single .ron file. Load it without recompiling.
Campaign-specific achievements live there too.
Model progress, uncertainty, logs, rewards, trace pressure, and repeatable command flows with deterministic state transitions. Use visible autoplay to test end-to-end routes.
Build scenes and connected spaces with entry points, links, objectives, and persistent campaign state.
Author notes, clues, protected files, and reward paths the
player explores with ls, cat, and
find.
simterm-engine has no terminal-UI dependency, so
the runtime is embeddable beyond the bundled frontend.
Run --check for data invariants,
--autoplay for a visible playthrough, and
--autoplay-deterministic for a route without
probabilistic exploits or privilege escalation.
Architecture
SimTerm separates generic mechanics, presentation, and content. Changes can be made at the layer that matches their scope.
Content is stored in RON. Reusable behavior belongs in the runtime, while presentation changes belong in the frontend.
simterm-engine Data loading, mutable state, command effects, progression, outcomes, validation. No UI.
simterm CLI parsing, terminal setup, rendering, input, dispatch, logs, and status views.
your content Name, intro, missions, targets, files, objectives, endings, theme, achievements, and flavor text.
How it works
Write scenes, missions, entities, files, objectives, and text.
simterm-engine parses the RON campaign and validates basics.
The terminal frontend renders state and routes player commands.
Quickstart
Install Rust stable, clone the repository, and launch the sample.
When no campaign path is provided, SimTerm loads
examples/sample_campaign.
# run the default sample campaign
cargo run -p simterm
# validate a campaign without the TUI
cargo run -p simterm -- --check --campaign ./examples/sample_campaign
# run a specific campaign
cargo run -p simterm -- --campaign ./examples/sample_campaign
# watch a visible automated playthrough
cargo run -p simterm -- --campaign ./examples/sample_campaign --autoplay
# validate a deterministic route
cargo run -p simterm -- --campaign ./examples/sample_campaign --autoplay-deterministic
Use the sample as a baseline, make incremental data changes, validate them, and run the campaign from the terminal.