Skip to content

Quickstart — 5 minutes to first PDF

At the end of this page you have two files: a faithful Book1.pdf, and the report.json beside it that names every feature Rendlio approximated or could not render. Those two artefacts come out of every Rendlio run — the document, and the account of how it was produced.

Terminal window
dotnet tool install -g Rendlio.Tool

Requires the .NET 10 SDK — install it from dotnet.microsoft.com.

Neither .NET nor Docker on the host? The same rendlio binary also ships as a self-contained archive for win-x64, linux-x64, linux-arm64, and osx-arm64. The Install page covers all three channels in full, including how to verify a release before you run it.

Download the CLI

Mint a 30-day trial licence — it arrives as a small signed file named Rendlio.license. Save it in the directory you convert from, or once in ~/.rendlio/, and the engine finds it by itself; --license <path> overrides both. Without a licence Rendlio still converts with every feature, but the output carries a diagonal evaluation watermark and warning W9001.

Verification is entirely offline — a signature check against keys embedded in the binary. The engine never phones home, on any tier. The full resolution order, the tier table, and the free Community tier are in the licensing guide.

Both paths take the same flags: -o / --output is the output path, and the format comes from --format (default pdf) — never from the file extension. --report writes the compatibility report.

With Rendlio.license saved next to it:

Terminal window
rendlio convert Book1.xlsx -o Book1.pdf --report report.json

report.json is the machine-readable account of the run. Two arrays carry the substance: features[] is every deviation from faithful rendering — a convert-mode report lists deviations only, so an empty array means nothing deviated — and warnings[] is the coded warning list.

{
"schemaVersion": "1.0",
"engine": { "name": "Rendlio", "version": "0.3.1", "releaseDate": "2026-10-02" },
"input": { "fileName": "Book1.xlsx", "sizeBytes": 183422, "sha256": "…64 hex…" },
"mode": "convert",
"result": { "status": "unsupported-content", "exitCode": 2 },
"pages": { "count": 7 },
"features": [
{
"id": "F-CHT-stacked",
"status": "unsupported",
"count": 2,
"locations": [{ "sheet": "Summary", "objectId": "chart2" }],
"locationsTruncated": false,
"detail": "Stacked bar charts are not yet rendered (planned post-GA)."
}
],
"warnings": [
{
"code": "W5001",
"severity": "warn",
"message": "Default font 'Aptos Narrow' is not available; substituted 'Carlito'. Column widths and line breaks may shift.",
"location": { "sheet": null, "ref": null, "objectId": null }
}
],
"timings": { "parseMs": 41, "layoutMs": 118, "renderMs": 96, "totalMs": 262 }
}

The exit code is that verdict as a number:

CodeMeaning
0clean
1rendered with warnings
2unsupported content present
3invalid input
4resource limit hit
5internal error

Exit code 2 is a feature, not a failure. The document was written and is complete; what the 2 tells you is that the workbook contained something Rendlio does not yet render, and features[] names it with a location. Nothing is approximated silently — every deviation is in the report, which is why 2 is a review this signal rather than a broken build. Most pipelines treat <= 1 as pass and 2 as review; the full contract per code is on the CLI reference.

  • CLI reference — every command, flag, and environment variable, with types and defaults
  • Compatibility report — the v1 schema, status semantics, and CI gating with jq
  • PDF/A-2b and PNG output--format pdfa for archival PDF, --format png --dpi 200 for one image per page
  • Deterministic mode--deterministic with --reference-date for byte-identical output across runs and hosts

View as Markdown