The AY-Robots public dataset directory listing LeRobot-format datasets, the interchange format the whole robot learning ecosystem reads
LeRobotOpen SourceRobotics StackVLAStartupsTooling

Robotics Startups Building on LeRobot: What You Get, What You Do Not

AY-Robots ResearchAugust 23, 202620 min read

LeRobot 0.6.1 gives robotics teams a dataset format, a plugin bus and 22 policies. It does not give you curation, fleet ops or API stability. What that costs, and who is actually shipping on it.

What you need to know

  • LeRobot 0.6.1 shipped on 3 August 2026. It is Apache-2.0, needs Python 3.12 or newer, and installs as a deliberately thin core plus named extras such as lerobot[training] or lerobot[smolvla].
  • What you get: one dataset format, one Robot interface with a plugin bus, twenty-two policy implementations across five families, and four CLI commands that behave the same on every supported arm.
  • What you do not get: dataset curation, fleet management, checkpoint governance, a safety layer, or API stability across minor versions.
  • Adoption is checkable rather than anecdotal. The Hugging Face Hub listed 72,437 datasets under the LeRobot tag when we counted on 24 August 2026, and NVIDIA, Physical Intelligence, the Allen Institute for AI and Toyota Research Institute all ship policy code inside the repo.
  • The cost nobody budgets for is the version tax. v0.6.0 removed GR00T N1.5, split the install into extras, renamed several flags and raised the PyTorch floor, all in one release.
  • AY-Robots wraps the same LeRobot data path end to end: record with the desktop client, fine-tune on a rented GPU, serve the checkpoint back to the arm. It does not remove the version tax, it just moves it off your laptop.

If you are starting a robotics company in 2026 and you are not writing your own motor bus driver, your stack probably begins with huggingface/lerobot. That is not a marketing claim. It is what the dependency graph looks like: NVIDIA ships GR00T inside it, Physical Intelligence's Pi0 family has a reference implementation in it, and the tag on the Hugging Face Hub that identifies a robot dataset is literally the string LeRobot.

This article covers what the library actually hands you, what it very deliberately does not, and who is demonstrably building on it. Everything below was checked against the repo, the docs and the package index on 24 August 2026. Where upstream has changed, the version is named. If you want the shorter product-level version first, the five policies AY-Robots can train and the model and arm matrix are the practical entry points.

What LeRobot is, precisely, in August 2026

PropertyValueChecked how
Latest releasev0.6.1, published 3 August 2026GitHub releases API
Previous releasev0.6.0, published 6 July 2026GitHub releases API
LicenceApache-2.0repo metadata and PyPI
Python requirement>= 3.12PyPI requires_python for lerobot 0.6.1
Stars / forks26,865 / 5,458GitHub repo API, 24 August 2026
Contributors252GitHub contributors API
Open issues and pull requests816GitHub repo API
Repo created26 January 2024GitHub repo API
Dataset formatLeRobotDataset v3.0 (Parquet plus MP4)repo README
Reference paperarXiv 2602.22818, submitted 26 February 2026arXiv listing

Two of those numbers deserve a second look. 816 open issues and pull requests against 252 contributors is a healthy, busy project, not a finished one. And Python >= 3.12 is a hard floor as of 0.6.1, which is the single most common reason a team's existing robot control machine cannot just `pip install lerobot` on Monday morning.

The core install is intentionally small

Since v0.6.0, pip install lerobot pulls only core ML dependencies: PyTorch, torchvision, numpy, opencv, einops, draccus, huggingface-hub, gymnasium, safetensors. Everything else is behind an extra. Recording needs lerobot[core_scripts], training needs lerobot[training], and each policy family has its own tag such as lerobot[smolvla], lerobot[pi] or lerobot[groot]. If you upgraded from 0.5.x and your training script suddenly cannot find accelerate, this is why.

The four things the stack actually gives you

1. A dataset format that other people already speak

The LeRobot dataset format is the part of the stack with the highest leverage. An episode is stored as synchronised MP4 video plus Parquet columns for state and action, with metadata that names each joint and camera. Because the format is fixed, a dataset recorded on somebody else's SO-100 loads in your training script without a converter.

