Skip to content
Select theme
src/main.rs edition 2024
// count how often each word appears
let mut counts = HashMap::new();

for word in text.split(' ') {
    *counts.entry(word).or_default() += 1;
}

println!("distinct words: {}", counts.len());
cargo run · compiled clean · 0.31s

Learn Rust: short, practical tutorials

A reference that compilesRust tutorials for when the borrow checker wins.

Hacking with Rust has two halves. Project tracks take you from nothing to something that runs — a CLI tool, an API, a desktop app, firmware. The reference is what you open at 11pm when the compiler is shouting at you.

35chapters in eight books, from ownership to unsafe
12project tracks, each ending in running code
Everyexample compiled before it ships

Build a CLI tool

A command-line HTTP client with subcommands, a config file and real error messages. Start →

A production API with Axum and SQLx

Postgres migrations, validation, tracing, integration tests, Docker, deployment. Start →

A desktop app with Tauri

A local Markdown notes app: React front end, Rust core, SQLite, full-text search. Start →

Speed up React with WebAssembly

Move the slow part of a JavaScript app into Rust, and measure what actually changed. Start →

Embedded Rust on STM32

From blinking an LED to I2C sensors, async tasks and power management. Start →

Write a toy database

A persistent key-value store, with compaction, Bloom filters and benchmarks. Start →

See all 12 tracks →

Ownership and borrowing

Moves, borrows, mutable references and lifetimes — the chapter most readers arrive on. Read it →

Compiler error messages

Every error that sends you to a search engine, with the exact compiler output and the fixes that actually compile. Browse error codes →

Starting from zero

Whether Rust is worth your time, what people ship with it, and how to run it without installing anything. Start here →

Looking for something specific?

Press Ctrl+K (or ⌘+K) to search every article on the site, offline and instantly.

See all 35 chapters →

Every example runs

Code on this site is compiled and tested before it is published. When a page shows a compiler error, that is the real output from rustc, not something reconstructed from memory.

Fixes, not just explanations

Knowing that E0382 means “use of moved value” does not help you ship. Each error page shows the several ways to fix it, and tells you which one to pick.

Short on purpose

Reference pages take three minutes. Track articles take longer, because you are building something — but each one still ends with code that runs.