No black box
Real code, real stack.
Plain TypeScript on a battle-tested runtime. Read it, extend it, take it with you. No vendor lock-in — your repo, your audit trail.
Bun runtime
Hono HTTP layer
Postgres + Drizzle event store + read model
Redis SSE pub/sub for realtime
Zod / jose / Vitest validation, JWT, tests
No Kafka. No EventStoreDB. No NATS. Postgres is everything.
features/incidents.ts
// One file, full backend feature.
import { defineFeature } from "@kumiko/engine"
export default defineFeature("incidents", (r) => {
r.entity({
name: "incident",
fields: { title, severity, status, assignee },
})
r.writeHandler("createIncident", …)
r.projection("open-incidents", …)
r.hook("postSave", notifyOncall)
})