A Rust CLI application for learning and improving touch typing on AZERTY keyboards.
Typer CLI is a terminal-based keyboard typing training tool. It provides an interactive TUI (Terminal User Interface) for practicing touch typing with immediate visual feedback and real-time statistics.
- Progressive Lessons: 60 lessons from home row basics to advanced code symbols
- Real-time Feedback: Instant visual feedback (green/red) and live WPM/accuracy metrics
- Adaptive Mode: Personalized training targeting your weaknesses
- Visual Keyboard: Full AZERTY layout with next-key highlighting, AltGr support, and heatmaps
- AltGr Support: Full support for code symbols ({}[]@#|`^~) on AZERTY keyboards
- Comprehensive Practice: French/English bigrams, trigrams, TypeScript/Rust/Python symbols
- Statistics Dashboard: Track progress with performance analytics
- Finger Training: Targeted drills for each finger pair
- Session Persistence: All data saved locally for privacy
See docs/README.md#features-overview for complete feature list and implementation details.
Download the latest release for your platform from GitHub Releases:
# Linux (x86_64)
wget https://github.com/jrollin/typer-cli/releases/latest/download/typer-cli-linux-x86_64
chmod +x typer-cli-linux-x86_64
./typer-cli-linux-x86_64
# macOS (Intel)
wget https://github.com/jrollin/typer-cli/releases/latest/download/typer-cli-macos-x86_64
chmod +x typer-cli-macos-x86_64
./typer-cli-macos-x86_64
# macOS (Apple Silicon M1/M2/M3)
wget https://github.com/jrollin/typer-cli/releases/latest/download/typer-cli-macos-arm64
chmod +x typer-cli-macos-arm64
./typer-cli-macos-arm64Verify Checksum (optional but recommended):
# Download checksum file
wget https://github.com/jrollin/typer-cli/releases/latest/download/typer-cli-linux-x86_64.sha256
# Verify
shasum -a 256 -c typer-cli-linux-x86_64.sha256Prerequisites:
- Rust 1.70+ (install via rustup)
# Clone the repository
git clone https://github.com/jrollin/typer-cli.git
cd typer-cli
# Build in release mode
cargo build --release
# Run
./target/release/typer-cli# Development mode
cargo run
# Or with release executable
./target/release/typer-cliIn Category Menu:
- β/β or j/k: Navigate categories
- Enter or Space: Open category
- 1-5: Quick select category by number
- ESC or q: Quit application
In Lesson Menu:
- β/β or j/k: Navigate lessons
- Enter or Space: Select lesson
- 1-9: Quick select lesson by number
- ESC or q: Return to category menu
During Practice:
- Typing: Simply type the displayed characters
- Backspace: Correct mistakes
- Tab: Toggle keyboard display visibility
- Ctrl+F: Toggle finger color hints on keyboard
- Ctrl+H: Toggle accuracy heatmap overlay
- ESC: Return to menu
In Duration Menu:
- β/β or j/k: Navigate durations
- Enter or Space: Start lesson
- ESC or q: Return to lesson menu
After Completion:
- q or ESC: Return to lesson menu
- r: Restart same lesson
The interface features a clean, organized layout with consistent margins:
βββββββββββββββββββββββββββββββββββ
β TYPER CLI - Home Row Practice β β Header
βββββββββββββββββββββββββββββββββββ€
β WPM: 45 β Accuracy: 98% β 00:15 β β Stats
βββββββββββββββββββββββββββββββββββ€
β Text to type: β
β ff jj ff jj dd kk β β Content
β Your input: β
β ff jj fβ β
βββββββββββββββββββββββββββββββββββ€
β [AZERTY Keyboard Layout] β β Keyboard (Tab to toggle)
β Next key highlighted β
β Tab β Ctrl+H β Ctrl+F β
β β
β ESC to quit β β Instructions
βββββββββββββββββββββββββββββββββββ
Visual Feedback:
- Green: Correct character
- Red: Incorrect character
- White: Not yet typed
- Blinking cursor: Current position
- Cyan highlight: Next key to press (on keyboard)
Keyboard Display Features:
- Full AZERTY layout visualization
- Real-time next-key highlighting
- Shift state indicators
- Optional finger color hints (Ctrl+F)
- Optional accuracy heatmap overlay (Ctrl+H)
- Toggle visibility with Tab
Built with Rust using ratatui for the terminal UI.
See docs/steering/tech.md for complete stack details.
Modular Rust codebase organized by feature:
src/engine/- Core typing engine, analytics, adaptive algorithmssrc/content/- Lesson generation and categorizationsrc/ui/- Terminal interface renderingsrc/data/- Statistics persistencesrc/keyboard/- AZERTY layout model
See docs/steering/structure.md for detailed architecture.
Session statistics are saved to ~/.config/typer-cli/stats.json.
The file contains session history and adaptive analytics for personalized training. See docs/features/session-storage/ for data schema details.
Create your own typing lessons by placing markdown files in ~/.config/typer-cli/custom/ or ./custom/ (current directory).
Custom lessons use markdown files with optional YAML front matter:
---
title: My Custom Lesson
description: Practice domain-specific vocabulary
---
Your custom content to practice goes here.
Line breaks and spacing are preserved.
Multiple lines are supported.- Two locations: Config directory (
~/.config/typer-cli/custom/) or current directory (./custom/) - YAML front matter: Optional metadata with
titleanddescriptionfields - Title fallback: If no front matter, filename (without .md) is used as title
- Preserved formatting: Line breaks, spacing, and indentation are maintained during practice
- Automatic deduplication: Duplicate titles get (1), (2) suffix
- Statistics tracking: Session stats saved using lesson title as identifier
- Error handling: Invalid files show warnings but don't crash the application
-
Create
~/.config/typer-cli/custom/git-commands.md:--- title: Git Commands Practice description: Common git operations --- git status git add . git commit -m "feat: add feature" git push origin main git pull --rebase git branch -d feature-branch
-
Launch Typer CLI and select "Custom" category
-
Choose "Git Commands Practice" from the lesson list
-
Practice with preserved formatting and line breaks
See docs/features/custom-lessons/ for complete documentation.
cargo run # Launch application
cargo build --release # Build optimized binarycargo test # Run test suite (146 passing tests)cargo clippy # Linting
cargo fmt # Formatting
cargo check # Fast compilation checkSee docs/README.md for contributor workflow and detailed test coverage.
Current Version: Phase 3.5 Complete (Statistics Dashboard) Total Lessons: 60 Test Coverage: 145 passing tests
See docs/README.md#project-status for detailed roadmap and planned features.
- User Guide: You're reading it (installation, usage, controls)
- Contributing: See docs/README.md for development workflow
- Features: See docs/README.md#features-overview
- AI Context: See CLAUDE.md
Feature-specific documentation follows the Requirements β Design β Tasks workflow. See docs/features/ for individual feature documentation.
This project is a personal learning tool.
Developed with the help of Claude (Anthropic).