The device layer for your IoT and AI stack. Apache-2.0, written in Go, and you run it yourself.
Every connected product ends up building the same three things: a list of devices, rules about who may see them, and a record of what each device last reported. infinimesh gives you those three things as software you run yourself. It runs on one machine with Docker Compose, or in Kubernetes.
- Device registry. Accounts, namespaces and devices, stored as a graph. Access can stop at a single device.
- Device shadow. Reported and desired state for every device, over MQTT 3.1.1 (MQTT 5 in part), HTTP ingest, or CoAP on UDP 5683 for small devices on a private network.
- Device auth. Each device has a client certificate. TLS 1.2 and 1.3 on port 8883, or a fingerprint login on 1883 for local tests. Scoped tokens for the API.
- One API. REST, gRPC and Connect from the same service.
- Console and CLI. A web console and the
infcommand, both on the same API. - Rules and alarms (3.4). Conditions on device state such as
reported.temp > 70raise alarms you ack and clear in the console or the API. - OTA contract (3.4). Core stores the target firmware version per device and the status the device reports back. Updates switch on only after an OTA addon registers through the plugins API. OTA is the only addon kind that registers. The hawkBit, Mender, and signed webhook addons are in the addons repo. You build them. They are not published images. The webhook addon needs core 3.4.2 or newer, which serves it the namespace webhook URL.
- Operations (3.4). An audit log for alarm, plugin and OTA actions. Quotas per namespace for devices and message rates. MQTT bridge sessions in Redis with
MQTT_SESSION_STORE=redis. Prometheus metrics on every service. A media service for files per namespace. - AI (coming soon). An MCP server for agents and an LLM addon for any OpenAI-compatible API, scoped by the same permissions. Not built yet.
The v1 API is stable. New fields may be added, but breaking changes go into a new version. See the versioning policy.
You need Docker with Compose.
git clone https://github.com/infinimesh/core.git
cd core
cp .env.example .env
docker compose up -dOpen http://console.127.0.0.1.nip.io
Log in as infinimesh / infinimesh.
Change the password right away.
Get the CLI with Homebrew:
brew tap infinimesh/inf-cli https://github.com/infinimesh/inf-cli
brew install infIf Homebrew says the tap is untrusted, run brew trust infinimesh/inf-cli and try again. Other ways to install are in the inf-cli README. Use a 3.4 CLI with a 3.4 core. Log in on port 443:
inf login api.127.0.0.1.nip.io:443 infinimesh infinimesh --insecure-skip-verifyThe local certificate is self-signed, which is why the flag is there. The CLI guide walks through quotas, rules, OTA addon registration and audit.
Connect a device: pick an example from infinimesh/docs (ESP32, Raspberry Pi Pico W or curl) and follow its README.
The infinimesh/docs repo has small device examples and practical guides. Each example is one sketch or script with a short README.
- esp32-mqtt: ESP32 (Arduino), MQTT over TLS on port 8883 with a device certificate
- esp32-http: ESP32 (Arduino), HTTPS with a device token
- picow-mqtt: Raspberry Pi Pico W (MicroPython), MQTT over TLS with a device certificate
- curl: a shell script that sends and reads device state over the REST API
- CLI getting started: login, quotas, rules and alarms, OTA addon registration, bulk assign, audit and metrics
- TLS on small devices: why ESP8266 class chips time out during the TLS handshake, and how to fix it
| Repo | What it is |
|---|---|
| core | The platform: registry, shadow, MQTT bridge, APIs, console, Docker Compose |
| inf-cli | The inf command |
| proto | gRPC, Connect and OpenAPI definitions |
| docs | Device examples for ESP32 (MQTT and HTTP), Raspberry Pi Pico W (MQTT) and curl, plus guides such as TLS on small devices |
| addons | Data connectors for the v3 API, plus OTA addons for hawkBit, Mender, and a signed webhook |
| platform-operator | Kubernetes operator |
| k8s | Plain Kubernetes manifests |
| website | infinimesh.org |
Core, inf-cli, platform-operator and the Helm chart are at v3.4.3. The Go module path is github.com/infinimesh/core/v3 (Go reference).
Addons v3.4.2 ships the hawkBit, Mender and webhook OTA addons as source only. There are no images and no Helm entries, so you build them yourself.
Teams that ship connected hardware and want to own the backend. infinimesh is the server side only. Your devices bring their own MQTT client, and your data stays on your own servers.
- You want a managed cloud service and do not want to run servers.
- You want dashboards in the box. infinimesh has rules and alarms, but no charts. Feed Grafana or your own tools through an addon.
- You have a few devices and one user. A plain MQTT broker is simpler.
- KafScale: Kafka-compatible streaming that keeps the log in S3. The Kafka addon streams device data to it.
- KafClaw: an agent runtime in Go that connects AI agents through Kafka topics.
- More open source from the same team: scalytics.io/open-source.
- infinimesh is part of Lascaris, the governed and supported platform from Scalytics.
infinimesh was initiated by Alexander Alten. Read the infinimesh 3.4 release notes.
Found a bug or a gap in the docs? Open an issue in the repo it belongs to. Pull requests are welcome. Report security problems as described in our security policy, not in public issues.
Start with the core quick start. If it runs on your machine in ten minutes, it is worth a closer look.
