Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
iii-hq avatar

Iii Getting Started

  • 1.6k installs
  • 18.6k repo stars
  • Updated August 5, 2026
  • iii-hq/iii

iii-getting-started is a backend bootstrap skill that installs the iii engine, SDK, and first worker so developers can replace separate API, queue, cron, pub/sub, and state tooling with one runtime.

About

iii-getting-started is a setup skill for developers starting a new iii project. iii consolidates an API framework, task queue, cron scheduler, pub/sub bus, state store, and observability pipeline into a single engine built on three primitives: Function, Trigger, and Worker. The skill walks through installing the engine via the official install script, verifying with iii --version, running iii create, and wiring the first worker. Developers reach for iii-getting-started when they want a unified backend runtime instead of stitching Express, Bull, node-cron, Redis pub/sub, and separate tracing tools. It focuses on initial configuration and a working backend skeleton, not production hardening or migration from an existing framework.

  • One-command engine install via official curl script
  • Interactive `iii create` command with TypeScript, Python, and Rust templates
  • Starts local engine exposing REST API, WebSocket, and web console
  • Language-specific SDK installation for Node.js, Python, and Rust
  • Creates first working worker using the three core primitives: Function, Trigger, Worker

Iii Getting Started by the numbers

  • 1,575 all-time installs (skills.sh)
  • +48 installs in the week ending Aug 5, 2026 (Skillselion tracking)
  • Ranked #783 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/iii-hq/iii --skill iii-getting-started

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs1.6k
repo stars18.6k
Last updatedAugust 5, 2026
Repositoryiii-hq/iii

How do you bootstrap a new iii backend project?

Bootstrap a new iii project with the engine, SDK, and first worker in minutes.

Who is it for?

Backend developers starting a greenfield service who want one engine for APIs, queues, cron, pub/sub, and state.

Skip if: Teams migrating an existing Express, NestJS, or serverless stack who only need a feature comparison, not initial iii setup.

When should I use this skill?

The user wants to start a new iii project, install the SDK, or configure the first worker and engine.

What you get

Installed iii engine, initialized project directory, SDK configuration, and a running first worker with Function and Trigger primitives.

  • iii project scaffold
  • first worker configuration

Files

SKILL.mdMarkdownGitHub ↗

Getting Started with iii

iii replaces your API framework, task queue, cron scheduler, pub/sub, state store, and observability pipeline with a single engine and three primitives: Function, Trigger, Worker.

Step 1: Install the Engine

curl -fsSL https://install.iii.dev/iii/main/install.sh | sh

Verify it installed:

iii --version

Step 2: Create a Project

iii create

Follow the interactive prompts to select a template and language. The default quickstart template includes TypeScript, Python, and Rust workers.

Then change into the project directory you chose at the prompt:

cd <your-project>

Step 3: Start the Engine

iii --config iii-config.yaml

The engine starts and listens for worker connections on ws://localhost:49134. The REST API is available at http://localhost:3111. The console is available at http://localhost:3113.

Step 4: Install the SDK

Pick your language:

# TypeScript / Node.js
npm install iii-sdk @iii-dev/helpers

# Python
pip install iii-sdk iii-helpers

# Rust
cargo add iii-sdk iii-helpers

Step 5: Write Your First Worker

TypeScript

import { registerWorker, TriggerAction } from "iii-sdk";
import { Logger } from "@iii-dev/helpers/observability";

const iii = registerWorker(process.env.III_URL ?? "ws://localhost:49134");

iii.registerFunction(
  "hello::greet",
  async (input) => {
    const logger = new Logger();
    const name = input?.name ?? "world";
    logger.info("Greeting user", { name });
    return { message: `Hello, ${name}!` };
  },
  { description: "Greet a user by name" },
);

iii.registerTrigger({
  type: "http",
  function_id: "hello::greet",
  config: { api_path: "/hello", http_method: "POST" },
});

Python

from iii import register_worker, InitOptions
from iii_helpers.observability import Logger

iii = register_worker(address="ws://localhost:49134", options=InitOptions(worker_name="hello-worker"))

def greet(data):
    logger = Logger()
    name = data.get("name", "world") if isinstance(data, dict) else "world"
    logger.info("Greeting user", {"name": name})
    return {"message": f"Hello, {name}!"}

iii.register_function("hello::greet", greet, description="Greet a user by name")
iii.register_trigger({"type": "http", "function_id": "hello::greet", "config": {"api_path": "/hello", "http_method": "POST"}})

