35 KiB
LeRobot Documentation Redesign — Proposal
Status: Draft for maintainer review · Author: Dev Rel · Date: June 2026
Scope: Information architecture + UX redesign of https://huggingface.co/docs/lerobot (source: docs/source/)
1. Executive summary
The problem, in five points:
- No guided beginner path. "Get started" is three pages (landing, install, CLI cheat-sheet). After that, a newcomer lands in a "Tutorials" section that mixes the core 652-line SO-101 walkthrough (
il_robots.mdx) with RL (950-linehilserl.mdx), PEFT, multi-GPU, and rename-map content — four different audiences in one flat list. - Zero decision guidance. 11 robot pages, 12 policy pages, 10 benchmark pages — all flat alphabetical-ish lists. Nothing answers "which robot should I buy?", "which policy after ACT?", "which benchmark fits my claim?".
- The best beginner content isn't on the docs site.
AGENT_GUIDE.md(repo root) contains the most complete procedural guidance we have — data-collection golden rules, policy selection by VRAM tier, training-duration heuristics, eval success-rate targets — and none of it is published. - Structural debt. 14 orphan
policy_*_README.mdfiles sit indocs/source/unreferenced by the toctree (verbatim hand-copies ofsrc/lerobot/policies/*/README.md); 6 of 17 CLI commands are completely undocumented; 1 of 15 teleoperators has a doc page; there is no troubleshooting page and no_redirects.yml. - Pages do too many jobs. Tutorial, how-to, and reference content is interleaved (e.g.,
lerobot-dataset-v3.mdxis simultaneously a format spec, a Python API guide, and a migration guide), which makes every page long and none of them skimmable.
The proposal, in five points:
- A numbered "Learn: your first robot" course (FastAPI-style): 11 small CLI-only pages taking an SO-101 owner from install to a trained, evaluated ACT policy. Each page ends with a checkpoint and a "Next" link. A one-page no-hardware quickstart runs in parallel.
- A sidebar that reads top-to-bottom as increasing expertise, organized into 17 sections: Get started → task-oriented how-tos (Collect data / Train / Deploy & evaluate) → hardware catalogs → policy catalogs → concepts → RL → extending → reference → community.
- Every catalog section opens with a comparison/decision page: Choosing a robot, Teleoperator overview, Choosing a policy, Reward models overview, Choosing a benchmark.
- Publish the missing content: AGENT_GUIDE.md's tips become real docs pages; a full CLI reference covers all 17 commands; a symptom-organized troubleshooting page aggregates fixes currently buried across five pages.
- Minimal URL breakage: existing slugs are kept wherever possible. Only 2 redirects are needed (
cheat-sheet → cli_reference,il_robots → learn/index); everything else is a toctree reposition.
Effort estimate: ~4–5 person-weeks across 5 phases; phases 3 and 5 are parallelizable and community-friendly (see §9).
2. Current-state audit
2.1 By the numbers
| Metric | Value |
|---|---|
Files in docs/source/ (excl. _toctree.yml) |
90 |
| Pages in the toctree | 76 |
| Orphan files (on disk, not in toctree) | 14 (policy_*_README.md) |
| Top-level sidebar sections | 15, all flat (no nesting) |
| Longest pages | hilserl.mdx ~950 lines · il_robots.mdx ~650 · so100.mdx ~640 |
CLI commands in pyproject.toml [project.scripts] |
17 — 6 with zero doc presence (lerobot-find-cameras, lerobot-setup-can, lerobot-find-joint-limits, lerobot-train-tokenizer, lerobot-imgtransform-viz, lerobot-info) |
Teleoperators in src/lerobot/teleoperators/ |
15 — 1 documented (phone_teleop.mdx); keyboard, gamepad, leader arms covered only implicitly inside robot/tutorial pages |
| Camera backends | 4 — zmq undocumented, reachy2_camera implicit |
Policies in src/lerobot/policies/ |
19 — diffusion, tdmpc, vqbet have orphan READMEs but no doc page; sac, gaussian_actor undocumented |
| Redirect infrastructure | None (_redirects.yml does not exist) |
2.2 Prioritized UX problems
Critical (blocks the main funnel):
| # | Problem | Evidence |
|---|---|---|
| C1 | No linear beginner path: install → ??? | "Get started" = index.mdx (brand copy) + installation.mdx + cheat-sheet.mdx. The actual path lives inside il_robots.mdx, filed under "Tutorials" with 9 unrelated pages. |
| C2 | No "which robot do I buy?" guidance | 11 robot pages, no comparison. SO-101 vs SO-100 relationship is never stated; SO-100's page is longer than SO-101's. |
| C3 | il_robots.mdx monolith |
One 652-line page covers calibrate + teleoperate + cameras + record + train + evaluate, doubling every step in CLI and Python, all SO-101-specific despite the generic title. |
| C4 | Best procedural content unpublished | AGENT_GUIDE.md §5 (data tips), §6 (policy choice), §7 (training duration), §8 (eval targets) exist only in the repo root. |
| C5 | No hardware-free on-ramp | No "train on a Hub dataset in 15 minutes" page; notebooks.mdx is 30 lines of links. |
High (breaks common tasks):
| # | Problem | Evidence |
|---|---|---|
| H1 | Training guidance scattered | Spread across act.mdx, hardware_guide.mdx, multi_gpu_training.mdx, il_robots.mdx — no single "how to train" page. |
| H2 | No policy comparison/decision page | 12 policy pages; ACT says "recommended first" but nothing maps VRAM/task/data-size → policy. |
| H3 | Recording how-to fused with format spec | il_robots.mdx (procedure) vs lerobot-dataset-v3.mdx (spec + Python API + migration) — neither is a clean reference or a clean guide. |
| H4 | No benchmark selection guidance | 10 benchmark pages in a flat list; "Adding a New Benchmark" (contributor content) sits first. |
| H5 | No troubleshooting page | Fixes are buried in installation.mdx, il_robots.mdx, lerobot-dataset-v3.mdx "Common Issues", and AGENT_GUIDE §5.8. |
| H6 | Teleoperators near-invisible | 15 implementations, 1 page. Keyboard/gamepad (`--teleop.type=keyboard |
Medium / low (debt and polish):
| # | Problem | Evidence |
|---|---|---|
| M1 | 14 orphan policy_*_README.md in docs/source/ |
Verbatim copies of src/lerobot/policies/*/README.md; not in toctree, not built; no sync script exists (verified by repo-wide grep) — hand-copied and already drifting. |
| M2 | 6/17 CLI commands undocumented | See §2.1. cheat-sheet.mdx covers only the main workflow commands. |
| M3 | Mixed-audience sections | "Tutorials" holds beginner + RL-researcher + contributor content; "Benchmarks" holds user + contributor content. |
| M4 | Naming inconsistencies | "SO-101"/"SO101"/"so101" in prose; <Tip> vs > [!NOTE] admonitions mixed; hyphen vs underscore slugs (lerobot-dataset-v3 vs multi_gpu_training). |
| M5 | Section opener pages missing | "Robot Processors" starts at "Introduction to Robot Processors" (good) but Robots/Policies/Benchmarks/Teleoperators start with an arbitrary instance page. |
3. What great docs do (and what we borrow)
Diátaxis (diataxis.fr — adopted by Canonical, Cloudflare, Gatsby): documentation serves four distinct needs that should never share a page — tutorials (learning by doing), how-to guides (task recipes), reference (lookup facts), explanation (concepts). LeRobot's biggest pages fail precisely because they fuse three of these. → We borrow: the four-way separation as the organizing principle of the new sidebar; splits like lerobot-dataset-v3 (spec) vs using_lerobot_dataset (how-to).
FastAPI: famous for a numbered, linear tutorial where each chapter is small, runnable, and builds on the previous one; advanced topics live in a separate section so the learn-path is never interrupted. → We borrow: the numbered learn/ course with one outcome per page and a "Next:" footer; advanced content (RL, multi-GPU) moved out of the beginner's way.
Ultralytics YOLO: handles a many-models × many-tasks × many-modes matrix with orthogonal navigation axes plus comparison pages, instead of forcing one hierarchy. → We borrow: Robots, Teleoperators, Policies, and Benchmarks as separate catalog sections, each opening with a comparison table ("Choosing a…" pages).
HF Transformers (same doc-builder tooling — everything it does, we can do): card-grid landing page, <hfoptions> tabs with persistent selection (pick PyTorch once, every code block follows), nested collapsible toctree sections, subdirectory slugs (model_doc/bert), _redirects.yml. → We borrow: card-based index, site-wide <hfoptions id="robot"> / id="os" / id="train_env" tabs, a collapsible nested course section, and the redirects file.
4. Proposed information architecture
17 sections, ~101 toctree pages (today: 15 sections, 76 pages — growth is almost entirely the 11 deliberately-small course pages; the 14 orphans are absorbed into 2 pages). The sidebar reads top-to-bottom as increasing expertise. Slugs in parentheses; annotations: [NEW] to be written · [KEPT] same file/slug · [MOVED] same file, new section · [SPLIT from X] · [MERGED from X+Y].
Get started
├─ LeRobot (index) ........................................ [KEPT — rewritten as card-grid landing]
├─ Installation (installation) ............................ [KEPT — full install matrix, reference]
├─ Learn: your first robot — SO-101 course (nested, collapsible)
│ ├─ Welcome: what you'll build (learn/index) ............ [NEW]
│ ├─ 1. Install LeRobot (learn/install) .................. [SPLIT from installation — happy path only]
│ ├─ 2. Assemble your SO-101 (learn/assemble) ............ [SPLIT from so101]
│ ├─ 3. Set up the motors (learn/motors) ................. [SPLIT from so101]
│ ├─ 4. Calibrate (learn/calibrate) ...................... [SPLIT from so101 + il_robots]
│ ├─ 5. Teleoperate your arms (learn/teleoperate) ........ [SPLIT from il_robots]
│ ├─ 6. Connect your cameras (learn/cameras) ............. [SPLIT from cameras + il_robots]
│ ├─ 7. Record a dataset (learn/record) .................. [SPLIT from il_robots + AGENT_GUIDE §5.7]
│ ├─ 8. Train your first policy (learn/train) ............ [SPLIT from il_robots + AGENT_GUIDE §7]
│ ├─ 9. Evaluate your policy (learn/evaluate) ............ [SPLIT from il_robots + AGENT_GUIDE §8]
│ └─ 10. Next steps (learn/next_steps) ................... [NEW]
├─ Quickstart without a robot (quickstart_no_robot) ....... [NEW — AGENT_GUIDE §3 Path B + notebooks]
└─ Troubleshooting (troubleshooting) ...................... [NEW — aggregated from 5 pages + AGENT_GUIDE §5.8]
Collect data
├─ Record a dataset (record_dataset) ...................... [SPLIT from il_robots — robot-agnostic, CLI+Python]
├─ Get high-quality data (data_collection_tips) ........... [NEW — AGENT_GUIDE §5]
├─ Visualize & replay episodes (visualize_replay) ......... [SPLIT from il_robots + using_dataset_tools]
├─ Edit datasets (using_dataset_tools) .................... [KEPT — retitled]
├─ Port large datasets to v3 (porting_datasets_v3) ........ [KEPT]
└─ Add language instructions (language_and_recipes) ....... [KEPT — retitled]
Train policies
├─ Train a policy (train_policy) .......................... [SPLIT from il_robots + AGENT_GUIDE §7; local/Colab/HF-Jobs tabs]
├─ Compute requirements (hardware_guide) .................. [KEPT — retitled]
├─ Multi-GPU training (multi_gpu_training) ................ [MOVED]
├─ Fine-tune with PEFT / LoRA (peft_training) ............. [MOVED]
├─ PyTorch accelerators (torch_accelerators) .............. [KEPT]
└─ Rename map & empty cameras (rename_map) ................ [MOVED]
Deploy & evaluate
├─ Evaluate a policy on your robot (evaluate_policy) ...... [SPLIT from il_robots + AGENT_GUIDE §8]
├─ Deploy a policy — lerobot-rollout (inference) .......... [KEPT]
├─ Async inference (async) ................................ [KEPT]
└─ Real-time chunking — RTC (rtc) ......................... [KEPT — absorbs policy_rtc_README.md]
Robots
├─ Choosing a robot (choose_a_robot) ...................... [NEW — comparison table + decision guidance]
├─ SO-101 (so101) ......................................... [SPLIT — assembly/motors/calibration → course; page becomes spec + sourcing + links]
├─ SO-100 — previous generation (so100) ................... [KEPT + legacy banner]
├─ Koch v1.1 (koch) · LeKiwi (lekiwi) · Hope Jr (hope_jr) · Reachy 2 (reachy2)
│ Unitree G1 (unitree_g1) · Earth Rover Mini (earthrover_mini_plus)
│ OMX (omx) · OpenArm (openarm) · reBot B601-DM (rebot_b601) ... [all KEPT, normalized to robot template]
Teleoperators
├─ Teleoperator overview (teleoperators_overview) ......... [NEW — pairing matrix for all 15; keyboard/gamepad usage]
└─ Phone teleoperation (phone_teleop) ..................... [KEPT]
Cameras & motors
├─ Cameras (cameras) ...................................... [KEPT — expanded: ZMQ + Reachy 2 backends]
├─ Feetech motors & firmware (feetech) .................... [MOVED]
└─ Damiao motors & CAN bus (damiao) ....................... [MOVED — documents lerobot-setup-can]
Policies
├─ Choosing a policy (choose_a_policy) .................... [NEW — AGENT_GUIDE §6: VRAM tiers, decision rules]
├─ ACT (act) .............................................. [KEPT — absorbs policy_act_README.md]
├─ Diffusion Policy (diffusion) ........................... [NEW — from policy_diffusion_README.md; no page exists today]
├─ SmolVLA (smolvla) · π₀ (pi0) · π₀-FAST (pi0fast) · π₀.₅ (pi05)
│ GR00T N1.5 (groot) · MolmoAct2 (molmoact2) · VLA-JEPA (vla_jepa) · EO-1 (eo1)
│ X-VLA (xvla) · Multitask DiT (multi_task_dit) · WALL-OSS (walloss) ... [all KEPT, absorb matching READMEs, normalized to policy template]
└─ Legacy policies — VQ-BeT, TDMPC (legacy_policies) ...... [NEW — MERGED from policy_vqbet_README + policy_tdmpc_README]
Reward models
├─ Reward models overview (reward_models_overview) ........ [NEW]
└─ SARM (sarm) · ROBOMETER (robometer) · TOPReward (topreward) ... [KEPT]
Datasets in depth
├─ LeRobotDataset format — v3 spec (lerobot-dataset-v3) ... [SPLIT — keeps slug; format/layout/migration only]
├─ Load & stream datasets in Python (using_lerobot_dataset) [SPLIT from lerobot-dataset-v3 — Python API, streaming, transforms]
├─ Tool-calling columns (tools) ........................... [KEPT — retitled]
├─ Video encoding parameters (video_encoding_parameters) .. [KEPT]
└─ Streaming video encoding (streaming_video_encoding) .... [KEPT]
Simulation
├─ Environments from the Hub (envhub) ..................... [KEPT — section opener]
├─ LeIsaac: control & train in Isaac Sim (envhub_leisaac) . [KEPT]
└─ NVIDIA IsaacLab Arena (envhub_isaaclab_arena) .......... [MOVED from Benchmarks]
Benchmarks
├─ Choosing a benchmark (choose_a_benchmark) .............. [NEW — comparison + match-benchmark-to-claim guidance]
└─ LIBERO (libero) · LIBERO-plus (libero_plus) · Meta-World (metaworld)
RoboTwin 2.0 (robotwin) · RoboCasa365 (robocasa) · RoboCerebra (robocerebra)
RoboMME (robomme) · VLABench (vlabench) ................ [all KEPT]
Processors
├─ What are processors? (introduction_processors) ......... [KEPT — entry-level rewrite + diagram]
├─ Processors for robots & teleops (processors_robots_teleop) [KEPT]
├─ Environment processors (env_processor) ................. [KEPT]
├─ Action representations (action_representations) ........ [KEPT]
└─ Debug a processor pipeline (debug_processor_pipeline) .. [KEPT]
Reinforcement learning
├─ Train with RL on a real robot — HIL-SERL (hilserl) ..... [MOVED — split candidate, see §10 Q7]
├─ Train RL in simulation (hilserl_sim) ................... [MOVED]
└─ Human-in-the-loop data collection (hil_data_collection) [MOVED]
Extending LeRobot
├─ Add a policy (bring_your_own_policies) ................. [MOVED]
├─ Add a robot (integrate_hardware) ....................... [MOVED — retitled]
├─ Write your own processor (implement_your_own_processor) [MOVED]
└─ Add a benchmark (adding_benchmarks) .................... [MOVED]
Reference & resources
├─ CLI reference (cli_reference) .......................... [MERGED from cheat-sheet + NEW content for 6 undocumented commands]
├─ LeLab: browser GUI (lelab) ............................. [MOVED — placement is open question Q5]
├─ Notebooks (notebooks) .................................. [MOVED]
└─ Backward compatibility (backwardcomp) .................. [MOVED]
Community
└─ Contribute to LeRobot (contributing) ................... [KEPT]
_redirects.yml (complete file — only two entries):
cheat-sheet: cli_reference
il_robots: learn/index
Everything else keeps its slug; toctree moves and retitles don't change URLs in doc-builder.
5. The beginner course, page by page
Template for every course page: goal sentence → "You need" list → numbered steps, each ending with a verifiable checkpoint ("you should see…") → mini-troubleshooting (≤3 most common failures) → "Next:" footer link. CLI-only — Python appears nowhere in the course. OS-specific commands use <hfoptions id="os">. Budget ≤200 lines per page (assembly exempt: media-heavy).
| # | Slug | Title | Goal — the user can… | Content source | Length | Next |
|---|---|---|---|---|---|---|
| 0 | learn/index |
Welcome: what you'll build | See the outcome (a trained ACT policy moving a real SO-101), the shopping list (~$200 kit, 2 cameras, GPU or Colab), time budget (~1 weekend) | NEW; framing from AGENT_GUIDE §2–3 | ~120 | 1 |
| 1 | learn/install |
Install LeRobot | Working env via one happy path (pip install 'lerobot[feetech]'), verified with lerobot-info |
installation.mdx steps 1–3, trimmed to one path |
~100 | 2 |
| 2 | learn/assemble |
Assemble your SO-101 | Source/print parts, assemble leader + follower | so101.mdx sourcing + assembly sections (videos carry the load) |
~400 | 3 |
| 3 | learn/motors |
Set up the motors | Find ports (lerobot-find-port), set IDs (lerobot-setup-motors) for both arms |
so101.mdx motor config + cheat-sheet.mdx |
~150 | 4 |
| 4 | learn/calibrate |
Calibrate | Run lerobot-calibrate on both arms; know where calibration files live |
so101.mdx + il_robots.mdx calibration sections |
~120 | 5 |
| 5 | learn/teleoperate |
Teleoperate your arms | Run lerobot-teleoperate — the first "wow" moment, deliberately before cameras |
il_robots.mdx teleop (CLI only) |
~80 | 6 |
| 6 | learn/cameras |
Connect your cameras | Detect with lerobot-find-cameras, position wrist + front cams, teleop with camera view |
cameras.mdx + il_robots.mdx + AGENT_GUIDE §5.1 placement tips |
~120 | 7 |
| 7 | learn/record |
Record a dataset | Record 50 episodes of one task with lerobot-record; keyboard controls, resume, Hub push |
il_robots.mdx record + AGENT_GUIDE §5.7 defaults ("50 episodes, one task, fixed camera") + §5.2 |
~180 | 8 |
| 8 | learn/train |
Train your first policy (ACT) | Launch lerobot-train with sane ACT defaults; know how long to wait and when to stop. Tabs: local GPU / Colab / HF Jobs (<hfoptions id="train_env">) |
il_robots.mdx train + AGENT_GUIDE §7.1, §7.3, §7.7 |
~150 | 9 |
| 9 | learn/evaluate |
Evaluate your policy | Run the policy, measure success over 10 trials, know what's "good" | il_robots.mdx eval + AGENT_GUIDE §8.1, §8.3, §5.8 |
~120 | 10 |
| 10 | learn/next_steps |
Next steps | Pick a direction: better data → data_collection_tips; language/multi-task → smolvla; mobile → lekiwi; RL → hilserl; sim → envhub; Discord |
NEW; card grid | ~60 | — |
Parallel track — quickstart_no_robot: one page mirroring steps 7–9 without hardware: pick a Hub dataset → lerobot-dataset-viz → train ACT (Colab button + local command) → evaluate in sim. Ends with "got a robot? start the course." Source: AGENT_GUIDE §3 Path B + notebooks.mdx. (Blessed dataset/env to be decided — §10 Q8.)
6. New pages — content briefs
Hub / decision pages:
choose_a_robot— Comparison table of all 11 robots: photo, type (arm / mobile / humanoid / hand), DoF, motor family (Feetech / Dynamixel / Damiao), approx. price, sourcing (kit / 3D-print / buy), teleop options, docs maturity. Below: short decision paragraphs ("first robot → SO-101", "mobile manipulation → LeKiwi", "research platform → Reachy 2 / G1"). Ends with a card into the course.teleoperators_overview— Pairing matrix: all 15 teleoperators × compatible robots, with the exact--teleop.type=value for each. Inline usage sections for keyboard and gamepad (currently undocumented); leader arms link to their robot pages; phone links tophone_teleop.choose_a_policy— Table from AGENT_GUIDE §6.1: policy, params, min VRAM tier, single/multi-task, language-conditioned, inference speed, pretrained checkpoints, dataset-size sweet spot. Decision rules from §6.2 ("first policy → ACT; language + 16 GB → SmolVLA; ≥40 GB → π₀ / GR00T"). Legacy policies in a collapsed footnote.reward_models_overview— Half page: what reward models are for (success classification for RL, episode filtering, eval scoring), where they plug into HIL-SERL, 3-row table (SARM / ROBOMETER / TOPReward: input modality, output, use case).choose_a_benchmark— Table: benchmark, sim engine, # tasks, focus (long-horizon / language / generalization / bimanual), policies with reported results, GPU needs, Dockerfile availability (AGENT_GUIDE §8.2b). Guidance: match the benchmark to your policy's claim.
Getting started:
index(rewrite) — Card grid replacing prose: "Build your first robot (course)" / "Quickstart without a robot" / "Choose a robot" / "Choose a policy" / "Browse datasets & models on the Hub" / "Join Discord". Keep the one-paragraph mission statement.troubleshooting— Symptom-organized, one H2 per failure area: installation (ffmpeg, CUDA) · ports & permissions (find-port fails, udev) · motors (wrong ID, no torque, LED codes from AGENT_GUIDE) · calibration drift · cameras (fps, USB bandwidth) · recording (crashes, resume) · training (flat loss, OOM → compute guide) · policy acts erratically (AGENT_GUIDE §5.8 signal table). Each entry: symptom → cause → fix command.
How-to consolidations (Diátaxis splits):
record_dataset— Robot-agnostic deep version of course step 7: fulllerobot-recordflag reference,<hfoptions id="robot">per-robot commands, Python API in its own H2, Hub upload.data_collection_tips— AGENT_GUIDE §5 nearly verbatim: ergonomics, practice runs, consistency, the "start small" golden rule, troubleshooting signals.visualize_replay—lerobot-dataset-viz, the online Hub visualizer,lerobot-replay.train_policy— One canonical training how-to:lerobot-trainanatomy, steps/batch/LR guidance (AGENT_GUIDE §7), resume, checkpoints, W&B, local/Colab/HF-Jobs tabs. Links out to multi-GPU, PEFT, compute guide.evaluate_policy— Real-robot eval protocol (n trials, success criteria, §8.3 targets),lerobot-evalfor sim, comparing checkpoints.using_lerobot_dataset— Python API split out oflerobot-dataset-v3: load from Hub, random access,delta_timestamps, DataLoader, streaming, image transforms (+lerobot-imgtransform-viz).
Reference:
cli_reference— Replaces cheat-sheet. All 17 commands, one H2 each, grouped by workflow: Setup (find-port, setup-motors, setup-can, calibrate, find-cameras, info) · Data (record, replay, dataset-viz, edit-dataset, imgtransform-viz, find-joint-limits) · Train (train, train-tokenizer) · Deploy (eval, rollout, teleoperate). Each: one-line purpose, copy-paste SO-101 example, link to the relevant guide.diffusion— Standard policy-template page built frompolicy_diffusion_README.md(the only major policy with no page today).legacy_policies— VQ-BeT + TDMPC on one page with a status banner ("maintained for reproducibility, not recommended for new projects"), minimal train/eval commands, paper links.
7. Migration table
Redirects needed: 2. Orphan files aren't in the toctree (never built/served), so deleting them breaks no URLs. Toctree moves and retitles with unchanged slugs need no redirects.
7.1 Current toctree pages (76)
| Old slug | Disposition | New location | Redirect |
|---|---|---|---|
index |
rewrite (card grid) | Get started | no |
installation |
keep (reference matrix); happy path copied to learn/install |
Get started | no |
cheat-sheet |
merge into cli_reference |
Reference & resources | yes |
il_robots |
split 8 ways → learn/{calibrate,teleoperate,cameras,record,train,evaluate}, record_dataset, visualize_replay, train_policy, evaluate_policy |
— | yes → learn/index |
lelab |
move | Reference & resources | no |
bring_your_own_policies |
move, retitle "Add a policy" | Extending | no |
integrate_hardware |
move, retitle "Add a robot" | Extending | no |
hilserl, hilserl_sim, hil_data_collection |
move | Reinforcement learning | no |
multi_gpu_training, peft_training, torch_accelerators, rename_map |
move | Train policies | no |
hardware_guide |
move, retitle "Compute requirements" | Train policies | no |
lerobot-dataset-v3 |
split: keeps slug as format spec; Python usage → using_lerobot_dataset |
Datasets in depth | no |
porting_datasets_v3, language_and_recipes |
move | Collect data | no |
using_dataset_tools |
move, retitle "Edit datasets"; viz section → visualize_replay |
Collect data | no |
tools |
move, retitle "Tool-calling columns" | Datasets in depth | no |
video_encoding_parameters, streaming_video_encoding |
move | Datasets in depth | no |
act, smolvla, pi0, pi0fast, pi05, molmoact2, vla_jepa, eo1, groot, xvla, multi_task_dit, walloss |
keep; normalize to policy template; absorb matching orphan READMEs | Policies (after choose_a_policy) |
no |
sarm, robometer, topreward |
keep | Reward models (after overview) | no |
inference |
keep, retitle "Deploy a policy (lerobot-rollout)" | Deploy & evaluate | no |
async |
keep | Deploy & evaluate | no |
rtc |
keep; absorb policy_rtc_README.md |
Deploy & evaluate | no |
envhub, envhub_leisaac |
keep | Simulation | no |
envhub_isaaclab_arena |
move | Simulation | no |
adding_benchmarks |
move, retitle "Add a benchmark" | Extending | no |
libero, libero_plus, metaworld, robotwin, robocasa, robocerebra, robomme, vlabench |
keep | Benchmarks (after choose_a_benchmark) |
no |
introduction_processors |
keep; entry-level rewrite | Processors | no |
processors_robots_teleop, env_processor, action_representations, debug_processor_pipeline |
keep | Processors | no |
implement_your_own_processor |
move | Extending | no |
so101 |
split: assembly → learn/assemble, motors → learn/motors, calibration → learn/calibrate; page becomes spec/sourcing/overview linking into the course |
Robots | no (slug unchanged) |
so100 |
keep + legacy banner ("SO-101 is the current generation") | Robots | no |
koch, lekiwi, hope_jr, reachy2, unitree_g1, earthrover_mini_plus, omx, openarm, rebot_b601 |
keep; normalize to robot template | Robots (after choose_a_robot) |
no |
phone_teleop |
keep | Teleoperators (after overview) | no |
cameras |
keep; expand (ZMQ + Reachy 2 backends) | Cameras & motors | no |
feetech, damiao |
move; document lerobot-setup-can in damiao |
Cameras & motors | no |
notebooks, backwardcomp |
move | Reference & resources | no |
contributing |
keep | Community | no |
7.2 Orphan files (14 — delete from docs/source/, no redirects needed)
Canonical copies remain in src/lerobot/policies/*/README.md. Verified: the docs/source copies are byte-identical hand-copies with no sync script anywhere in the repo — deletion is safe once unique content is folded in.
| Orphan file | Disposition |
|---|---|
policy_act_README.md, policy_groot_README.md, policy_molmoact2_README.md, policy_multi_task_dit_README.md, policy_pi0_README.md, policy_pi05_README.md, policy_sarm_README.md, policy_smolvla_README.md, policy_vla_jepa_README.md, policy_walloss_README.md, policy_rtc_README.md |
Delete; fold any unique content into the corresponding .mdx page |
policy_diffusion_README.md |
Delete; content seeds the new diffusion.mdx |
policy_tdmpc_README.md, policy_vqbet_README.md |
Delete; content seeds the new legacy_policies.mdx |
7.3 New files (27)
learn/index, learn/install, learn/assemble, learn/motors, learn/calibrate, learn/teleoperate, learn/cameras, learn/record, learn/train, learn/evaluate, learn/next_steps, quickstart_no_robot, troubleshooting, record_dataset, data_collection_tips, visualize_replay, train_policy, evaluate_policy, using_lerobot_dataset, choose_a_robot, teleoperators_overview, choose_a_policy, diffusion, legacy_policies, reward_models_overview, choose_a_benchmark, cli_reference — plus _redirects.yml.
8. Conventions & style guide
Naming
- Product names in prose: SO-101, SO-100, LeKiwi, π₀ (display) /
pi0(slug/code), HIL-SERL, LeRobotDataset. Never "so101"/"SO101" in prose. - Slugs: lowercase with underscores for new files (
choose_a_robot); course underlearn/. Existing hyphenated slugs (lerobot-dataset-v3,cheat-sheet) are grandfathered, not propagated. - Titles: sentence case. How-to titles start with a verb ("Record a dataset"); reference titles are nouns ("CLI reference"); course titles are numbered ("3. Set up the motors").
- Placeholders in commands: consistent
<angle_brackets>(e.g.--robot.port=<your_port>).
Components
<hfoptions>with fixed, site-wide ids so a choice persists across pages:id="robot"·id="os"·id="install"·id="train_env"(local/colab/jobs). Tabs only for structurally parallel content; never hide unique content inside a tab.<Tip>for actionable advice;<Tip warning={true}>for anything that can damage hardware, lose data, or cost money. Standardize on<Tip>in.mdx;> [!NOTE]only in plain.md. Max ~3 tips per page.- Card grids only on
index,learn/next_steps, and section overview pages. - Every assembly/calibration video must have the same steps in text below it (accessibility + searchability).
Page templates & length budgets
| Type | Skeleton | Budget |
|---|---|---|
| Course page | goal → "you need" → numbered steps w/ checkpoints → mini-troubleshooting → Next | ≤200 lines (assembly exempt) |
| How-to | problem statement → minimal working command → variations → edge cases → related links | ≤300 |
| Robot page | hero photo → spec table → buy/build → calibration quirks → compatible teleops → known issues | ≤400 |
| Policy page | summary card (params, VRAM, license, paper, checkpoints) → when to use → install → train → finetune → results → citation | ≤250 |
| Concept page | what & why in 3 sentences → diagram → details → pointers to how-tos | ≤400 |
Hard cap 500 lines for any page → must split (il_robots at ~650 and hilserl at ~950 are the cautionary examples).
9. Phased rollout plan
| Phase | Scope | PRs | Effort | Parallel? |
|---|---|---|---|---|
| 0. Sign-off | This proposal reviewed; open questions (§10) decided | — | ~0.5 wk elapsed | — |
| 1. Skeleton & cleanup | New _toctree.yml (all KEPT/MOVED pages in final positions), _redirects.yml, delete 14 orphans, retitles, SO-100 legacy banner |
1 mechanical PR (no content changes — easy review) | 1–2 days | no |
| 2. Beginner course | 11 learn/ pages, so101 + il_robots splits, quickstart_no_robot, troubleshooting; il_robots redirect ships here |
3 PRs (steps 0–4 / 5–10 / quickstart+troubleshooting) | 5–8 days | partially — single author for voice; troubleshooting separable |
| 3. Hub / decision pages | choose_a_robot, choose_a_policy, choose_a_benchmark, teleoperators_overview, reward_models_overview, index rewrite |
6 independent PRs | 4–6 days | fully — good first issues per area owner |
| 4. How-to consolidation | record_dataset, data_collection_tips, visualize_replay, train_policy, evaluate_policy, dataset split, cheat-sheet → cli_reference (+ its redirect) |
3–4 PRs (data / train / deploy / datasets) | 5–7 days | parallel across clusters |
| 5. Reference fill-in | diffusion, legacy_policies, ZMQ camera docs, 6 undocumented CLI commands, keyboard/gamepad teleop content, policy/robot pages normalized to templates |
many small PRs | 4–6 days | fully — community-friendly |
Total ≈ 4–5 person-weeks. Phases 2 and 3 can run concurrently after Phase 1 merges. Each URL-breaking change ships in the same PR as its redirect.
10. Open questions for maintainers
- Legacy policies (TDMPC, VQ-BeT): combined
legacy_policiespage (proposed), full individual pages, or src READMEs only? - Orphan READMEs: verified byte-identical hand-copies of
src/lerobot/policies/*/README.mdwith no sync script — OK to delete fromdocs/source/in Phase 1? Which copy is canonical going forward (proposed: src)? - AGENT_GUIDE.md future: large parts become docs pages (§5–§8). Slim it to a pointer file for AI agents (avoids divergence), or keep self-contained and accept dual maintenance?
- Course URL namespace:
learn/(proposed) vsgetting_started/vstutorial/— permanent once shipped, decide before Phase 2. - LeLab status: first-party and maintained? If yes, add a "prefer a GUI?" callout inside the course (teleop/record steps); if experimental, keep in Reference & resources as proposed.
- SO-100 messaging: proposed banner "SO-101 is the current generation" + full docs retained. Strong enough, or formally deprecate?
- HIL-SERL split:
hilserl.mdxis ~950 lines. Split into "Setup & demonstrations" + "Reward classifier & training" in a later phase, or keep monolithic for its expert audience? - Blessed no-hardware quickstart: PushT, a Hub SO-101 dataset, gym-hil, or an EnvHub env? Determines
quickstart_no_robotcontent. <hfoptions>id taxonomy: agree on the canonical ids (robot,os,install,train_env) — they persist site-wide once shipped.- Reward models placement: standalone section after Policies (proposed) vs nested under Reinforcement learning — depends on whether SARM/ROBOMETER/TOPReward are positioned as general eval tools or RL components.
Appendix: sources & verification
- Current nav:
docs/source/_toctree.yml(76 pages, 15 sections — verified June 2026). - File census: 90 content files in
docs/source/; orphans confirmed by toctree diff; orphan↔src byte-identity confirmed bydiff; absence of a sync script confirmed by repo-wide grep. - CLI commands:
pyproject.toml [project.scripts](17 entries). - AGENT_GUIDE.md section references (§5 data tips, §6 policy choice, §7 training duration, §8 evaluation) verified against its headings.
- Patterns referenced: Diátaxis (diataxis.fr) · FastAPI docs · Ultralytics YOLO docs · HF Transformers docs (doc-builder feature ceiling).