import { useMemo, useState } from 'react';
import { Link as RouterLink } from 'react-router-dom';
import {
Box,
Container,
Typography,
Button,
Grid,
Accordion,
AccordionSummary,
AccordionDetails,
Stack,
Link,
Chip,
Tabs,
Tab,
Alert,
Divider,
} from '@mui/material';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import OpenInNewIcon from '@mui/icons-material/OpenInNew';
import ContentCopyIcon from '@mui/icons-material/ContentCopy';
import CheckCircleIcon from '@mui/icons-material/CheckCircle';
import hljs from 'highlight.js/lib/common';
import 'highlight.js/styles/github-dark.css';
import Layout from '../components/Layout';
import PageHero from '../components/PageHero';
// Code Block component with copy functionality
function CodeBlock({ code, language = 'bash', title }) {
const [copied, setCopied] = useState(false);
const highlighted = useMemo(() => {
if (language && hljs.getLanguage(language)) {
return hljs.highlight(code, { language, ignoreIllegals: true }).value;
}
return hljs.highlightAuto(code).value;
}, [code, language]);
const handleCopy = async () => {
await navigator.clipboard.writeText(code);
setCopied(true);
setTimeout(() => setCopied(false), 2000);
};
return (
{title || language}
: }
sx={{
color: copied ? '#22c55e' : 'rgba(255,255,255,0.6)',
fontSize: 12,
minWidth: 'auto',
}}
>
{copied ? 'Copied!' : 'Copy'}
);
}
// Tab Panel
function TabPanel({ children, value, index }) {
return (
{value === index && children}
);
}
// Section component
function Section({ id, step, title, children }) {
return (
{step && (
{step}
)}
{title}
{children}
);
}
export default function Build() {
const [osTab, setOsTab] = useState(0);
return (
}
sx={{
borderColor: 'rgba(255,255,255,0.3)',
color: 'white',
'&:hover': {
borderColor: 'white',
backgroundColor: 'rgba(255,255,255,0.1)',
},
}}
>
GitHub
{/* Main Content */}
{/* Prerequisites notice */}
Before you start
Make sure you have assembled your Reachy Mini and connected it.
If not, follow the{' '}
Getting Started guide
{' '}
first.
{/* Section: Install SDK */}
The Reachy Mini SDK is a Python package that lets you control the robot programmatically.
It includes both the daemon (background service) and the control API.
{/* Prerequisites */}
Prerequisites
Python 3.10 - 3.13
We recommend using a virtual environment.
Git LFS
Required for large model files.
Reachy Mini connected
USB (Lite) or Wi-Fi (Wireless).
Install Git LFS
setOsTab(v)} sx={{ mb: 2 }}>
Download from{' '}
git-lfs.com
{/* Installation */}
Install Reachy Mini
uv users: Run uv run reachy-mini-daemon directly without manual setup.
{/* Linux udev */}
}>
🐧 Linux: Set up udev rules (required for USB connection)
{/* Section: First Script */}
Before running any script, you need to start the daemon. The daemon handles communication
with the robot's motors and sensors.
1. Start the Daemon
Open a terminal and run:
For simulation (no robot needed):
2. Run Your First Script
In another terminal, create hello.py:
{/* Section: Control the Robot */}
Use goto_target for smooth movements and set_target for immediate control.
Move the Head
Control Antennas & Body
Motor Control Modes
enable_motors()
Powers motors ON. Robot holds position firmly.
disable_motors()
Powers motors OFF. Robot is completely limp.
make_motors_compliant()
Motors ON but soft. Great for teaching-by-demonstration.
{/* Section: Access Sensors */}
Reachy Mini has a camera, microphones, speaker, and accelerometer (wireless version).
📷 Camera
🎤 Microphone
🔊 Speaker
📐 Accelerometer (Wireless only)
{/* Section: Create an App */}
Package your code as a Reachy Mini app that can be installed from the dashboard.
Generate App Template
Use the built-in generator to create a complete project structure:
This creates: pyproject.toml, README.md, and the main app file.
App Structure
{/* Section: Publish to HF */}
Share your app with the community on Hugging Face Spaces. Apps published there
can be installed directly from the Reachy Mini dashboard.
1. Create a Space
Go to Hugging Face and create a new Space:
}
>
Create New Space
Choose "Gradio" or "Static" as the SDK.
2. Add the reachy_mini tag
In your Space's README.md, add this tag:
That's it! Your app will now appear in the Reachy Mini dashboard's app store
and on the{' '}
Apps page
.
{/* REST API Section */}
Prefer HTTP? The daemon exposes a REST API for language-agnostic control.
Get Robot State
API Documentation
Full OpenAPI docs available when daemon is running:
}
>
Open API Docs
{/* Next Steps */}
Ready to explore more?
Check out the full documentation and community apps for inspiration.
}
>
Full SDK Documentation
);
}