Define it once. It exists everywhere.
One folder per feature. definition.ts defines the contract, route.ts wires it up, widget.tsx makes it yours. Two required, one you'll always want. 13 platforms. Not generated code that drifts - one living contract that the web UI, CLI, AI agent, MCP server, mobile app, cron system, and dataflow engine all read natively. Change the definition, every platform updates. Delete the folder, the feature ceases to exist everywhere at once.
The spiritual successor to WordPress - for the AI era. Fork it, own it, build your platform. No vendor lock-in. No black box. You own every line.
Linux only (for now). Mac and Windows aren't officially supported yet. Getting it running on either is probably a few Claude Code or Codex prompts away - we just don't have a Mac. PRs and issues welcome.
Interactive CLI broken since v3.2.0.
vibe -i/--interactiveis temporarily disabled. The trade-off was intentional: the entire codebase now runs on CLI and web through the same renderer layer.next-vibe-uihas a CLI equivalent of every component - same props, same types, shadcn-derived for web, Ink-based for terminal. Interactive mode returns once the unified renderer is fully stable.
Migrating from Next.js to TanStack Start + Vite Nitro. Dev already defaults to TanStack - fast cold start, lighter footprint, and still optimizing. Production runs Next.js - stable and proven. The tradeoff: occasional SSR hydration errors in dev that clear on refresh. Actively being resolved.
git clone https://github.com/techfreaque/next-vibe
cd next-vibe
bun installThree commands, three situations:
vibe dev # local development (Docker DB, migrations, seeds, hot reload)
vibe build && vibe start # production, first time
vibe rebuild # production, zero-downtime update after changesOpen the app → Login as Admin (no password in dev) → the setup wizard walks you through AI provider config and admin credentials.
Claude Code (recommended - no API key): claude login, then pick any (claude-code) model in the model selector.
OpenRouter (100+ models, pay per use): paste your key from openrouter.ai/keys.
Works on any VPS. Scales to Kubernetes.
bash scripts/install-docker.sh # Docker deployment
# or: vibe build && vibe start # bare metal
# Point Caddy / nginx at port 3000Kubernetes: kubectl apply -k k8s/ - templates for web, workers, Redis, ingress, namespace.
Connect your dev machine: Admin → Remote Connections → add your local URL. Thea discovers your tools, syncs memories and tasks every 60s. Your machine initiates the connection - no port forwarding needed.
You build a contact form. Support wants a CLI command. The AI needs to file tickets. Mobile needs the same form. Someone asks for an MCP tool. Five implementations. Five places where bugs hide.
NextVibe: describe the feature once - inputs, outputs, validation, permissions, UI hints, error types, translations, examples - and every platform renders it natively.
| # | Platform | Status | What it does |
|---|---|---|---|
| 1 | Web API | ✅ Production | RESTful endpoint, full type safety |
| 2 | React UI | ✅ Production | Data-driven forms and widgets from the definition |
| 3 | CLI | ✅ Production | Every endpoint is a command with auto-generated flags |
| 4 | CLI Package | ✅ Production | Ship your CLI as an installable npm package |
| 5 | AI Tools | ✅ Production | Function-calling schema for any provider - auto-generated |
| 6 | MCP Server | ✅ Production | Model Context Protocol - plug into any AI workflow |
| 7 | Remote Skills | 🚧 Beta | AI-readable skill files for cross-agent capability discovery |
| 8 | Cron / Pulse | ✅ Production | Scheduled execution with per-instance task routing |
| 9 | WebSocket Events | ✅ Production | Real-time pub/sub - in-process or Redis for scale |
| 10 | React Native | 🚧 Beta | Same contract on iOS/Android - NativeWind 5 + Expo Router |
| 11 | Electron | 🚧 Beta | Desktop app from the same build |
| 12 | Vibe Frame | 🚧 Beta | Embed any endpoint as a widget on any website. Federation built in. |
| 13 | tRPC | ⏸ Inactive | Available but replaced by a custom RPC layer |
There is no "API for humans" and "API for AI." There's one contract. Everything reads it.
contact/
definition.ts - The contract (fields, validation, permissions, examples)
route.ts - Wires it to all 13 platforms
repository.ts - Business logic (or inline in route.ts)
i18n/ - Translations (en, de, pl - compile-time checked)
widget.tsx - Custom web/native UI
widget.cli.tsx - Custom terminal UI (Ink)
email.tsx - Transactional email template
db.ts - Drizzle schema
definition.ts and route.ts are required. widget.tsx is optional but you'll want it for any non-trivial endpoint - it's how users actually experience the feature. Everything else is added when needed. Add a field to the definition - web form, CLI flags, AI tool schema, and mobile screen all update. Delete the folder - gone from every platform. No orphans. No cleanup.
Definition · Route · Repository · Widget · All patterns
const { POST } = createEndpoint({
scopedTranslation,
method: Methods.POST,
path: ["contact"],
allowedRoles: [UserRole.PUBLIC, UserRole.CUSTOMER, UserRole.ADMIN],
fields: objectField(scopedTranslation, {
type: WidgetType.CONTAINER,
layoutType: LayoutType.GRID,
usage: { request: "data", response: true } as const,
children: {
name: requestField(scopedTranslation, {
schema: z.string().min(2),
type: WidgetType.FORM_FIELD,
fieldType: FieldDataType.TEXT,
label: "form.fields.name.label",
}),
message: requestField(scopedTranslation, {
schema: z.string().min(10),
type: WidgetType.FORM_FIELD,
fieldType: FieldDataType.TEXTAREA,
label: "form.fields.message.label",
}),
success: responseField(scopedTranslation, {
schema: z.string(),
type: WidgetType.ALERT,
}),
},
}),
errorTypes: {
/* all 9 - exhaustive, compiler enforced */
},
successTypes: { title: "success.title", description: "success.description" },
examples: {
requests: { default: { name: "Jane Smith", message: "Hello!" } },
responses: { default: { success: "Thank you!" } },
},
});From this one file: web renders a form · CLI gets vibe contact --name="Jane" --message="..." · AI gets a function-calling schema · MCP server exposes a tool · validation and permissions identical everywhere.
export const { POST, tools } = endpointsHandler({
endpoint: contactEndpoints,
[Methods.POST]: {
email: [{ render: renderCompanyMail, ignoreErrors: false }],
handler: ({ data, user, locale, logger, t }) =>
ContactRepository.submitContactForm(data, user, locale, logger, t),
},
});allowedRoles: [
UserRole.PUBLIC, // who can call it
UserRole.CLI_OFF, // block CLI + MCP
UserRole.AI_TOOL_OFF, // block AI tool discovery
UserRole.MCP_VISIBLE, // opt-in: appear in MCP tool list
UserRole.REMOTE_SKILL, // opt-in: appear in AGENT.md skill files
UserRole.PRODUCTION_OFF, // disable in production
];The agent operates through the same contracts as every human user. When Thea calls your contact endpoint, she hits the same definition.ts and route.ts as the browser. Same validation. Same permissions. No special API.
A skill is a saved AI configuration: persona, model selection, tool whitelist. Users or the AI create them, favorite them, and on the next turn the model already knows what sub-agents are available.
This is how delegation works. A cheap orchestrator handles the conversation. When it needs serious writing, it calls master-writer - pinned to Claude Opus. Research? researcher - Grok with search tools. The expensive model only runs when that specific capability is needed. Any skill can call any other. Users shape the team; the AI routes automatically.
The generated .md skill file is machine-readable - Claude Code, Cursor, or any MCP client can discover and call skills directly. Skills are context-efficient by design: skill-create pins only help-tool and execute-tool. One call to help-tool returns the full schema for any tool on demand.
+------------------+
| Central Thea | (Production - always on)
| AI team lead |
+--------+---------+
| remote connection (sync every 60s)
+-----------+-----------+
| |
+------+-------+ +------+-------+
| Hermes | | Hermes | (Developer machines)
| Dev Instance | | Dev Instance |
+--------------+ +--------------+
Thea runs 24/7 on production. Talks to users, manages tasks, coordinates work. Not an assistant - the AI team lead.
Hermes is the local worker. vibe remote-connect links your machine. The pulse syncs memories, capabilities, and tasks every 60 seconds. Thea discovers local tools via help(instanceId="hermes"), executes remotely, routes coding tasks to the right machine.
Capabilities: 100+ AI models · skill delegation · persistent memories · tool calling (any endpoint) · task scheduling · MCP · any-to-any modality (text · image · audio · video · music)
A dataflow engine built on the same endpoint pattern. Every node is an endpoint.
DataSource → Indicator → Transformer → Evaluator → Action
An EMA node is vibe analytics/indicators/ema --period=14 --source=leads-created. A threshold evaluator is vibe analytics/evaluators/threshold --value=... --threshold=100. Chain them into a graph. Same contracts. Same type safety.
Graph builder canvas is live in admin. Backtest replays any strategy over history - evaluator calls are intercepted so nothing fires. Mix timeframes freely.
Ships with seeds: lead funnel monitoring, credit economy health, user growth tracking.
Use cases: business metrics · trading strategies · IoT anomaly detection · email deliverability · any pipeline that's data → conditions → actions.
- Translations are compile-time checked.
t("contact.form.fields.name.label")compiles.t("typo.here")is a compiler error. Three languages. - Error types are exhaustive. Every endpoint declares its possible errors. Miss one, compiler fails.
- Schemas flow end-to-end. One Zod schema validates the API, types the hooks, generates CLI flags, constrains the AI tool schema. Zero drift.
vibe checkruns everything. Oxlint + ESLint + TypeScript in parallel. One command. No shortcuts.
430+ endpoints. 2,100,000+ lines. Zero any. Zero unknown casts. Zero runtime type errors.
@next-vibe/checker ships as a standalone npm package for any TypeScript project.
NextVibe is the engine. Unbottled.ai is the product. Like WordPress.org vs WordPress.com - fork and deploy your own, or use ours.
Free speech AI. 100+ models. Users choose their own content filtering level.
- AI Chat - Multi-model, branching message trees, skills, memories, favorites
- Payments - Stripe + NowPayments (crypto), credits, referral program
- Communication - React Email, SMTP/IMAP client, automated campaigns
- Lead System - Journey workflows, CSV import, engagement analytics
- Admin - Auto-generated panels, database studio, health monitoring, cron dashboard
| Metric | Value |
|---|---|
| TypeScript files | 7,000+ |
| Lines of code | 2,100,000+ |
| Endpoint definitions | 430+ |
| Platforms per endpoint | Up to 13 |
| Database tables | 28+ |
| Languages (compile-time checked) | 3 (en, de, pl) |
| Runtime type errors | 0 |
| Layer | Technology |
|---|---|
| Runtime | Bun |
| Language | TypeScript 7 / TSGO (strict mode) |
| Web | TanStack Start + Vite Nitro (dev) · Next.js 16 (prod) · React 19 · Tailwind CSS 4 · shadcn-derived UI |
| Mobile | React Native, NativeWind 5, Expo Router |
| Desktop | Electron 40 |
| Database | PostgreSQL + Drizzle ORM |
| Validation | Zod - one schema, all platforms |
| AI | Claude Code, OpenRouter (100+ models) |
| MCP | Model Context Protocol server |
| Quality | Vibe checker (Oxlint + ESLint + TypeScript) |
| React Email + SMTP/IMAP | |
| Payments | Stripe, NowPayments |
# Dev & production
vibe dev # dev server + Docker DB (add -r to reset)
vibe build # build for production
vibe start # start production + cron tasks
vibe rebuild # check + rebuild + hot-restart (zero downtime)
# Quality
vibe check # lint + typecheck in one command
vibe check src/path file.ts # check specific files
# Database
vibe migrate # run pending migrations
vibe migrate --generate # generate from schema changes
vibe seed / vibe reset # seed / drop + migrate + seed
vibe studio # Drizzle Studio (browser DB GUI)
vibe sql "SELECT ..." # raw SQL
# Any endpoint = a command
vibe web-search "quantum computing"
vibe analytics/indicators/ema --period=14 --source=leads-created
# MCP + remote
vibe mcp # start MCP server
vibe remote-connect --help
vibe help # list everything- Full Index
- Definition · Repository · Route · Database
- i18n · Enum · Seeds · Logger
- Widget (Web) · Widget (CLI/MCP) · Hooks
- Email · Tasks · React Native · Client Repository
Every new platform is a renderer + one permission marker. The definition already has everything it needs.
| # | Platform | What it unlocks |
|---|---|---|
| 1 | Trading Endpoints | Exchange connectivity as first-class endpoints. Feeds Vibe Sense natively - price, P&L, positions as data sources. |
| 2 | Browser Extension | Endpoints as browser actions. Right-click → "Add to leads" → fires. Definition drives the popup UI. |
| 3 | Voice / Telephony | Endpoints callable via phone. Field labels become IVR prompts, Zod validates STT output. TTS + STT already in platform. |
| 4 | Actionable Email | Endpoints callable from email via signed tokens. Approve, confirm, trigger - no browser required. |
| 5 | Spreadsheet / Grid | Collection endpoints as live editable grids. Columns from response fields, validation from Zod. |
| 6 | Webhook Receiver | Inbound webhooks. Definition declares payload schema, validates, feeds Vibe Sense. |
| 7 | GraphQL | Generated live from the registry. No .graphql files. Subscriptions map to WebSocket events. |
| 8 | OpenAPI / Swagger | OpenAPI 3.1 spec generated live. Always current because it IS the definition. |
| 9 | Automation Platforms | Endpoints as Zapier/Make/n8n triggers and actions. Your platform appears as a native app. |
| 10 | Slash Commands | Endpoints as slash commands in Notion, Linear, Slack. |
| 11 | QR / NFC | Endpoints reachable via scan or tap with pre-filled params and signed tokens. |
| 12 | PDF / Documents | Response fields renderable as invoices, contracts, reports. Schema defines structure. |
| 13 | IoT / MQTT | Endpoints as MQTT topics. Sensor → validate → Vibe Sense → anomaly → action. |
| 14 | AR / Spatial | Response fields as spatial UI. Vision Pro, Quest, WebXR. |
| 15 | Print / Label | Structured output as shipping labels, receipts. ZPL for thermal, PDF for standard. |
| 16 | Wearable | Single-action endpoints as watch complications. Vibe Sense signals as glanceable indicators. |
| 17 | Game Engine | Unity/Unreal/Godot SDK calls. Leaderboards, matchmaking, analytics - typed endpoints. |
| 18 | Blockchain | Schemas mapped to smart contract ABI. Zod validates on-chain data. |
| 19 | A2A (Agent-to-Agent) | Google/LF Agent-to-Agent protocol. The definition already contains everything an Agent Card needs. |
| 20 | Remote Tool Rendering | VibeFrame renders remote endpoints without a local server. The definition travels with the widget. |
| # | Feature | What it does |
|---|---|---|
| 1 | Module Store | Registry of plug-and-play feature repos. Clone into your instance with one command. |
| 2 | Import-Aware Setup Wizard | First install scans imports, removes unselected modules. No dead code. |
| 3 | Module Dependency Graph | Static analysis knows which files depend on which features. Safe removals, safe upgrades. |
| 4 | Vibe Sense Polish | Inline param editing, live chart preview, backtest UI, mobile-responsive canvas. |
| 5 | Multi-Tenant | Isolated data, custom branding, per-tenant feature flags and Vibe Sense graphs. |
| 6 | Plugin API | Extend without forking. Plugins register endpoints, tables, seeds, i18n, nav items. |
| 7 | Visual Admin Builder | Drag endpoint widgets onto a canvas. Output is config, not generated code. |
| 8 | Native Parity | Production-ready React Native components. Same types, same props - looks native, not "runs on native." |
| 9 | Federation | VibeFrame renders remote endpoints from connected instances inside your admin panel. |
| 10 | Marketplace & Revenue Share | Module authors publish, set prices, earn on installs. The ecosystem funds itself. |
GPL-3.0 + MIT - Framework core is GPL-3.0 (share improvements back). Everything else is MIT.
vibe check must pass with zero errors. Zero any, unknown, object, @ts-expect-error, as, eslint-disable. Then PR.
Creator: Marcus Brandstatter (max@a42.ch) · AI Contributors: Claude Code, Augment, Cursor