krz/orgo

Lightning fast org-mode static site generator. fast go org-mode static-site-generator

Commit b8df7a53fd

b8df7a53fd037322fe4b57e2bad5819bd704cc19

parent: 0eff57ddf2

Verified · cmc

cmc <hello@cleberg.net> · 2026-08-11 23:11 UTC

Add the build-script row, and re-measure everything together

The first numbers were taken twenty minutes apart, and it showed: the build
script came out *faster* than the raw emacs run it wraps, which cannot be true.
All four rows are now measured back to back in one session.

The new row is the point of the exercise. weblorg alone does not group a blog
index by year, write a tags page, rewrite image URLs, minify CSS or emit a
sitemap — so ~600 lines of Python do those on top of it, and the whole publish
is paid again on every run. 49.0s becomes 50.3s.

orgo does three of those five natively. Minification is a build step either way,
and orgo has no sitemap at all — recorded in the README as a gap rather than
quietly left out of the comparison.

Deployment is excluded from every row: it is an rsync over someone's network,
which measures the network.

Layout: unified · split

README.md +18 −8
@@ -82,21 +82,31 @@ hundreds of them stays instant.
82 82
83## Speed 83## Speed
84 84
85Publishing one real site — 178 org files, ~180 pages — with the generator it uses today 85Publishing one real site — 178 org files, ~180 pages — three ways. Median of three runs
86and with orgo. Median of three runs each, same machine, same moment: 86each, measured back to back on one machine:
87 87
88| | Time | | 88| | Time | |
89|---|---|---| 89|---|---|---|
90| weblorg (`emacs --script publish.el`) | 50.1s | | 90| weblorg (`emacs --script publish.el`) | 49.0s | |
91| orgo, cold build | **0.21s** | 239× faster | 91| the same, plus the build script wrapped around it | 50.3s | |
92| orgo, nothing changed since last build | **0.13s** | 385× faster | 92| orgo, cold build | **0.22s** | 223× faster |
93 93| orgo, nothing changed since last build | **0.13s** | 377× faster |
94Read that with three things in mind. The weblorg figure includes Emacs starting up and 94
95That middle row is the interesting one. weblorg alone does not group a blog index by year,
96write a tags page, rewrite image URLs, minify CSS or emit a sitemap — so the site's owner
97wrote ~600 lines of Python to do those on top of it, and pays for the whole publish again
98every time. orgo does the first three natively, minification is a build step either way,
99and *it has no sitemap yet* — that one is a real gap, not a win.
100
101Read the numbers with three things in mind. The weblorg figures include Emacs starting and
95loading its packages, which you pay on every publish and cannot avoid. orgo emits 13 pages 102loading its packages, which you pay on every publish and cannot avoid. orgo emits 13 pages
96weblorg does not (one per tag), so it is doing slightly more work. And the two do not 103weblorg does not, one per tag, so it is doing slightly more work. And the two do not
97produce byte-identical output — the differences are deliberate and listed under 104produce byte-identical output — the differences are deliberate and listed under
98[Org support](https://krazywarez.github.io/orgo/guide/05-org-support.html). 105[Org support](https://krazywarez.github.io/orgo/guide/05-org-support.html).
99 106
107Deployment is excluded from every row: it is an rsync over someone's network, which
108measures the network.
109
100Apple M2 Pro, 12 cores, macOS 26.6, Emacs 30.2, orgo built with `--release`. 110Apple M2 Pro, 12 cores, macOS 26.6, Emacs 30.2, orgo built with `--release`.
101 111
102## The documentation 112## The documentation