Roadmap
This is an honest snapshot of where Causet is today and where it is going. Status labels are accurate as of the date this page was last updated.
The labels on this page (stable, in-progress, planned, proposed, available) describe engineering completion, feature by feature. They are a different axis from product availability, maturity, and production support — see What runs today? for the docs-facing readiness matrix that other pages link to.
Status labels:
- stable — production-ready, used in production
- in-progress — actively being built or improved
- planned — committed to building; design complete or in progress
- proposed — on the roadmap but not yet scheduled; design not started
Core Runtime
| Feature | Status | Notes |
|---|---|---|
| Append-only event ledger | stable | PostgreSQL-backed, per-entity cursor ordering |
Declarative rules DSL (.causet) | stable | YAML-based, compiled to JSON IR |
| Compiler with error validation | stable | causet-compiler, full cross-reference checking |
| Per-entity serial write ordering | stable | Cursor-based optimistic locking |
| Entity snapshots | stable | Materializes current entity state from event history |
| Kafka fan-out | stable | causet.ledger-events.v1, causet.projection-events.v1 |
| SaaS multi-tenant layer | stable | Per-fork PostgreSQL schemas, release management |
| Preflight rules | stable | reject op with typed error codes |
| Core rules (state mutations) | stable | set, add, sub, push, filter, remove, unset, merge |
| Event emission | stable | emit, emit_each |
| Side effects | stable | submit, schedule |
| Anonymous sessions | stable | Short-lived JWTs for unauthenticated users |
Projection Reliability
| Feature | Status | Notes |
|---|---|---|
| Projection materialization (Kafka → PostgreSQL) | stable | R2DBC, reactive writes |
| Projection worker retry policy | stable | Configurable max retries + backoff |
| Projection failure capture | stable | projection_failures table |
| DLQ routing on failure | planned | Route to causet.projection-dlq.v1 after max retries |
| Projection failure REST API | proposed | REST endpoint for failure records (currently direct DB) |
Deployment gates (causet projections doctor) | planned | Validate projection health before release activation |
| Fixture-based regression testing for projections | planned | Define fixture events in DSL; verify on compile |
| Per-projection health endpoint | planned | Endpoint reporting per-projection lag + failure status |
Workflow Durability (Sagas)
| Feature | Status | Notes |
|---|---|---|
Submit/schedule chains (side_effects) | stable | Fan-out and delayed events across entities — see Workflows |
sagas: DSL — entity state machines | stable | Compiles to event-triggered core rules (op: merge) — no separate execution engine. See Defining Sagas |
Saga failure paths (on_failure routing) | proposed | Declarative failure routing beyond end: true terminal steps |
| External signals to sagas | proposed | Wait for an external event before proceeding to next step |
| Long-running sleep (timer) | proposed | Requires integration with an external scheduler (e.g. EventBridge Scheduler) |
| Workflow observability dashboard | planned | Saga state + step history in control plane UI |
Replay Tooling
| Feature | Status | Notes |
|---|---|---|
causet recovery replay / causet recovery rewind | available | CLI-driven replay from a ledger cursor — see Recovery |
| Zero-downtime rebuild (parallel projection) | proposed | Automated parallel projection + swap workflow |
| Time-travel queries | proposed | Query projection state at a specific past timestamp |
| Replay progress tracking | planned | Expose replay ETA and progress via CLI/UI |
Developer Experience
| Feature | Status | Notes |
|---|---|---|
causet build compile CLI | available | Bundled in causet CLI — see Install |
causet doctor CLI | available | Local diagnostic checks — see causet doctor |
causet dev (compile + watch loop) | available | See causet dev |
| Local dev mode against self-hosted stack | in-progress | Docker Compose stack for team contributors — see Development Setup |
| Monaco editor with DSL schema | in-progress | Control plane UI — DSL schema for autocomplete |
| DSL language server protocol | proposed | IDE integrations for VSCode, IntelliJ |
CLI Completeness
For the authoritative, currently-shipped command set, see the CLI table in Install Causet and the commands used throughout Deployments.
| Command | Status |
|---|---|
causet build compile / causet build validate | available |
causet doctor | available |
causet dev | available |
causet login | available |
causet deploy | available |
causet fork create / list / diff / delete | available |
causet intent / causet query | available |
causet inspect entity / causet inspect timeline | available |
causet recovery replay / causet recovery rewind | available |
causet projections list / doctor / replay | proposed |
causet projections failures list / retry | proposed |
causet migrations apply / status | proposed |
causet events publish | proposed |
causet dlq list / retry | proposed |
Cloud Deployment
| Feature | Status | Notes |
|---|---|---|
| ECS deployment | stable | Used in production (Causet Cloud) |
| Docker Compose (self-hosted local stack) | team contributors | Private source — Docker build and publish workflow — see Installation |
| Terraform modules | in-progress | ECS + RDS + MSK + ElastiCache |
| Kubernetes Helm chart | proposed | Not yet designed |
| AWS CDK constructs | proposed | Not yet scheduled |
Admin UI / Dashboard
| Feature | Status | Notes |
|---|---|---|
| Control plane UI | stable | Release management, fork management |
| Entity browser | stable | gRPC browser exists; web UI in progress |
| Projection health dashboard | planned | Per-projection lag, failure count, last event |
| DLQ management UI | proposed | List, inspect, retry DLQ messages |
| Replay UI | proposed | Trigger replay from control plane |
| Event log viewer | stable | Browse ledger events per entity in UI |
SDK and Client Libraries
Official SDKs live at github.com/Causet-Inc/causet-sdks. Typed clients for TypeScript, Python, Go, Java, and Laravel/PHP — intents, named queries, SSE intent progress, entity state caching, and real-time WebSocket/SSE patches. All are at 0.1.0 with test coverage; registry publishing is in progress for languages outside the JavaScript / TypeScript tier. Docs: SDKs.
Per-language availability, maturity, and production support are tracked at What runs today? — not duplicated here.
| Feature | Status | Notes |
|---|---|---|
| REST API | stable | Stable integration surface |
| WebSocket real-time gateway | available | Consumed by every SDK’s connectStream() |
Source repo (causet-sdks) | available | github.com/Causet-Inc/causet-sdks |
@causet/sdk-core / @causet/sdk / @causet/sdk-node / @causet/sdk-next | available | Shared TS implementation — browser, Node.js 18+, Next.js |
causet-sdk (Python) | in-progress | Async + sync clients |
causet/laravel-sdk | in-progress | Laravel Facade + DI |
causet-sdk-go | in-progress | Go 1.22+ |
com.causet:causet-sdk | in-progress | Java 17+ (0.1.0-SNAPSHOT) |
| npm / PyPI / Packagist / Maven publish | in-progress | In progress |
Usage examples
Every SDK shares the same shape: construct a client from apiUrl + platformSlug + appSlug + apiKey (or a bearer JWT), submitIntent() an intent, runQuery() a named projection, and optionally connectStream() for real-time patches.
TypeScript — @causet/sdk (browser) or @causet/sdk-node (backend)
import { CausetClient } from '@causet/sdk'; // or '@causet/sdk-node'
const client = new CausetClient({
apiUrl: 'https://api.causet.cloud',
platformSlug: 'my-platform',
appSlug: 'my-app',
apiKey: process.env.CAUSET_API_KEY,
});
await client.init();
const result = await client.submitIntent('ticket_stream', 'tkt_1', 'CREATE_TICKET', {
customer_id: 'cust_1',
subject: 'Help',
});
const rows = await client.runQuery('open_tickets', { status: 'open' }, { limit: 20 });
await client.connectStream('ticket_stream', { channels: [{ channel: 'ledger' }, { channel: 'state' }] });
client.on('patch_op', (ev) => console.log(ev.ops));
client.destroy();Next.js — @causet/sdk-next
'use client';
import { useCausetQuery, useCausetSubmitIntent } from '@causet/sdk-next';
function TicketList() {
const { data, loading, refresh } = useCausetQuery('open_tickets', { status: 'open' }, { limit: 20 });
const { submitIntent, pending } = useCausetSubmitIntent();
return (
<ul>
{data?.items.map((row) => <li key={String(row.id)}>{String(row.subject)}</li>)}
<button disabled={pending} onClick={() => submitIntent('ticket_stream', 'tkt_1', 'CLOSE_TICKET', {}).then(refresh)}>
Close first ticket
</button>
</ul>
);
}Python — causet-sdk
from causet_sdk import CausetClient
client = CausetClient(
api_url="https://api.causet.cloud",
platform_slug="my-platform",
app_slug="my-app",
api_key="ck_live_xxx.secret",
)
await client.init()
result = await client.submit_intent("ticket_stream", "tkt_1", "CREATE_TICKET", {
"customer_id": "cust_1", "subject": "Help",
})
rows = await client.run_query("open_tickets", {"status": "open"}, limit=20)
await client.connect_stream("ticket_stream")
client.destroy()PHP / Laravel — causet/laravel-sdk
use Causet\Laravel\Facades\Causet;
Causet::init();
$result = Causet::submitIntent('ticket_stream', 'tkt_1', 'CREATE_TICKET', [
'customer_id' => 'cust_1',
'subject' => 'Billing question',
]);
$rows = Causet::runQuery('open_tickets', ['status' => 'open'], limit: 20);Go — causet-sdk-go
client := causet.NewClient(causet.Config{
APIURL: "https://api.causet.cloud",
PlatformSlug: "my-platform",
AppSlug: "my-app",
APIKey: os.Getenv("CAUSET_API_KEY"),
})
result, _ := client.SubmitIntent("ticket_stream", "tkt_1", "CREATE_TICKET", map[string]any{"subject": "Help"})
rows, _ := client.RunQuery("open_tickets", map[string]any{"status": "open"}, causet.QueryOptions{Limit: 20})
client.ConnectStream(ctx, "ticket_stream", causet.StreamConnectOptions{}, onEvent)
client.On("patch_op", func(ev any) { fmt.Println(ev) })Java — com.causet:causet-sdk
CausetConfig cfg = new CausetConfig();
cfg.apiUrl = "https://api.causet.cloud";
cfg.platformSlug = "my-platform";
cfg.appSlug = "my-app";
cfg.apiKey = System.getenv("CAUSET_API_KEY");
CausetClient client = new CausetClient(cfg);
JsonNode result = client.submitIntent("ticket_stream", "tkt_1", "CREATE_TICKET", Map.of("subject", "Help"));
JsonNode rows = client.runQuery("open_tickets", Map.of("status", "open"), opts);
client.connectStream("ticket_stream", null, event -> System.out.println(event));Full API reference, configuration options, and error handling for each SDK: SDK Overview.
Scaling and Performance
| Feature | Status | Notes |
|---|---|---|
| Horizontal projection worker scaling | stable | Kafka partition-bounded |
| Query service horizontal scaling | stable | Stateless, ALB-backed |
| Redis query result caching | stable | TTL-based |
| Per-tenant Kafka topics | proposed | Currently all tenants share the same topics |
| Shard routing for queries | proposed | Route query requests based on tenant to dedicated DB replicas |
| Connection pooling improvements | planned | PgBouncer or RDS Proxy integration |
AI Memory Layer
| Feature | Status | Notes |
|---|---|---|
op: decision — declarative LLM calls in side_effects | available | AI |
| Vector memory — event ingestion + retrieval | available | Vector Memory |
| Providers, prompts, BYOK | available | Providers & Prompts |
| Support Copilot example | available | Example walkthrough |
| Application memory (deterministic entity state) | available | Application Memory |
Open Source
Causet today is Managed Causet Cloud (managed control plane, controlled early access / waitlist) plus a locally-run causet CLI and Docker stack. A fully self-managed runtime and compiler source release is planned — see the coming-soon tier at What runs today?. Public SDK and template repositories are Apache 2.0 today.
| Feature | Status | Notes |
|---|---|---|
| Managed Causet Cloud (managed control plane) | available | Controlled early access for customer sign-up — Sign up |
causet CLI (install script) | available | curl -fsSL https://install.causet.io/install.sh | bash — see CLI |
| Public documentation site | in-progress | This site |
| Local Docker runtime | available | causet local up — see CLI |
| Open-source, self-managed runtime and CLI distribution | proposed | Planned; see What runs today? |
| Homebrew tap | planned | After native binary distribution ships |
| npm / PyPI / Packagist SDKs | in-progress | @causet/sdk, causet-sdk, causet/laravel-sdk — see SDKs |
| Public changelog | planned | Versioned, linked from docs |
| Outbound HTTP webhook delivery | available | Managed HTTP callbacks from Causet to your app |