Rust

use iii_sdk::{register_worker, InitOptions, RegisterFunction};
use iii_sdk::protocol::RegisterTriggerInput;
use iii_helpers::observability::Logger;
use serde_json::json;

let iii = register_worker("ws://127.0.0.1:49134", InitOptions::default());

iii.register_function(
    RegisterFunction::new("hello::greet", |input: serde_json::Value| -> Result<serde_json::Value, String> {
        let logger = Logger::new();
        let name = input["name"].as_str().unwrap_or("world");
        logger.info("Greeting user", Some(json!({ "name": name })));
        Ok(json!({ "message": format!("Hello, {}!", name) }))
    }).description("Greet a user by name"),
);

iii.register_trigger(RegisterTriggerInput {
    trigger_type: "http".into(),
    function_id: "hello::greet".into(),
    config: json!({ "api_path": "/hello", "http_method": "POST" }),
    metadata: None,
})?;

Step 6: Test It

curl -X POST http://localhost:3111/hello \
  -H "Content-Type: application/json" \
  -d '{"name": "iii"}'

Expected response:

{ "message": "Hello, iii!" }

Add Existing Workers

To add a capability that already exists, browse https://workers.iii.dev/ and install the worker by name:

iii worker add iii-state
iii worker add iii-queue
iii worker add image-resize@0.1.2

iii worker add writes project config, installs the worker artifact, starts it, and records the pin in iii.lock when the worker comes from the registry. Commit iii.lock with your config so other machines can replay the same worker set with iii worker sync.

Install Agent Skills

Get all iii skills for your AI coding agent:

npx skills add iii-hq/iii/skills

Skills teach your agent the top-level iii model: functions, triggers, workers, registry access, SDKs, engine configuration, architecture patterns, and error handling. Worker-backed capabilities live with the worker docs and registry entries.

Adapting This Pattern

  • Add more functions to the same worker — each gets its own registerFunction + registerTrigger

calls

  • Use :: separator for function IDs to namespace them: orders::create, orders::validate
  • Add cron triggers with { type: 'cron', config: { expression: '0 0 9 * * * *' } } (7-field: sec

min hour day month weekday year)

  • Add queue triggers with { type: 'durable:subscriber', config: { topic: 'my-queue' } }
  • Use iii.trigger() to invoke other functions from within a function
  • Use state::get / state::set to persist data across function calls
  • Use iii worker add <name> when the capability already exists in the worker registry

Recommended Next Steps

After getting your first worker running:

1. Register functions, triggers, and workers — See iii-core-primitives 2. Choose the right SDK APIs — See iii-sdk-reference 3. Configure the engine — See iii-engine-config 4. Explore backend patterns — See iii-architecture-patterns 5. Handle failures well — See iii-error-handling

Key Resources

Pattern Boundaries

  • For function and trigger registration patterns, worker creation, worker registry access, trigger

payload schemas, invocation modes, channels, custom triggers, and HTTP-invoked functions, prefer iii-core-primitives

  • For language-specific SDK APIs, prefer iii-sdk-reference
  • For engine configuration, prefer iii-engine-config
  • For worker-backed HTTP, cron, queue, pubsub, state, stream, and observability behavior, use the matching worker docs under engine/src/workers/**/skills
  • Stay with iii-getting-started for installation, initial setup, and first-worker guidance

When to Use

  • Use this skill when the task is about installing iii, creating a new project, or writing a first

worker.

  • Triggers when the request asks for setup help, quickstart guidance, or getting started with iii.

Boundaries

  • Never use this skill as a generic fallback for unrelated tasks.
  • You must not apply this skill when a more specific iii skill is a better fit.
  • Always verify environment and safety constraints before applying examples from this skill.

Related skills

How it compares

Use iii-getting-started when adopting the iii engine from scratch; pick framework-specific backend skills when staying on Express, NestJS, or existing serverless tooling.

FAQ

What does iii-getting-started install?

iii-getting-started installs the iii engine through the official install script, verifies with iii --version, and runs iii create to scaffold a project with Function, Trigger, and Worker primitives for APIs, queues, cron, and pub/sub.

What backend concerns does iii replace?

iii-getting-started targets a single engine that replaces separate API frameworks, task queues, cron schedulers, pub/sub buses, state stores, and observability pipelines, using Function, Trigger, and Worker as core building blocks.

AI & Agent Buildingagentsautomation

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.