Open-source alternative to Featurebase — AI-powered customer support, feedback management, help center, and changelog — all in one self-hostable platform.
GitHub README does not reliably render repository-local MP4 files as inline video. Click the preview image above, or open the streaming MP4 directly: Watch the KeenAI 2-minute product video.
KeenAI is an open-source, self-hostable, AI-native platform that unifies customer support and product feedback — an open alternative to Featurebase, Intercom, Zendesk, and Canny for small and mid-size teams.
Core values:
- AI-first — Keeni AI Agent built in from day one, targeting 60%+ automated resolution
- All-in-one — Support, feedback, Help Center, and Changelog in a single product
- Self-hostable — Fully open source, data under your control, one-command launch with Bun + SQLite
- Extensible — Plugin architecture for custom Channels, Actions, MCP servers, and AI models
- Modern UX — Notion-style editor, command palette, keyboard-first workflows
- TypeScript end-to-end — One language, full type safety, native fit with the AI SDK ecosystem
| Module | Featurebase equivalent | Status |
|---|---|---|
| Inbox | Support Inbox | ✅ Alpha |
| Channels | Messenger + Email | ✅ Alpha (Widget + Email) |
| Conversations | Conversations | ✅ Alpha |
| Tickets | Customer / Back-office / Tracker | 🚧 Planned |
| Workflows | Workflows | ✅ Alpha (MVP) |
| Keeni AI Agent | Fibi AI Agent | 🚧 Planned |
| Copilot | Copilot | ✅ Alpha |
| Feedback Portal | Feedback Portal | 🚧 Planned |
| Roadmap | Roadmap | 🚧 Planned |
| Changelog | Changelog | 🚧 Planned |
| Help Center | Help Center | 🚧 KB help_center source + search stub(无独立 Portal UI) |
| Surveys | Surveys | 🔮 Later |
| Layer | Choice |
|---|---|
| Language / Runtime | TypeScript 5.6+ · Bun 1.2+ (default) · Node 22 LTS (fallback) |
| HTTP / Backend | Hono (cross-runtime, high performance) · Bun.serve |
| ORM / Migrations | Drizzle ORM (PG / SQLite / D1) · drizzle-kit |
| Database (dual backend) | PostgreSQL 16 (+ pgvector) or SQLite 3.45 (+ sqlite-vec) · Redis 7 (optional) · Meilisearch (optional) |
| LLM SDK | Vercel AI SDK v4 — swap OpenAI / Anthropic / Gemini / DeepSeek / Ollama in one line |
| Agent orchestration | Mastra (Agent + Memory + Workflow + Eval + MCP) |
| MCP (bidirectional) | @modelcontextprotocol/sdk (official TS SDK) |
| Workflow / Queue | Inngest (event-driven) + BullMQ (Redis-heavy queues) |
| Validation / Schema | Zod (shared across frontend and backend) |
| Dashboard / Portal | Next.js 15 · React 19 · Shadcn/ui · Tailwind v4 |
| Messenger Widget | Preact + Vite (< 5KB) |
| Real-time | WebSocket (Bun.serve native) · Redis Pub/Sub |
| SMTP (nodemailer) · IMAP (imapflow) · parsing (mailparser) | |
| Crawling / Documents | crawlee · unpdf · mammoth (docx) |
| Local inference | @xenova/transformers (embedding / rerank · ONNX · no Python) |
| Object storage | S3-compatible (@aws-sdk/client-s3 / MinIO / local fs) |
| Monorepo | Turborepo + pnpm workspaces |
| Lint + Format | Biome |
| Testing | Vitest · Playwright |
| Logging | pino |
| Observability | OpenTelemetry · Prometheus · Grafana · Loki |
| Deployment | bun build --compile → single binary · Docker · Vercel · Cloudflare Workers |
See docs/06-TECH-STACK.md and docs/12-STORAGE-ABSTRACTION.md.
When implementing Keeni Agent / Memory, clone these read-only references at the repo root (gitignored, not committed):
| Local path | Upstream | Related docs |
|---|---|---|
hermes-agent/ |
NousResearch/hermes-agent | 09-AGENT-ENGINE.md |
agentmemory/ |
rohitg00/agentmemory | 10-AGENT-MEMORY.md, 11-RAG-KNOWLEDGE.md |
git clone --depth 1 https://github.com/NousResearch/hermes-agent.git hermes-agent
git clone --depth 1 https://github.com/rohitg00/agentmemory.git agentmemoryEntry points, responsibilities, and boundaries with the Featurebase-style frontend are in docs/00-REFERENCE-REPOS.md.
| Doc | Contents |
|---|---|
| 00-REFERENCE-REPOS.md | Local reference repos: clone setup, code entry points, mapping to docs 09–11 |
| 01-PRD.md | Product requirements (users, scenarios, goals) |
| 02-FEATURES.md | Feature list and Featurebase comparison matrix |
| 03-ARCHITECTURE.md | System architecture |
| 04-MODULES.md | Core module design |
| 05-FRONTEND.md | Frontend UI and Messenger Widget |
| 06-TECH-STACK.md | Tech stack rationale (TS-first) |
| 07-DATA-MODEL.md | Database schema design |
| 08-ROADMAP.md | Phased execution roadmap |
| docs/index.md | Documentation hub |
| DEPLOYMENT.md | Self-host: Docker lite, Bun binary, cloud-shaped deploy |
| MIGRATION.md | Intercom / Zendesk import (keenai import stub) |
| GA.md | Release checklist (v0.2.0 = Phase 0~3 complete) |
| Doc | Contents | References |
|---|---|---|
| 09-AGENT-ENGINE.md | Keeni Agent runtime: Plan-Act-Observe-Reflect loop, personality, context assembly, multi-LLM providers, tools/MCP, skill learning, subagents, sandbox, cron | hermes-agent + Mastra |
| 10-AGENT-MEMORY.md | Keeni Memory: 4-layer consolidation, hook pipeline, memory slots, hybrid retrieval (BM25 + vector + graph), decay, contradiction detection, KG, team memory, GDPR | agentmemory |
| 11-RAG-KNOWLEDGE.md | KB / RAG: multi-source connectors, chunking, contextual retrieval, hybrid retriever, reranker, knowledge graph, i18n, versioning, eval harness | AgentMemory + Anthropic + LlamaIndex.ts |
| Doc | Contents |
|---|---|
| 12-STORAGE-ABSTRACTION.md | Storage abstraction: Store / VectorStore / FTSStore + Drizzle dual-dialect (PG pgvector ⟷ SQLite sqlite-vec), migrations, contract tests |
| 13-WORKFLOW.md | Workflow engine: Featurebase-style workflows (13 triggers / 21 actions) + Inngest execution, React Flow builder, versioning, shadow runs, eval harness |
| 14-MULTIMODAL.md | Multimodal messaging: text / image / audio / video / file — canonical MessagePart model, inbound adapters, media pipeline, Agent vision/STT, outbound rendering |
| 15-MEMORY-TREE.md | Memory Tree: OpenHuman-style summary trees (source / topic / global), bucket-seal pipeline, hotness, on top of Keeni 4-layer memory |
cp .env.example .env
pnpm install
pnpm db:migrate # Apply LibSQL migrations
pnpm seed # Demo account: owner@keenai.local / keenai-demo-12
pnpm dev # API :8090 + Dashboard :3000/inbox
pnpm test
pnpm smoke # API smoke test: health + login + /me + conversations (requires dev + seed)
pnpm kb:eval # KB golden retrieval eval (Vitest)
pnpm kb:bench # KB search load test (requires dev + seed; see docs/DEPLOYMENT.md)
pnpm keenai import intercom --file ./export.zip --org-slug demo --dry-run
pnpm storybook # Design system → http://localhost:6006API smoke test (separate terminal, after pnpm dev):
pnpm db:migrate && pnpm seed # First run
pnpm smoke # or: bash scripts/smoke.shkeenai/
├── apps/
│ ├── api/ @keenai/api
│ └── dashboard/ @keenai/dashboard (Inbox)
├── packages/
│ ├── shared/ @keenai/shared
│ ├── storage/ @keenai/storage (+ Drizzle migrations)
│ ├── auth/ @keenai/auth
│ └── ui/ @keenai/ui (design system + Storybook)
├── infra/ Docker · Compose
└── docs/ Design docs
Matches the monorepo layout in 06-TECH-STACK.md §2.
| Method | Path | Description |
|---|---|---|
GET |
/api/v1/conversations |
Inbox list (?status=&brandId=&cursor=) |
POST |
/api/v1/conversations |
Create conversation (optional initialMessage) |
GET |
/api/v1/conversations/:id |
Conversation detail |
GET |
/api/v1/conversations/:id/messages |
Message history |
POST |
/api/v1/conversations/:id/messages |
Send message (agent / internal note) |
GET |
/api/v1/conversations/:id/stream |
SSE real-time events |
GET |
/api/v1/conversations/:id/ws?access_token= |
WebSocket (Bun runtime) |
Full Alpha details: docs/ALPHA.md.
KeenAI supports three deployment profiles:
Indie / self-hosted single machine / demo — API + Dashboard containers, LibSQL single-file database.
git clone https://github.com/ai77/keenai.git
cd keenai
docker compose --profile lite up --build -d
# or: pnpm docker:lite
# Dashboard: http://localhost:3000 (owner@keenai.local / keenai-demo-12)
# API: http://localhost:8090Local development (no Docker):
cp .env.example .env
pnpm install && pnpm db:migrate && pnpm seed
pnpm dev # API :8090 + Dashboard :3000
pnpm smokeFor mid-size teams / SaaS deployments.
docker compose --profile standard up -dEdge: Cloudflare Workers (Widget API)
Web: Vercel (Dashboard / Portal / Help Center)
API: Vercel Functions / Fly.io / Railway (Hono + Bun)
Queue: Inngest Cloud
DB: Supabase / Neon / Turso
Vector: pgvector / Qdrant Cloud
Migrating from Lite to Standard:
bunx keenai migrate-backend --from sqlite --to postgres(includes vector index rebuild).
Phase 1 (M1–M3) MVP: Inbox + Messenger + Email + Basic AI Reply
Phase 2 (M4–M6) Workflows + Tickets + Feedback Portal
Phase 3 (M7–M9) Keeni AI Agent + Help Center + Roadmap
Phase 4 (M10–M12) Changelog + Copilot + Multi-brand
Phase 5 (M13+) Plugin marketplace + Enterprise (SSO / SAML / Audit Log)
See docs/08-ROADMAP.md.
AGPL-3.0 — Same license model as Plausible, Cal.com, PostHog, and Supabase: SaaS deployments must contribute back.
Issues, PRs, and Discussions are welcome. See CONTRIBUTING.md.
| Purpose | Recommended | Notes |
|---|---|---|
| API runtime | Bun 1.2+ | pnpm dev:api · WebSocket · Bun integration tests |
| Package manager / build | pnpm 9+ + Node 22 | Dashboard, UI, Vitest, Biome |
| Database migrations | pnpm | pnpm db:migrate (resolves paths to monorepo root from any cwd) |
The API requires Bun; Dashboard and tests run on Node only.
