How to discover EnvHub environments?

Is there a way to find EnvHub environments on Hugging Face that I can run with make_env?

If I understand correctly, the documentation says that they should be uploaded as a Space, but I can’t find anything EnvHub-related on the Spaces page. Related docs: Loading Environments from the Hub

The only ones I know about are the LightwheelAI (Lightwheel) environments, but those are uploaded as models (sorry if I’m butchering some of the terminology here).

1 Like

For accurate information, you might want to contact LeRobot Discord.


Yes. But there is no single “EnvHub directory” page today. Discovery is mostly convention plus Hub search filters, and a lot of EnvHub repos are not Spaces even though the docs show creating them as Spaces.

1) What “EnvHub environments” are on the Hub

EnvHub is just “load Python from a Hub git repo and call make_env”. The LeRobot docs define the minimal contract:

  • The repo must contain an env.py (or you pass a custom file path).
  • That file must expose a make_env(...) entry point that returns a Gymnasium env or vector env (or a dict for multitask suites). (Hugging Face)
  • Loading runs third-party Python, so you must opt in with trust_remote_code=True and you should pin a commit for safety and reproducibility. (Hugging Face)

Crucially, the URL syntax supports:

  • user/repo
  • user/repo@revision
  • user/repo:path
  • user/repo@rev:path (Hugging Face)

That last form is why Lightwheel’s EnvHub looks like “a model repo with files inside it” rather than a Space.

2) Why you don’t see “EnvHub” on the Spaces page

The EnvHub doc’s “upload” section literally uses --type space when creating the repo. (Hugging Face)

But the same doc’s quick start loads lerobot/cartpole-env. (Hugging Face)
And lerobot/cartpole-env is hosted as a Model repo (it appears under Models, has “No model card”, and is not a deployed Space). (Hugging Face)

Likewise, LightwheelAI/leisaac_env is also a Model repo in Hub terms. (Hugging Face)

So in practice:

  • EnvHub repos can be Models or Spaces. The “repo type” is mostly a Hub UI categorization.
  • Many EnvHub repos are uploaded as Models (often with no model card), so browsing only Spaces will miss them.

3) Practical discovery methods that work today

A) Start from known publishers (highest signal)

This is the fastest way to find “real” EnvHub repos.

  • The lerobot org page lists models, and you can spot EnvHub-ish repos there (examples include lerobot/dummy-hub-env, lerobot/unitree-g1-mujoco, and lerobot/cartpole-env). (Hugging Face)
  • For Lightwheel LeIsaac, the LeRobot docs show EnvHub usage via LightwheelAI/leisaac_env:envs/<task>.py and provide a script to list available tasks. (Hugging Face)
  • For NVIDIA IsaacLab Arena integration, the docs show using an EnvHub repo path (--env.hub_path=nvidia/isaaclab-arena-envs) and describe cloning and modifying that EnvHub repo. (Hugging Face)

Concrete examples you can open right now:

B) Use tags. “LeRobot” + “environment” is the closest thing to a marker

Some community EnvHub repos are tagged with things like LeRobot and environment.

Example: jadechoghari/cartpole-env shows tags Robotics, LeRobot, environment. (Hugging Face)

So, on the Hub:

  • Go to Models, filter for tag(s) like LeRobot and environment.
  • Search terms like -env, env, EnvHub, LeRobot environment.

This is not universal (many official env repos have empty/absent cards), but when present it is the cleanest discovery signal.

C) Use Hub full-text search, but understand its limits

Hugging Face “full-text search” indexes:

  • model cards and dataset cards
  • Spaces app.py files
    It does not claim to index arbitrary files in model repos (like env.py). (Hugging Face)

Implication:

  • Searching for make_env( might work only if the repo’s README/model card mentions it.
  • A Space-based EnvHub might be easier to find if it has an app.py containing searchable text. (Hugging Face)

Useful entry points:

D) Programmatic discovery with huggingface_hub (best if you want something repeatable)

