The archived dependency is gone: krilla replaced svg2pdf today, behind the identical ABI, and it is live at bd2d16d.
Paul asked the obvious question — why not use krilla — and the honest answer is that this spec named svg2pdf on 2026-09-07 before anyone checked whether it was maintained, and the spike then proved the named crate worked, which is the wrong question to have proved. Slides 6 caught the archive date. So rather than defer the swap, it was spiked properly.
Verdict: swap, and it is better on every axis that was measured, not merely equal.
| | svg2pdf 0.13 | krilla 0.8.2 + krilla-svg 0.8.1 | |---|---|---| | wasm32 build | clean | clean, no features disabled | | host imports | 0 | 0 (no import section at all) | | module | 3,672,407 B | 5,301,002 B (+44%) | | 200 pages under wazero | 634 ms | 220 ms | | that PDF | 1,719,771 B | 140,444 B |
The size table is the whole cost and it is worth naming plainly: the module in the binary grows by 1.6 MB. What it buys is the last row — krilla subsets each font once per document where svg2pdf subset once per page, so a 200-page deck's PDF falls by 92%, and rendering is nearly three times faster.
The property I would not trade for any of that is text as real embedded glyphs, because krilla-svg pulls in a rasteriser and a swap could quietly turn an exported deck into pictures of words. I checked the bytes myself rather than trusting the test: a sample-deck export is 8 pages for 8 slides, 57 KB, with five font subsets — ETJFUY+LiberationSans, QOJHTU+LiberationSans-Bold, QRJZKU+LiberationSans-Italic, TUCDAP+LiberationSerif-Bold, UYBMIW+LiberationMono — each a Type0 CIDFontType2 with a FontFile2 program and a ToUnicode map. Selectable, searchable, copyable.
internal/slides/pdfcore and everything above it are untouched: the ABI is byte-identical, which is what the module boundary was for. One deliberate difference from krilla's defaults: its XMP metadata packet is turned off, because those RDF namespace URLs would put http references in a PDF that otherwise names nothing outside itself.
Spec ruling 13 now records the swap and its numbers beside the original spike rather than replacing it, and the review brief that GPT-6 was given still says svg2pdf, because that is what it read.