The complete IoT
stack you run yourself

CLI, device runtime, dashboard, and API — one open-source server, one Docker image, running on your own hardware.

CLI

Full workflow from the terminal

One tool for the entire lifecycle: scaffold, develop, test, deploy, and flash.

devicesdk initScaffold a new project with TypeScript config
devicesdk devLocal simulator with hot reload
devicesdk buildBundle your device script with esbuild
devicesdk deployPush to your own server in one command
devicesdk flashWrite firmware to a connected Pico
Terminal
$ devicesdk login --host http://192.168.1.50:8080
 Authenticated with your server

$ devicesdk init sensor-network
 Created devicesdk.ts
 Created src/devices/device.ts

$ devicesdk deploy
 Built device.ts (42ms)
 Deployed to 3 devices

$ devicesdk flash
 Found RPI-RP2 at /Volumes/RPI-RP2
 Firmware flashed successfully
src/devices/thermostat.ts
import { DeviceEntrypoint } from "@devicesdk/core";

export class Thermostat extends DeviceEntrypoint {
  // Called when device connects via WebSocket
  async onDeviceConnect() {
    // Monitor button on GPIO 14
    await this.env.DEVICE.configureGpioInputMonitoring(14, true);
  }

  // Called for every device message
  async onMessage(message) {
    if (message.type === "gpio_state_changed") {
      const pin = message.payload.pin;
      await this.env.DEVICE.kv.put("lastPin", pin);

      if (message.payload.state === "low") {
        await this.env.DEVICE.setGpioState(15, "high");
      }
    }
  }
}
Runtime

DeviceEntrypoint API

Extend DeviceEntrypoint and implement two lifecycle hooks. Your code runs in-process on your own server — the device connects to it over WebSocket on your LAN.

onDeviceConnect()

Configure GPIO, I2C, ADC monitoring when the device first connects

onMessage(message)

Handle sensor readings, button presses, and all device events

this.env.DEVICE.kv

Type-safe key-value storage that persists across reboots

this.env.DEVICE.display

Fluent API for SSD1306 OLED drawing commands

this.env.DEVICES

Call methods on other devices in your project with full type safety

Dashboard

Manage your fleet

Web dashboard served by your own server at http://<server>:8080

Project management

Organize devices into projects with separate settings

Device inventory

See all devices, connection status, and last seen time

Script deployment

Upload and deploy scripts from the browser or API

Version history

Full deployment log with one-click rollback

API tokens

Create and revoke tokens for CLI and programmatic access

Local accounts

Email/password sign-in; the first account becomes admin

Hardware

Supported devices

DeviceChipWiFiStatus
Raspberry Pi Pico WRP20402.4 GHzSupported
Raspberry Pi Pico 2 WRP23502.4 GHzSupported
ESP32ESP322.4 GHzSupported

Ready to build?

Bring up the server and deploy your first script in minutes.