Server
@arcsig-labs/server runs flows for real: an HTTP API, webhook and cron triggers, timers that survive restarts, run history, encrypted credentials and
live events. It is a Hono app, so it runs on Node, Bun, Deno or an edge runtime, and storage is pluggable.
One command
ARCFLOW_SECRET="a long random string" npx -y -p @arcsig-labs/server -p @arcsig-labs/editor arcflow dev --db ./arcflow.dbdev also serves the editor on the same address, with your steps, credentials and run history — no build step and no API key in the browser. serve is the same without the editor.
In your own app
import { createRegistry } from '@arcsig-labs/core';
import { standardSteps } from '@arcsig-labs/nodes';
import { createServer } from '@arcsig-labs/server';
import { SqliteStorage, serveNode } from '@arcsig-labs/server/node';
const server = await createServer({
registry: createRegistry([standardSteps, myPack]),
storage: new SqliteStorage('./arcflow.db'),
secret: process.env.ARCFLOW_SECRET,
services: { payments } // your own services, handed to your steps
});
await serveNode(server, { port: 8787 });Triggers
- Webhooks — an active flow with a
trigger.webhookstep answers at/hooks/<path>, immediately, when the run finishes, or with whatever a "respond" step sends. - Schedules — cron steps fire on their expression; runs missed while the server was down are not replayed.
- Timers — a run paused by
logic.waitis stored with a wake-up time and resumed later, also after a restart.
curl -X POST http://127.0.0.1:8787/hooks/new-signup -d '{"email":"a@b.com"}'Credentials
A f.credential('http-auth') field stores only an id in the flow. The value is encrypted with AES-256-GCM and resolved at run time into ctx.secrets — it never enters flow JSON, run state, or an API response.
API
| Endpoint | What it does |
|---|---|
GET /api/steps | The catalog: config schemas, outputs, JSON Schema, a Markdown catalog for prompts, and a manifest a browser can rebuild a registry from |
GET/POST /api/flows, GET/PUT/DELETE /api/flows/:id | Flows and their versions |
POST /api/flows/:id/runs | Start a run, live or simulated |
GET /api/runs, GET /api/runs/:id | History and full run state |
POST /api/runs/:id/resume, /cancel | Answer a waiting step, or stop a run |
GET /api/runs/:id/events | Server-sent events for a live run |
/api/credentials | Write-only credential values |
/api/ai/generate, /edit, /explain | Flow generation, when a model is configured |