
Rust Best Practices
Write idiomatic, robust, maintainable Rust.
Install
npx skills add morganlinton/BeautifulRust --skill rust-best-practices -g -a claude-code -y- Repository
- morganlinton/BeautifulRust1.6k
- Category
- Design
- Updated
- 5d ago
- License
- MIT
- Context cost
- Mediumabout 3,000 tokens
- Runs scripts
- Yes, review before use
What it does
Write idiomatic, robust, maintainable Rust. Use this skill whenever you write, review, refactor, debug, or explain Rust code: new crates, modules, functions, structs, traits, error types, async code, unsafe or FFI code, Cargo.toml, tests, or rustdoc. Trigger on any mention of Rust, cargo, crates, .rs files, the borrow checker, lifetimes, traits, clippy, or rustfmt, even when the user does not ask for "best practices" or "idiomatic" code. Synthesized from the Google Rust Style Guide, the Rust API Guidelines, Effective Rust, Rust Design Patterns, and Microsoft's Pragmatic Rust Guidelines.
Rust best practices
Distilled from five Rust style and design guides, with a digest of each in references/.
Where they disagree, this file says which to follow and why.
1. Mindset
- Write Rust-shaped code. Don't port C++, Java, C#, or Python constructs one-to-one.
Model errors with
Result, resources with ownership andDrop, polymorphism with traits and enums, and nullability withOption. Inheritance-flavored tricks (Derefto a "base" struct,Manager/Factorytypes,throw_if_nullhelpers) are smells. - Make invalid states unrepresentable. Push invariants into types: enums instead of bool flags and "must be X if Y" comments, newtypes for units and IDs, fallible constructors that validate once. Then the compiler enforces what a comment only requests.
- Application code is not library code. Library code (anything with external users)
follows the API-design rules below strictly. Application code should favor simplicity
and directness: concrete types,
Stringor&strrather thanimpl Into<String>parameters,anyhow-style errors,Vecreturn values, no speculative generality. - Let the tools do the work. rustfmt owns formatting, clippy owns idiom checks, the compiler owns memory safety. Spend your attention on design.
2. Before you hand back code
Run these and fix everything they report:
cargo fmt
cargo clippy --all-targets --all-features -- -D warnings
cargo test
cargo doc --no-deps # libraries: catches broken doc links and missing docs


