Components

Every primitive you need to move data.

12 components across webhooks, flows, ETL, and AI. Every one shares the same lifecycle: extract → transform → load → backfill → observe.

Clients

Set up an authenticated, typed client for an external service. The foundation other components wire into.

1

State

Durable runtime state for snapshots, cursors, and dedupe markers that survive retries and future runs.

1

Webhooks

Wire into a service, then catch or pass what it throws at you. Signed, idempotent, DB-backed.

3

Flows

Extract, transform, load — three variants. Same shape, different directions.

3
eE → iL
stripe
T
transform
postgres

Inflow

External service → your Postgres. Pull data from a SaaS API on a schedule, transform it, and load it into your Drizzle tables. Declare named variants (run modes) — each with its own optional cron schedule and onError/onComplete hooks — and branch on `ctx.variant` (e.g. `delta`, `full`, `healthcheck`). Tracked in the standard `khotan_runs` table — status, durations, batch counts, create/update/delete/fail tallies, plus a metadata JSON for component-specific stats. Toggle off with --no-runs.

iE → eL
postgres
T
transform
salesforce

Outflow

Your Postgres → external service. Push computed audiences, scores, or enrichments out to Salesforce, HubSpot, Intercom. Replaces what people used to call reverse ETL. Declare named variants (run modes), each independently schedulable with onError/onComplete hooks, and branch on `ctx.variant`. Tracked in the standard `khotan_runs` table — status, durations, batch counts, create/update/delete/fail tallies, plus a metadata JSON for component-specific stats. Toggle off with --no-runs.

eE → eL
stripe
T
transform
slack

Relay

External service → external service. Transit data between two SaaS systems, optionally transforming on the way. Useful when one service needs another's data without staging it in your DB. Declare named variants (run modes), each independently schedulable with onError/onComplete hooks, and branch on `ctx.variant`. Tracked in the standard `khotan_runs` table — status, durations, batch counts, create/update/delete/fail tallies, plus a metadata JSON for component-specific stats. Toggle off with --no-runs.

Dashboards

Drop-in UI for inspecting and controlling what khotan is doing inside your app.

4