Installable full-stack features for React apps
Framework-agnostic. Database-flexible. No lock-in.
Better Stack lets you install production-ready app features as npm packages.
Instead of spending weeks building the same things again and again
(routes, APIs, database schemas, SSR, SEO, forms…):
npm install @btst/stackEnable the features you need and keep building your product.
| Plugin | Description |
|---|---|
| Blog | Content management, editor, drafts, publishing, SEO, RSS feeds |
| AI Chat | AI-powered chat with conversation history, streaming, and customizable models |
| CMS | Headless CMS with custom content types, Zod schemas, and auto-generated forms |
| Form Builder | Dynamic form builder with drag-and-drop editor, submissions, and validation |
| UI Builder | Visual drag-and-drop page builder with component registry and public rendering |
| Kanban | Project management with boards, columns, tasks, drag-and-drop, and priority levels |
| OpenAPI | Auto-generated API documentation with interactive Scalar UI |
| Route Docs | Auto-generated client route documentation with interactive navigation |
| Better Auth UI | Beautiful shadcn/ui authentication components for better-auth |
Each plugin ships frontend + backend together: routes, APIs, database models, React components, SSR, and SEO — already wired.
Want a specific plugin? Open an issue and let us know!
- Installable features – real product features, not just UI
- Framework-agnostic – Next.js, React Router, TanStack Router, Remix
- Database-flexible – Prisma, Drizzle, Kysely, MongoDB
- Zero boilerplate – no manual route or API wiring
- Type-safe – end-to-end TypeScript
You keep your codebase, database, and deployment.
import { betterStack } from "@btst/stack"
import { blogBackendPlugin } from "@btst/stack/plugins/blog/api"
import { createMemoryAdapter } from "@btst/adapter-memory"
export const { handler, dbSchema } = betterStack({
basePath: "/api/data",
plugins: {
blog: blogBackendPlugin()
},
adapter: (db) => createMemoryAdapter(db)({})
})import { createStackClient } from "@btst/stack/client"
import { blogClientPlugin } from "@btst/stack/plugins/blog/client"
import { QueryClient } from "@tanstack/react-query"
export const getStackClient = (queryClient: QueryClient) =>
createStackClient({
plugins: {
blog: blogClientPlugin({
apiBaseURL: "http://localhost:3000",
apiBasePath: "/api/data",
siteBaseURL: "http://localhost:3000",
siteBasePath: "/pages",
queryClient,
})
}
})Now you have a working blog with API, pages, SSR, and SEO. See the full installation guide for database adapters, auth hooks, and framework-specific setup.
Optional CLI to generate schemas and run migrations from enabled plugins:
npm install -D @btst/cliGenerate drizzle schema:
npx @btst/cli generate --orm drizzle --config lib/better-stack.ts --output db/schema.tsSupports Prisma, Drizzle, MongoDB and Kysely SQL dialects.
Full documentation, guides, and plugin development: 👉 https://www.better-stack.ai
If this saves you time, a ⭐ helps others find it.
MIT © olliethedev