Crates & Packages
A package (Cargo project) contains one or more crates (compilation units): library (lib.rs) and/or binaries (main.rs, bin/*.rs).
Search across all documentation pages
A package (Cargo project) contains one or more crates (compilation units): library (lib.rs) and/or binaries (main.rs, bin/*.rs).
[package]
name = "myapp"
version = "0.1.0"
edition = "2024"
[lib]
name = "myapp"
path = "src/lib.rs"
[[bin]]
name = "cli"
path = "src/bin/cli.rs"When to reach for this: Splitting reusable library from CLI binary in one repo.
// src/lib.rs
pub fn core_logic() -> i32 { 42 }
// src/main.rs
fn main() {
println!("{}", myapp::core_logic());
}What this demonstrates:
core_logicuse myappcdylib/staticlib for FFI. autobins false to control bins. build.rs for build scripts.
| Alternative | Use When | Don't Use When |
|---|---|---|
| Workspace split crates | Clear boundaries | Tiny tool |
| Single binary | Script | Reusable library needed |
| proc-macro crate | Derive macros | Normal code |
Stack versions: This page was written for Rust 1.97.0 (edition 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, and Polars 0.46+.
Reviewed by Chris St. John·Last updated Jul 19, 2026