Cyberwave is in Private Beta.
Request early access to get access to the Cyberwave dashboard.
cyberwave) lets you control robots, manage digital twins, and stream sensor data with a few lines of Python. This guide takes you from an empty terminal to a moving robot in simulation, no hardware required.
Already comfortable with the basics? The full Python SDK reference covers joint control, video streaming, workflows, datasets, ML models, and more.
Prerequisites
- Python 3.10 or higher installed on your machine
- A Cyberwave account (signup now if you don’t have one)
- A Cyberwave API key (we’ll generate one in Step 2)
Step 1: Install the SDK
Installcyberwave from PyPI:
Step 2: Get your API key
1
Open your profile
Go to the Cyberwave dashboard and open the API Tokens section of your Profile page.
2
Create a new key
Click Create Token, give it a name (e.g. “Quickstart”), and copy the key. You won’t be able to see it again, so store it somewhere safe.
Step 3: Authenticate
The SDK reads your API key from theCYBERWAVE_API_KEY environment variable. This is the recommended approach — it keeps secrets out of your code.
Step 4: Control your first robot
The snippet below creates a digital twin of an SO101 robot arm, runs it in simulation, and moves one of its joints. Nothing here touches physical hardware, so it’s safe to run as-is.If you see a table of joint states printed to your terminal, it worked. Open the twin’s environment in the dashboard to watch the arm move in the 3D viewport.
What just happened
cw = Cyberwave()
cw = Cyberwave()
Creates the SDK client and authenticates using your API key. It establishes connections to both the REST API (for twins, catalog, workflows) and the MQTT API (for real-time control).
cw.affect("simulation")
cw.affect("simulation")
Tells the SDK that your commands should drive the digital twin in simulation rather than a physical robot. Switch to
cw.affect("live") later to run the exact same code against real hardware.cw.twin("the-robot-studio/so101")
cw.twin("the-robot-studio/so101")
Resolves the
vendor/model asset from the catalog and returns a twin. If you don’t have an environment yet, the SDK auto-creates a “Quickstart Environment” and places the twin there.robot.joints.set("shoulder_pan", 45, degrees=True)
robot.joints.set("shoulder_pan", 45, degrees=True)
Sends a real-time joint command. Positions default to radians — pass
degrees=True to use degrees instead.Try a few more things
Once the quickstart runs, swap in these snippets to explore other capabilities:- Position the twin
- Capture a frame
- Search the catalog
- Drive a different robot
Go live on real hardware
The same code that drives the simulation drives a physical robot — you only change the affect mode:Troubleshooting
Authentication error / no API key found
Authentication error / no API key found
Make sure
CYBERWAVE_API_KEY is exported in the same terminal session where you run your script. Verify with echo $CYBERWAVE_API_KEY. If you opened a new terminal, re-export it or add it to your shell profile / a .env file.Asset not found
Asset not found
Confirm the
vendor/model identifier exists in the catalog. You can also search programmatically with cw.assets.search("so101").Python version errors
Python version errors
The SDK requires Python 3.10+. Check with
python --version. Consider using a virtual environment: python -m venv .venv && source .venv/bin/activate.Next steps
Full Python SDK reference
Joint control, video streaming, workflows, alerts, datasets, and ML models
Develop in simulation
Control a robot from the browser with no code
Connect hardware
Pair a real robot with your digital twin
Browse the catalog
Explore 90+ supported robots, cameras, and sensors