Deployment
This page is for people deploying the standalone application or maintaining its hosting.
Production (Cloudflare Workers)
Live site: https://lerobot.studio
Connect ioai-tech/lerobot-studio to Cloudflare Workers Builds so merges to main deploy without storing a Cloudflare API token in GitHub. Restrict production deploys to protected main; do not give fork PR workflows Cloudflare credentials.
Config: wrangler.jsonc
- Worker:
lerobot-studio - Assets:
dist - SPA fallback:
not_found_handling = "single-page-application" - Domain:
lerobot.studio
Recommended Workers Builds settings:
| Setting | Value |
|---|---|
| Build command | npm ci && npm run build |
| Deploy command | npx wrangler deploy (or Cloudflare default) |
| Root | repository root |
SITE_URL / VITE_SITE_URL | https://lerobot.studio |
Local dry-run:
SITE_URL=https://lerobot.studio npm run build
npx wrangler deployDocker
docker build -t lerobot-studio .
docker run --rm -p 8080:8080 lerobot-studioOr use the root docker-compose.yml (maps host port 8080):
docker compose up --buildOptional build args:
BASE_PATH— subdirectory deploy path (e.g./lerobot/)SITE_URL— canonical site URL for SEO assets (production default:https://lerobot.studio)VITE_SAMPLE_DATASETS_MANIFEST_URL— full URL tosample-datasets.manifest.json(when unset, the welcome page hides the samples list)
Static hosting
SITE_URL=https://lerobot.studio npm run buildServe dist with any static file server. Configure SPA fallback to index.html.
Documentation site (GitHub Pages)
The documentation is a separate VitePress build:
npm run docs:build.github/workflows/docs-pages.yml builds and deploys docs/.vitepress/dist after documentation changes reach main. Its default DOCS_BASE is /<repository-name>/, so it works at the GitHub project Pages URL without assuming that a custom documentation domain exists.
The repository is configured to deploy its documentation through GitHub Actions. When maintaining that deployment:
- Keep Settings → Pages set to GitHub Actions.
- Verify
https://ioai-tech.github.io/lerobot-studio/after changes to the workflow or domain settings. - Add the workflow’s
buildanddeployjobs to the protected-branch policy if documentation deployment is required for merges. - If you add a custom domain, configure it in GitHub Pages, add the required DNS records, enable HTTPS, and verify the domain before publishing the URL.
- For a root custom domain such as
docs.lerobot.studio, change the workflowDOCS_BASEto/. Do not add aCNAMEfile or advertise that hostname until GitHub Pages and DNS both confirm it.
The workflow requires pages: write and id-token: write only in the deploy job. Pull requests build the same site through the read-only CI job but do not deploy it.
Sample datasets and CORS
Sample dataset archives are not shipped in this repository. Production or self-hosted builds may inject a remote manifest with:
VITE_SAMPLE_DATASETS_MANIFEST_URL— full URL to the manifest JSON.
Relative archiveFile / coverImageFile paths resolve against the manifest directory, or against optional manifest.baseUrl when present. When the env var is unset, the welcome page hides the samples list. Generate a manifest on a deployment machine that holds authorized assets:
node scripts/generate-sample-manifest.mjs \
--dir ./storage \
--baseUrl https://examples.example.com/samples/ \
--out ./temp/sample-datasets.manifest.jsonRemote archives must allow cross-origin GET. Scalable access to large archives also requires byte ranges. A typical object response includes:
Access-Control-Allow-Origin: https://your-viewer.example(or*for a genuinely public, credential-free object);Accept-Ranges: bytes;Content-Length;- a
206 Partial Contentresponse with a validContent-Rangewhen the client sendsRange: bytes=...; and Access-Control-Expose-Headers: Accept-Ranges, Content-Length, Content-Rangewhen those headers must be read by browser code.
If a preflight occurs, allow GET, OPTIONS, and the Range request header. Do not use wildcard origins with credentialed requests. A server that ignores Range may trigger a full download and is not a supported large-dataset setup. See Compatibility for the complete network boundary.
Privacy
The npm library and open-source web shell do not include usage analytics. Deployers are responsible for documenting any logs, analytics, proxies, sample endpoints, authentication, and retention policies they add. See Privacy.