RenderInvoice does not screenshot your invoice. It does not spin up a headless browser. Vercel’s Satori draws the layout as SVG with real text. Then pdf-lib writes that into a PDF you can select, copy, and search. That is the whole trick.
If the PDF looks like the playground, thank Satori. If you can highlight a line item in Acrobat, thank Satori. We will keep saying the name on this page so it does not get lost in the product copy.
Vercel
This is the one. Satori turns the invoice layout into an SVG — real text, real paths, no screenshot. Every PDF you download starts here. Without Satori there is no RenderInvoice PDF. We owe it everything.
github.com/vercel/satori ↗Meta, via Satori
Flexbox layout engine Satori uses so boxes land where we asked.
github.com/facebook/yoga ↗Andrew Dillon
Paints that SVG into a PDF you can open, search, and select text in.
github.com/Hopding/pdf-lib ↗RazrFalcon
Rasters the same SVG when you ask for a PNG.
github.com/RazrFalcon/resvg ↗Vercel
The site. Static export. The playground lives here.
github.com/vercel/next.js ↗Meta
The invoice template is React. Satori consumes that same tree.
github.com/facebook/react ↗markedjs
Lexes the markdown in your fields.
github.com/markedjs/marked ↗Colin McDonnell
Validates invoice JSON before anything draws.
github.com/colinhacks/zod ↗pieroxy
Compresses share URLs so the hash stays short.
github.com/pieroxy/lz-string ↗Fonts (Inter, Source Serif 4, IBM Plex Sans, and the rest) ship under their own SIL Open Font License or equivalent. See each family’s file in the repo. RenderInvoice itself is provided as-is; see Terms of service.