Contributions are welcome — bug fixes, new presets and palettes, terminal compatibility reports, performance work, and progress on the experimental features. If you're unsure whether something fits, open an issue first and ask.
- Experimental features. Multi-species simulation (#8), choir audio (#9), GUI mode (#10), WASM build (#11), and dithering (#12) all exist behind gates and need work before they join the default experience. Each tracking issue describes the current state.
- Preset and palette feedback. If a preset collapses, stalls, or just looks wrong in your terminal, an issue with the preset name, seed, and terminal details is genuinely useful.
- Terminal compatibility reports. tslime targets Linux, macOS, Windows, and SSH sessions. Reports from unusual terminals, multiplexers, and font setups help.
Requires Rust 1.70 or later.
git clone https://github.com/tamirelazar/tslime.git
cd tslime
cargo build
cargo run -- -Scargo test --lib # unit tests
cargo test --test visual_regression # golden-file tests (tests/golden/)
cargo bench # criterion benchmarksIf a change intentionally alters visual output, regenerate the golden files:
UPDATE_GOLDEN=true cargo test --test visual_regressionCommit golden changes only when the output change is intentional — review the diff and make sure it shows what you meant to change.
The default build enables only the terminal feature. Experimental features
are opt-in:
| Feature | What it adds | Issue | Build |
|---|---|---|---|
multi-species |
Multiple agent species with independent parameters | #8 | cargo build --features multi-species |
audio |
Choir mode: sonifies the simulation via cpal | #9 | cargo build --features audio |
gui |
Windowed GUI mode built on iced | #10 | cargo build --features gui |
src/
├── cli.rs # clap argument definitions, validation, mode dispatch
├── app/ # run loop, mode handlers, --explain output
├── simulation/ # agents (sense/rotate/move/deposit), trail map, presets, config
├── render/ # downsampling, character sets, OKLch palettes, overlays/panels
├── terminal/ # screen lifecycle, input polling, frame buffer, runtime controls
└── export/ # GIF, PNG, and WebM export
Data flow per frame: agents sense the trail map, rotate, move, and deposit pheromone; the trail map is diffused and decayed; the grid is downsampled to terminal dimensions; cells are mapped through the active character set and palette; the result is written to stdout as a single ANSI frame.
cargo fmt
cargo clippy -- -D warnings
cargo testWork on a feature branch (feat/..., fix/..., chore/...) and open a PR
against dev. Commit messages use the form type: description, where type
is one of feat, fix, refactor, perf, test, docs, or chore.