Build blogs, documentation, company websites, and content-driven applications with React.
Quick start ↓ · Live demo · Theme demo · Docs · 中文
If ReactPress saves you from stitching CMS + API + frontend — a ⭐ helps the next developer find it.
Desktop — offline writing, sync to production
|
Visitor site — search · comments · knowledge base · dark mode
|
Scores on the official theme demo. Production results depend on hosting and content.
npm i -g @fecommunity/reactpress@beta
mkdir my-site && cd my-site
reactpress initRequirements: Node.js 20+ · No Docker or external database
4.x 发布在 npm
@beta标签(@latest仍为 3.x)。
| Surface | URL |
|---|---|
| Public site | http://localhost:3001 |
| Admin | http://localhost:3001/admin/ (admin / admin) |
| API | http://localhost:3002/api/health |
reactpress doctor diagnoses setup issues when something does not start correctly.
| ~60 sec init → live stack |
95 / 100 Lighthouse performance |
MIT self-hosted |
1 CLI full platform |
Working? Star the repo · Open an issue · Read the docs
- See it in action
- 30-second start
- Contents
- The problem
- What is ReactPress?
- What you can build
- Architecture
- Themes
- Plugins
- Desktop-first writing
- Why ReactPress?
- What's new in 4.0
- For developers
- Deploy
- Roadmap (4.x)
- FAQ
- Contributing
Modern content systems force a bad trade-off:
| Path | Trade-off |
|---|---|
| WordPress-style CMS | Great editing — slow themes, coupled PHP stack |
| Static site generators | Blazing fast — no real CMS for non-developers |
| Headless CMS (Strapi, Payload) | Flexible API — you still assemble admin, frontend, deploy |
Frontend teams deserve one publishing platform — not five repos to wire together.
Before With ReactPress
────── ───────────────
Pick a CMS backend → reactpress init
Write & manage content → Admin at /admin/
Visitors see your theme → http://localhost:3001
Something wrong? → reactpress doctor
ReactPress is the publishing system for React developers — build blogs, documentation, company websites, and content-driven applications with React. One CLI, not another headless backend to wire up.
One CLI install. Everything included:
| Layer | What you get |
|---|---|
| CMS | WordPress-style editing — posts, pages, media, categories |
| API | Headless REST — React-first, Swagger-documented |
| Admin | Web writing UI — no separate admin to build |
| Themes | npm-installable Next.js frontends — swappable |
| Plugins | Hook-based extensibility — SEO, summaries, image optimization |
| Desktop | Local-first writing — SQLite, offline, sync upstream |
Content owned by the system. Frontend owned by developers. It is not a CMS — it is a publishing platform.
| Use case | Why ReactPress fits |
|---|---|
| Personal blogs | Admin writing + Lighthouse-fast Next.js theme |
| Developer docs & knowledge bases | Built into official theme + API |
| SaaS marketing sites | Headless API + custom Next.js frontend |
| Multi-editor teams | Web admin for writers, theme repo for engineers |
| Offline-first workflows | Desktop app with SQLite, sync when ready |
flowchart TB
subgraph Authoring["Authoring"]
CLI["CLI<br/>init · dev · doctor"]
Admin["Admin<br/>React + Vite · /admin/"]
Desktop["Desktop<br/>Electron · offline SQLite"]
end
subgraph Core["CMS Core"]
API["CMS API<br/>NestJS · :3002"]
Plugins["Plugins<br/>hooks · in-process"]
DB[("SQLite / MySQL")]
end
subgraph Delivery["Delivery"]
Theme["Active theme<br/>Next.js · :3001"]
Preview["Theme preview<br/>:3003"]
end
CLI -->|"orchestrate"| API
CLI --> Theme
Admin -->|"REST"| API
Desktop -->|"REST"| API
Plugins --> API
API --> DB
API -->|"headless JSON"| Theme
API --> Preview
Admin -.->|"iframe"| Preview
CMS Core → content, media, settings (NestJS)
Admin UI → writing experience (React + Vite)
API Layer → headless access (REST + Swagger)
Theme System → visitor-facing frontend (Next.js, npm)
Plugin System→ extensibility (hooks + Admin slots)
Desktop App → offline writing (Electron + SQLite)
Themes are fully replaceable Next.js frontends — not locked to core. Install and activate them in Admin → Appearance → Themes.
Preview without a backend:
npx create-next-app@latest my-blog --example "https://github.com/fecommunity/reactpress-theme-starter" --use-pnpm
cd my-blog && pnpm dev:mockLive: reactpress-theme-starter.vercel.app ·
Extend without touching core. Install and enable plugins in Admin → Plugins.
| Plugin | Capability |
|---|---|
seo |
Slug, keywords, meta description + Admin editor slot |
hello-world |
Auto-generate article summaries |
image-optimizer |
Batch WebP optimization for media |
Dev guide: plugins/README.md · Starter template: reactpress-plugin-starter
Write offline. Sync when ready. No Docker required.
Download desktop client (macOS / Windows / Linux) · or build from source:
pnpm dev:desktop # monorepo root
pnpm build:desktop # build installerSQLite local storage · offline editing · remote API mode · sync to production · desktop/README.md
| ReactPress | WordPress | Static sites | Headless CMS | |
|---|---|---|---|---|
| Editing experience | Yes | Yes | No | Partial |
| Frontend freedom | Yes | No | Build-time only | Yes |
| Full system out of box | Yes | Via plugins | No | No |
| Time to start | ~1 min | Hours | Fast per site | Setup + assembly |
| Local / offline writing | Desktop app | No | No | No |
| Lighthouse performance | 95² | Theme-dependent | Excellent | Depends on frontend |
vs WordPress — same editing workflow, modern Next.js delivery, no PHP theme bloat.
vs Static generators — keep the speed, add a real CMS.
vs Strapi / Payload — they ship a backend; ReactPress ships the full publishing platform.
Codename Extend — plugins, desktop, npm themes. Still one CLI, one Admin.
npm i -g @fecommunity/reactpress@betaHeadless by default. Connect any frontend via REST.
curl -H "X-API-Key: YOUR_KEY" \
"http://localhost:3002/api/article/headless/list?status=publish&page=1&pageSize=10"| Resource | Link |
|---|---|
| Swagger | http://localhost:3002/api |
| Theme dev | themes/README.md |
| Plugin dev | plugins/README.md |
| Theme starter | reactpress-theme-starter |
| Plugin starter | reactpress-plugin-starter |
CLI commands & ports (local init)
| Command | Action |
|---|---|
reactpress / reactpress init |
Initialize and start (SQLite + API + theme) |
reactpress init --force |
Re-initialize 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 |
Monorepo contributors: see CONTRIBUTING.md and package READMEs under server/, web/, themes/.
reactpress init runs a local production-style stack (SQLite API + theme with embedded admin). For VPS, Docker, PM2, and backups, see the deployment docs.
Theme-only hosting: deploy reactpress-theme-starter and point it at your API.
- Plugin npm catalog
- Desktop auto-update, tray, shortcuts
- Theme & plugin marketplace
Do I need Docker?
No for the default CLI flow — reactpress init uses embedded SQLite. Docker is only needed if you configure MySQL via embedded-docker in .reactpress/config.json. The desktop app also runs on SQLite without Docker.
Can I use my own frontend?
Yes — headless REST API with API keys. Fork the official starter or build against /api/article, /api/page, etc.
How is this different from WordPress?
Same admin-driven workflow, but a faster default theme, a cleaner headless path, and no plugin bloat for a modern React/Next.js frontend.
Is 4.0 production-ready?
4.0 is in active beta (4.0.0-beta.18 at time of writing). The published CLI supports init, doctor, logs, and stop. See the migration guide before upgrading production.
WordPress alternative? Headless CMS? Next.js blog?
Yes — ReactPress targets all three: self-hosted WordPress-style editing, headless REST for custom frontends, and an official Next.js theme with Lighthouse 95 performance out of the box.
Contributing · Code of Conduct · Security
![]() FECommunity |
![]() SleepSheep |
![]() fantasticit |
![]() chenbo29 |
![]() redteav2 |
![]() trashken |
![]() franz007 |
![]() funtime1 |
![]() scottdeift |
![]() TwoDollars666 |
![]() Xiaonan2020 |
redtea |
![]() lsr365400 |












