Quickstart

This is the fastest path to exporting your first report to both pdfme and ReportLab. It should take about 5 minutes.

denReport runs entirely in your browser. There’s no server-side component or account — the designer, the intermediate representation, and the exporters all run client-side. Let’s start the repository locally and build a first report from a blank canvas.

denReport is still pre-1.0. @denreport/web, used here, is the reference app you get by running the repository.

What you need

You only need these two things. Versions are pinned; nothing else is required.

  • Node.js 24 or later
  • pnpm (enabled via Corepack)

Install

Clone the repository and install dependencies.

git clone https://github.com/denreport/denreport.git
cd denreport
corepack enable
pnpm install

Open the designer

Start the dev server. Press Ctrl + C to stop it.

pnpm --filter @denreport/web dev

Open the URL Vite prints (http://localhost:5173 by default) and the designer will start. Drag elements from the palette on the left onto the canvas to place them.

Your first report

denReport layouts are saved as a version-controlled JSON intermediate representation (IR). Coordinates are in millimeters from the top-left origin. Here’s a minimal invoice layout example:

{
  "version": "1.1",
  "page": { "width": 210, "height": 297 },
  "font": { "name": "Noto Sans JP" },
  "elements": [
    { "type": "text", "id": "title", "x": 15, "y": 18,
      "w": 80, "h": 10, "text": "Invoice",
      "fontSize": 18, "align": "left", "lineHeight": 1.25 },
    { "type": "table", "id": "items", "x": 15, "y": 70,
      "bind": "items",
      "columns": [
        { "key": "name", "label": "Item", "width": 90 },
        { "key": "qty", "label": "Qty", "width": 20 },
        { "key": "amount", "label": "Amount", "width": 30 }
      ],
      "rowHeight": 7, "headerHeight": 8, "minRows": 10 }
  ]
}
No data is handled here. The IR only holds layout and a binding key (bind). The actual line-item data is supplied from outside at export time.

Export

Choose a target from the toolbar’s “Export” menu. Both are generated from the same IR, and any compatibility warnings are shown before you export.

CapabilitypdfmeReportLab
Text, lines, and rectanglesSupportedSupported
Tables that split across pagesSupportedSupported
Justified spacing (justify)SupportedSupported
Ellipse shapesSupportedSupported

The export output is a template plus input data (JSON) for pdfme, and a standalone, font-bundled Python file for ReportLab. Neither output carries any display or disclosure obligations.

  • Key concepts — how the intermediate representation, targets, and the compatibility matrix relate to each other (coming soon)
  • Tables and page breaks — designing reports whose line items span multiple pages (coming soon)
  • The intermediate representation (IR) spec — the full reference for element types and attributes (coming soon)