python
from lerobot.datasets.lerobot_dataset import LeRobotDataset

# Streams straight from the Hugging Face Hub, decodes video for you
dataset = LeRobotDataset("lerobot/aloha_mobile_cabinet")

episode_index = 0
print(f"{dataset[episode_index]['action'].shape=}")
print(dataset.features.keys())      # observation.state, observation.images.*, action, ...
print(dataset.num_frames, dataset.fps)
Loading a public LeRobot dataset. The same class reads a dataset you recorded locally.
Two details that save an afternoon

Recorded datasets land in ~/.cache/huggingface/lerobot/{repo-id} before upload, and lerobot-record tags every pushed dataset with LeRobot automatically, which is how the Hub listing stays findable. If you want to see what a public catalogue of these looks like without a Hub account, the AY-Robots dataset directory lists the public ones.

2. One Robot interface, plus a plugin bus that third parties actually use

Natively supported hardware in 0.6.1 is SO100, LeKiwi, Koch, HopeJR, OMX, EarthRover, Reachy2, gamepads, keyboards, phones, OpenARM, Unitree G1 and reBot B601. That list is not the interesting part. The interesting part is the discovery rule: LeRobot imports any installed package whose name starts with lerobot_robot_, lerobot_teleoperator_ or lerobot_camera_, and the type it registers becomes available to every CLI command immediately.

bash
# Install a vendor plugin, then use it like built-in hardware
pip install lerobot_robot_<name> lerobot_teleoperator_<name>

lerobot-record \
    --robot.type=<robot_name> \
    --teleop.type=<teleoperator_name> \
    --dataset.repo_id=${HF_USER}/my-dataset \
    --dataset.num_episodes=5
The plugin contract. No fork, no patch, no upstream pull request required.

This is why the hardware list in the docs undersells reach. The official third-party page names integrations maintained by the vendors themselves, which is the clearest available signal of who is invested in the stack:

Vendor or projectPackageHardware
UFACTORYlerobot-robot-xarmxArm collaborative arm series
Universal Robots (community)lerobot_robot_ur5eUR5e over RTDE with a Robotiq gripper
Trossen Roboticslerobot_trossenWidowX and ALOHA-style arms
AgileX (two independent plugins)lerobot_robot_piperPiper arm, one with multi-arm teleop and safety limits
I2RTlerobot_yam, lerobot_teleoperator_yamactiveleaderYAM arm plus bilateral force-feedback leader
ROBOTISlerobot_teleoperator_omyOMY-L100 six degree-of-freedom leader
Lebailerobot_lebaisix-axis collaborative arms
ugolerobot-robot-ugo-prougo Pro dual-arm service robot
The Robot Learning Companytrlc-dk1single and bimanual development kit
Haply / Force Dimensionlerobot_teleoperator_inverse3, lerobot_teleoperator_omega7force-feedback haptic teleoperation
3Dconnexionlerobot-teleoperator-spacemouseSpaceMouse with IK for SO-ARM robots
ROS 2 communityleros2, lerobot_robot_ros2_zenohbridges ROS 2 topics and actions into LeRobot

3. Policy implementations you did not have to write

As of the 0.6.1 README, LeRobot carries twenty-two model implementations across five families. For a company, the value is not that they are state of the art; it is that they share one config system, one training loop and one checkpoint layout, so switching from a small imitation learning baseline to a large vision-language-action model is a flag change rather than a rewrite.

FamilyModels in lerobot 0.6.1Origin
Imitation learningACT, Diffusion, VQ-BeT, Multitask DiTACT comes from the Stanford ALOHA work; Multitask DiT follows Toyota Research Institute's Large Behavior Models recipe
Reinforcement learningHIL-SERL, TDMPC (QC-FQL listed as coming)academic reinforcement learning work; QC-FQL is listed but not shipped
Vision-language-actionPi0, Pi0Fast, Pi0.5, GR00T N1.7, SmolVLA, XVLA, EO-1, MolmoAct2, WALL-OSS, EVO1Physical Intelligence (Pi0 family), NVIDIA (GR00T), Hugging Face (SmolVLA), Allen Institute for AI (MolmoAct2), X Square Robot (WALL-OSS)
World modelsVLA-JEPA, LingBot-VA, FastWAMadded in v0.6.0, July 2026
Reward modelsSARM, TOPReward, RobometerRobometer pretrained on more than one million robot trajectories

