Pure TypeScript, isomorphic (browser + Bun): template JSON + data JSON → report model. Printing on paper, PDF (vector and raster), SVG / CSV / HTML / PNG / Excel / Word. The engine is honest — “what came in JSON, we render”: data preparation is done by external code or by the report script itself.
.aur + JSON→⚙→PDF · SVG · XLSX
++
JSONrelationsIIf()??
Nested data (JSON)
Nested sources and relations, arbitrary depth; a flat report is a special case of a tree. Bindings by full path [kinds.categories.top.personFullName], indexes [main[0].field], expressions IIf/Substring/Trim, nullish ??, system variables [PageNumber], [RowNumber], [AbsRowNumber].
[Discount] > 0 ?0.85:1.0
++
groupHeaderKeepWithData
Groups, totals, multi-column bands
Nested groups (a group inside a group), groupHeader/groupFooter with a total per group (countVar), “keep group on one page” (KeepWithData), details are not split (KeepDetail). Multi-column bands: snake (AcrossThenDown) and “newspaper” columns (DownThenAcross), row numbers [RowNumber]/[AbsRowNumber].
CategoryTotal
Alpha4 210
Beta2 875
Total7 085
++
AuScriptnative JSDoublePass
Report scripts (AuScript)
Template code in native JavaScript — visible and editable in the designer (Code tab), travels with the template. Band and object events: OnBeforeData (sorting/filtering the data stream), OnBeforePrint, OnGetValue; double pass (DoublePass) for totals in headers; Report/Engine API. On the server the script runs in a sandbox with a timeout.
functionband_OnBeforeData(rows) { … }
++
OnBeforeDatasort by total
Sorting data inside the report
Example Sort Group By Total: products are grouped by the first letter, but the groups are printed by SIZE (largest first) — the sorting is done by the report script (OnBeforeData), the engine stays an honest renderer.
bac↓cba
++
Bookmarkcheckboxes
Interactivity and hyperlinks
External links and in-document bookmarks: clicking a category in the catalogue jumps to its block; the viewer has a “Back to contents” button. Checkboxes for boolean fields (Discontinued, etc.).
Catalog → Beta sectionp. 7
++
multi-pageprintOnAllPages
Pages
Multiple template pages, “print on previous page” (Print on Previous Page): the title and data share one sheet; header on every page (printOnAllPages); report summary (reportSummary).
++
gradientseven rowsWCAG
Styling
Fills and gradients, side borders, zebra striping (EvenStyle) — on the whole band or on separate text elements; a calm design palette with WCAG contrast (background + text pairs, no neon colours from legacy reports).
++
Figma-like snapData Lensgrid
Form designer
Pure TS core: object tree, property panel (including script events — chips and mini code), band badges, growing a band upwards, Figma-style snapping and smart guides, grid, Data Lens, locked, culture, Code tab for the report script.
++
searchlight/darkexport
Viewer
Page strip, search with highlighting, export and printing, light/dark theme, page thumbnails, reading mode, “Back to contents” after following a bookmark.
++
.mrt.frxStimulsoftFastReport
Template import
Import from StimulSoft (.mrt) and FastReport (.frx) into AurumTemplate: bands, text/image, fonts, borders, bindings, locked, scripts, culture, metadata.
.frx.mrt→.aur
++
100k ≈ 1.5 s1M ≈ 2 s (Bun)
Performance: 100 thousand and one million cells
Engine stress tests (a separate group in the demo): a 100,000-cell table (10,000 rows × 10 columns, 182 pages) renders right in the browser in ~1.5 s — the viewer turns on virtualization by itself (contents are built in a window around the visible page). One million cells (100,000 × 10, 1819 pages): the ~1.2 GB model does not fit into the browser memory, so the report is rendered by the server (Bun, ~2 s) and delivered page by page as ready-made images. Flip through ◄ 1/1819 ►, print or save any page to PDF/PNG.
++
in progress
AI in the designer (in progress)
AI panel: hints about data and template, help preparing a report (evolving).