SKILL.md
Current Dependencies (Auto-Injected)
!grep -A 100 '^\[dependencies\]' Cargo.toml 2>/dev/null | head -30 || echo "No Cargo.toml found"
Ecosystem Integration
Layer 2: Design Choices
Core Question
What's the right crate for this job, and how should it integrate?
Before adding dependencies:
- Is there a standard solution?
- What's the maintenance status?
- What's the API stability?
Integration Decision → Implementation
| Need |
Choice |
Crates |
| Serialization |
Derive-based |
serde, serde_json |
| Async runtime |
tokio or async-std |
tokio (most popular) |
| HTTP client |
Ergonomic |
reqwest |
| HTTP server |
Modern |
axum, actix-web |
| Database |
SQL or ORM |
sqlx, diesel |
| CLI parsing |
Derive-based |
clap |
| Error handling |
App vs lib |
anyhow, thiserror |
| Logging |
Facade |
tracing, log |
Thinking Prompt
Before adding a dependency:
- Is it well-maintained?
- Recent commits? - Active issue response? - Breaking changes frequency?
- What's the scope?
- Do you need the full crate or just a feature? - Can feature flags reduce bloat?
- How does it integrate?
- Trait-based or concrete types? - Sync or async? - What bounds does it require?
Trace Up ↑
To domain constraints (Layer 3):
"Which HTTP framework should I use?"
↑ Ask: What are the performance requirements?
↑ Check: domain-web (latency, throughput needs)
↑ Check: Team expertise (familiarity with framework)
| Question |
Trace To |
Ask |
| Framework choice |
domain-* |
What constraints matter? |
| Library vs build |
domain-* |
What's the deployment model? |
| API design |
domain-* |
Who are the consumers? |
Trace Down ↓
To implementation (Layer 1):
"Integrate external crate"
↓ m04-zero-cost: Trait bounds and generics
↓ m06-error-handling: Error type compatibility
"FFI integration"
↓ unsafe-checker: Safety requirements
↓ m12-lifecycle: Resource cleanup
Quick Reference
Language Interop
| Integration |
Crate/Tool |
Use Case |
| C/C++ → Rust |
bindgen |
Auto-generate bindings |
| Rust → C |
cbindgen |
Export C headers |
| Python ↔ Rust |
pyo3 |
Python extensions |
| Node.js ↔ Rust |
napi-rs |
Node addons |
| WebAssembly |
wasm-bindgen |
Browser/WASI |
Cargo Features
| Feature |
Purpose |
[features] |
Optional functionality |
default = [...] |
Default features |
feature = "serde" |
Conditional deps |
[workspace] |
Multi-crate projects |
Error Code Reference
| Error |
Cause |
Fix |
| E0433 |
Can't find crate |
Add to Cargo.toml |
| E0603 |
Private item |
Check crate docs |
| Feature not enabled |
Optional feature |
Enable in features |
| Version conflict |
Incompatible deps |
cargo update or pin |
| Duplicate types |
Different crate versions |
Unify in workspace |
Crate Selection Criteria
| Criterion |
Good Sign |
Warning Sign |
| Maintenance |
Recent commits |
Years inactive |
| Community |
Active issues/PRs |
No response |
| Documentation |
Examples, API docs |
Minimal docs |
| Stability |
Semantic versioning |
Frequent breaking |
| Dependencies |
Minimal, well-known |
Heavy, obscure |
Anti-Patterns
| Anti-Pattern |
Why Bad |
Better |
extern crate |
Outdated (2018+) |
Just use |
#[macro_use] |
Global pollution |
Explicit import |
Wildcard deps * |
Unpredictable |
Specific versions |
| Too many deps |
Supply chain risk |
Evaluate necessity |
| Vendoring everything |
Maintenance burden |
Trust crates.io |
Related Skills
| When |
See |
| Error type design |
m06-error-handling |
| Trait integration |
m04-zero-cost |
| FFI safety |
unsafe-checker |
| Resource management |
m12-lifecycle |