AY-Robots trains five of these as managed jobs, and the ACT, SmolVLA, Pi0.5 and GR00T N1.7 pages carry the parameter counts, GPU tiers and measured per-step latency side by side. If you want the wider research picture instead, the model arena compares 85 VLA models across 332 benchmark results with every value linked to its source.

4. Four commands that are identical on every arm

Teleoperate, record, train, deploy. The teleoperation loop and the recording loop are the same code path, which is the reason a demonstration you can drive is a demonstration you can store.

  1. 1
    Teleoperate to check the arm and the cameras

    The id is what the calibration file is keyed on. Use the same id for recording and deployment or the joint offsets will be wrong and nothing downstream will make sense.

    bash
    lerobot-teleoperate \
        --robot.type=so101_follower \
        --robot.port=/dev/tty.usbmodem5AB90687491 \
        --robot.id=my_follower_arm \
        --robot.cameras="{front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}}" \
        --teleop.type=so101_leader \
        --teleop.port=/dev/tty.usbmodem5AB90689011 \
        --teleop.id=my_leader_arm \
        --display_data=true
  2. 2
    Record a dataset

    Defaults matter here: --dataset.episode_time_s is 60 seconds, --dataset.reset_time_s is 60 seconds and --dataset.num_episodes is 50. During recording, the right arrow or n ends an episode early, the left arrow or r re-records it, and ESC or q stops and encodes.

    bash
    lerobot-record \
        --robot.type=so101_follower \
        --robot.port=/dev/tty.usbmodem585A0076841 \
        --robot.id=my_follower_arm \
        --robot.cameras="{front: {type: opencv, index_or_path: 0, width: 1920, height: 1080, fps: 30}}" \
        --teleop.type=so101_leader \
        --teleop.port=/dev/tty.usbmodem58760431551 \
        --teleop.id=my_leader_arm \
        --dataset.repo_id=${HF_USER}/record-test \
        --dataset.num_episodes=50 \
        --dataset.single_task="Grab the black cube" \
        --dataset.streaming_encoding=true
  3. 3
    Train a policy

    The policy adapts itself to the number of joints and cameras stored in your dataset, so the same command works across arms. Add --job.target=a10g-small to run it on Hugging Face Jobs instead of your own machine.

    bash
    lerobot-train \
      --dataset.repo_id=${HF_USER}/so101_test \
      --policy.type=act \
      --output_dir=outputs/train/act_so101_test \
      --job_name=act_so101_test \
      --policy.device=cuda \
      --wandb.enable=true \
      --policy.repo_id=${HF_USER}/my_policy
  4. 4
    Deploy and evaluate on the real arm

    lerobot-rollout replaced the ad hoc eval scripts. --strategy.type selects base (no recording), sentry (continuous recording with auto-upload), highlight (ring buffer plus keystroke save), dagger (human in the loop) or episodic. Slow VLAs want --inference.type=rtc.

    bash
    lerobot-rollout \
      --strategy.type=base \
      --policy.path=${HF_USER}/my_policy \
      --robot.type=so100_follower \
      --robot.port=/dev/ttyACM1 \
      --robot.cameras="{ up: {type: opencv, index_or_path: /dev/video10, width: 640, height: 480, fps: 30}}" \
      --task="Put lego brick into the transparent box" \
      --duration=60
The AY-Robots public dataset directory listing LeRobot-format datasets recorded on SO-100 class arms
The same LeRobotDataset format, browsable without a Hugging Face account. Every entry here is a dataset a trainer can consume directly.

Who is actually building on it

Adoption claims in robotics are usually unfalsifiable. These are not, because each one leaves an artefact you can open:

