{"id":42382304,"url":"https://github.com/better-stack-ai/better-stack","last_synced_at":"2026-04-02T10:30:54.066Z","repository":{"id":318560791,"uuid":"1071800567","full_name":"better-stack-ai/better-stack","owner":"better-stack-ai","description":"Composable full-stack plugin system for modern React frameworks","archived":false,"fork":false,"pushed_at":"2026-03-05T20:19:07.000Z","size":19602,"stargazers_count":39,"open_issues_count":10,"forks_count":22,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-05T20:30:09.629Z","etag":null,"topics":["blog","drizzle","kysely","next","nextjs","nodejs","open-source","plugins","prisma","react","react-router","react-router-v7","reactjs","saas","shadcn","tanstack","tanstack-start"],"latest_commit_sha":null,"homepage":"https://www.better-stack.ai","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/better-stack-ai.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-10-07T20:39:30.000Z","updated_at":"2026-03-05T17:29:31.000Z","dependencies_parsed_at":"2025-10-23T21:17:55.894Z","dependency_job_id":"7c2b2e9f-f4af-48d9-921f-73b3e1c7a1e6","html_url":"https://github.com/better-stack-ai/better-stack","commit_stats":null,"previous_names":["olliethedev/better-stack","better-stack-ai/better-stack"],"tags_count":44,"template":false,"template_full_name":null,"purl":"pkg:github/better-stack-ai/better-stack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/better-stack-ai%2Fbetter-stack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/better-stack-ai%2Fbetter-stack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/better-stack-ai%2Fbetter-stack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/better-stack-ai%2Fbetter-stack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/better-stack-ai","download_url":"https://codeload.github.com/better-stack-ai/better-stack/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/better-stack-ai%2Fbetter-stack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30236042,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T19:01:10.287Z","status":"ssl_error","status_checked_at":"2026-03-07T18:59:58.103Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blog","drizzle","kysely","next","nextjs","nodejs","open-source","plugins","prisma","react","react-router","react-router-v7","reactjs","saas","shadcn","tanstack","tanstack-start"],"created_at":"2026-01-27T22:14:32.848Z","updated_at":"2026-04-02T10:30:54.060Z","avatar_url":"https://github.com/better-stack-ai.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# @btst/stack — BTST\n\n\u003cdiv align=\"center\"\u003e\n\n**Installable full-stack features for React apps**  \nFramework-agnostic. Database-flexible. No lock-in.\n\n[![npm](https://img.shields.io/npm/v/@btst/stack.svg)](https://www.npmjs.com/package/@btst/stack)\n[![MIT](https://img.shields.io/badge/license-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n[Docs](https://www.better-stack.ai/docs) · [Examples](./examples) · [Issues](https://github.com/better-stack-ai/better-stack/issues)\n\n\u003c/div\u003e\n\n---\n\n## What is BTST?\n\nBTST lets you **install production-ready app features as npm packages**.\n\nInstead of spending weeks building the same things again and again  \n(routes, APIs, database schemas, SSR, SEO, forms…):\n\n```bash\nnpm install @btst/stack\n````\n\nEnable the features you need and keep building your product.\n\n### Available plugins\n\n| Plugin | Description |\n|--------|-------------|\n| **Blog** | Content management, editor, drafts, publishing, SEO, RSS feeds |\n| **AI Chat** | AI-powered chat with conversation history, streaming, and customizable models |\n| **CMS** | Headless CMS with custom content types, Zod schemas, and auto-generated forms |\n| **Form Builder** | Dynamic form builder with drag-and-drop editor, submissions, and validation |\n| **UI Builder** | Visual drag-and-drop page builder with component registry and public rendering |\n| **Kanban** | Project management with boards, columns, tasks, drag-and-drop, and priority levels |\n| **Media** | Media library with uploads, folders, picker UI, URL registration, and reusable image inputs |\n| **OpenAPI** | Auto-generated API documentation with interactive Scalar UI |\n| **Route Docs** | Auto-generated client route documentation with interactive navigation |\n| **Better Auth UI** | Beautiful shadcn/ui authentication components for better-auth |\n| **Comments** | Commenting system with moderation, likes, and nested replies |\n\nEach plugin ships **frontend + backend together**:\nroutes, APIs, database models, React components, SSR, and SEO — already wired.\n\n**Want a specific plugin?** [Open an issue](https://github.com/better-stack-ai/better-stack/issues/new) and let us know!\n\n---\n\n## Why use it?\n\n* **Installable features** – real product features, not just UI\n* **Framework-agnostic** – Next.js, React Router, TanStack Router, Remix\n* **Database-flexible** – Prisma, Drizzle, Kysely, MongoDB\n* **Zero boilerplate** – no manual route or API wiring\n* **Type-safe** – end-to-end TypeScript\n\nYou keep your codebase, database, and deployment.\n\n---\n\n## Minimal usage\n\n```ts title=\"lib/stack.ts\"\nimport { stack } from \"@btst/stack\"\nimport { blogBackendPlugin } from \"@btst/stack/plugins/blog/api\"\nimport { createMemoryAdapter } from \"@btst/adapter-memory\"\n\nexport const { handler, dbSchema } = stack({\n  basePath: \"/api/data\",\n  plugins: {\n    blog: blogBackendPlugin()\n  },\n  adapter: (db) =\u003e createMemoryAdapter(db)({})\n})\n```\n\n```tsx title=\"lib/stack-client.tsx\"\nimport { createStackClient } from \"@btst/stack/client\"\nimport { blogClientPlugin } from \"@btst/stack/plugins/blog/client\"\nimport { QueryClient } from \"@tanstack/react-query\"\n\nexport const getStackClient = (queryClient: QueryClient) =\u003e\n  createStackClient({\n    plugins: {\n      blog: blogClientPlugin({\n        apiBaseURL: \"http://localhost:3000\",\n        apiBasePath: \"/api/data\",\n        siteBaseURL: \"http://localhost:3000\",\n        siteBasePath: \"/pages\",\n        queryClient,\n      })\n    }\n  })\n```\n\nNow you have a working blog with API, pages, SSR, and SEO. See the [full installation guide](https://www.better-stack.ai/docs/installation) for database adapters, auth hooks, and framework-specific setup.\n\n## Database schemas \u0026 migrations\n\nOptional CLI to generate schemas and run migrations from enabled plugins:\n\n```bash\nnpm install -D @btst/cli\n```\n\nGenerate drizzle schema:\n\n```bash\nnpx @btst/cli generate --orm drizzle --config lib/stack.ts --output db/schema.ts\n```\n\nSupports Prisma, Drizzle, MongoDB and Kysely SQL dialects.\n\n---\n\n## Shadcn Registry\n\nEach plugin's UI layer is available as a [shadcn registry](https://ui.shadcn.com/docs/registry) block. Use it to **eject and fully customize** the page components while keeping all data-fetching and API logic from `@btst/stack`:\n\n```bash\n# Install a single plugin's UI (for example, Media)\nnpx shadcn@latest add https://github.com/better-stack-ai/better-stack/blob/main/packages/stack/registry/btst-media.json\n\n# Or install the full collection\nnpx shadcn@latest add https://github.com/better-stack-ai/better-stack/blob/main/packages/stack/registry/registry.json\n```\n\nComponents are copied into `src/components/btst/{plugin}/client/` — all relative imports remain valid and you can edit them freely.\n\n---\n\n## AI Agent Skills\n\nIf you're using an AI coding agent (Cursor, Claude Code, VS Code, OpenAI Codex etc.) you can install the BTST integration skill so your agent understands the plugin system, adapter setup, and wiring patterns out of the box:\n\n```bash\nnpx skills@latest add better-stack-ai/better-stack/.agents/skills/btst-integration\n```\n\nOr manually copy [`skills/btst-integration/SKILL.md`](./.agents/skills/btst-integration/SKILL.md) into your project's agent skills directory.\n\n---\n\n## Examples\n\n* [Next.js App Router](./examples/nextjs)\n* [React Router](./examples/react-router)\n* [TanStack Router](./examples/tanstack)\n\n---\n\n## Learn more\n\nFull documentation, guides, and plugin development:\n👉 **[https://www.better-stack.ai](https://www.better-stack.ai)**\n\n---\n\n## Contributing\n\nBug reports, plugin PRs, and documentation improvements are welcome.\nSee **[CONTRIBUTING.md](./CONTRIBUTING.md)** for the plugin development guide, testing instructions, and submission checklist.\n\n---\n\nIf this saves you time, a ⭐ helps others find it.\n\nMIT © [olliethedev](https://github.com/olliethedev)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbetter-stack-ai%2Fbetter-stack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbetter-stack-ai%2Fbetter-stack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbetter-stack-ai%2Fbetter-stack/lists"}