DEVELOPERS

JavaScript, all the way down

Firmware and apps share one JavaScript runtime. You need no cross-compilation toolchain, and no embedded background.

Tech stack

Closer to front-end than you expect

The runtime follows the ECMA-419 standard and the UI uses a declarative component model — if you have written front-end code, you can start today.

JavaScriptTypeScriptECMA-419 runtimeDeclarative UIWebAssembly simulatorBLE provisioningSerial-bus servosModular firmware

Modular firmware

The firmware is split by responsibility: UI, input, light, camera, motion, audio, connectivity, conversation. Each part can be replaced or trimmed independently.

Declarative UI

Interfaces are described declaratively and share one rendering layer with expressions — swapping a face needs no renderer changes.

One codebase, two targets

Simulator and hardware run the same firmware. WebAssembly reproduces device behaviour in the browser, so you don't flash a board to develop.

Quick start

Three steps to light up a screen

From nothing to your first custom expression is usually under ten minutes.

  1. Flash the firmware

    Open the installer in Chrome or Edge, connect DeskBot over USB and click install. Nothing is installed on your computer.

  2. Run the simulator

    Open the simulator in your browser — it boots the robot from the same firmware compiled to WebAssembly. Get the behaviour right here first, then push to hardware.

  3. Write a MOD

    Create a directory, add a manifest and an entry script, and call the device capability APIs. It can be a new face, or full control of the servos.

// A minimal MOD: show a surprised face when picked up
import { Motion, Display, Face } from "aieer/device";

const surprised = Face.from({
  eyes:  [{ x: 6, y: 4, w: 4, h: 4 }, { x: 14, y: 4, w: 4, h: 4 }],
  mouth: [{ x: 11, y: 12, w: 2, h: 2 }]
});

Motion.on("lifted", async () => {
  await Display.show(surprised, { duration: 1200 });
  await Motion.tilt(0);
});
Capability APIs

Every device capability is one call away

This is an overview of the most-used interfaces; the reference shipped with the firmware is authoritative.

Display.show(face, opts)Switch expression, with duration and transition animation
Display.text(str, opts)Overlay text or status on top of the expression layer
Motion.pan(deg) / Motion.tilt(deg)Set pan and tilt angle with easing and rate limiting
Motion.on(event, cb)Subscribe to motion events (lifted, placed, tilted, pushed)
Audio.listen(opts)Start recording or hook up wake-word detection
Audio.speak(text, opts)Streaming speech synthesis with interruption support
Vision.track(kind, cb)Subscribe to face or hand tracking results
Light.set(rgb, opts)Set indicator colour, brightness and breathing rhythm
Storage.get/set(key, val)On-device persistence for settings and session preferences
Net.request(opts)Make network requests to your own services
Hardware & openness

Enclosure, drawings and contribution paths are public

We want you to be able to change the hardware as well as the software.

3D enclosure models

Enclosure models are published — modify, print, or use them to design accessories and stands.

Drawings & schematics

Structural assembly drawings and schematics are public, for repair, teardown and secondary development.

Contribution guide

Feature requests, bug reports and improvements are welcome; community MODs can also apply for a featured slot in the gallery.

Need an SDK or technical support?

Custom firmware, capability access and support can be arranged directly through our business channel.