Message it, query it, script it — without building IoT infrastructure.
iot.actor is an open-source, actor-based backend for IoT. Every sensor or device becomes a live digital-twin actor with state, a mailbox, an event log and behavior — hosted for you, or self-hosted anywhere.
Free for 50 devices and 1M messages a month. Run the whole runtime locally with iotactor dev.
A connected product needs a broker, a registry, a shadow store, a time-series database, a rules engine, an offline queue and a pile of functions. Most teams spend 6–12 months on that plumbing before shipping a single feature — and then the cloud vendor deprecates half of it.
iot.actor replaces that stack with one primitive borrowed from Erlang, Akka and Orleans: the actor. You write thermostat.send("setTarget", 21) and the platform handles delivery, persistence, retries and history.
Every device — or logical thing, like a room, a truck or a site — is an actor you can message, query and script. Actors compose into hierarchies: organisation, fleet, site, room, device.
actor://acme/fleet-eu/site-istanbul-01/fridge-07
Unique ID, X.509 or token credentials, type, tags and metadata.
What the device says, what your apps want, and what your behavior computes.
An ordered, durable inbox. Commands queue while the device is offline and are delivered on reconnect, with TTL and priority.
An append-only, event-sourced history of every message, state change and decision.
TypeScript, Python, Rust or Go compiled to WASM. Reacts to messages, timers and other actors.
“If no heartbeat in 10 min, raise an alarm” — and it survives restarts.
Activated on demand, passivated when idle. You pay almost nothing for sleeping devices.
Behavior errors are isolated, retried and reported. One bad device can’t take down the fleet.
Firmware publishes and receives. Apps get state, history and a websocket. We handle everything after the radio.
Every actor is event-sourced, so “why did the fridge alarm at 03:11?” has an exact answer.
Same ID, same WASM behavior, same event log. Automations keep running when the internet doesn’t, then the gateway syncs its history upstream.
One small binary for gateways and routers: x86, ARM64, ARMv7 and MIPS32.
An open, versioned protobuf spec published in the repo.
Battle-tested, ASF-governed actor infrastructure — clustering we didn’t have to invent.
| Hardware | Example | Memory budget | Actors |
|---|---|---|---|
| Small router | OpenWrt MIPS32 / ARMv7, 128 MiB | ≤ 16 MiB | 500 |
| Standard gateway | Raspberry Pi 4/5, industrial ARM64 | ≤ 64 MiB | 10,000 |
| Site server | x86 mini PC | ≤ 256 MiB | 100,000 |
Design targets for general availability, not benchmark results. Passivated actors use no memory.
Run it in our cloud, a dedicated cluster, or your own data centre — air-gapped if you need to.
Per-device X.509, just-in-time provisioning, certificate rotation, claim tokens.
WASM sandbox and per-tenant quotas at runtime; row-level or dedicated clusters for storage.
RBAC and attribute policies for who can read or command which actors — with separate policies for AI agents.
Who, what, when and why for every command, on a hash chain.
TLS 1.3 in transit, encrypted at rest on cloud and edge, bring your own key.
Region-pinned tenants in EU-Frankfurt, US-East and Istanbul for KVKK-sensitive data.
SSO with SAML, SCIM provisioning, advanced RBAC.
HACCP temperature reports and GxP audit trails, generated from the event log.
A built-in MCP server exposes actors as typed, permissioned tools. Agents read state and history; commands they propose wait for a human to approve.
setTarget −20 proposed — awaiting approvalDetector models map one-to-one to actor behaviors. Convert your detector-model JSON and move in a day — onto a core you can self-host if any vendor, us included, goes away.
Per-fridge timers and alarms, HACCP audit trails, sites that stay safe offline. For restaurants, hotels, catering and pharma.
Building, floor and room hierarchies with schedules and aggregate health.
Stateful charging sessions, an OCPP bridge, and chargers that keep working offline.
Remote sites with flaky links: the gateway decides locally and syncs later.
Location as state, geofence timers, full movement history.
Hardware teams with 100 to 100,000 devices who would rather ship features than plumbing.
We keep the core Apache-2.0 — no relicensing — and plan to move it to a neutral foundation once the community is contributing. When Akka was relicensed, its community forked it into Apache Pekko. We build on that lesson, and on Pekko itself.
Priced on active devices and messages, not seats. Sleeping devices passivate and cost almost nothing. Spend caps and no surprise egress fees.
Start on the free tier, or run everything on your laptop first. Ship six months sooner, with no lock-in.