The full-stack framework that doesn’t make you choose.
Most Node frameworks pick a side — frontend OR backend, structure OR flexibility, batteries OR modularity. Rudder refuses the tradeoff. Real backend wired to a Vite-fast frontend, AI built in, every layer modular, all TypeScript.
Full-stack without compromise
Real backend — DI container, expressive ORM, queues, mail, scheduling — wired to a Vite-fast frontend with controller-returned SSR views and full SPA navigation. Not API-first with a frontend bolt-on. Both, properly.
AI-native, not bolted-on
Agents, tool calling, streaming, conversations, structured output across 15 providers (Anthropic, OpenAI, Google, Ollama, Groq, DeepSeek, xAI, Mistral, Cohere, Jina, Azure, OpenRouter, Bedrock, ElevenLabs, Voyage). MCP servers expose your tools so Claude, Cursor, and ChatGPT can call them directly.
One server, every protocol
HTTP, WebSocket pub/sub, and Yjs CRDT collaboration on the same port — same DI container, same auth. No proxy, no second process. Real-time is a feature, not an architecture decision.
Modular, not monolithic
48 first-party packages. Start with three; add only what your app needs. Adapters swap freely — Prisma ↔ Drizzle, BullMQ ↔ Inngest, local ↔ S3. Provider auto-discovery handles wiring.
UI-agnostic by default
React, Vue, Solid, vanilla HTML — or no frontend at all (pure API mode is first-class). Vike handles SSR and SPA nav; you pick the renderer. Switching later doesn’t mean rewriting your backend.
Strict TypeScript, runs everywhere
Strict mode by default — type-checked from controller param to ORM result to view prop. WinterCG-compatible runtime: the same bootstrap/app.ts runs on Node, Bun, Deno, and Cloudflare Workers. No vendor lock-in.
From zero to running in three commands.
The scaffolder asks you a handful of questions, generates a working project, and runs providers:discover for you.
$ npm create rudder@latest my-appPick packages, frameworks, and a database — or none of the above.$ cd my-app && npm installInstalls the packages you picked plus the framework runtime.$ npm run devVike dev server on :3000. Edit app/Views/* to see SPA-fast HMR.
Every layer is its own package.
Use what you need. Skip what you don’t. The Rudder CLI auto-discovers providers from your package.json so adding a layer is one install.
@rudderjs/coreCoreApplication bootstrap, DI container, service providers, events, validation.
@rudderjs/routerHTTPDecorator + fluent router, named routes, signed URLs, route middleware.
@rudderjs/viewHTTPController-returned views rendered through Vike SSR — React, Vue, Solid, or vanilla HTML.
@rudderjs/ormDataEloquent-style models on Prisma or Drizzle. Relations, scopes, casts, factories.
@rudderjs/authDataSessions, password reset, email verification, Gates and Policies.
@rudderjs/queueJobs & infraBackground jobs with sync, BullMQ, or Inngest drivers. Chains, batches, retries.
@rudderjs/mailJobs & infraTransactional email with templates, queued sends, and provider-agnostic adapters.
@rudderjs/cacheJobs & infraMulti-driver cache with tags and atomic operations.
@rudderjs/storageJobs & infraFilesystem facade with named disks. Local + S3-compatible drivers.
@rudderjs/aiAIProvider-agnostic agents, tool calling, streaming, attachments, structured output.
@rudderjs/mcpAIExpose tools over the Model Context Protocol. Servers from your own provider classes.
@rudderjs/telescopeDevxInspector for requests, queries, jobs, mail, AI calls, exceptions, and logs.
Every package is published to npm and pinned to a single semver line. Nightly CI verifies the framework still installs from scratch.
One mental model, every layer.
Controllers return views. Models query the database. Jobs queue work. Agents call tools. The same TypeScript ergonomics from the HTTP edge all the way to the database row.
Routing
Explicit routes in routes/web.ts and routes/api.ts. Named routes, route middleware, decorator-based controllers, and signed URL helpers — all type-checked.
routes/web.tsHTTPimport { Route } from '@rudderjs/router'
import { view } from '@rudderjs/view'
import { AuthMiddleware } from '@rudderjs/auth'
Route.get('/posts/:slug', async (req) => {
const post = await Post
.with('author', 'comments')
.where('slug', req.params.slug)
.first()
return view('posts.show', { post })
}, [AuthMiddleware()])
.name('posts.show')Every snippet on this page is real, runnable, and shipped in the framework you can install above.
Built-in. Not bolted on.
Every package follows the same conventions, the same DI container, and the same configuration shape. Adding a layer is one install — not a weekend of integration.
Controllers + routing
Explicit routes with middleware, params, named routes, and signed URLs. Decorator controllers when you want them.
Expressive ORM
Active-record models on Prisma or Drizzle. Relations, scopes, eager loading, casts, observers, factories — all in TypeScript.
Controller views
Return view() from a controller. Rendered through Vike SSR with full SPA navigation. Vue, React, Solid, or vanilla HTML.
Rudder CLI
make:* generators, queue workers, scheduler, db:seed, and provider auto-discovery — npm rudder for the full list.
Queues + mail + cache + storage
First-party packages for background jobs, transactional email, multi-driver cache, and S3-compatible file storage.
Auth + Policies
Session guards, password reset, email verification, and Laravel-style Gate/Policy authorization — all in one package.
Agents + structured output
Build AI agents with @rudderjs/ai. Tool calling, streaming, conversations, attachments, middleware, and structured output.
MCP servers
Expose tools over the Model Context Protocol. Your provider classes become tools any MCP client can call.
Telescope inspector
Records requests, queries, jobs, mail, AI calls, exceptions, and logs — with a JSON API and a built-in dashboard UI.
This site is built with Rudder.
Marketing pages, docs, search, OG images, the markdown render pipeline — all of it runs on the framework you just installed. The repo is open. Nightly CI bumps every @rudderjs/* package to the latest published version and rebuilds. If a release breaks the site, an issue opens automatically.
Read the source- Pinned to PUBLISHED @rudderjs/* versions — not workspace links — so the npm install path is always proven.
- Two-page surface area: marketing homepage + 68 markdown docs.
- Three-column docs site with sidebar, prose, sticky TOC, and a ⌘K search palette.
- No auth, no DB, no cache provider — just the framework, used the way you would.
Rudder steers the structure. Pilotiq sets the course.
Rudder is the framework. Pilotiq is the AI-powered admin panel installed on top — the place where content, SEO, docs, help center, and brand work happens. Use either alone, or both together: the scaffolder asks if you want the panel.
- DI container, ORM, controllers, queues, mail, AI, MCP.
- Conventions for routing, validation, auth, observability.
- Open source, MIT, free forever — self-host on anything that runs Node.
- AI-powered admin panel for any Rudder app.
- 30+ specialist agents — SEO, GEO, content, docs, help center.
- Open-core CMS, paid agent + AI plugins. Self-host or hosted.
During scaffolding, npm create rudder asks: "Do you want the Pilotiq admin panel?". Answer no, and you get the bare framework. Answer yes, and the panel is wired in.
One command. Real project.
The scaffolder picks packages, scaffolds providers, runs auto-discovery, and starts the dev server.
Build the API. Render the page. Ship the agent.
One framework, one mental model, end to end.