Read something useful
Explore the complete course below. Every lesson is free to read, share, and revisit.
A practical, free Rust course
Learn Rust one useful idea at a time. Clear lessons, small challenges, and a place to try things out.
Your pace. Your next step.
Master Rust's ownership model, borrow checker, and zero-cost abstractions through hands-on lessons. Build safe, concurrent systems code with our free interactive playground.
Explore the complete course below. Every lesson is free to read, share, and revisit.
Predict what happens, put a solution in order, or spot a bug. Short sessions work on your phone.
Open the Code lab when you have a keyboard handy. Run real code and see your ideas take shape.
Browse the complete ordered curriculum. Each lesson has a readable page you can link to and share.
What is Rust? Discover its speed and memory safety, then write and run your first Rust program in the browser. A free beginner lesson with no install.
Master Rust variables, mutability, and data types including integers, floats, booleans, characters, and type annotations
Master Rust control flow with if expressions, loops, and the match statement for conditional logic and pattern matching
Learn how to define Rust functions with parameters, return types, and expressions — the building blocks of every Rust program
Rust ownership explained — understand move semantics, borrowing rules, and how Rust guarantees memory safety without a garbage collector
Learn how to define Rust structs and enums to create custom data types, implement methods, and model your domain effectively
Master Rust's powerful pattern matching with match expressions, if let, and destructuring
Deep dive into Rust borrowing and references — learn shared and mutable references, the borrow checker, and safe data access
Rust closures tutorial — learn how closures capture variables, understand Fn, FnMut, and FnOnce traits, and use closures with iterators
Master Rust Option and Result types for handling absence and errors with combinators, the ? operator, and error propagation
Learn Rust error handling with the Result type, panic!, recoverable vs unrecoverable errors, and the ? operator for propagation
Learn to use Rust's standard collections including Vec, HashMap, and HashSet with iterators
Rust lifetimes explained — learn lifetime annotations, elision rules, and how the borrow checker validates reference validity
Learn to write flexible, reusable code with Rust's trait system and generic programming
Master Rust's powerful iterator system to write expressive, efficient, and functional-style code
Understand Rust's two string types, text manipulation, UTF-8 encoding, and common string operations
Learn how to organize Rust code with modules and manage dependencies using crates and Cargo
Learn safe concurrent programming in Rust with threads, message passing, and shared state
Understand Box, Rc, RefCell, and interior mutability patterns in Rust
Learn how to write unit tests, integration tests, and use Rust's built-in testing framework to ensure your code is correct
Learn how to read from and write to files in Rust using std::fs and std::io traits
Learn how to use and create Rust macros for metaprogramming and code generation at compile time
Master asynchronous programming in Rust with async/await syntax, Futures, and the Tokio runtime
Learn how to serialize and deserialize data structures to and from JSON using the serde and serde_json crates
Build command-line tools in Rust by parsing arguments, handling flags, and structuring real-world CLI applications
Build a complete command-line todo application combining structs, enums, error handling, traits, and collections