krz/orgo

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

Commit a6c124b3cc

a6c124b3cc663458b44ad0c0fb9192fd52ff2886

parent: b8df7a53fd

Verified · cmc

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

update speed table and readme headings

Layout: unified · split

README.md +9 −14
@@ -31,7 +31,7 @@ cargo install --path .
31That puts an `orgo` command on your `PATH`. Full notes, including how to run it without 31That puts an `orgo` command on your `PATH`. Full notes, including how to run it without
32installing anything: <https://krazywarez.github.io/orgo/install.html> 32installing anything: <https://krazywarez.github.io/orgo/install.html>
33 33
34## Your first site 34## Your First Site
35 35
36```sh 36```sh
37orgo init my-site 37orgo init my-site
@@ -44,7 +44,7 @@ own — that is the loop you will spend your time in.
44`init` writes a starter post, a page layout you can edit, and a config file with every 44`init` writes a starter post, a page layout you can edit, and a config file with every
45setting explained in comments. It never overwrites a file you already have. 45setting explained in comments. It never overwrites a file you already have.
46 46
47## Or point it at writing you already have 47## Org-Mode, Anywhere
48 48
49```sh 49```sh
50orgo build ~/notes -o _site 50orgo build ~/notes -o _site
@@ -62,7 +62,7 @@ Want to know what orgo will make of your files before trusting it with them?
62`orgo audit ~/notes` reports which org constructs you use and how each one lands, with 62`orgo audit ~/notes` reports which org constructs you use and how each one lands, with
63counts and line numbers — never the text of your writing, so the report is safe to share. 63counts and line numbers — never the text of your writing, so the report is safe to share.
64 64
65## What you can add when you want it 65## Additional Features
66 66
67Each of these is a few lines of config, and each has a page in the guide: 67Each of these is a few lines of config, and each has a page in the guide:
68 68
@@ -82,21 +82,19 @@ hundreds of them stays instant.
82 82
83## Speed 83## Speed
84 84
85Publishing one real site — 178 org files, ~180 pages — three ways. Median of three runs 85Publishing one real site ([cleberg.net](https://cleberg.net)) — 178 org files, ~180 pages — three ways. Median of three runs
86each, measured back to back on one machine: 86each, measured back to back on one machine:
87 87
88| | Time | | 88| | Time | |
89|---|---|---| 89|---|---|---|
90| weblorg (`emacs --script publish.el`) | 49.0s | | 90| weblorg (`emacs --script publish.el`) | 49.0s | |
91| the same, plus the build script wrapped around it | 50.3s | | 91| weblorg + [build.py](https://github.com/ccleberg/cleberg.net/blob/8ec9cdfeae71068a8924dd9f61b9cc28c947ec31/build.py) | 50.3s | |
92| orgo, cold build | **0.22s** | 223× faster | 92| orgo, cold build | **0.22s** | 223× faster |
93| orgo, nothing changed since last build | **0.13s** | 377× faster | 93| orgo, nothing changed since last build | **0.13s** | 377× faster |
94 94
95That middle row is the interesting one. weblorg alone does not group a blog index by year, 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 96write a tags page, rewrite image URLs, minify CSS or emit a sitemap — so I
97wrote ~600 lines of Python to do those on top of it, and pays for the whole publish again 97wrote ~600 lines of Python to do those on top of it. orgo does the first three natively.
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 98
101Read the numbers with three things in mind. The weblorg figures include Emacs starting and 99Read the numbers with three things in mind. The weblorg figures include Emacs starting and
102loading its packages, which you pay on every publish and cannot avoid. orgo emits 13 pages 100loading its packages, which you pay on every publish and cannot avoid. orgo emits 13 pages
@@ -104,12 +102,9 @@ weblorg does not, one per tag, so it is doing slightly more work. And the two do
104produce byte-identical output — the differences are deliberate and listed under 102produce byte-identical output — the differences are deliberate and listed under
105[Org support](https://krazywarez.github.io/orgo/guide/05-org-support.html). 103[Org support](https://krazywarez.github.io/orgo/guide/05-org-support.html).
106 104
107Deployment is excluded from every row: it is an rsync over someone's network, which
108measures the network.
109
110Apple M2 Pro, 12 cores, macOS 26.6, Emacs 30.2, orgo built with `--release`. 105Apple M2 Pro, 12 cores, macOS 26.6, Emacs 30.2, orgo built with `--release`.
111 106
112## The documentation 107## Docs
113 108
114<https://krazywarez.github.io/orgo/> 109<https://krazywarez.github.io/orgo/>
115 110
@@ -128,7 +123,7 @@ Apple M2 Pro, 12 cores, macOS 26.6, Emacs 30.2, orgo built with `--release`.
128| [Auditing](https://krazywarez.github.io/orgo/guide/09-auditing.html) | Reading a corpus before trusting a tool with it. | 123| [Auditing](https://krazywarez.github.io/orgo/guide/09-auditing.html) | Reading a corpus before trusting a tool with it. |
129| [Deploying](https://krazywarez.github.io/orgo/guide/10-deploying.html) | Producing a production build, and putting it somewhere. | 124| [Deploying](https://krazywarez.github.io/orgo/guide/10-deploying.html) | Producing a production build, and putting it somewhere. |
130 125
131## Building from a checkout 126## Building
132 127
133```sh 128```sh
134cargo test # includes a differential check against Emacs, when present 129cargo test # includes a differential check against Emacs, when present