OrganisationWhat they put into LeRobotWhere to check
NVIDIAGR00T N1.7 policy plus Isaac Teleop for data collection, announced 6 July 2026; Cosmos 3 flagged as future worknvidia/GR00T-N1.7-3B on the Hub, policy_groot docs in the repo
Physical IntelligencePi0, Pi0-FAST and Pi0.5 reference implementations; lerobot/pi05_base is the base checkpoint Pi0.5 fine-tunes start fromlerobot[pi] extra, lerobot/pi05_base model page
Hugging FaceSmolVLA, 450M parameters, pretrained on 487 curated community datasetsSmolVLA release blog (the 487 count); paper arXiv 2506.01844
Allen Institute for AIMolmoAct2 policy, added in v0.6.0v0.6.0 release notes and lerobot[molmoact2] extra
Toyota Research InstituteMultitask DiT, following the Large Behavior Models recipev0.6.0 release blog
Pollen RoboticsReachy 2 is a natively supported robot; Hugging Face acquired the company in April 2025Reachy 2 page in the LeRobot docs; TechCrunch, 14 April 2025
YaakL2D, a driving dataset published in LeRobotDataset v3.0 formatyaak-ai/L2D on the Hub
A dozen arm vendorsSelf-maintained plugins for xArm, UR5e, WidowX, Piper, YAM, OMY, Lebai and othersthird-party robots page in the docs

The most useful adoption number is the dumbest one. The Hub listing for the LeRobot tag reported 72,437 datasets when we counted it on 24 August 2026. The lerobot organisation itself hosts only 66 models and 188 datasets, so the overwhelming majority of that is community and company data rather than anything the core team published. A chunk of the first wave came from the worldwide LeRobot hackathon of 14 and 15 June 2025, whose Hub organisation still carries 992 members, 190 datasets and 12 models.

The AY-Robots operator page, Become a Robot Operator from anywhere in the world, with a photo of the SO-100 arm operators drive
Datasets do not appear by themselves. Somebody drives the arm for every episode, which is why remote teleoperation work exists as a job category at all.

That is the honest shape of the ecosystem: a very large pile of hobby and hackathon data, a much smaller pile of curated company data, and a handful of vendors treating the plugin bus as a distribution channel. If you are collecting your own, what makes a dataset trainable matters far more than how many megabytes you have.

What LeRobot does not give you

This is the section that decides whether you ship. LeRobot is a research-grade library that is very good at the first mile. Everything after the first working policy is your problem.

Building your product directly on LeRobot
Advantages
  • Apache-2.0, so no licence conversation with your lawyer before a pilot.
  • The dataset format is the de facto interchange standard, which means partner data and public data drop in without conversion work.
  • Twenty-two policies behind one config system, so model choice stops being an engineering commitment.
  • Vendor plugins mean you can change arm supplier without changing your recording pipeline.
  • The four CLI commands are genuinely arm-agnostic, so a second robot costs you a port string, not a sprint.
  • Upstream moves fast: world models, reward models and six simulation benchmarks all landed in a single July 2026 release.
Trade-offs
  • No curation. Hugging Face filtered the community pile down to 487 usable datasets to pretrain SmolVLA. That filtering was their work, not the library's.
  • No fleet management, no device inventory, no calibration registry across machines. Calibration lives in a local file keyed by --robot.id.
  • No checkpoint governance. Which run produced which checkpoint on which data is whatever your naming convention says it is.
  • No safety layer. There is no watchdog, no joint-limit supervisor and no emergency-stop abstraction in the library.
  • API stability is not promised between minor versions. v0.6.0 alone removed GR00T N1.5, renamed eval_freq, renamed --dataset.vcodec, replaced the sac policy type and raised the PyTorch floor to 2.7.
  • Python 3.12 or newer is mandatory, which excludes a lot of existing robot control machines and most ROS 1 era images.
