krz/orgo

Lightning fast org-mode static site generator.

clone: git clone https://gitbay.org/krz/orgo.git

v0.19.1: CHANGELOG.md · raw

  1# Changelog
  2
  3What changed and why, newest first. Entries name the *behaviour* that moved, since that is
  4what a rebuild will show you.
  5
  6Two conventions worth knowing before reading:
  7
  8- **A cache-format bump is not a change you need to act on.** The incremental cache is
  9  versioned and discards itself; a bump means the next build re-renders everything once.
 10- **Output changes are called out.** orgo aims at what Emacs exports from the same
 11  file, so an entry that says "now renders X" means your pages will change. That is the
 12  product, not a regression — but it belongs in a changelog rather than a diff you find
 13  later.
 14
 15Versions follow the compatibility promise in the README: config keys, template variables,
 16CLI flags and URLs are the stable surface.
 17
 18## 0.19.1
 19
 20- Footnote back-links carry `aria-label="Back to reference N"`, and the notes section is
 21  labelled. A link whose only visible content is `↩` has that glyph as its whole
 22  accessible name, so a screen reader announced "left arrow with hook" once per note with
 23  no way to tell them apart.
 24
 25## 0.19.0
 26
 27- **Full-content collections.** `include_content = true` gives a listing template each
 28  entry's rendered HTML as `entry.content` — a feed that carries whole posts rather than
 29  excerpts. Rendered only when the listing is actually rebuilt, so a cached feed costs
 30  nothing.
 31- **Fixed: a listing could show a stale excerpt.** Its cache key covered a hand-picked set
 32  of fields, and the excerpt was not among them, so rewriting a post's first paragraph
 33  left the old text on the index until something unrelated invalidated it. Entries are now
 34  hashed through their serialization, which cannot drift from what a template can read.
 35  Editing a post's body now rebuilds the listings that show it.
 36- `page.toc` entries carry `number`, so a site with section numbering on can number its
 37  contents list to match its headings.
 38
 39## 0.18.0
 40
 41Release engineering, so that a version number is worth reading.
 42
 43- **A written compatibility promise.** Config keys, template variables, CLI flags and URLs
 44  are the stable surface; the incremental cache, HTML details and the Rust API are not.
 45  In the README, and in the guide under *Versioning and upgrades*.
 46- **CI** on Linux and macOS: build, test, clippy as an error, and the documentation site
 47  built with `--strict`. Emacs is installed on both, so the oracle suite runs for real
 48  instead of skipping.
 49- **A checked MSRV**, 1.88 — which is how it came to be 1.88 rather than the 1.82
 50  orgo's own code needs. The floor comes from dependencies, and nobody finds that out
 51  by reasoning about it.
 52- **Release binaries** for macOS (arm64, x86_64) and Linux (gnu, musl), built on tag into
 53  a draft release. The tag is checked against `Cargo.toml` before anything is built.
 54- A `LICENSE` file to go with the MIT declaration, crates.io metadata, and a release
 55  profile that produces a 5.0 MB binary rather than 6.5 MB.
 56- This changelog, and `RELEASING.md`.
 57
 58## 0.17.0
 59
 60- **Asset directories outside the source.** `[build] assets = ["../theme/static"]` copies
 61  a directory's contents to the site root. A site's static files do not always live where
 62  its writing does, and copying them next to the writing is how a repository ends up with
 63  two of every stylesheet. `watch` and `serve` watch these directories too. Two files
 64  claiming one URL is a build error naming both.
 65- **Template hashing is per template.** A page's render key covered every template, so
 66  editing a feed template re-rendered the whole site. It now covers the layout the page
 67  uses plus what that layout extends, includes or imports. On a 196-page site, editing the
 68  feed template renders one page instead of 196.
 69- Cache format 7.
 70
 71## 0.16.0
 72
 73- **Org's entity table.** `\alpha`, `\rarr`, `20\deg` and the other 412 names, generated
 74  from Emacs' own `org-entities`. An unknown name stays literal; `#+OPTIONS: e:nil` turns
 75  the table off. *Output changes* for any page using entities.
 76- **Table captions.** `#+CAPTION:` above a table becomes a numbered `<caption>`.
 77- **`#+INCLUDE:` reports itself.** It was inert and silent, which publishes a page with
 78  content missing and nobody told. Now a diagnostic, and `--strict` makes it a failure.
 79- The Emacs oracle separates deliberate divergence from defects. Every difference from
 80  org's exporter is named and justified, and a test asserts there are no others.
 81
 82## 0.15.0
 83
 84Export parity, from a page-by-page diff of a 179-file corpus against the site Emacs
 85publishes from the same sources. **All of these change output.**
 86
 87- Heading levels are relative to a document's shallowest heading, as org exports them.
 88- Org's text conversions: `--`, `---`, `...`, and `x^2` / `a_{b}`. Never inside verbatim,
 89  code, source blocks or LaTeX. `#+OPTIONS: -:nil`, `^:nil` and `^:{}` all work.
 90- Captioned figures are numbered `Figure N:`.
 91- A caption attaches to the element *directly* below it; a blank line between attaches to
 92  nothing.
 93- Checkboxes render as org writes them, which keeps the `[-]` partly-done state a disabled
 94  `<input>` could not express. `[@4]` sets a list item's number.
 95- A table's special marker column and its marker rows stay out of the output.
 96- `#+BEGIN_NOTE` and any other unrecognised name is a special block: a div holding parsed
 97  org rather than a `<pre>` of literal text. Verse keeps its line breaks.
 98- Emphasis borders forbid whitespace and nothing else, so `="proxied":false=` is verbatim
 99  and `~~/.config/doom/config.el~` is a path that starts with a tilde.
