Version 5.0.1
October 4, 2026
Changed
- Reportr is now licensed under the Craft License.
Version 5.0.0
October 3, 2026
Initial release.
Reportr is a replacement for Lab Reports,
which stopped taking new features. It keeps that plugin's template contract exactly — the same
report variable, the same build() signatures, the same formatting-function config — and then
implements the things its issue tracker and its own roadmap asked for.
Who can report on what
- Someone who isn't an admin can only build a report over an element type and source they can view in the control panel — not "All entries", which reaches sections they can't open, and not users, orders or products without those permissions.
twig:columns are Twig, not a sandbox, so only an admin can add or change one.- No column reads a user's password hash, verification code or similar, whatever the path.
- Order by must be a column name; an expression is ignored rather than run as SQL.
- A report's output folder can't step outside its filesystem with
... - A column can't walk out of the element graph into settings objects (a volume's filesystem credentials, say), and one that reaches a user needs permission to view users.
- Parameters apply to a query only through a fixed set of query params, can only narrow the
report's source, and can't be named after query machinery such as
whereororderBy. - Someone who isn't an admin can't change a report's type, template, formatting function, storage location or filename pattern, nor its recipients without permission to download its files.
- Parameter labels and instructions reach the run form as text, never markup.
- Starting a run is a POST; following a link to a report only shows its run form.
Compatible with Lab Reports
- Basic and advanced report templates run unchanged
config/labreports.php'sfunctionsarray is read alongside Reportr's own, so advanced reports keep working without anything being moved- An importer brings report configurations and their whole run history across, with the files; idempotent, and it never modifies the Lab Reports tables
craft.reportrcarries the oldconfiguredReports,generatedReports,formatFunctionNamesandformatFunctionOptionsmethods, and theconfiguredReportId/dateGeneratedquery params
New
- Run-time parameters — text, number, date, date and time, yes/no, dropdown, checkboxes,
entries, users, categories, assets, tags and site. Answers arrive in the template already typed.
Defaults may be relative (
-7 days), which is what makes a scheduled report worth scheduling - A third report type built in the control panel, with no template at all: an element type, one of its own index sources, and columns picked from a list
- Seven export formats — CSV, TSV, XLSX, JSON, NDJSON, XML and HTML, plus a registry for your own. The XLSX writer is dependency-free and streams
- Storage on any Craft filesystem, recorded per run, so reports survive ephemeral hosting and a changed default does not orphan the archive
- Scheduling — hourly, daily, weekly or monthly, in the site's timezone, claimed atomically so two schedulers cannot double-fire a report
- Email delivery, including failure-only
- Retention — keep the last N runs, or N days, per report or site-wide
- Preview — run with a row cap and see the rows, writing nothing
- A run history recording the parameters, duration, peak memory, row count and what started it, with a sparkline of rows over the last runs
- Permissions, split so that seeing a report exists is not the same as downloading its output
- Spreadsheet formula injection neutralised in delimited exports by default
- A filename pattern with tokens, including parameter values
Fixed, relative to Lab Reports
- #1 Dynamic report parameters — the top item on its roadmap, open since 2021
- #2 Craft version constraint no longer pinned below a minor release
- #3 Related and Table field data reachable from a column, with
|reportCell,|reportColumnand|reportValuesand dotted column keys - #4
{% import %}and{% include %}work inside report templates — the runner sets the template mode, not the templates path - #5 Report configurations can be deleted, and their past runs survive it
- #6 Nothing accumulates in memory; the log buffer, query logging and the cycle collector are all handled during a build
- #7 The queue job's TTR is a setting, defaulting to an hour instead of Craft's 300 seconds
- #8 Report files can live on a real filesystem, and a run records which one, so "Unavailable (File Missing)" is neither inevitable nor unexplained