Spaces:
Running
Running
| title: LeRobot Arena Frontend | |
| emoji: π€ | |
| colorFrom: blue | |
| colorTo: purple | |
| sdk: docker | |
| app_port: 3000 | |
| pinned: true | |
| fullWidth: true | |
| license: mit | |
| short_description: A web-based robotics control and simulation platform | |
| tags: | |
| - robotics | |
| - control | |
| - simulation | |
| - svelte | |
| - static | |
| - frontend | |
| # π€ LeRobot Arena | |
| A web-based robotics control and simulation platform that bridges digital twins and physical robots. Built with Svelte for the frontend and FastAPI for the backend. | |
| ## π Simple Deployment Options | |
| Here are the easiest ways to deploy this Svelte frontend: | |
| ### π Option 1: Hugging Face Spaces (Static) - RECOMMENDED β¨ | |
| **Automatic deployment** (easiest): | |
| 1. **Fork this repository** to your GitHub account | |
| 2. **Create a new Space** on [Hugging Face Spaces](https://huggingface.co/spaces) | |
| 3. **Connect your GitHub repo** - it will auto-detect the static SDK | |
| 4. **Push to main branch** - auto-builds and deploys! | |
| The frontmatter is already configured with: | |
| ```yaml | |
| sdk: static | |
| app_build_command: bun install && bun run build | |
| app_file: build/index.html | |
| ``` | |
| **Manual upload**: | |
| 1. Run `bun install && bun run build` locally | |
| 2. Create a Space with "Static HTML" SDK | |
| 3. Upload all files from `build/` folder | |
| ### π Option 2: Vercel - One-Click Deploy | |
| [](https://vercel.com/new) | |
| Settings: Build command `bun run build`, Output directory `build` | |
| ### π Option 3: Netlify - Drag & Drop | |
| 1. Build locally: `bun install && bun run build` | |
| 2. Drag `build/` folder to [Netlify](https://netlify.com) | |
| ### π Option 4: GitHub Pages | |
| Add this workflow file (`.github/workflows/deploy.yml`): | |
| ```yaml | |
| name: Deploy to GitHub Pages | |
| on: | |
| push: | |
| branches: [ main ] | |
| jobs: | |
| deploy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: oven-sh/setup-bun@v1 | |
| - run: bun install --frozen-lockfile | |
| - run: bun run build | |
| - uses: peaceiris/actions-gh-pages@v3 | |
| with: | |
| github_token: ${{ secrets.GITHUB_TOKEN }} | |
| publish_dir: ./build | |
| ``` | |
| ### π³ Option 5: Docker (Optional) | |
| For local development or custom hosting: | |
| ```bash | |
| docker build -t lerobot-arena-frontend . | |
| docker run -p 3000:3000 lerobot-arena-frontend | |
| ``` | |
| The Docker setup uses Bun's simple static server - much simpler than the complex server.js approach! | |
| ## π οΈ Development Setup | |
| For local development with hot-reload capabilities: | |
| ### Frontend Development | |
| ```bash | |
| # Install dependencies | |
| bun install | |
| # Start the development server | |
| bun run dev | |
| # Or open in browser automatically | |
| bun run dev -- --open | |
| ``` | |
| ### Backend Development | |
| ```bash | |
| # Navigate to Python backend | |
| cd src-python | |
| # Install Python dependencies (using uv) | |
| uv sync | |
| # Or using pip | |
| pip install -e . | |
| # Start the backend server | |
| python start_server.py | |
| ``` | |
| ### Building Standalone Executable | |
| The backend can be packaged as a standalone executable using box-packager: | |
| ```bash | |
| # Navigate to Python backend | |
| cd src-python | |
| # Install box-packager (if not already installed) | |
| uv pip install box-packager | |
| # Package the application | |
| box package | |
| # The executable will be in target/release/lerobot-arena-server | |
| ./target/release/lerobot-arena-server | |
| ``` | |
| Note: Requires [Rust/Cargo](https://rustup.rs/) to be installed for box-packager to work. | |
| ## π Project Structure | |
| ``` | |
| lerobot-arena/ | |
| βββ src/ # Svelte frontend source | |
| β βββ lib/ # Reusable components and utilities | |
| β βββ routes/ # SvelteKit routes | |
| β βββ app.html # App template | |
| βββ src-python/ # Python backend | |
| β βββ src/ # Python source code | |
| β βββ start_server.py # Server entry point | |
| β βββ target/ # Box-packager build output (excluded from git) | |
| β βββ pyproject.toml # Python dependencies | |
| βββ static/ # Static assets | |
| βββ Dockerfile # Docker configuration | |
| βββ docker-compose.yml # Docker Compose setup | |
| βββ package.json # Node.js dependencies | |
| ``` | |
| ## π³ Docker Information | |
| The Docker setup includes: | |
| - **Multi-stage build**: Optimized for production using Bun and uv | |
| - **Automatic startup**: Both services start together | |
| - **Port mapping**: Backend on 8080, Frontend on 3000 (HF Spaces compatible) | |
| - **Static file serving**: Compiled Svelte app served efficiently | |
| - **User permissions**: Properly configured for Hugging Face Spaces | |
| - **Standalone executable**: Backend packaged with box-packager for faster startup | |
| For detailed Docker documentation, see [DOCKER_README.md](./DOCKER_README.md). | |
| ## π§ Building for Production | |
| ### Frontend Only | |
| ```bash | |
| bun run build | |
| ``` | |
| ### Backend Standalone Executable | |
| ```bash | |
| cd src-python | |
| box package | |
| ``` | |
| ### Complete Docker Build | |
| ```bash | |
| docker-compose up --build | |
| ``` | |
| ## π What's Included | |
| - **Real-time Robot Control**: WebSocket-based communication | |
| - **3D Visualization**: Three.js integration for robot visualization | |
| - **URDF Support**: Load and display robot models | |
| - **Multi-robot Management**: Control multiple robots simultaneously | |
| - **WebSocket API**: Real-time bidirectional communication | |
| - **Standalone Distribution**: Self-contained executable with box-packager | |
| ## π¨ Troubleshooting | |
| ### Port Conflicts | |
| If ports 8080 or 3000 are already in use: | |
| ```bash | |
| # Check what's using the ports | |
| lsof -i :8080 | |
| lsof -i :3000 | |
| # Use different ports | |
| docker run -p 8081:8080 -p 7861:3000 lerobot-arena | |
| ``` | |
| ### Container Issues | |
| ```bash | |
| # View logs | |
| docker-compose logs lerobot-arena | |
| # Rebuild without cache | |
| docker-compose build --no-cache | |
| docker-compose up | |
| ``` | |
| ### Development Issues | |
| ```bash | |
| # Clear node modules and reinstall | |
| rm -rf node_modules | |
| bun install | |
| # Clear Svelte kit cache | |
| rm -rf .svelte-kit | |
| bun run dev | |
| ``` | |
| ### Box-packager Issues | |
| ```bash | |
| # Clean build artifacts | |
| cd src-python | |
| box clean | |
| # Rebuild executable | |
| box package | |
| # Install cargo if missing | |
| curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh | |
| ``` | |
| ## π Hugging Face Spaces Deployment | |
| This project is configured for **Static HTML** deployment on Hugging Face Spaces (much simpler than Docker!): | |
| **Manual Upload (Easiest):** | |
| 1. Run `bun install && bun run build` locally | |
| 2. Create a new Space with "Static HTML" SDK | |
| 3. Upload all files from `build/` folder | |
| 4. Your app is live! | |
| **GitHub Integration:** | |
| 1. Fork this repository | |
| 2. Create a Space and connect your GitHub repo | |
| 3. The Static HTML SDK will be auto-detected from the README frontmatter | |
| 4. Push changes to auto-deploy | |
| No Docker, no complex setup - just static files! π | |
| ## π Additional Documentation | |
| - [Docker Setup Guide](./DOCKER_README.md) - Detailed Docker instructions | |
| - [Robot Architecture](./ROBOT_ARCHITECTURE.md) - System architecture overview | |
| - [Robot Instancing Guide](./ROBOT_INSTANCING_README.md) - Multi-robot setup | |
| ## π€ Contributing | |
| 1. Fork the repository | |
| 2. Create a feature branch | |
| 3. Make your changes | |
| 4. Test with Docker: `docker-compose up --build` | |
| 5. Submit a pull request | |
| ## π License | |
| This project is licensed under the MIT License. | |
| --- | |
| **Built with β€οΈ for the robotics community** π€ | |