GapWhat it costs youWhat teams do about it
Dataset quality controlEpisodes with empty task strings, single-frame episodes, camera keys that mean different things in different datasetsWrite a validator that runs before training; check episode length distribution and camera key consistency
Experiment trackingWeights and Biases is wired in, lineage is notStore the dataset commit sha next to the checkpoint; treat train_config.json as the record
Evaluation on real hardwarelerobot-rollout runs the policy, it does not score itDefine a success criterion and a fixed reset procedure before the first run
Multi-user accessOne machine, one operator, one USB treeEither build a scheduler or use a platform that already has one
GPU procurementLocal card or a Hugging Face Job, both of which you manageManaged spot rental, or accept the queueing
Latency budgetingNothing warns you that your policy is too slow for the taskMeasure per-step time before you design the task
The trap that eats a day: two libraries, one Python process

GR00T is the clearest example of a problem that recurs across the VLA ecosystem. NVIDIA's original gr00t package pins transformers==4.57.3. LeRobot's GR00T N1.7 integration requires transformers>=5.x for the Qwen3-VL backbone. Under transformers 5.x the original config dataclasses fail to import outright, so the two implementations cannot be imported in the same Python process. LeRobot's own parity test works around it with two separate virtualenvs and a producer/consumer split. If you plan to compare an upstream reference against the LeRobot port, budget for two environments from the start, not after you have spent a day on non-default argument follows default argument. Related: GR00T N1.5 support was removed entirely, and lerobot==0.5.1 is the last release that has it.

bash
# Pin hard. A robotics repo that floats its lerobot version will break
# on a Tuesday for reasons unrelated to your code.
pip install 'lerobot[core_scripts,training,smolvla]==0.6.1'

# On Linux the CUDA wheel depends on the install path, and this bites people:
#   uv source install  -> torch pinned to cu128, driver floor 570.86
#   pip install lerobot -> PyPI default is a cu130 wheel, driver floor 580.65
# If your driver is older than 580.65, install torch explicitly first.
pip install --index-url https://download.pytorch.org/whl/cu128 torch torchvision
pip install 'lerobot[core_scripts,training]==0.6.1'
Version and CUDA pinning. Two lines that prevent the most common broken-build ticket.

The dataset format itself is a moving target too. LeRobotDataset v3.0 packs many episodes per file and moved metadata to Parquet; several trainers, including NVIDIA's GR00T loader, still expect v2.1 and crash on v3.0. The wider model landscape is in the VLA overview, and this particular failure has its own page at dataset rejected as v3. On AY-Robots the conversion happens in the pipeline, which is a small thing that stops being small the third time it happens to you.

Same goal, two routes

You own an arm, a workstation with a 24 GB card or a cloud account, and a week. This is the correct path if your hardware is unusual, if your data cannot leave your network, or if you intend to modify the policy code.

  1. 1
    Environment

    Python 3.12, then install only the extras you need. Add ffmpeg from conda-forge unless you are on PyTorch 2.10 or newer, where a system ffmpeg works.

    bash
    conda create -y -n lerobot python=3.12
    conda activate lerobot
    conda install ffmpeg -c conda-forge
    pip install 'lerobot[core_scripts,training,feetech]==0.6.1'
    lerobot-info
  2. 2
    Record 50 episodes

    The docs recommend at least 50 episodes, roughly 10 per object location, with fixed cameras and consistent grasping. Add variation only after the simple version works.

    bash
    hf auth login --token ${HUGGINGFACE_TOKEN} --add-to-git-credential
    HF_USER=$(NO_COLOR=1 hf auth whoami | awk -F': *' 'NR==1 {print $2}')
    
    lerobot-record \
      --robot.type=so100_follower --robot.port=/dev/ttyACM0 --robot.id=arm_a \
      --teleop.type=so100_leader --teleop.port=/dev/ttyACM1 --teleop.id=leader_a \
      --dataset.repo_id=${HF_USER}/pick-cube --dataset.num_episodes=50 \
      --dataset.single_task="Pick up the cube and drop it in the bin"
  3. 3
    Train

    Locally on a 24 GB card, or on a Hugging Face Job. ACT on ~45k frames for 5 epochs is roughly 30 to 60 minutes on a single RTX 4090 according to the upstream compute guide; SmolVLA on an L4 is roughly 3 to 6 hours.

    bash
    lerobot-train \
      --dataset.repo_id=${HF_USER}/pick-cube \
      --policy.type=act \
      --policy.repo_id=${HF_USER}/act_pick_cube \
      --policy.device=cuda \
      --job.target=a10g-small      # omit to train locally
  4. 4
    Deploy

    Run the checkpoint on the arm, then decide honestly whether it worked. Nothing in the library will tell you.

    bash
    lerobot-rollout --strategy.type=base \
      --policy.path=${HF_USER}/act_pick_cube \
      --robot.type=so100_follower --robot.port=/dev/ttyACM0 --robot.id=arm_a \
      --task="Pick up the cube and drop it in the bin" --duration=120
