How iotta is licensed, packaged, and (eventually) monetized. This is the business-model
companion to product.md. The cross-cutting decision behind it is D4 in
decisions.md.
Status: licensing settled (dual-licensed — see below); the device cap, the license-key entitlement, and the commercial-tier features described here remain roadmap as code — see
readiness-roadmap.md. This document is the plan of record.
iotta is self-host-first and open-core: the source is open to read, run, and modify, and the core always runs with no required cloud dependency. A free Community edition covers demos, solo use, and evaluation; a commercial license unlocks operating a real fleet and the team/operations features around it. Enforcement is soft and honest — a visible, license-backed gate, not hard DRM.
The entire development platform stays free — that's the adoption engine and the part a single engineer or a CEO doing a demo should never hit a wall on. Only scale and team/operations capabilities sit behind the commercial line.
| Capability | Community (free) | Commercial |
|---|---|---|
| Voice runtime (ASR/LLM/TTS, tools, interruption) | ✅ | ✅ |
| Software device client + (roadmap) web simulator | ✅ | ✅ |
| Tracing, replay, eval runner | ✅ | ✅ |
| Tool & prompt registry (versioning + promotion) | ✅ | ✅ |
| Device registry, provisioning, safe OTA + rollback | ✅ | ✅ |
Operator UI, iotta-doctor, backup/restore, TLS |
✅ | ✅ |
| Active device count | capped (e.g. 10) | unlimited / licensed tier |
| Multi-user accounts, roles (RBAC), audit log | — | ✅ |
| Advanced rollout automation (policy scheduler at scale) | — | ✅ |
| Long-retention analytics / history export | — | ✅ |
| SSO / directory integration | — | ✅ (enterprise) |
The boundary is drawn so commercialization is a packaging decision, not a refactor — each gated capability lives behind a clean module seam (D4).
The free tier is gated on active device count because it is the one metric that is honest, self-evident, and structurally easy to enforce in this codebase.
Can a cap be enforced in source-available software? Not as unbreakable DRM — anyone can edit open source. But a device cap is unusually well-suited to a soft, license-backed gate here, for three reasons:
DeviceRegistry.register / build_provision_response in
server/src/iotta/devices.py. One quota check covers
the whole product; there is no scattered gating to maintain.server/src/iotta/entitlement.py, exposing a single
check_device_quota() call invoked at the provisioning chokepoint.{tier, max_devices, expiry, licensee} verified at startup against a public key embedded
in the build. No phone-home, no network call.iotta-doctor
reports entitlement status. Demos and tinkering never hit a wall inside the cap.| Edition | Who | Devices | Notable |
|---|---|---|---|
| Community | Solo devs, demos, evaluation | Up to ~10 active | Full dev platform, self-hosted, free |
| Pro / Commercial | A team shipping a product | Licensed (per-fleet / per-device-band) | Removes cap; multi-user RBAC + audit; support |
| Enterprise | Larger orgs | Negotiated | SSO/directory, long-retention analytics/export, priority support |
Pricing levels are intentionally unspecified here — the structure (free core + device-cap + team tier) is the decision; the numbers are a go-to-market exercise.
| Piece | State |
|---|---|
| Open-core posture, boundary, clean seams | Decided (D4) |
LICENSE (FSL-1.1-ALv2) + LICENSE-COMMERCIAL.md |
✅ Settled |
entitlement.py + device-cap enforcement |
Roadmap (Tier 2) |
| License-key signing/verification | Roadmap (Tier 2) |
| Multi-user RBAC + audit (commercial tier) | Roadmap (Tier 3 / Phase 8) |
See readiness-roadmap.md for sequencing and
decisions.md (D4) for the underlying decision.