Features
What skein-js can do, in one page. Find the row that matches what you're trying to build, then follow the link. ✅ ships today · ⚠️ preview · 🗺️ planned.
Comparing against LangGraph Platform specifically? roadmap.md has the same ground organised by parity instead.
Run agents
| Capability | Status | What it gets you |
|---|---|---|
| Background jobs | ✅ | Fire-and-forget work: hand skein a job, get an id back, hear the result by webhook |
| Background runs | ✅ | Return immediately, let the graph keep working, join the stream later |
| Wait / stream runs | ✅ | Hold the connection for the answer, or stream tokens as they're produced |
| Stateless & batch runs | ✅ | One-shot calls with no conversation to keep; up to 100 runs per request |
| Multitask / double-texting | ✅ | Decide what a second message does to the run already going — all four strategies |
| Cancel & rollback | ✅ | Stop a run, keeping its writes or discarding them |
| Run timeouts | ✅ | Bound a graph that hangs, instead of losing a worker slot |
| Idempotent run creation | ✅ | A retrying caller can't start the same run twice. No LangGraph Platform equivalent |
| Cron schedules | ✅ | Fire a graph on a schedule, exactly once across instances, no leader election |
| A graph as a plain endpoint | ✅ | POST /invoke/:graph_id — body in, final state out, no threads or runs |
Hold a conversation
| Capability | Status | What it gets you |
|---|---|---|
| State, context & persistence | ✅ | What the agent knows, what's only for this run, and what survives a restart |
| Threads | ✅ | Conversations that persist, addressable by your own key (a ticket id, a phone number) |
| Streaming (SSE) | ✅ | Tokens, tool calls and reasoning as they happen — including a true events mode |
| Reconnect & join | ✅ | Resume a dropped stream, or tail the same run from a second client |
| Human-in-the-loop | ✅ | Pause for approval and resume hours later, from anywhere |
| Time travel | ✅ | Fork from any past checkpoint and run forward — "edit and resubmit" |
| Thread state & history | ✅ | Read, patch, page, copy or prune a conversation's state |
| Thread TTL | ✅ | Expire conversations automatically. LangGraph OSS ignores ttl; skein doesn't |
| Assistants & versioning | ✅ | Ship a prompt change without redeploying, and roll it back in one call |
useStream and friends | ✅ | The LangChain client ecosystem works unchanged — React, Vue, Svelte, Angular |
Remember things
| Capability | Status | What it gets you |
|---|---|---|
The store, via getStore() | ✅ | Memory that outlives a conversation, reachable from inside a graph node |
| Semantic search | ✅ | pgvector-backed recall, with optional HNSW indexing |
| Filters & namespace traversal | ✅ | Query memory by value, and walk namespaces with wildcards |
| Store TTL | ✅ | Expire memories, optionally refreshing on read |
| Bring your own store | ✅ | Point skein at a LangGraph BaseStore or your own implementation |
| Memory patterns | ✅ | Profile vs collection shapes, the dedup trap, recall, background writes |
Build workflows across your systems
LangGraph owns workflow orchestration; it doesn't own provider integrations. Skein channels supply the authenticated sources and durable destinations around the graph.
| Capability | Status | What it gets you |
|---|---|---|
| Workflows & channels | ✅ | Turn provider events into real processes with durable outcomes |
| Run-completion webhooks | ✅ | Be told a run finished — durably, so a receiver's redeploy doesn't lose the news |
| Signed callbacks | ✅ | Receivers can prove a callback is yours and reject replays. The verifier ships too |
| Deliveries & replay | ✅ | See every attempt, and re-send one by hand when it never landed |
| Custom auth | ✅ | LangGraph's Auth model, drop-in, with ownership filters pushed into the query |
| Telemetry sinks | ✅ | LangSmith, PostHog, OpenTelemetry — or your own TelemetrySink |
| MCP endpoint | 🗺️ | Expose your graphs as MCP tools |
Operate it
| Capability | Status | What it gets you |
|---|---|---|
| The console | ✅ | Test graphs and track channel wiring, interrupts and deliveries at /console |
| Postgres + pgvector | ✅ | The production storage driver, with automatic migrations |
| Redis queue & pub/sub | ✅ | Durable run queue and cross-instance streaming |
| Multi-instance | ✅ | Atomic create guard, cross-instance cancel, per-thread execution claim |
| Errors & logging | ✅ | What a failed run reports, and where — wire, log, and callback |
| Deploy anywhere | ✅ | One image; guides for Cloud Run, Fly, Railway, Render, AWS, Kubernetes, a VPS |
| Performance tuning | ✅ | Every knob in one table, plus symptom → knob triage |
| Bun / Deno runtimes | ⚠️ preview | Fetch launchers and images ship; the runtime matrices must graduate each |
Build on it
| Capability | Status | What it gets you |
|---|---|---|
| Framework adapters | ✅ | Express, Fastify, NestJS, Next.js, native Fetch — standalone or embedded |
| Embed a graph in code | ✅ | No langgraph.json, no CLI — bring a compiled graph and mount it |
| Drop-in LangGraph CLI | ✅ | skein dev for langgraph dev, with your langgraph.json unchanged |
| Scaffolding | ✅ | npm create skein-js@latest — a working project, no API key needed |
| Your own adapter | ✅ | Put the handler table on any HTTP framework |
| Your own agent runtime | ✅ | Serve the Agent Protocol from something that isn't LangGraph |
Deliberately not
- WebSocket transport — SSE covers the client UX and doesn't affect the React SDK.
skein deployto a hosted platform — self-hosted by design; there's no managed target.- Sub-minute cron schedules, and backfilling missed occurrences — see crons.md.
- Exactly-once webhook delivery — delivery is durable and retried, but at-least-once, so every attempt carries a stable dedup key. See webhooks.md.
Something missing? File an issue — compatibility reports are the most useful feedback we get.