Web Designer — Reportman Server
Design, preview and run Report Manager reports from the browser, with an AI copilot. Self-hosted in Docker.
Reportman Server is one container on your network that holds the report engine, the report store and a web designer. Your team designs reports in the browser, previews them as PDF and runs them through a public API, with no installation on the PCs. The reports are the same .rep files the Delphi designer, printreptopdf and the Web Report Server read.
The designer and the server are free. The AI copilot is optional: everything else works without it. When you want it, the AI can run on your own hardware — a local model served by the Reportman Agent, at no cost — or you can subscribe to a Reportman AI plan and use the models tested with it.
Start it
docker run -d \
--name reportman-server \
--restart unless-stopped \
-p 8090:8090 \
-v reportman-server-data:/app/data \
tonimartir/reportman-server:latest
On the first start the server is not installed yet. Read the one-time installation code from its log:
docker logs reportman-server
Then open http://localhost:8090, enter the code, choose how people enter and create the first administrator. Only somebody who can read the server's log can install it.
How people enter
- Users of this server (recommended): each person signs in with a user of this server. Administrators manage users, groups and, for each report folder, which groups run and which design. A
reportmanserver.inifrom the Web Report Server can be imported. - Trusted network: nobody signs in; whoever reaches the port designs, runs and opens the console. Use it only on a closed network, never with the port open to the Internet.
The installation page chooses the mode. To fix it from Docker instead, with no installation page, add one of these to docker run:
# trusted network
-e Server__Auth=trusted
# users, with the first administrator created on the first start
-e Server__Auth=users -e Server__AdminUser=ADMIN -e Server__AdminPassword=change-me
The Reportman AI account is only for the AI: it is not the door to the server.
The data volume
Everything the installation owns lives in /app/data, plain files with nothing tied to the machine:
informes/ | the reports, one folder per alias; saving keeps the last versions in .versions/ |
dbxconnections.ini | the connections, in the format the designers read |
fuentes/ | your own fonts |
access.json, keys/ | users, groups, permissions and the keys that sign the sessions |
apikeys.json | the API keys |
server-id | this installation for Reportman AI |
Copy the folder and the installation moves with it. To clone a server as a new one (a test copy, a second office), delete server-id before its first start: it then counts as a new installation for Reportman AI, with its own AI sessions.
Connections
- Direct: the server opens the database itself. The image includes PostgreSQL, Firebird, SQL Server, MySQL/MariaDB, SQLite and ODBC. A database file inside the data volume is named by its file name, for example
clientes.db. - Through the Reportman Agent: the Reportman Agent runs next to your database and the server reaches it through Reportman AI or a direct channel. The connection needs the Agent's API key, because the server runs reports with nobody signed in.
The new report wizard, ported from the Delphi designer, creates both kinds and tests them before saving.
A report made by the AI from one paragraph
A new installation comes with Ejemplos/ventas-por-cliente.rep and the EXAMPLE connection. It is the Reportman AI example database, which needs no key. The AI designed the report from a single request, which the report keeps in the group AI_REQUEST and prints at the end:
“I want you to design a professional sales-by-customer report, grouped by customer: the customer name and code in the header, the customer's total sales in the group footer. The detail must list the items sold to that customer, but only one line per item, that is, the data must be grouped in the SQL by customer and item. At the very end, a bar chart of sales by item (all customers); in each customer's footer, a bar chart of their items too. It must be a professional report; the page header must show the report title (make one up) and Page X of TOTAL.”
The result has two datasets, a group per customer with its total and its chart, and a chart of all customers at the end.
The AI copilot
It designs and changes reports in natural language, and helps with SQL and expressions. It is the same AI as the Delphi designer. The AI calls go from the server to Reportman AI, so the server needs Internet access to aiapi.reportman.es, over plain HTTPS
(port 443). Only the AI sign-in goes from the browser.
Privacy: to design, the copilot sends Reportman AI the report definition and the columns of its datasets, as the Delphi designer does. Every call is in the copilot's AI log and in the server's audit log.
Fonts
A container only sees its own fonts. The image carries metric-compatible replacements for the Windows fonts (Arial, Times New Roman, Courier New, Arial Narrow, Calibri, Cambria), so a report keeps its Windows layout. It also carries Noto for most scripts, including Arabic (Noto Naskh Arabic), Hebrew, Indic, Thai, Chinese, Japanese and Korean, plus Amiri, Vazirmatn, monochrome emoji, Roboto, Open Sans, Lato and Montserrat.
- Your own fonts: copy the files to
fuentes/in the volume and restart the container. - Baked into an image:
FROM tonimartir/reportman-server, copy the files to/usr/share/fonts/truetype/<name>/andRUN fc-cache -f. - Check: Server → Diagnostics → Fonts shows what the engine sees.
Run reports from your applications
Create an API key in the console (Server → Keys) and run any stored report:
curl -X POST "http://localhost:8090/api/reports/INFORMES/execute?path=Ejemplos/ventas-por-cliente.rep&format=pdf" \
-H "X-ReportmanServer-ApiKey: rpsk_..." -o report.pdf
Formats: pdf, csv, text and metafile. Report parameters go in the query or in a JSON body. The console has an API explorer that builds the request and shows it in curl, PowerShell, fetch, C# and Delphi. The OpenAPI reference is at /scalar.
Behind a reverse proxy
The AI answers are streams (text/event-stream under /api/ai/). A proxy that buffers them shows the answer only at the end.
- nginx:
location /api/ai/ { proxy_pass …; proxy_buffering off; proxy_read_timeout 600s; } - IIS / ARR:
responseBufferLimit="0"on the rule and a proxy timeout of a few minutes. - No response compression on
/api/ai/.
Upgrade
docker pull tonimartir/reportman-server:latest
docker rm -f reportman-server
# and the same docker run as above: the volume keeps the installation
Image on Docker Hub: tonimartir/reportman-server. The report engine is open source: github.com/tonimartir/reportman.