Documentation is English-only for now. The rest of the site follows your language.
How it works
The warm Node process, the public site, the admin SPA, and the difference from a PHP request.
6 min read
Justflows is one Express app. It serves three surfaces from the same process: the admin SPA at /admin, the public HTML site (theme templates), and JSON APIs under /api.
A request, compared
On PHP-FPM, nginx hands the request to a worker that starts a fresh application context, autoloads hundreds of files, registers every plugin, renders, then throws the context away. On Justflows the process is already running.
- 1
The request reaches the warm process
No per-request boot. Gzip, security headers, sessions, and cache middleware are already in place.
- 2
Cached public pages return immediately
A full-page HTML hit (
page:html:) never touches the database or the block renderer. Preview mode and logged-in editors bypass this layer. - 3
Otherwise the router resolves content
Published pages and posts are loaded (often from the object cache), blocks render, menus and theme mods are applied, and the response goes out. The process stays warm.
What boots once
- Active plugins — loaded by the plugin runtime before deferred routes register.
- Hooks — actions, gates, and filters stay registered for the life of the process.
- Block registry — the 18 core blocks plus any plugin blocks.
- jf-cache — one cache singleton per process (
memoryorfilesystem).
Install vs running
Until the browser wizard finishes, mutating APIs and the public site are blocked. /install walks through database, site identity, and the first administrator. It writes STATE=INSTALLED, runs migrations, and creates default settings (active_theme=justflows.default, site_public=false). After that, unauthenticated visitors see under-construction unless an admin publishes the site.
Tip
See Core concepts for the vocabulary (sites, content, blocks, hooks) and Caching for the layers that make most hits cheap.