Crates and workspaces in Rust

Contents
lib.rs and main.rs
Workspace sketch
No deps yet
crates.io concept

lib.rs and main.rs

A crate can hold both a library and a binary. Library code lives in lib.rs with public functions, and the binary in main.rs calls into it.

This split lets tests and other binaries reuse the same core while each entry point stays thin.

pub fn double(n: i32) -> i32 { n * 2 }

The double function is library code open to every caller. Binaries import it by crate name and focus on arguments, output, and exit codes.

Workspace sketch

A workspace groups related crates under one root manifest. Members share a lock file and a target folder while keeping their own sources and tests.

Reach for a workspace when a tool and its library evolve together but should version and build as neighbors.

[workspace] members = ["app", "tools"]

The sketch lists two member crates side by side. Cargo commands at the root can build, test, and check every member at once.

No deps yet

No third party code is needed for this course stage. The standard library covers vectors, strings, maps, and tests, so the manifest lists zero dependencies.

Learning std first builds judgment for later picks, when each added crate must earn its place in the build.

fn main() { let v = vec![2, 1, 3]; println!("stdlib only"); }

Every lesson so far runs on std alone. Add outside crates only when a real task outgrows these built in tools.

crates.io concept

The crates dot io registry shares libraries across the Rust world. Publishing wraps a tested crate with docs and a version number so others can depend on it.

Browsing well known crates teaches naming and API habits, and local practice comes first before any publish step.

For now treat publishing as a finish line: clean code, clear docs, steady tests, and only then a shared release.

Next: Testing

Article author: Arthur Isaev

Related articles
Rust
Rust course: zero to hero in 50 lessons
What is Rust and where it runs
Install Rust
cargo new
Your first program
Variables
Numbers
Strings
Booleans
Tuples
Arrays
Vectors
Slices
if and else
match
Loops
Ownership
Borrowing
Lifetimes
Functions
Structs
Enums in Rust
Advanced match in Rust
Option combinators in Rust
Result and the question mark in Rust
Advanced strings in Rust
Vec methods in Rust
HashMaps in Rust
Modules in Rust
Crates and workspaces in Rust
Testing in Rust
Error handling
Traits
Generics
Trait bounds
Closures
Iterators
Smart pointers
Threads
Mutex and Arc
Files
CLI arguments
Environment variables
Diagnostics
Time
Parsing strings
TCP networking
Capstone: wordfreq CLI
Capstone: tiny HTTP server
Modern Rust tour
Hero roadmap: the whole course on one page
Install Rust on Windows 11
Install Rust on Ubuntu
Install Rust on Rocky Linux
Install Rust on macOS
Install Rust on FreeBSD
Rust in Docker
Banner image

Search this site

Channel @aofeed Chat @aofeedchat

Contacts and cooperation:
I recommend our hosting beget.com
Write to info@aredel.com if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: