Reports as a file, not a server.

Render PDF, DOCX, XLSX and CSV from a JSON template and your rows, in any language.

docker run --rm \ -e JSONPRESS_API_KEYS=local:dev \ -p 5000:5000 jsonpress:dev

The JSON Press report designer editing a bilingual member roster: a Chinese title, an English subtitle and mixed-language rows on the page canvas.
Design the templateArrange the report on the canvas.
The finished bilingual member roster exported as a PDF.
Export the resultPrint-ready PDF

The page is the canvas.

Edit bands, choose fonts for individual text and columns, and preview the PDF.

Run the designer
The JSON Press designer's Preview dialog: the bilingual member roster rendered as a two-page PDF beside the canvas, with PDF, DOCX, XLSX and CSV export buttons.
The PDF preview is the page you export.
The sample data panel in the designer, with bilingual JSON member rows on the left and the parsed rows on the right.
Paste rows, see them parsed.
The first page of a 50-row bilingual member roster rendered to PDF, with six columns and page numbering.
The finished roster, straight out of the renderer.

One template, four files.

Pick the output; the definition stays the same.

OutputFileContent type
PDFinvoice.pdfapplication/pdf
DOCXinvoice.docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document
XLSXinvoice.xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet
CSVinvoice.csvtext/csv; charset=utf-8

Bring the rows you already have.

No database, no dataset query, no credentials.

rows.json
[
  { "CUSTOMER": "Halden & Co.", "AMOUNT": "1250.00" },
  { "CUSTOMER": "Wren Supply", "AMOUNT": "89.50" }
]
JSON rows
One object per record.
Case-insensitive fields
customer and CUSTOMER are the same field.
Loud failures
An unknown field fails loudly.

Three ways in.

The same engine, three entry points.

WayEntryWhat you get
HTTP POST /v1/renders Bearer key in, file out.
Node jsonpress In-process, with custom JavaScript.
Rust jsonpress-core Linked into your service, no HTTP hop.

Run the designer.

Build the image, run it, open the studio.

Read the quickstart
  1. Build docker build -t jsonpress:dev .
  2. Run docker run --rm -e JSONPRESS_API_KEYS=local:dev -p 5000:5000 jsonpress:dev
  3. Open localhost:5000