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:

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()