Skip to content

Roadmap

What works today, what's coming, and what deliberately isn't. For when something landed, see the changelog; hit a gap, or one not listed here? File an issue — compatibility reports are the most useful feedback we get.

What's supported

Measured against the LangGraph CLI and LangGraph Platform, since skein-js is a drop-in for the first and an open alternative to the second.

CLI and runtimes

CapabilityStatusNotes
dev / up / build / dockerfileDrop-in, plus skein-only start and import-langgraph. Details
Project scaffoldingnpm create skein-js@latest — no LangGraph Platform equivalent. Details
Node 24 production runtimeDefault production image and fallback
Bun / Deno production runtimes⚠️ previewFetch launchers and images ship; clean-artifact matrices must graduate each
Express · Fastify · NestJS · Next.js · FetchStandalone or embedded in an app you already run. Details
Embed a graph in code, no CLIDetails
A graph as a plain endpointPOST /invoke/:graph_id. Details

Protocol surface

CapabilityStatusNotes
Assistants / threads / runs / storeRoutes and request bodies, guarded against SDK drift
Assistants CRUD + versioningVersion history and rollback; graph/subgraph introspection
Streaming, incl. true events modeReal streamEvents v2. Details
Human-in-the-loop (interrupt / resume)Via LangGraph checkpointers
Time travel — fork from a checkpointRead, update and run from any prior checkpoint
Multitask / double-textingAll four strategies, correct across instances
Stateless + batch runs, thread count/prunePOST /runs, /runs/batch, /runs/cancel
Auth + authorizationLangGraph Auth parity, ownership filters in the driver query. Details
Run-completion webhooksBest-effort. Details
http.disable_* flags · GET /info/ok stays outside the table, so no flag can break the probe
Idempotent run creationNo LangGraph Platform equivalent. Details
MCP endpoint (/mcp)🗺️LangGraph exposes graphs as MCP tools; not yet built
Generative UI (/ui/{agent})🗺️Needs a ui config block, a bundler and asset serving
/docs OpenAPI page🗺️LangGraph serves one; skein dev links the published docs instead

Storage, scale and operations

CapabilityStatusNotes
In-memory (dev) · Postgres + pgvectorDetails
Bring your own store (store.adapter)Details
Store TTL · filter · namespace traversalDetails
Thread TTLPast LangGraph OSS, which drops ttl on the floor
Multi-instanceAtomic create guard, cross-instance cancel, per-thread execution claim. Details
Cron / scheduled runsFull Crons resource + scheduler, every driver. Details
ObservabilityLangSmith, PostHog, OpenTelemetry. Details
Console / Studio equivalentSelf-hosted at /console — no account, no tunnel. Details

Planned

  • 🗺️ Inbound events — agents behind WhatsApp, Slack and anything else. The big one: a pipeline plus an EventSource plugin interface, so putting an agent behind a provider is one small file instead of six pieces of plumbing everyone re-solves. Generic over events, so a GitHub webhook fits the same interface. Design.
  • 🗺️ Durable outbound delivery. Completion webhooks are fire-once today: a receiver redeploying for ten seconds loses the notification permanently and the run still reports success. Planned: a delivery outbox committed with the run's terminal status, retries, signing, replay. Design.
  • 🗺️ MCP endpoint, generative UI, /docs OpenAPI page — the LangGraph parity backlog above, in priority order.
  • 🗺️ Per-thread partitioned dispatch. A run waiting on a busy thread's execution claim still holds a worker slot. Purely about utilization — the claim already makes ordering safe.
  • 🗺️ POST /runs/search — cross-thread run search; today runs list per thread.

Non-goals

  • WebSocket transport. SSE covers the client UX and doesn't affect the React SDK.
  • skein deploy to a hosted platform. Self-hosted by design; there's no managed target.
  • Sub-minute cron schedules. A 5-field expression can't express them, and accepting a 6-field one would run a schedule at a different time than its author's crontab says.
  • Backfilling missed cron occurrences. A cron due during an outage fires once on return and resyncs rather than replaying the backlog. Details.