Features

Everything a publication needs, on your own server.

Pyre is one Node.js service and a PostgreSQL database. It serves your content over a clean API, builds fast static sites from it, and handles the parts of publishing that usually mean stitching together three vendors. Here is what runs today.

Publishing core

Content API

A REST API for publications, posts, pages, tags, and users. Write in Markdown; Pyre renders it to HTML and plaintext automatically, keeps slugs unique per publication, and returns everything through a consistent paginated envelope. Scoped API keys and read-only content keys keep each publication isolated.

Astro static themes

Public sites are built with Astro and shipped as static files — no runtime, no client framework, fast by default. Themes pull content from the API at build time, so the live site is plain HTML backed by your own data. Pyre already powers real publications this way.

Full-text search

Search runs on PostgreSQL itself — tsvector indexing with relevance ranking over your published content. No external search service to run, pay for, or keep in sync.

Scheduling engine

Queue a post for the future and Pyre publishes it on time, preserving the intended publish date. A built-in scheduler polls for due content and flips it live — no cron wiring on your end.

Content versioning

Edits are captured as revisions, so a post carries its own history. Your writing has an audit trail instead of a single mutable row.

Audience & membership

Memberships & paid subscriptions

Pyre supports free and paid tiers with server-side paywalling. Stripe Checkout drives subscriptions, webhooks keep status in sync, and the paywall is enforced in the API — a teaser for non-members, the full piece for subscribers. The price is always server-controlled.

Subscriber & newsletter plumbing

The subscriber lifecycle is built in: double opt-in confirmation, unsubscribe, and open/click tracking routes, plus the schema for newsletter issues and per-recipient send jobs. This is the foundation a newsletter runs on — email delivery is the piece we are bringing online next, so it is a capability we are building toward, not a promise we make today.

Ownership & migration

Bring your archive

A Ghost migration pipeline imports an existing site from a SQLite database or a JSON export — posts, pages, tags, and their associations — in a single transaction. It is idempotent, so re-running skips what already imported. More on the migration page.

Multi-publication by design

One Pyre instance can run many publications, each with its own domain, theme, tags, and members. It already runs more than one live site from a single deployment.

See how migration worksBack to overview →