mrkeyoor.com_
Wed 23 Sept 00:35 UTC
Dev Toolsevaluationupdated 25 Aug 2026

iii review

iii is a shared runtime where services register callable functions and declare the triggers that invoke them. It tries to replace separate integration work for HTTP, queues, cron, state, streams, observability, sandboxes, and agents with one live catalogue, one routing model, and one operations console.

+40stars / 7d
Verdict

Our iii run installed 820 packages, then produced 0 successful build tasks and repeated the same docs failure during the test command, so platform teams should trial the runtime from a pinned release before standardizing on it. The worker-function-trigger model is genuinely coherent for polyglot services and agent-discovered capabilities. Version 0.22.1 is active and well documented, but the mixed engine license and open queue, observability, and registration faults keep it out of the low-risk infrastructure tier.

We ran it

Lab card: what happened when we ran iiiScreenshot of iii (iii.dev)
Install✓ · 29s820 packages · 800 MB
Build✗ · 15s
Tests✗ · 17sran, no count parsed
Repo3139 files~372,238 lines of source · 158.2 MB · 27 CI workflows

Answers from our run

Does iii build from source?

Dependencies installed in 29 seconds (820 packages), and the build failed. We cloned commit bacffa0 into a clean Debian container with 3 CPUs and no project-specific setup.

Do iii's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Who should not use iii?

Organizations requiring every runtime component under Apache-2.0 or another approved open-source license: the engine uses Elastic License 2.0, while the SDKs and console use Apache-2.0.

What are the alternatives to iii?

Dapr, Temporal, NATS Server. Our iii run installed 820 packages, then produced 0 successful build tasks and repeated the same docs failure during the test command, so platform teams should trial the runtime from a pinned release before standardizing on it.

Setup2/5Quick install, but build and test commands both stopped at docs build
Docs4/5Clear primitives, SDKs, workers, console, quickstart, and repo map
Community5/518,627 stars with same-day pushes and issue responses
Maturity3/5Released runtime with active fixes, while core reliability issues remain

Who it’s for

Platform teams willing to standardize service capabilities around workers, functions, and triggers.
Polyglot organizations that need Node.js, Python, Rust, and Go services to share one call and discovery model.
Agent builders who want runtime-discovered capabilities visible to normal services and agents alike.
Operators prepared to run a central engine and inspect queues, traces, logs, workers, and state through one console.

Who it’s NOT for

Organizations requiring every runtime component under Apache-2.0 or another approved open-source license: the engine uses Elastic License 2.0, while the SDKs and console use Apache-2.0.
Teams unwilling to put several infrastructure roles behind one engine: queues, state, HTTP, cron, streams, and observability share iii's control surface.
RabbitMQ users who need proven automatic recovery today: open issue #1958 says one channel-level AMQP error can kill all consumers in a process without resubscription.
Operators who cannot tolerate log-amplification risk: open issue #2072 reports an observability warning feeding itself until it can fill disk.
Small applications with a few direct calls: adopting a worker catalogue, engine, console, and SDK may cost more than the integrations it removes.

Setup reality

Our run at commit bacffa0 installed 820 packages in 29 seconds and used 800 MB. The build failed in 15 seconds with 0 of 6 tasks successful; the tail names docs#build as the failed task and shows lifecycle failures across six workspaces without the underlying error.

The test command also failed, after 17 seconds. Its tail repeats the same docs#build failure and ends with ELIFECYCLE, so the supplied log does not establish whether any test cases ran. A real deployment adds the iii engine, chosen workers, language SDKs, and configuration for queues, state, HTTP routes, and any external services.

The source is a pnpm workspace with 27 CI workflow files and no top-level tests directory or Dockerfile detected by our scan. The README nevertheless links a published Docker image. Production adopters also need to review the engine's Elastic License 2.0 separately from the Apache-2.0 SDK and console terms.

iii 0.22.1 reduces services to three runtime primitives

iii 0.22.1 asks a platform team to model its system as workers, functions, and triggers. A worker is a running process that registers capabilities. A function is a named unit such as orders::validate. A trigger connects that function to an HTTP endpoint, queue message, cron schedule, state change, stream event, or direct call. Once a worker joins the engine's catalogue, other workers can discover and call it without each pair building a custom integration.

The model crosses language boundaries. Official SDKs cover Node.js, Python, Rust, and Go, while the engine is written in Rust. Built-in workers handle queues, state, pub-sub, streams, cron, HTTP, observability, execution, bridges, and configuration. Agents see the same functions developers call, and Agent Skills describe the engine primitives or worker-specific behavior. That shared capability catalogue is iii's sharpest idea: an added worker becomes visible to applications and agents through one contract.

What happened when we ran it

Our sandbox installed 820 packages in 29 seconds at commit bacffa0, consuming 800 MB on disk. The checkout was much larger than a small runtime: 3,139 files, about 372,238 lines of source, and 158.2 MB. It is a pnpm monorepo with workspaces and 27 CI workflow files. Our scan found no top-level tests directory and no Dockerfile, although a published container is linked from the README.

