Office-as-code · MIT

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.

4 formats from one definition Local-first · GDPR by design Own-your-code
Built for teams
S SaaSF FintechR RegTechP PlatformsE ERP
4 formats · 1 definition
The problem → the promise

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.

// before — fragile craftwork

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").value = total
ws.getCell("D6").font = { bold: true }
ws.getCell("D6").border = { top: { style: "thin" } }
// …× chaque cellule, × chaque format
// with liasse — one definition

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.
table({ columns, rows, total: true, format: { money: "EUR" } })
// → .xlsx · .pdf · .pptx · .docx
How it works

Three steps, from code to file.

STEP 01

Describe the document

Structure, tables, sections and data — declared once, in typed TypeScript.

defineDocument({
  title, body: [ table(…) ]
})
STEP 02

Apply your brand

Colors, logo, fonts, currency formats: one centralized brand, shared by every render.

charte("acme")
// logo · couleurs · €
STEP 03

Generate the format

One document, exported to the format your business expects — without rewriting a line.

render(doc, "xlsx")
render(doc, "pdf")
One document, every format

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.

Component registry

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.

financial-table · v1.4npx liasse add ↵
Branded financial table: totals, subtotals, color-coded variations and currency formats.
xlsxpdftotals
invoice · v2.0npx liasse add ↵
Compliant invoice with legal mentions and embedded Factur-X XML — ready for 2026.
pdffactur-xpro
dashboard-export · v1.1npx liasse add ↵
Export your KPIs to a summary sheet or slide — key figures and variations.
xlsxpptxkpi
multi-sheet-report · v1.0npx liasse add ↵
Multi-sheet report: summary, detail and linked assumptions, in a single workbook.
xlsxmulti-sheetreport
liasse-fiscale · v1.0Pro · key required
Multi-sheet French tax return: summary, balance sheet (assets/liabilities) and income statement with totals and N/N-1 columns.
xlsxbilanpro
payslip · v1.0Pro · key required
French payslip: employer/employee header, employee/employer contributions and computed net to pay.
xlsxpaiepro
Pro components

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.

France deadline · e-invoicing

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.

09 · 2026
E-invoicing mandateReception for all companies
Enable the Factur-X module
facture-2026-0412.pdf · valid
Readable PDF/A-3ISO 19005
Embedded structured XMLCII
Semantic profileEN 16931
<ram:GrandTotalAmount>4440.00</…>
<ram:TaxBasisTotalAmount>3700.00</…>
<!-- généré par liasse · profil EN16931 -->
Local-first · GDPR by design

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.

HealthLegalHRFinancePublic sector
{ }Your business datain your database, in your backend
Lliasse · local renderdefined + branded, executed on your sidein-process
Generated filexlsx · pdf · served to the user0 third parties

No arrow leaves your perimeter.

Open-core · Pricing

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.

Free MIT
The open-source core, to get started and self-host.
€0/ forever
  • Office-as-code engine
  • Excel & PDF adapters
  • Base registry components
  • Local-first rendering, unlimited
Start with MIT
Coming soon
Hosted
The managed render API: POST your JSON, get your file.
Flat rate/ by volume, not per doc
  • Render API POST /render
  • Billed at a flat rate, never per document
  • Managed scaling & queueing
  • SLA & EU region
Code-first · own-your-code

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.

Closed template

A remote service owns the logic. You fill in fields and hope.

Liasse

The component is code in your project. You control it entirely.

src/
  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.