Better Blog

Memory DB provider (dev)

Quick-start data provider for development and demos

Use the in-memory demo provider to get started quickly without a real database. It's great for local development, prototyping, and testing the library's integration before wiring a real database.

When to use it

  • Spin up Better Blog quickly without setting up a DB
  • Demo and prototype routes, UI, and overrides
  • Replace later with your own provider (DB, CMS, API)

Import

import { createDemoMemoryDBProvider } from "better-blog";

This returns a BlogDataProvider with seeded demo posts and tags.

Shared usage pattern

Define the provider once in a shared module (e.g. src/lib/blog-provider.ts) and reuse it on the server (SSR adapter) and in API routes.

// src/lib/blog-provider.ts
import { createDemoMemoryDBProvider } from "better-blog";

export const provider = createDemoMemoryDBProvider();

Use with server adapter (SSR/SSG)

// Example: Next.js App Router (app/posts/[[...all]]/page.tsx)
import { getDefaultQueryClient } from "better-blog";
import { createServerAdapter } from "better-blog/server";
import { provider } from "@/lib/blog-provider";

const queryClient = getDefaultQueryClient();
const serverAdapter = createServerAdapter(provider, queryClient);

export default function BlogPage() {
  const { Entry } = serverAdapter;
  return <Entry queryClient={queryClient} />;
}

Use with API routes

See the API routes guide for full details. Minimal example:

// Next.js (app/api/posts/[...all]/route.ts)
import { createBlogApiRouter } from "better-blog/server/api";
import { provider } from "@/lib/blog-provider";

const { handler } = createBlogApiRouter(provider, {
  openapi: { disabled: false },
});

export const GET = handler;
export const POST = handler;
export const PUT = handler;
export const DELETE = handler;
// TanStack Start (src/routes/api/posts/$.ts)
import { createServerFileRoute } from "@tanstack/react-start/server";
import { createBlogApiRouter } from "better-blog/server/api";
import { provider } from "@/lib/blog-provider";

const { handler } = createBlogApiRouter(provider, { basePath: "/api/posts" });

export const ServerRoute = createServerFileRoute("/api/posts/$").methods({
  GET: async ({ request }) => handler(request),
  POST: async ({ request }) => handler(request),
  PUT: async ({ request }) => handler(request),
  DELETE: async ({ request }) => handler(request),
});

Notes

  • The memory provider is for development only; data resets on server restart.
  • Swap it out for a real BlogDataProvider (database, CMS, or API-backed) when ready.