A library/starter kit that implements the patterns from the Vibe Coding series — event bus, routing, idempotent init, typed returns — behind a simple API, with AI tool contracts built in so that Claude Code, Cursor, and other AI tools generate code that uses these patterns by default, without the vibe coder needing to know they exist.
The CTA from the articles: “I’m building a library that makes this the default. Subscribe to get early access / follow the build.”
The problem is proven:
The building blocks already exist in this repo:
| Pattern | Article | Existing lib |
|---|---|---|
| Event bus | Vibe Coding Part 7 | appkit-core — already has mitt |
| Router + deterministic routing | LLM deterministic article | backendkit — ComputeRouter + DataRouter |
| Provider-agnostic AI calls | LLM cost article | ai-bridge — 8 providers, failover, key rotation |
| Composable use* API | — | extkit, frontend-framework — use* wrappers |
| NLP contracts / code reuse | — | darjs + dar-nlp — find/reuse before writing |
This is not a greenfield idea. It’s a packaging and API-surface problem on top of existing work.
The distribution is already there:
Normal libraries are built for developers who read docs. This one is built for people who describe intent to AI.
Three layers:
// install: npm create vibekit-app
import { on, emit, createRoute } from 'vibekit'
// Event bus in one line
on('user:subscribed', ({ email, page }) => unlockBook(page))
emit('user:subscribed', { email: '[email protected]', page: '/book1' })
// Deterministic routing in one line
const route = createRoute({
'order_lookup': (ctx) => db.getOrder(ctx.id),
'date_calc': (ctx) => addDays(ctx.date, ctx.days),
'_default': (ctx) => ai.complete(ctx.query)
})
A VIBEKIT.md file in every project that documents:
This is the CLAUDE.md for the library. AI reads it and generates correct code the first time.
# VibeKit Contract — this project
## Events
- `user:subscribed` — { email, page, timestamp } — fired by subscribe-modal.js
- `book:unlocked` — { bookId, userId } — fired by book-gate.js
## Routes
- order_lookup → db.getOrder(id)
- _default → ai.complete(query)
## Modules
- SubscribeModal — window.SubscribeModal.show(trigger)
- BookGate — window.BookGate.unlock(bookId)
Pre-built skills that AI tools can invoke:
/vibekit add-event user:subscribed → generates emit + listener stubs/vibekit add-route order_lookup → generates deterministic handler + fallback/vibekit audit → lists all events, finds listeners with no emitter, emitters with no listenervibekit-core)appkit-core’s mitt + signalson(event, handler), emit(event, data), off(event, handler)createRoute(handlers) — deterministic router with _default fallbackvibekit-contracts)vibekit init — scans codebase for emit( calls, generates VIBEKIT.mdvibekit audit — finds orphaned events (emit with no listener, listener with no emit)ab guard pattern generalizedvibekit-skills)/vibekit add-event skill/vibekit add-route skill/vibekit audit skillcreate-vibekit-app)npm create vibekit-app my-projectappkit-core (mitt + signals + xstate)
↓ wraps
vibekit-core (simple API for vibe coders)
↓ introspects
vibekit-contracts (VIBEKIT.md generator + audit)
↓ informs
vibekit-skills (Claude Code skills that use VIBEKIT.md)
darjs stays as the power-user framework. vibekit is the on-ramp — simpler, opinionated, for people who describe intent to AI and need the AI to generate correct code.
Short version (end of Vibe Coding articles):
“The patterns in this article work even better when the library handles them automatically. I’m building VibeKit — a starter kit that bakes these patterns in with Claude Code skills so AI generates event-driven code by default. [Follow the build / subscribe for early access]”
vibekit vs vibejs vs something else? Check npm availability.appkit-core publish-ready or does it need cleanup first?.claude/skills/) or MCP tools, or both?