{"repo":"dannote/folio","free":true,"listed":false,"github":"https://github.com/dannote/folio","clone":"git clone https://github.com/dannote/folio.git","description":"Print-quality PDF/SVG/PNG from Markdown + Elixir, powered by Typst","language":"Elixir","stars":86,"topics":["document-generation","elixir","layout-engine","markdown","nif","pdf","pdf-generation","report-generation","rustler","svg"],"license":"MIT","category":"media-processing","readme_excerpt":"Folio Print-quality PDF/SVG/PNG from Markdown + Elixir, powered by Typst's layout engine via Rustler NIF. Why Folio Data-Driven Documents at Runtime Typst reads static files. Folio builds content trees from live Elixir data — Ecto queries, API responses, GenServer state. A Phoenix app generates PDFs from the same data it renders in HTML, with zero intermediate files: Composable Document Fragments DSL functions return plain structs — document pieces are first-class Elixir values. Build reusable components as regular functions, pattern-match on them, store them, pipe them: Structured Content Without Typst Templates Folio's normal path constructs Typst content trees directly in Rust and feeds them to the layout engine. Markdown is parsed by Comrak, while DSL values remain structured data: - No generated Typst templates — dynamic values are represented as typed content nodes - Structurally valid content — the DSL does not concatenate source code - Explicit escape hatches — math and raw typst/1 invoke Typst evaluation intentionally; only pass trusted source to raw typst/1 - Less parser overhead — ordinary DSL content skips Typst markup parsing and evaluation Elixir-Native Concurrency for Batch Generation With Typst CLI, generating 10,000 invoices means 10,000 process spawns. With Folio on dirty schedulers: Fonts and layout data are loaded once and shared across compilations. Quick start Add Folio to your dependencies: Folio ships with precompiled NIFs for macOS (Intel & Apple Sili","default_branch":null,"files":null,"tree":[],"storefront":"/r/dannote","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/dannote/folio/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}