# rtb-app
> Part of the [phpboyscout Rust toolkit](https://rust.phpboyscout.uk) —
> small, framework-free crates extracted from
> [rust-tool-base](https://gitlab.com/phpboyscout/rust-tool-base).
A two-crate family workspace sharing one version line:
- **`rtb-app`** — the application context (`App`), tool metadata,
runtime features, and the `Command` plugin trait with its
`BUILTIN_COMMANDS` link-time registry. The structural heart of the
framework: typed `Arc`-wrapped fields, no DI container, no
`Box<dyn Any>` bag.
- **`rtb-test-support`** — the promoted test-side `App` constructor
(`TestAppBuilder` behind a sealed `TestWitness`), consumed from
`[dev-dependencies]` by downstream crates.
```rust
use rtb_app::{Feature, Features};
let features = Features::builder().disable(Feature::Init).build();
assert!(!features.is_enabled(Feature::Init));
assert!(features.is_enabled(Feature::Version));
```
- **Docs:** <https://app.rust.phpboyscout.uk>
- **API reference:** <https://docs.rs/rtb-app> ·
<https://docs.rs/rtb-test-support>
- **Crates:** <https://crates.io/crates/rtb-app> ·
<https://crates.io/crates/rtb-test-support>
## Development
`just ci` runs the full local gate (fmt, clippy, nextest, doc, deny).
Tests include a cucumber BDD suite (`crates/rtb-app/tests/bdd.rs`) and
trybuild compile-fail fixtures (run isolated — see
`.config/nextest.toml`; nextest is required). Releases are cut by
release-plz from Conventional Commits — do not tag manually.
## License
MIT