Frappe
Cloud
Marketplace
Frappe
Products
Insights
About
A Frappe app that lets users design, run, and share reports entirely through a UI — selecting columns, applying filters, grouping, sorting, joining related/child-table sources, and adding calculated fields — without writing any code.
The app ships a desk page called Report Studio (route: /app/report-studio) where reports are built visually, previewed live, exported (XLSX / CSV / PDF), and optionally published as native Frappe Query Reports.
Log in to the desk and go to:
http://localhost:8000/app/report-studio
It also appears as a Report Studio tile on the Apps screen.
Updating later: after pulling new changes, re-run bench --site <site> migrate && bench build --app report_builder.Uninstalling: bench --site <site> uninstall-app report_builder.The app installs a role called Report Studio User (shipped as a fixture).
| Role | Can access Report Studio | Sees reports |
Administrator | Yes | All reports |
System Manager | Yes | All reports |
Report Studio User | Yes | Own reports, public reports, and reports shared with them |
To let a user build reports, assign them the Report Studio User role (or System Manager). Importantly, the app never bypasses Frappe permissions — a user can only build reports on DocTypes they already have read access to, and row-level permission query conditions of the underlying DocTypes are still respected.
Report Studio is a drag-and-drop builder. A typical flow:
Left Join or Inner Join).Count, Sum, Avg, Min, Max).+, -, *, /) over other fields, formatted as Number, Integer, Currency, or Percent.=, !=, >, in, like, between, is set, date-range granularities, etc. Filters can be marked as runtime filters so they become prompts when the report is run.From a previewed or saved report you can export to:
Exports run the full query (not just the current page) up to a cap of 10,000 rows.
Each report has a Visibility setting:
Reports can also be published as a standard Frappe Query Report. Publishing generates a native report (visible in the desk Report list and report views) that delegates execution back to the Report Studio engine, including runtime filters. Publishing can be reversed with unpublish.
Report Studio page (JS UI)│ builds a JSON "config"▼report_builder.api.* ── whitelisted endpointsbuilder.py → preview / save / load / list / delete / publishexport.py → export_report (xlsx/csv/pdf)metadata.py → DocType & field discovery for the UIpermission.py→ role checks + row-level query conditions│▼report_builder.engine ── the query engineschema.py → validates & normalises the configmeta_validator.py→ verifies DocTypes/fields exist & are readablejoin_resolver.py → resolves related/child-table joinsfilter_ops.py → translates filters into SQL conditionsaggregations.py → applies Count/Sum/Avg/Min/Max + group-bypagination.py → page / page-size handlingquery_engine.py → assembles it all via Frappe's query builder▼Frappe / MariaDB
Key points:
read permission, and permission_query_conditions are applied so users only see rows they are allowed to see.Report Studio Report DocType with child tables: Report Studio Related Source, Report Studio Column, Report Studio Calculation, Report Studio Filter, Report Studio Group By, Report Studio Sort, and Report Studio Share.report_builder.runtime.inline_runner) so the generated standard report stays in sync with the Report Studio definition.The repo is set up with ruff (lint + format) and pre-commit.
# install pre-commit hookscd apps/report_builderpre-commit install# lint / formatruff check .ruff format .
The engine has a unit-test suite under report_builder/tests/ (test_schema.py, test_filter_ops.py, test_query_engine.py):
bench --site <your-site-name> run-tests --app report_builder
A GitHub Actions workflow runs these tests on CI.
mit
User Reviews
No reviews yet, be the first to review.
0 rating
Explore more apps