An interactive, type-safe visualization of the Rust learning path.
- π Comprehensive Learning Path β 27 curated sections covering Rust from fundamentals to advanced domains including WebAssembly, embedded systems, and game development.
- π Interactive Detail View β Click any topic to reveal a slide-in drawer with descriptions and curated learning resources (Official docs, Books, Videos, Articles, and more).
- π― Deterministic Layout β Custom "Fishbone" positioning algorithm ensures pixel-perfect, consistent visualization across all devices.
- β‘ Compile-Time Validation β All topics, dependencies, and content are Rust structs verified at compile time. Invalid links or missing data break the build.
- π¨ Premium Dark Theme β Carefully designed CSS token system with orange/red accents inspired by Rust's brand identity.
This project enforces strict separation of concerns between content, layout logic, and rendering.
src/
βββ data/ # Content definitions (Source of Truth)
β βββ mod.rs # Aggregates all sections, topics, dependencies
β βββ sections/ # 27 modular section directories
β βββ s01_introduction/
β βββ mod.rs # Topics & Dependencies
β βββ content.rs # Descriptions & Resources
βββ models/ # Domain types (Topic, Section, Resource, etc.)
βββ layout/ # Deterministic coordinate calculation
β βββ tree.rs # "Fishbone" layout algorithm
βββ components/ # Leptos UI components
β βββ roadmap/ # Diagram, nodes, edges, detail drawer
β βββ ui/ # Header, footer, hero
βββ state/ # Global reactive state (Leptos signals)
βββ styles/ # CSS design system (theme tokens, components)
| Decision | Rationale |
|---|---|
Explicit Placement enums |
Node coordinates are derived from Center, Left, or Right placement types rather than force-directed algorithms. This guarantees visual fidelity to the intended design and eliminates layout randomness. |
| Data in Rust, not JSON | Topics and dependencies are Rust const structs. The compiler validates references, preventing broken links or orphan topics that would silently fail with external data files. |
| Section-based modularity | Each learning section is an isolated module (s01_introduction, s02_setup, etc.) with its own topics, dependencies, and content. Adding new content cannot break existing sections. |
| Fine-grained reactivity | Leptos signals provide precise DOM updates. Only the changed nodes re-render, not the entire tree. |
| Technology | Purpose |
|---|---|
| Rust (Edition 2024) | Systems language with memory safety guarantees |
| Leptos 0.6 | Fine-grained reactive framework for CSR |
| WebAssembly | Compile target for browser execution |
| Trunk | WASM bundler and development server |
| Lightning CSS | CSS transformation and minification |
| GitHub Actions | CI/CD for linting, testing, and GitHub Pages deployment |
Ensure you have the Rust toolchain installed. Then add the WebAssembly target and install Trunk:
# Add WASM target
rustup target add wasm32-unknown-unknown
# Install Trunk bundler
cargo install trunk# Clone the repository
git clone https://github.com/pharmacist-sabot/rust-roadmap.git
cd rust-roadmap
# Start development server with hot reload
trunk serve --openThe application will be available at http://127.0.0.1:8080.
trunk build --releaseOptimized artifacts are generated in the dist/ directory.
Each section follows a consistent module pattern:
// src/data/sections/s01_introduction/mod.rs
pub const SECTION_ID: &str = "intro_sec";
pub fn get_topics() -> Vec<Topic> {
vec![
Topic {
id: "intro",
title: "Introduction",
section_id: SECTION_ID,
level: Level::Beginner,
topic_type: TopicType::Main, // Center spine
placement: Placement::Center,
row: None,
},
Topic {
id: "what_is_rust",
title: "What is Rust?",
section_id: SECTION_ID,
level: Level::Beginner,
topic_type: TopicType::Sub, // Branch node
placement: Placement::Right,
row: None,
},
// ...
]
}
pub fn get_dependencies() -> Vec<Dependency> {
vec![
Dependency { from: "intro", to: "what_is_rust" },
// ...
]
}Content resources are categorized with semantic badges:
| Badge | Use Case |
|---|---|
Official |
Rust Book, std docs, rust-lang.org |
Book |
Digital or physical books |
Article |
Blog posts and tutorials |
Video |
YouTube, conference talks |
Course |
Structured learning series |
Interactive |
Rustlings, exercism.io |
Crate |
crates.io, docs.rs links |
OpenSource |
GitHub repositories |
Community |
Reddit, Discord, forums |
Podcast |
Audio content |
Newsletter |
This Week in Rust, etc. |
Contributions are welcome! Please follow these guidelines:
- Locate or create the appropriate section in
src/data/sections/. - Add the
Topicstruct tomod.rswith correctPlacement:Placement::Centerβ Main spine topics onlyPlacement::LeftorPlacement::Rightβ Branch topics
- Add
Dependencyentries connecting the new topic to existing ones. - Add
TopicContentincontent.rswith description and resources. - Run
cargo buildto verify compile-time validity.
This project enforces strict quality checks via CI:
# Format check
cargo fmt --all -- --check
# Linting
cargo clippy --all-targets -- -D warnings
# Tests
cargo test --verbose- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes with clear messages
- Ensure all CI checks pass
- Open a Pull Request with a description of your changes
This project is licensed under the MIT License. See LICENSE for details.
Built with π¦ by the Rust community