Your documents,
described once.
Generated everywhere.
Liasse is a toolkit for developers. Describe a document declaratively and typed, then generate it to Excel, PowerPoint, Word or PDF — with your brand, without leaving your code.
Generating pro documents
shouldn't be a project.
By hand or with low-level libs, producing a branded Excel or a clean PDF is painful, brittle and repetitive. Liasse replaces that throwaway code with a declarative definition — typed and reusable.
Throwaway code, per format.
- ✕ A different SDK per format, verbose and imperative APIs.
- ✕ The brand rewritten by hand, cell by cell.
- ✕ Widths, fonts, totals, styles: tweaked by trial and error.
- ✕ No reuse across Excel, PDF and PowerPoint.
ws.getCell("D6").font = { bold: true }
ws.getCell("D6").border = { top: { style: "thin" } }
// …× chaque cellule, × chaque format
Describe the intent. Once.
- ✓ A declarative, typed definition, validated at compile time.
- ✓ The brand centralized, applied to every render.
- ✓ Totals, currency formats and styling inferred.
- ✓ The same document exported in the format you want.
// → .xlsx · .pdf · .pptx · .docx
Three steps, from code to file.
Describe the document
Structure, tables, sections and data — declared once, in typed TypeScript.
title, body: [ table(…) ]
})
Apply your brand
Colors, logo, fonts, currency formats: one centralized brand, shared by every render.
// logo · couleurs · €
Generate the format
One document, exported to the format your business expects — without rewriting a line.
render(doc, "pdf")
Same content.
Different formats.
The definition doesn't change. You pick the output format at render time.
Native financial tables
Typed cells, computed totals, currency formats and brand applied. A real .xlsx, not a screenshot.
Install a component.
It lives in your repo.
shadcn-style: the command copies the component's code into your project. No black box, no opaque dependency — you own it.
Same own-your-code model, but the download is gated by a license key. The purchased source lives in your repo — no runtime phone-home.
Factur-X compliant,
ahead of the deadline.
From September 2026, electronic invoicing becomes mandatory in France. Liasse generates compliant Factur-X invoices — the human-readable PDF and its structured XML, in a single file. Don't get caught off guard.
<ram:TaxBasisTotalAmount>3700.00</…>
<!-- généré par liasse · profil EN16931 -->
Your data never leaves
your backend.
In library mode, rendering runs on your side. No data sent to a third-party service — compliance by default, not as an option.
- Runs inside your perimeter
The engine runs in your process. No network call, no leak.
- Compliance by default
GDPR, professional secrecy, health-data hosting: no data exfiltrated.
- Auditable, deterministic
Open code in your repo: same input, same file. Reviewed and reproducible.
No arrow leaves your perimeter.
Free at the core.
Premium as you scale.
The engine and the base components are open source under the MIT license. The rest follows your funnel.
- ✓ Office-as-code engine
- ✓ Excel & PDF adapters
- ✓ Base registry components
- ✓ Local-first rendering, unlimited
- ✓ Everything in Free
- ✓ Premium registry components
- ✓ Factur-X module, EN 16931 compliant
- ✓ PowerPoint & Word adapters
- ✓ Priority support
- ✓ Render API POST /render
- ✓ Billed at a flat rate, never per document
- ✓ Managed scaling & queueing
- ✓ SLA & EU region
Component code
lives in your repo.
The opposite of closed template services: liasse add copies the code to your side. You read it, version it, change it freely. No black box between your data and your file.
A remote service owns the logic. You fill in fields and hope.
The component is code in your project. You control it entirely.
documents/
rapport-t3.ts
liasse/ # copied into your repo
components/
financial-table.ts # edit it
invoice.ts
charte/
acme.ts # your colors
# versioned, reviewed, editable
$ git add src/liasse
Describe it once.
Generate everywhere.
Install your first component with a single command. MIT, local-first, ready for 2026.