toolstash is a Rust terminal app built with Ratatui and Crossterm.
From the repo root:
cargo build
cargo testRun locally:
cargo run
cargo run -- calc
cargo run -- --theme nordInstall from the checkout:
cargo install --path .Core UI:
ratatuicrossterm
Feature dependencies:
regexfor the regex tester.ureqfor the HTTP client.serde_jsonfor OpenAPI JSON import.
The database browser shells out to native clients instead of linking database drivers:
sqlite3psqlmysqlduckdb
Tests that need an optional native client skip the integration path when that client is not available.
Run all tests:
cargo testRun the architecture checks:
cargo test --test architectureRun one tool's tests:
cargo test --test tools_calc
cargo test --test tools_apiFormat:
cargo fmtThe project keeps each feature local:
src/tools/calc/
model.rs
controller.rs
view.rs
Use the same split for new features:
model.rs: data, parsing, formatting, persistence, external calls.controller.rs: tool state and key handling.view.rs: Ratatui drawing.
Shared primitives belong in src/core/ only when multiple tools or shell
screens need them.
Use core::fs::read_config and core::fs::write_config for files under the
toolstash config directory. Writes are best-effort so the app does not crash
because a setting or scratchpad file could not be saved.
Prefer formats that remain readable and recoverable. Existing persistent files favor line-oriented text and stable separators over opaque binary data.
New tools should feel native to the shell:
- Use navigate mode for commands and edit mode for text entry.
- Keep
Enteras "type into this box" where possible. - Keep
Escas "leave this box or screen". - Implement
keys()so?is complete. - Implement
status()so the bottom row always says what is happening. - Implement
tile()so the dashboard shows useful recent state. - Implement
yandponly when copy/paste has obvious meaning. - Keep settings session-only unless persisting them makes future answers more trustworthy.
- Add
src/tools/<name>/model.rs. - Add
src/tools/<name>/controller.rs. - Add
src/tools/<name>/view.rs. - Export the module in
src/tools/mod.rs. - Add a
Kindvariant and list it inKINDS. - Wire construction and lookup in
src/shell/app.rs. - Add tests under
tests/tools/<name>.rs. - Run
cargo test --test architecture. - Run the new tool test and any touched shared tests.