RCAN Protocol
Robot Communication & Addressing Network
An open, federated protocol for addressing, discovering, and authenticating robotic agents across local networks and the internet.
Why RCAN?
The internet has DNS and ICANN. IoT has Matter. Robotics has nothing.
As millions of robots are manufactured and deployed—from warehouse arms to delivery bots to humanoids—there is no standard way to:
- Address a robot uniquely and globally
- Authenticate who is allowed to control it
- Coordinate fleets and swarms across manufacturers
- Ensure safety when networks fail or control transfers
RCAN is an open protocol specification designed to solve these problems with a federated, offline-resilient architecture.
Key Features
🔗 Robot URI (RURI)
Globally unique identifiers for every robot, similar to URLs for websites.
rcan://continuon.cloud/continuon/companion-v1/d3a4b5c6 🔐 Role-Based Access
Five-level hierarchy: Guest → User → Leasee → Owner → Creator. Each role has explicit permissions.
📡 Local Discovery
mDNS/DNS-SD discovery via _rcan._tcp.local. Works offline when cloud is unreachable.
🛡️ Safety Invariants
Local safety always wins. Network loss triggers safe-stop. All commands are audited.
🌐 Federated Registries
Like email servers, anyone can run an RCAN registry. No single point of control.
🤖 Fleet Coordination
Choreographed multi-robot commands, swarm discovery, and conflict resolution.
Quick Example
# Connect to a robot via RCAN
from rcan import RURI, RCANClient, Role
# Parse the 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)
token = await client.claim(Role.USER, credential="my-key")
# Send a command
result = await client.command("/arm", "move", {x: 0.5, y: 0.2})
# Clean up
await client.release() Documentation
- Full Specification — Complete protocol definition with schemas
- Conformance Tests — Test suite for implementations
- Reference Implementations — Python, TypeScript, Dart code
- Blog: We Need an ICANN for Robotics — The rationale behind RCAN