The build failed after 15 seconds. Turbo reported 0 successful tasks out of 6, named docs#build as the failing command, and printed lifecycle failures for the console frontend, helpers, browser SDK, observability UI, website, and docs. The log tail does not contain the earlier error that made the docs task exit 1. We therefore cannot tell whether the fault was source, configuration, or an environmental requirement omitted from the tail.

The test command failed after 17 seconds and showed the same shape: 0 of 6 build tasks succeeded, docs#build exited 1, and pnpm ended with ELIFECYCLE. The supplied output does not show test cases starting, passing, or failing. A contributor following our clean Node 22 path would need the complete earlier log and the project's documented development environment before diagnosing it. The honest finding is that install succeeded while both follow-up commands stopped at the workspace build stage.

Four SDKs expose one catalogue and one console

iii 0.22.1 provides 4 SDK languages, and its console inspects registered workers, functions, triggers, queues, traces, logs, and live state. Platform teams can publish workers, while application teams register business functions and declarative triggers. Adding a queue or sandbox through iii worker add places it inside the same discovery and trace model. This can eliminate repeated adapters when many applications need the same capability.

Standardization creates a new dependency. A direct library call or broker client has a small local failure domain. Moving HTTP, queues, scheduling, state, streams, and agent tools behind iii makes the engine's routing and registration behavior part of every service path. The payoff grows with the number of teams and duplicated integrations. A small application with two services is unlikely to recover the migration and operational cost.

The worker registry also changes supply-chain review. Agents can add a capability and discover its functions at runtime, but a new worker is still executable infrastructure. Teams should pin workers, inspect their skill instructions, restrict credentials, and decide who may add them. A trace shows what was called after the fact; it does not make an unsafe worker acceptable. The same approval process used for a service or container should apply to catalogue additions.

Elastic License 2.0 applies to the engine

The 0.22.1 repository uses mixed terms. The engine runtime is under Elastic License 2.0, while SDKs, CLI, console, documentation, and website are under Apache-2.0. GitHub consequently reports no single repository license. Organizations with an open-source-only procurement policy cannot infer approval from the Apache badge on the SDK. They need to review the engine license and their planned distribution or hosted-service model with counsel.

Operational issues deserve equal weight. Issue #2072, opened on 2026-08-21, reports an observability subscriber-lag warning that feeds itself and can fill disk. Issue #1958 says a channel-level RabbitMQ error can silently stop every consumer sharing the channel, with no recovery. Issue #1927 describes an invocation that can remain unacknowledged without a dispatch timeout. These reports concern queues and observability, which are central reasons to adopt the runtime.

Maintenance response is visible too. Current issues about duplicate worker registration and RabbitMQ retry behavior received comments on 2026-08-25. Release 0.22.1 fixed persisted queue configuration at boot, PATH-based binary resolution, observability trace startup, sandbox guest processes, and RabbitMQ dead-letter inspection channels. That release content shows maintainers working directly on failure handling, while the remaining reports show that the reliability surface is still moving.

18,627 stars accompany same-day fixes and issue traffic

iii had 18,627 stars, 66 open issues and pull requests combined, and a last push on 2026-08-25. Version 0.22.1 was released on 2026-08-07, and active issue replies continued through 2026-08-25. Those dates indicate a live project with substantial attention. They do not erase the difference between a popular developer platform and infrastructure that has years of uneventful production behavior.

The documentation is direct about the three primitives, quick start, SDKs, worker catalogue, Agent Skills, console, monorepo structure, and split licensing. The build log gap is the immediate contributor concern; open reliability issues are the deployment concern. iii merits a bounded proof of concept for a platform team drowning in point-to-point integrations. Measure failure recovery and catalogue governance first, and prefer Dapr, Temporal, or NATS when one of their narrower operating models matches the actual problem.

Alternatives

ProjectWhat it isPick it when
Dapr gh↗A distributed application runtime exposing service invocation, state, pub-sub, jobs, secrets, and other building blocks.pick this instead when you want established sidecar-based primitives and broad Kubernetes adoption rather than iii's worker catalogue.
Temporal gh↗A durable execution platform for workflows that must survive retries, restarts, and long waits.pick this instead when workflow durability and replay are the main problem, rather than general service discovery and triggers.
NATS Server gh↗A compact messaging server for request-reply, pub-sub, streams, and distributed service communication.pick this instead when you need a messaging backbone and prefer to choose state, scheduling, and observability separately.

What people are saying

  1. [github-trending] iii-hq/iii

Sources

  1. iii README
  2. iii 0.22.1 release
  3. iii issue activity
  4. iii engine license
  5. iii documentation

More dev tools reviews

crabbox · asdf · discord.js · h4cker · bend · 100-exercises-to-learn-rust · the whole board →