Run the scaffolder
Point it at a Prosewire deployment and choose the native route.
Run one command to add native blog routes. Prosewire handles the editorial workspace, scheduling, metadata, feeds, and content APIs.
pnpm create prosewire@latestRun locallyView on GitHubSelf-hosted or Cloud
Point it at a Prosewire deployment and choose the native route.
pnpm create prosewire@latest \
--url https://publish.example.com \
--blog fieldnotes \
--route /blogThe command refuses to overwrite a route that already exists.
Style the semantic pw-* hooks or replace the typed components.
Routes written
app/blog/page.tsxapp/blog/[slug]/page.tsxlib/prosewire.tsDependency added
@prosewire/nextDone
Your blog now renders inside the site you already have.Native page preview
May 24, 2026 · Shipyard notes

A quiet morning in the shipyard. Notes on small details, materials, and what lasts.
The scaffolder detects Astro and adds the matching integration package.
pnpm create prosewire@latest \
--url https://publish.example.com \
--blog fieldnotes \
--route /blogStatic projects fetch content at build time. Server projects resolve it per request.
Use injected routes for speed or compose the exported Astro components yourself.
Integration added
astro.config.mjs@prosewire/astroRoutes injected
GET /blogGET /blog/[slug]Done
Native Astro pages, with no bundled stylesheet or client runtime.Native page preview
May 24, 2026 · Shipyard notes

The same content, rendered by Astro and styled by your site.
Use the generated routes or keep the small typed setup in your own codebase.
Read the integration guideimport { createProsewireApp } from "@prosewire/next/app";
export const blog = createProsewireApp({
baseUrl: "https://publish.example.com",
publication: "fieldnotes",
basePath: "/blog",
});import prosewire from "@prosewire/astro";
export default defineConfig({
integrations: [
prosewire({
baseUrl: "https://publish.example.com",
publication: "fieldnotes",
basePath: "/blog",
}),
],
});Self-host the complete stack
The repository includes web, worker, migration, Postgres, and Redis services. Use an immutable tag or commit for production.
Open the Docker Compose guidegit clone https://github.com/prosewire/prosewire.git
cd prosewire
cp .env.example .env
# Replace the local-only credentials, then:
docker compose up -d --build
docker compose psimport { createPublicClient } from "@prosewire/sdk";
const content = createPublicClient({
baseUrl: "https://publish.example.com",
blog: "fieldnotes",
});
const posts = await content.listPosts({
page: 1,
pageSize: 10,
});Published content
{
"items": [
{
"title": "Shipyard Notes",
"slug": "shipyard-notes",
"status": "published"
}
],
"page": 1,
"pageSize": 10
}Compare every delivery optionNeed help? Read the complete integration guide
Point the scaffolder at your Prosewire deployment and publication.
Add native routes and a small typed configuration to your project.
Write in Prosewire, then render the result inside your existing site.
The old approach
The Prosewire approach
Built for editors and developers
Draft, schedule, publish, localize, and organize posts without turning your application into a CMS dashboard.
Explore the workflowBack up the database yourself and export posts, authors, categories, redirects, metadata, and revision snapshots.
Read about exportsProsewire stores versioned revision snapshots with actor data before destructive content changes.
See content historyUse framework routes, semantic HTML, public JSON, or the typed SDK. Prosewire does not force an iframe or a frontend.
Open the API referenceSelf-hosted, always available
Build from the open repository, keep Postgres on infrastructure you trust, and define your own backup and retention policy.
services:
postgres:
image: postgres:17-alpine
volumes:
- prosewire_postgres:/var/lib/postgresql/data
redis:
image: redis:7-alpine
command: [redis-server, --appendonly, "yes"]
migrate:
build: .
command: [node, apps/worker/dist/migrate.mjs]
web:
build: .
ports: ["3000:3000"]
worker:
build: .
command: [node, apps/worker/dist/index.mjs]Read the code, pin a commit, and operate the same stack yourself.
Open GitHubExport publication relationships, revision snapshots, and post fields.
Read about exportsYour deployment owns the database, backups, encryption, and retention policy.
Review operationsQuestions before you start
Yes. The repository is available under the Apache-2.0 license, including the dashboard, APIs, reader, SDK, CLI, and MCP server.
Yes. The scaffolder detects Next.js App Router, Next.js Pages Router, or Astro and writes thin native routes without overwriting an existing route.
No. The framework packages render semantic pw-* markup without a bundled stylesheet or client runtime, so the blog can use your design system.
Yes. Versioned JSON exports include publication relationships and revision snapshots, while CSV covers posts and related identifiers.
The complete stack runs the web app, a worker, one-shot migrations, Postgres, and Redis. The Docker Compose guide covers the topology and production checks.
Yes. Prosewire Cloud runs the platform for you, while the self-hosted project remains available when you need full infrastructure control.
Open source · Apache-2.0 · Self-hosted or Cloud