One CLI for a self-hosted CMS, Admin, headless API, Next.js themes, plugins, and desktop writing — MIT licensed.
Quick start · Live demo · Theme demo · Docs · 中文
npm i -g @fecommunity/reactpress
mkdir my-site && cd my-site
reactpress init| Surface | URL |
|---|---|
| Public site | http://localhost:3001 |
| Admin | http://localhost:3001/admin/ (admin / admin) |
| API health | http://localhost:3002/api/health |
Requirements: Node.js 20+. Default flow uses embedded SQLite — no Docker or external database.
If startup fails, run reactpress doctor.
Current stable: 4.0.0 on npm
@latest. Use@betaonly for prereleases.
Desktop — offline writing, sync when ready |
Visitor site — search · comments · knowledge base · dark mode |
Official theme demo audit (screenshot): Performance 95, Accessibility 100, Best Practices 100, SEO 100. Re-run on your host and content for current numbers.
WordPress-style editing is hard to replace. Headless CMS tools give you an API — then you still build admin, frontend, and ops. ReactPress is the middle path for React teams:
| Approach | What you get | What you still own |
|---|---|---|
| WordPress | Mature editing | PHP themes / coupled stack |
| Static generators | Fast HTML | Real CMS for non-developers |
| Headless CMS | Flexible API | Admin + frontend + deploy glue |
| ReactPress | CMS + Admin + API + themes + plugins + desktop | Your content and theme code |
Who it is for
- React / Next.js developers who want a self-hosted blog or content site without assembling five repos
- Teams that need writers in an Admin UI and engineers owning a Next.js theme
- Anyone comparing WordPress alternatives, headless CMS options, or a Next.js blog stack
| Layer | What ships today |
|---|---|
| CMS | Posts, pages, media, categories, tags |
| Admin | Writing UI at /admin/ (same SPA in the browser and desktop) |
| API | Headless REST + Swagger |
| Themes | Swappable Next.js visitor frontends (npm-installable) |
| Plugins | Server hooks + optional Admin slots (seo, hello-world, image-optimizer) |
| Desktop | Electron + local SQLite mode; optional remote API + sync |
| CLI | init, doctor, logs, stop |
Content stays in the platform. Presentation stays in your theme (or any headless client).
| ReactPress | WordPress | Static sites | Headless CMS | |
|---|---|---|---|---|
| Editing experience | Yes | Yes | No | Partial |
| Frontend freedom | Yes | Limited | Build-time | Yes |
| Full stack out of the box | Yes | Via plugins | No | No |
| Time to first local site | Minutes (reactpress init) |
Often longer | Fast per site | Setup + assembly |
| Offline writing | Desktop app | No | No | No |
| Default theme Performance | 95¹ | Theme-dependent | Usually high | Depends on frontend |
¹ Lighthouse Performance on the official theme demo (screenshot above). Accessibility / Best Practices / SEO were 100 in that audit.
- vs WordPress — similar editorial workflow; Next.js delivery, no PHP theme lock-in for the public site.
- vs static generators — keep the speed; add a real CMS.
- vs Strapi / Payload — they ship a backend; ReactPress ships CMS + Admin + theme + desktop as one product.
Replaceable Next.js frontends. Install and activate in Admin → Appearance → Themes.
npx create-next-app@latest my-blog \
--example "https://github.com/fecommunity/reactpress-theme-starter" \
--use-pnpm
cd my-blog && pnpm dev:mock- Live: reactpress-theme-starter.vercel.app
- Deploy:
- Guide: themes/README.md
Extend the server without forking core. Manage in Admin → Plugins.
| Plugin | Capability |
|---|---|
seo |
Slug, keywords, meta description + Admin editor slot |
hello-world |
Auto-generate article summaries on publish |
image-optimizer |
Batch WebP optimization for media |
Starter: reactpress-plugin-starter · Guide: plugins/README.md
Same Admin UI, local-first. Local SQLite mode needs no Docker.
| Docs | Desktop client |
| Releases | GitHub Releases (installers when the desktop workflow attaches assets) |
| From source | pnpm dev:desktop · pnpm build:desktop |
Details: desktop/README.md
flowchart TB
subgraph Authoring["Authoring"]
CLI["CLI — init · doctor · logs"]
Admin["Admin — React + Vite · /admin/"]
Desktop["Desktop — Electron · SQLite"]
end
subgraph Core["Platform"]
API["CMS API — NestJS · :3002"]
Plugins["Plugins — hooks"]
DB[("SQLite / MySQL")]
end
subgraph Delivery["Delivery"]
Theme["Active theme — Next.js · :3001"]
Preview["Theme preview · :3003"]
end
CLI --> API
CLI --> Theme
Admin -->|REST| API
Desktop -->|REST| API
Plugins --> API
API --> DB
API -->|JSON| Theme
API --> Preview
Admin -.->|iframe| Preview
| Package | Role |
|---|---|
cli |
Orchestration |
server |
Business rules, auth, hooks, persistence |
web |
Admin SPA |
themes/* |
Visitor SSR/ISR |
plugins/* |
Incremental logic |
desktop |
Electron shell over Admin |
toolkit |
Shared API client and contracts |
Design notes: ARCHITECTURE.md
Headless by default:
curl -H "X-API-Key: YOUR_KEY" \
"http://localhost:3002/api/article/headless/list?status=publish&page=1&pageSize=10"| Resource | Link |
|---|---|
| Swagger (local) | http://localhost:3002/api |
| Theme starter | reactpress-theme-starter |
| Plugin starter | reactpress-plugin-starter |
| Docs | docs.gaoredu.com |
CLI commands & local ports
| Command | Action |
|---|---|
reactpress / reactpress init |
Initialize and start (SQLite + API + theme) |
reactpress init --force |
Re-initialize an existing project |
reactpress doctor |
Diagnose environment and URLs |
reactpress logs |
Tail API logs |
reactpress stop |
Stop API and site services |
| Service | URL / port |
|---|---|
| Public site | http://localhost:3001 |
| Admin | http://localhost:3001/admin/ |
| API | http://localhost:3002/api |
reactpress init runs a local production-style stack (SQLite API + theme with embedded Admin).
- Full-stack hosting (VPS, Docker, PM2, backups): deployment docs
- Theme-only: deploy reactpress-theme-starter and point it at your API
Stable on npm @latest (codename Extend):
- Plugin system — Hook +
plugin.json+ Admin slots - Desktop client — Electron + SQLite local mode, remote sync
- npm theme catalog — installable Next.js themes
4.0 guide · Migrate from 3.x · Changelog
| Item | Tracking |
|---|---|
Plugin npm catalog (reactpress plugin add) |
#89 |
| Desktop tray / shortcuts / auto-update | #91 |
| Theme & plugin marketplace UI | #92 |
Do I need Docker?
Not for the default CLI flow — reactpress init uses embedded SQLite. Docker is only required when you configure MySQL via embedded-docker in .reactpress/config.json. Desktop local mode also uses SQLite without Docker.
Can I use my own frontend?
Yes. Use the headless REST API with API keys. Fork the official theme starter or call /api/article, /api/page, and related endpoints.
How is this different from WordPress?
Similar admin-driven workflow, with a Next.js public site, a clean headless path, and no PHP theme stack for visitors.
Is 4.0 production-ready?
Yes. 4.0.0 is the current stable release on npm @latest. When upgrading from 3.x, validate on staging and read the migration guide.
CONTRIBUTING.md · Code of Conduct · SECURITY.md
MIT · © ReactPress / FECommunity
If ReactPress saves you from wiring CMS + API + frontend yourself, star the repo so other React developers can find it.