Hugging Face explicitly supports listing/searching models and spaces via HfApi using fields like search, author, and filter. (Hugging Face)

You can use this to:

  1. query for candidates (models + spaces)
  2. optionally validate that a repo contains env.py (or some known path)

Example (Python):

# deps: pip install -U huggingface_hub
from huggingface_hub import HfApi

api = HfApi()

# 1) Find likely candidates (Models)
candidates = list(api.list_models(search="LeRobot environment", limit=50))

# 2) Also scan Spaces (some EnvHub repos may be Spaces)
spaces = list(api.list_spaces(search="LeRobot env", limit=50))

print("Top model candidates:")
for m in candidates[:10]:
    print(m.id)

print("\nTop space candidates:")
for s in spaces[:10]:
    print(s.id)

This is directly aligned with Hugging Face’s “Search the Hub” guide (same API, same fields). (Hugging Face)

CLI equivalents also exist (hf models ls, hf spaces ls) with --search, --sort, --limit. (Hugging Face)

E) Validate a repo quickly before you run it

Because many EnvHub repos look like “empty model cards”, you usually need to click Files and confirm:

  • there is an env.py (or you know the correct :path)
  • dependencies in requirements.txt (if any)
  • recent commits and who owns the repo

This matches LeRobot’s own security guidance: inspect code, pin commits, and only use trust_remote_code=True for trusted sources. (Hugging Face)

4) Why LightwheelAI “EnvHub as models” works

LeRobot’s EnvHub docs explicitly support user/repo:path and user/repo@rev:path. (Hugging Face)
The LeIsaac integration docs use exactly that form:

make_env("LightwheelAI/leisaac_env:envs/so101_pick_orange.py", ...) (Hugging Face)

So it is expected that one Hub repo can contain multiple environment entrypoints under envs/, and you select them by file path.

5) Similar questions and ongoing “rough edges” (what people complain about)

“Where is the directory?”

There is an active forum thread asking essentially your question (“How to discover EnvHub environments?”). (Hugging Face Forums)

“The repo structure and metadata aren’t standardized enough”

A LeRobot GitHub issue proposes modernizing the EnvHub environment repository design for maintainability, scalability, and automated validation. That is basically the “we need better structure and discoverability” complaint, formalized. (GitHub)

“EnvHub exists, but it’s still new”

LeRobot releases explicitly call out adding EnvHub support (“allow loading envs from the hub”). (GitHub)
Net: conventions and tooling around discovery are still stabilizing.

6) Practical “do this now” checklist

  1. Check publishers first
  • lerobot org Models list. (Hugging Face)
  • LeIsaac EnvHub docs for Lightwheel tasks and the list_envs.py helper. (Hugging Face)
  • IsaacLab Arena docs for NVIDIA env hub path. (Hugging Face)
  1. Search Models, not just Spaces
  • Many official env repos are model repos (lerobot/cartpole-env), despite the doc’s “create a Space” example. (Hugging Face)
  1. Exploit tags when they exist
  • Filter for LeRobot + environment (example repo shows those tags). (Hugging Face)
  1. Use programmatic search if you want a reproducible list
  • HfApi.list_models(search=...), HfApi.list_spaces(search=...). (Hugging Face)
  1. Always pin and inspect before running

Curated references (high-signal)

Summary

  • EnvHub repos are just Hub git repos with an env.py (or a specified :path) exposing make_env. (Hugging Face)
  • Many EnvHub repos are uploaded as Models, not Spaces. lerobot/cartpole-env is the canonical example. (Hugging Face)
  • Best discovery today: browse known orgs, use tags (LeRobot, environment) when present, and use huggingface_hub search programmatically. (Hugging Face)
  • Full-text search will miss repos with empty cards because it does not claim to index env.py in model repos. (Hugging Face)
  • Treat trust_remote_code=True as running arbitrary code. Inspect and pin commits. (Hugging Face)