krz/orgo

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

Commit b952eba67c

b952eba67c6e6aae2530f19584309c193e122f27

parent: 82f32f7a42

Unsigned

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.
8282
8383## Speed
8484
85Publishing one real site — 178 org files, ~180 pages — with the generator it uses today
86and with orgo. Median of three runs each, same machine, same moment:
85Publishing one real site — 178 org files, ~180 pages — three ways. Median of three runs
86each, measured back to back on one machine:
8787
8888| | Time | |
8989|---|---|---|
90| weblorg (`emacs --script publish.el`) | 50.1s | |
91| orgo, cold build | **0.21s** | 239× faster |
92| orgo, nothing changed since last build | **0.13s** | 385× faster |
93
94Read that with three things in mind. The weblorg figure includes Emacs starting up and
90| weblorg (`emacs --script publish.el`) | 49.0s | |
91| the same, plus the build script wrapped around it | 50.3s | |
92| orgo, cold build | **0.22s** | 223× faster |
93| orgo, nothing changed since last build | **0.13s** | 377× faster |
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
95102loading 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
97104produce byte-identical output — the differences are deliberate and listed under
98105[Org support](https://krazywarez.github.io/orgo/guide/05-org-support.html).
99106
107Deployment is excluded from every row: it is an rsync over someone's network, which
108measures the network.
109
100110Apple M2 Pro, 12 cores, macOS 26.6, Emacs 30.2, orgo built with `--release`.
101111
102112## The documentation