Budget the parts you cannot see

The training run is the cheap, visible part. The invisible parts are USB enumeration on your control machine, camera indices that change on reboot, calibration drift on Feetech servos, and the fact that a Hugging Face Job defaults to a 2d (48 hour) timeout, so a stuck run bills for two days unless you pass --job.timeout=4h.

What a training run costs, either way

Cost is where the two routes stop looking similar. Upstream, you either own the card or you submit a Hugging Face Job and pay by the second against flavours such as t4-small, l4x1, a10g-large or a100-large. On AY-Robots the GPU is rented on a spot market by required VRAM, so the number is a range rather than a price.

PolicyParametersGPU tierPer action stepMin episodesTypical AY-Robots run
GR00T N1.7~3 B, ~40 M trained during fine-tuningA100 80 GB or H100 80 GB152 ms503 to 6 h, about 4 to 12 USD
GR00T N1.5~3 BA100 80 GB or H100 80 GB165 ms503 to 6 h, about 4 to 12 USD
Pi0.5~3 B, PaliGemma backboneA100 80 GB or H100 80 GB485 ms503 to 6 h, about 4 to 12 USD
SmolVLA~450 MRTX 4090 or any 24 GB card245 ms302 to 5 h, about 1 to 3 USD
ACT~80 MRTX 4090 or any 24 GB card20 ms502 to 5 h, about 1 to 3 USD
The AY-Robots pricing page showing what a training run costs per GPU tier
Spot pricing means a range, not a number. The cheap tier covers ACT and SmolVLA; the expensive tier is where the 3 billion parameter models live.

One number to sanity-check yourself against: at 30 fps, 50 episodes of 30 seconds is about 45,000 frames, and robotics imitation learning typically converges in 5 to 10 epochs over the dataset rather than in hundreds of thousands of raw steps. If your step count implies 200 epochs, you are probably about to pay for overfitting. The pricing page and the training docs carry the platform-side detail.

The latency question, answered plainly

The honest limit of any cloud-served policy is inference latency. The five policies here sit between 20 ms and 485 ms per action step. Add a public-internet round trip to that and a working policy becomes a hesitant one. Remote inference is viable for slow pick-and-place. It is not viable for fast reactive motion, and no amount of engineering on the serving side changes that. If your task needs sub-100 ms closed-loop response, the model has to sit next to the servos.

LeRobot's own answer to part of this problem is asynchronous inference, introduced with SmolVLA: the robot keeps executing the current action chunk while the server is already computing the next one, so there are no idle frames waiting on the network. In the SmolVLA paper this finished tasks about 30 percent faster, 9.7 seconds against 13.75 seconds, and roughly doubled completions in a fixed time window.

bash
# Terminal 1: the policy server (put this on the GPU machine)
python -m lerobot.async_inference.policy_server --host=127.0.0.1 --port=8080

# Terminal 2: the robot client (this one must sit next to the arm)
python -m lerobot.async_inference.robot_client \
    --server_address=127.0.0.1:8080 \
    --robot.type=so100_follower --robot.port=/dev/ttyACM0 --robot.id=arm_a \
    --policy_type=smolvla \
    --pretrained_name_or_path=lerobot/smolvla_base \
    --policy_device=cuda \
    --actions_per_chunk=50 \
    --chunk_size_threshold=0.5 \
    --debug_visualize_queue_size=True
Async inference. actions_per_chunk defaults to 50, chunk_size_threshold to 0.7; the docs report 0.5 to 0.6 works better in practice.
A useful sizing fact

