Install

Install the core SDK, then add one package per axis. You do not need every package. Compose only what your stack uses.

Core

terminal
npm i @hitl-sdk/hitl

@hitl-sdk/hitl provides the server, inbox API, field builders, and the internal HTTP API.

Workflow resolver (pick one)

EnginePackageDocs
Workflow SDK@hitl-sdk/resolver-workflow-sdk + workflowWorkflow SDK
Temporal@hitl-sdk/resolver-temporal + @temporalio/client + @temporalio/workflowTemporal
Inngest@hitl-sdk/resolver-inngest + inngestInngest
terminal
# Workflow SDK (default)
npm i @hitl-sdk/resolver-workflow-sdk workflow

# Temporal
npm i @hitl-sdk/resolver-temporal @temporalio/client @temporalio/workflow

# Inngest
npm i @hitl-sdk/resolver-inngest inngest

If you use Vercel Workflow SDK, configure its world (runtime storage and queues) separately from Hitl's state backend below.

State backend (pick one)

In-memory is the default when you omit state. Use a persistent backend for production or multi-replica deploys.

BackendPackageWhen to use
in-memorybuilt into @hitl-sdk/hitlLocal dev, single process
SQLite@hitl-sdk/state-sqliteLocal dev, small deploys, Node 22.13+
Postgres@hitl-sdk/state-pg + pgProduction, existing Postgres
Redis@hitl-sdk/state-ioredis + ioredisProduction, existing Redis
terminal
npm i @hitl-sdk/state-sqlite
# or
npm i @hitl-sdk/state-pg pg
# or
npm i @hitl-sdk/state-ioredis ioredis

See State docs for setup and migrations.

Delivery (optional add-on)

The web inbox is always included. No extra package required. Add the Chat SDK adapter only when you need Slack, Teams, Discord, or other chat platforms:

terminal
npm i @hitl-sdk/adapter-chat-sdk chat @chat-adapter/slack

Install @chat-adapter/* packages for each platform you use. See Chat SDK adapter.

Choose your stack

Use this table to jump to the detailed doc for each axis of your stack.

Your choiceCoversDoc
Workflow SDKworkflowResolver + workflow clientworkflow-engines/workflow-sdk
TemporaltemporalResolver + activity-backed clientworkflow-engines/temporal
InngestinngestResolver + step.invoke wiringworkflow-engines/inngest
SQLitestate in new Hitl()state/sqlite
Postgresstate in new Hitl()state/postgres
Redisstate in new Hitl()state/redis
Web inbox onlyBuilt-in hitl.inbox (default)channels/web-inbox
Slack / Teams / …Channel adapters in new Hitl()channels/chat-sdk
Next.jsInternal API route mountinghost-integration#nextjs
Express / Hono / …Internal API route mountinghost-integration

Recommended default for new projects: Workflow SDK + SQLite + web inbox + Next.js, same as the Quickstart.

Environment variables

VariableWherePurpose
HITL_SECRETServerBearer token for the internal workflow → server API
HITL_URLWorkflow / Inngest runtimeBase URL for hitl HTTP calls (when not inferred)
HITL_POSTGRES_URLServerPostgres connection for @hitl-sdk/state-pg
REDIS_URLServerRedis connection for @hitl-sdk/state-ioredis
TEMPORAL_ADDRESSServerTemporal frontend for @hitl-sdk/resolver-temporal

Without HITL_SECRET, the internal API is open in development and a warning is logged once.