Developers

Hai Robo Plugins

Build something for a small robot that sits on a desk. A plugin is a web page — HTML, CSS and JavaScript — that runs inside Hai Robo and can talk through it, move its eyes, colour its lights, turn its head, and read where your face is.

No native code, no build step, no SDK to install. If you can write a web page, you can write a plugin.

await hairobo.voice.speak('Good morning');
await hairobo.led.set('#FF8A18');
await hairobo.eyes.look(0, 0.3);

Start here

  1. Open the simulator in a browser. It runs your plugin with the robot APIs stubbed out, so you can build the whole thing before you ever touch a device.
  2. Copy starter/ and edit index.html, plugin.js and manifest.json.
  3. Upload the folder. We host it — there is nothing for you to deploy.
  4. Open Hai Robo signed in with the same account. Your draft is in Settings → Plugins → Gallery, marked DRAFT and visible only to you. Tap Try it to run it on your actual robot.
  5. Re-upload as often as you like — a draft is mutable and costs no version number. When it's right, hit submit for review.

What a plugin is made of

my-plugin/
  manifest.json    who you are, what you need         → docs/manifest.md
  index.html       your entry point
  plugin.js        your code

Every file you want installed must be listed in the manifest's files array. There is no zip and no bundler — the app fetches exactly what you list.

Documentation

manifest.md Every field, which are required
api.md The complete hairobo.* surface
permissions.md What you can ask for, and what the user sees
limits.md The sandbox. Read this before you build
publishing.md Getting into the gallery

Examples

starter/ The smallest thing that runs
hello/ Speaking and lights
breathe/ A guided breathing session — timing, LEDs, voice
follow-me/ Camera, events and head movement. The most complete example

Two things that catch people out

Your plugin has no internet. The CSP blocks every outbound request. No fetch, no CDN, no analytics, no fonts. Everything ships in your folder. This is deliberate — see limits.md.

Permissions you ask for may be declined. Every robot call returns false rather than throwing when the host declines it, and there may be no dock connected at all. Write for that: a plugin that only works with a robot attached is a plugin most people see broken.

Next → manifest.json
Preorder Deskmate dock

Reserve your dock.

Drop your details and we'll email you the moment it ships, with early-bird pricing.