Pi0 occupies about 14 GB at inference time; SmolVLA needs roughly 2 GB. That gap is the whole edge-versus-cloud argument in one line. A 2 GB policy fits on hardware you can bolt to the robot, a 14 GB one usually does not, and once inference is remote you have bought yourself a network round trip on every chunk boundary.

So should you build on it

Yes, and then plan for the parts that are not there. LeRobot has won the interchange layer: the dataset format, the policy zoo and the plugin bus are all things you would otherwise build badly and maintain forever. It has not won the operations layer, and it is not trying to. Fleet state, data curation, checkpoint lineage, access control and GPU procurement are all still yours.

The practical pattern that works is: pin a version, keep your own thin wrapper around the four CLI commands, validate datasets before they reach a trainer, and treat every minor release as a migration with a test rather than a bump. If you would rather not run the operations layer at all, the recording walkthrough and first training run cover the managed version of the same path, and the SO-100 setup guide covers the hardware end. For the arm itself, SO-100 with LeRobot is the direct comparison of both routes on one robot.

Record LeRobot datasets without building the pipeline

The AY-Robots desktop client writes LeRobot-format datasets straight from a teleoperation session: episodes, camera streams and joint states, ready for GR00T, Pi0.5, SmolVLA or ACT. Same format the whole ecosystem reads.

Get the desktop client
Is LeRobot production ready?

It is production ready as a library and not as a platform. The dataset format, the policy implementations and the hardware abstraction are solid enough to build on, and companies including NVIDIA and Physical Intelligence ship code inside it. What is missing is everything operational: no fleet management, no dataset validation, no checkpoint lineage, no safety supervisor, and no API stability guarantee across minor versions. v0.6.0 in July 2026 removed GR00T N1.5 support, split the install into extras and renamed several flags in a single release. Pin your version and treat upgrades as migrations.

What licence is LeRobot and can I use it commercially?

LeRobot itself is Apache-2.0, both in the repository metadata and on PyPI, so commercial use is straightforward. The policies you load through it are a separate question. Each base checkpoint carries its own licence and its own terms, and some vendor backbones are gated on the Hugging Face Hub, meaning you need to accept terms on the model page before the weights download. Check the licence on each model card you intend to fine-tune, not just on the library.

Do I need a Hugging Face account to use LeRobot?

Not for local work. You can record, train and deploy entirely on disk. You need an account and a write token for three things: pushing a dataset or checkpoint to the Hub, downloading gated base checkpoints, and running training on Hugging Face Jobs. lerobot-record pushes to the Hub by default, so pass --dataset.push_to_hub=False if you want everything to stay local.

Which LeRobot version should I pin?

0.6.1, released 3 August 2026, is current as of this writing and requires Python 3.12 or newer. Pin it exactly, for example lerobot[core_scripts,training]==0.6.1. The one reason to stay on 0.5.1 is GR00T N1.5, which was removed in 0.6.0; 0.5.1 is the last release that supports it. Also note that lerobot 0.5.1 has no gradient accumulation flag for Pi0.5, so a config that sets one silently does nothing.

How many datasets are actually usable out of the public pile?

Far fewer than the raw count suggests. The Hub listed 72,437 datasets under the LeRobot tag on 24 August 2026, but when Hugging Face pretrained SmolVLA they filtered that pile down to 487 high-quality datasets, roughly 10 million frames from fewer than 30,000 episodes, using a custom filter on frame count, visual quality and task coverage plus manual review. Their own analysis lists the common defects: empty or placeholder task descriptions, camera keys such as images.laptop that mean different things in different datasets, single-frame episodes, and inconsistent action dimensions for the same robot type. Assume you will write a validator.

Can I run inference in the cloud and the robot at home?

For slow tasks, yes. For fast ones, no. Per-step latency for the policies here runs from 20 ms for ACT to 485 ms for Pi0.5, and a public-internet round trip is added on top of that at every chunk boundary. Asynchronous inference helps a lot, because the arm keeps executing the current action chunk while the next one is being computed, but it does not remove the round trip. If the task needs reactive correction rather than a smooth pre-planned trajectory, put the policy next to the servos.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started