Robot Communication & Addressing Network
An open, federated protocol for addressing, discovering, and authenticating robotic agents across local networks and the internet.
RCAN provides:
- Robot URI (RURI): Globally unique identifiers for robots
- Role-Based Access Control: 5-level hierarchy (Guest → Creator)
- mDNS Discovery: Works offline via
_rcan._tcp.local - Federation: Anyone can run a registry (like email servers)
- Safety Invariants: Local safety always wins, graceful degradation
from rcan import RURI, RCANClient, Role
# Parse a robot's address
ruri = RURI.parse("rcan://continuon.cloud/continuon/companion-v1/d3a4b5c6")
# Connect and authenticate
client = RCANClient(client_id="my-app")
await client.connect(ruri)
await client.claim(Role.USER, credential="my-key")
# Send a command
await client.command("/arm", "move", {"x": 0.5, "y": 0.2})
# Clean up
await client.release()This is an Astro static site.
# Install dependencies
npm install
# Start dev server
npm run dev
# Build for production
npm run build
# Preview production build
npm run previewDeploy to any static hosting:
- GitHub Pages: Push to
gh-pagesbranch - Netlify: Connect repo, build command
npm run build, publishdist/ - Vercel: Connect repo, framework Astro
For custom domain (rcan.dev):
- Add CNAME file to
public/ - Configure DNS A/CNAME records
This specification is licensed under CC BY 4.0.
Reference implementations are licensed under MIT.