100- Listings sort on the time of day when a timestamp carries one.
101- Cache format 6.
102
103## 0.14.0
104
105- **Per-page layouts.** `[[pages]]` rules map a source path to a template, and
106  `#+TEMPLATE:` on a page overrides any rule. A missing template fails the build naming
107  the page, the template, and what does exist.
108- `page.year`, for grouping a listing by year with minijinja's `groupby`.
109- An explicit nav can order generated pages among authored ones. `nav.mode = "none"` now
110  really means none.
111
112## 0.13.0
113
114- Bundled TOML and Org syntax definitions, a `syntaxes_dir` for your own, and org's comma
115  escape (`,* heading` inside a block).
116
117## 0.12.0
118
119- `serve`: a development server with live reload, bound to loopback.
120- A documentation site under `docs/`, built by orgo itself.
121
122## 0.11.0
123
124- Table of contents as `page.toc`, section numbers, and org's `#+OPTIONS:` per-file
125  switches.
126
127## 0.10.0
128
129- Excerpts, word count, reading time, a `truncate` filter, and `#+DRAFT:` pages.
130
131## 0.9.0
132
133- `watch`: rebuilds on OS filesystem events, debounced.
134
135## 0.8.0
136
137- `site.base_url`, the `absolute` and `rfc822` filters, canonical links, and an RSS feed
138  in the scaffold that validates.
139
140## 0.7.0
141
142- Pagination for large listings, with a `paginator` template context that composes with
143  grouping.
144
145## 0.6.0
146
147- Grouped collections: one page per tag plus a tag index.
148- Generated listing pages (`[[collections]]`), sorted indexes, and feeds via XML
149  templates.
150- A config file, user templates, nav modes, an `init` scaffold, and discovery that will
151  not publish `.git`.
152
153## 0.5.0
154
155- Parse diagnostics carry `file:line`, and pages render in parallel.
156- The corpus audit (`orgo audit`) and the `emacs --batch` oracle.
157- `#+SLUG:` decides a page's output filename — found by auditing a real corpus, where it
158  affected 169 of 182 URLs.
159
160## 0.4.0
161
162- The full v1 construct scope, with the IN/OUT line under test.
163
164## 0.3.0
165
166- The incremental build layer: content, config and template hashing, a dependency graph,
167  per-page render keys, and a persisted cache manifest. A full build and an incremental
168  build produce byte-identical output.
169
170## 0.2.0
171
172- Multi-file site builds: a symbol table, internal link resolution, minijinja templates,
173  tables and footnotes.
174
175## 0.1.0
176
177- Parse and render a single `.org` file to HTML.