Install the Blog Plugin

Install @vitnode/blog, enable its API and TanStack Start integration, then publish your first article in AdminCP.

@vitnode/blog is the Content Engine reference plugin. It brings articles, categories, editorial screens, revisions, public delivery data, and search indexing—without making your host app impersonate a blog plugin.

Install the package

Install @vitnode/blog
bun add @vitnode/blog@canary

Enable the API plugin

For a Single App, edit apps/web/src/vitnode.api.config.ts; a split deployment uses the same change in apps/api/src/vitnode.api.config.ts.

apps/web/src/vitnode.api.config.ts
import { blogApiPlugin } from '@vitnode/blog/config.api'

export const vitNodeApiConfig = buildApiConfig({
  plugins: [
    blogApiPlugin(), 
  ],
})

Enable the web plugin

One line, and it brings the blog's pages, its AdminCP screens and its translations with it - your build reads the factory and writes the loaders into src/package-messages.gen.ts for you:

apps/web/src/vitnode.config.ts
import { blogPlugin } from '@vitnode/blog/config'

export const vitNodeConfig = buildConfig({
  plugins: [
    blogPlugin(), 
  ],
})

Migrate, run, and publish

Prepare and start the blog
bun run db:migrate
bun dev

In AdminCP, create a category at Blog → Categories, then publish an article at Blog → Articles. The plugin owns the editorial work so the host can stay boringly reliable.

Deliver it from a plugin

Build the public article page in a plugin too, then use the Content Engine delivery guide for loaders and SEO. That keeps the data model and its public URL together.