Your blogs and brochure sites, 100× faster, at a fraction of the cost.
BookPress serves WordPress sites from a compiled native engine instead of the PHP stack. Same themes, same admin, same URLs, and no cache in front of any of it. The 100× is measured on a site with no plugins installed, against a fully tuned WordPress; with WooCommerce it is 1.9×, and on Elementor the two are close. Every number, and the stacks behind them →
Front page, keep-alive p50, Google Cloud c2-standard-4, WordPress 7.1, 2026-09-03. BookPress is done before the ruler leaves zero, and Optimized WP's 0.55 ms is its best case: a verified warm cache hit.
A real WordPress site. Sign in and write a post.
Every number on this site is one you can go and check, and this is where you check it. trybookpress.dev is the Extendable block theme running WooCommerce and Elementor — and, under those two, Yoast SEO, Contact Form 7, Yoast Duplicate Post and Hello Dolly. All of them are active at once, served by a BookPress installed from our apt repository the way the documentation tells a customer to; the build it is on is published by the machine itself rather than typed here. Nothing caches pages in front of it, so every page you load is rendered from scratch while you wait, on a machine that costs about four dollars a month.
- Sign in as
demo/demoand publish something from the block editor. - Open wp-admin. The dashboard, the post list, the media library, the settings screens. It is WordPress's admin, served by the same engine.
- Ask for a page no cache could have kept. Search for a word, open
a category, walk to
/page/2/, append?p=1to the domain, ask for a URL that does not exist. - See what the plugins do to the page. Yoast writes the whole crawler head — view source and there is exactly one description and one canonical, Yoast's, because the engine stands aside when an SEO plugin claims them. Contact Form 7 renders and validates a form. Duplicate Post adds its row actions to the post list.
- Read what it cannot do. The demo carries its own page listing what is missing on it today, and what this runs lists every version on it as of the last reset.
It resets every 30 minutes, and everything on it is public until it does. Anything you type is visible to every other visitor and is then deleted, so please do not put anything into it that you would not write on a postcard.
- Engine
- what this runs
- Theme
- Extendable 2.1.9
- Plugins
- WooCommerce 11.0.1Elementor 4.2.3 Yoast SEO, Contact Form 7, Yoast Duplicate Post and Hello Dolly — all active
- Machine
- Google Cloud e2-micro
2 shared vCPU, 969 MB - Page cache
- none
- Sign in
- demo / demo
- Resets
- every 30 minuteson the hour and the half hour, UTC
The smallest instance Google Cloud sells. One native process and one SQLite file, and that is the whole stack.
Three stacks, one machine, the same site.
WordPress is the official Docker image: Apache, mod_php, OPcache, MariaDB, no page cache. Optimized WordPress is that same stack with WP Super Cache installed and switched on. BookPress is BookPress. Every cache hit below is verified before it is timed, by the response header, by WP Super Cache's own marker, by a page-generation timestamp that stops changing between requests, and by the cache file on disk. All latencies are keep-alive p50 from the same client at the same settings, each stack measured with the other two stopped.
Methodology: one machine, identical theme and content,
each stack measured with the other two stopped. WordPress is the official
Docker image: Apache, mod_php, OPcache, MariaDB, no page cache. Optimized
WordPress is that same stack plus WP Super Cache, tuned the way a competent
host would tune it, with the cache hit proven before any sample is taken.
Latencies are keep-alive p50 at one connection, 200 requests
per run, median of three runs — they are how long one page takes, not
how many the box can serve, and more cores do not shorten them: a bigger box
raises WordPress's throughput and never makes a single page render faster.
The capacity chart is a separate test with a separate client at 16 concurrent
connections. Every stack compresses, and both figures include it. The machine
is a Google Cloud c2-standard-4, which you can rent and check,
and the WordPress on it is 7.1 with WP Super Cache 3.1.3, measured on
2026-09-03. Treat the ratios as the claim rather than the absolute numbers,
and subtract the transport floor in the table to compare the engines
directly.
This is a site with two posts, on every leg, and that travels with every number above. Each engine serves its own stock seed — Hello world! and Sample Page — on Twenty Twenty-Five. Both engines' page cost grows with content and neither grows the same way, so nothing here predicts the ratio on a site with five thousand posts. It is the run a reader can reproduce in ten minutes on a fresh install, which is what it is for; seeding the WordPress legs to a real content size is work this harness has not done yet, and we would rather say that than let the number be read as a promise it is not making.
Part of this gap is not our doing, and we would rather say so. A fortnight earlier the same harness on the same machine shape measured the WordPress leg at 37.8 ms rather than 42.9 ms. What changed was WordPress: 7.0.4 to 7.1, and WP Super Cache 3.1.1 to 3.1.3. BookPress did not measurably move — every one of its cells is within 0.01 ms of its August value except the front page, which went 0.18 to 0.16 ms — and the transport floor, the control this benchmark carries precisely so a machine change would show, read 0.16 / 0.16 / 0.06 ms on both runs. So the ratio rose from about 215× to about 272× on the harness's own line, and roughly half of that rise is WordPress getting slower. The ratios printed on the chart are the two bars beside them divided, which you can check by eye; the harness computes its own from unrounded medians and prints 272× and 220× for this run.
The memory row is the stock stack, and it is the small version of the memory claim. 271 MB is Apache, mod_php and MariaDB from the official image. A WordPress tuned the way a busy host tunes one — nginx, a 65-child PHP-FPM pool, Redis and MariaDB — needs about 1.9 GB at peak to serve the same plugin-free page, against about 12 MB for BookPress. That measurement, and the 157× it gives, is on the technology page with the stack it was taken against.
Numbers as a table
| WordPress | Optimized WordPress | BookPress | |
|---|---|---|---|
| Front page, cache miss (p50) | 42.9 ms | 43.1 ms | 0.17 ms |
| Front page, cache hit (p50) | 42.3 ms | 0.55 ms | 0.16 ms |
| Blog post, cache miss (p50) | 49.3 ms | 50.2 ms | 0.26 ms |
| Blog post, cache hit (p50) | 49.4 ms | 0.56 ms | 0.27 ms |
Search ?s=hello (p50) | 44.2 ms | 44.9 ms | 0.20 ms |
| Transport floor, subtract to compare engines | 0.16 ms | 0.16 ms | 0.06 ms |
| Pages/s, 16 concurrent, front page (1 worker) | 53 | 3,997 | 7,080 |
| Pages/s, 16 concurrent, front page (4 workers) | 53 | 3,997 | 11,618 |
| Pages/s, 16 concurrent, page the cache can't serve | 52 | 52 | 11,674 |
| Memory, whole stack (1 worker) | ~271 MB | ~205 MB | ~14.0 MB |
| Memory, four-worker pool (PSS) | — | — | ~14.6 MB |
| Transfer size, front page (gzip) | 11.8 KB | 11.9 KB | 4.1 KB |
| Front page, gzip negotiated (p50) | 43.1 ms | 1.7 ms | 0.47 ms |
| WordPress | Optimized WordPress | BookPress | |
|---|---|---|---|
| Front page, cache miss (p50) | 28.8 ms | 30.8 ms | 0.11 ms |
| Front page, cache hit (p50) | 28.7 ms | 0.41 ms | 0.11 ms |
| Blog post, cache miss (p50) | 33.4 ms | 34.9 ms | 0.15 ms |
| Blog post, cache hit (p50) | 33.4 ms | 0.42 ms | 0.15 ms |
Search ?s=hello (p50) | 30.3 ms | 31.1 ms | 0.12 ms |
| Transport floor, subtract to compare engines | 0.11 ms | 0.11 ms | 0.05 ms |
| Pages/s, 16 concurrent, front page (1 worker) | 115 | 6,587 | 10,131 |
| Pages/s, 16 concurrent, front page (4 workers) | 115 | 6,587 | 24,742 |
| Pages/s, 16 concurrent, page the cache can't serve | 113 | 111 | 24,607 |
| Memory, whole stack (1 worker) | ~268 MB | ~204 MB | ~13.3 MB |
| Memory, four-worker pool (PSS) | — | — | ~14.0 MB |
| Transfer size, front page (gzip) | 11.8 KB | 11.9 KB | 4.1 KB |
| Front page, gzip negotiated (p50) | 29.8 ms | 1.4 ms | 0.28 ms |
Both machines, because we ship both and had
published neither ARM figure until now. The two are not the same
amount of machine: “4 vCPU” is two physical cores with two
threads each on the c2, and four real cores on the
c4a. Every leg is faster on the c4a, WordPress
included, so most of that column is the machine rather than anything
architecture-specific about us. The one number that is about our code is
what a second, third and fourth worker buy: 2.44× going from
one worker to four on the c4a, against 1.64× on the
c2 — which is the SMT boundary, four real cores
against two. If you are choosing hardware, that is the finding. Neither
figure is a capacity ceiling: the load generator shares the box with the
engine it is measuring, so both columns are floors.
Still WordPress. Just without the weight.
Every WordPress request today spins up a PHP interpreter, loads core, theme, and plugins, and talks to a MySQL server. Then it does it all again for the next visitor. BookPress replaces that machinery with a compiled engine and keeps everything your site actually is: the content, the theme, the admin.
✓ Your theme renders for real
Block themes like Twenty Twenty-Five render natively. Templates, template parts, patterns, and global styles produce the same HTML and CSS WordPress produces, from the same unmodified theme files.
✓ Your admin keeps working
Log in at /wp-admin like always. Dashboard, posts, pages,
editor, settings. Your existing WordPress password verifies as-is after
migration. No resets, no new accounts.
✓ Your data, unchanged
Migration streams your WordPress content straight in. Everything imports losslessly and exports back out just as cleanly. It stays your data, in both directions.
✓ Your URLs stay put
Permalinks, pagination, archives, even ?p=123 redirects
behave exactly like WordPress. Your SEO never notices the engine swap.
Built for the sites most of the web is made of
BookPress doesn't try to run every WordPress site on day one. It targets the sites that make up the bulk of the web: brochure and business sites, blogs, portfolios, and agency-built sites on a supported stack. Plugins run as PHP on our own engine, and each is certified, limited or refused before it can activate, so a verdict arrives before a site moves rather than on a white screen afterwards. WooCommerce browses but cannot yet take an order, and heavy custom PHP is out of scope for now. A free compatibility scan gives you a per-site verdict. Clean fit: migrate in one click. Not a fit: nothing changes for you.
Questions people ask first
Is BookPress a WordPress fork?
No. It's an independent engine that implements WordPress behavior in native code: the theme system, the admin, the URLs. Your content and themes stay portable in both directions.
How fast is “fast”, honestly?
Measured, not estimated, on a Google Cloud c2-standard-4 you
can rent and check for yourself, and on a c4a-standard-4
beside it. Three stacks on one machine: WordPress 7.1 on the official
Docker image with no page cache, that same stack plus WP Super Cache 3.1.3
proven to be hitting before anything is timed, and BookPress.
Front page on the x86 machine, with the cache excluded: 42.9 ms, 43.1 ms, 0.17 ms. Search, which no cache can serve: 44.2 ms, 44.9 ms, 0.20 ms. That is 252× and 221× on this machine. The headline says 100× because that is the figure that has held up across machines: absolute numbers move with the hardware, ratios mostly do not — and this particular ratio has just moved for a reason that is not ours, because WordPress 7.1 is about 11% slower here than 7.0.4 was. We would rather the headline lagged the benchmark than tracked somebody else's regression.
Those are the cases that matter, because they are most of what a real site serves: first visits, anything after an edit, search, logged-in sessions. Against WordPress's genuine best case, an anonymous repeat visit landing on a warm cache, the gap is small: 0.55 ms against 0.16 ms, and part of even that is network transport rather than either engine. We are not going to dress that up. A good page cache is fast at the one thing it does, and replaying a stored file is hard to beat. The argument for BookPress is that it needs no cache to be fast at everything else, and that a whole site costs 14.0 MB rather than 271. The benchmark is a single script that boots all three stacks and measures them, so you can reproduce it on your own hardware.
What about my plugins?
They run, as PHP, on our own engine. Every plugin is checked before it is allowed to activate and comes back certified, limited or refused, and a refusal names the file and the line it would have failed on. The free compatibility scan gives you that verdict for your whole site before anything moves. Heavily custom PHP is out of scope initially, and we will tell you so up front.
How does migration work?
You install a temporary plugin on your existing WordPress site. It runs a free compatibility scan, then streams your database, uploads, and theme across. URLs and domains are preserved, and existing passwords keep working. Only sites that pass the scan cleanly are accepted. If yours doesn't, nothing changes for you.
What does it cost?
We have not published prices yet, and we would rather say so than put up a number we would have to walk back. When we do, it will be worked out from the infrastructure a host stops paying for, which is the thing the benchmark on this page measures. The pricing page says what that means, and how to get a figure for your own fleet.
Be first in line
Early access is opening for hosts and agencies running portfolios of brochure sites. Tell us what you run and we will tell you what moves.
hello@bookpress.io