| Crates.io | outstanding |
| lib.rs | outstanding |
| version | 2.2.0 |
| created_at | 2025-12-08 02:26:11.766759+00 |
| updated_at | 2026-01-15 22:17:42.495808+00 |
| description | Styled CLI template rendering with automatic terminal detection |
| homepage | |
| repository | https://github.com/arthur-debert/outstanding-rs |
| max_upload_size | |
| id | 1972662 |
| size | 1,157,361 |
Create Outstanding Shell Applications in Rust.
Outstanding is a library for building finely crafted, non-interactive command line applications. It enforces a clean separation between your application logic and its presentation, ensuring your CLI remains testable and maintainable as it grows.
If you're building a CLI in Rust, your time should be spent on core logic, not fiddling with print! statements and ANSI escape codes.
As applications grow, mixing logic with output formatting leads to:
Outstanding handles the boilerplate between your clap definition and your terminal output.
[title]{{ post.title }}[/title]). Define styles using YAML or standard CSS syntax.Write a handler that takes ArgMatches and returns serializable data.
#[derive(Serialize)]
struct TodoResult {
todos: Vec<Todo>,
}
fn list_handler(_m: &ArgMatches, _ctx: &CommandContext) -> HandlerResult<TodoResult> {
let todos = storage::list()?;
Ok(Output::Render(TodoResult { todos }))
}
Write a template (list.jinja) with semantic style tags.
[title]My Todos[/title]
{% for todo in todos %}
- {{ todo.title }} ([status]{{ todo.status }}[/status])
{% endfor %}
Wire it up in your main.rs.
fn main() -> Result<(), Box<dyn std::error::Error>> {
let app = App::builder()
.command("list", list_handler, "list.jinja")
.templates(embed_templates!("src/templates"))
.styles(embed_styles!("src/styles"))
.build()?;
app.run(Cli::command(), std::env::args());
Ok(())
}
Add outstanding to your Cargo.toml:
cargo add outstanding
Ensure you have outstanding-macros if you want to use the embedding features.
Learn more about building with Outstanding:
Guides
How-Tos
Contributions are very welcome , be it a feature request, a question and even feedback. Use the issue tracker to report bugs and feature requests.
For code contributions, the standar practices apply : tests for changed code, passing test suite, Pull Request with code and motivation.
MIT