Show it. Build it. Ship it.
Upload a report design — a photo, a PDF, or an existing .repx. Forma reads its geometry and returns a written specification, a live in-browser mockup, and valid DevExpress XML you can open in the designer. Three artifacts, one request.
Bring your own Gemini key — Forma ships with none, and keeps yours in this tab unless you ask it to save an encrypted copy.
One request comes back as three finished things.
Not a chat answer you have to interpret. The model writes the report file and nothing else; Forma reads the mockup and the specification out of that file, so all three describe the report you download, and none of your tokens go on writing it twice.
Written specification
A component inventory, band by band — every element, its coordinates, its font, the fields it prints, the totals and the grouping. Read out of the .repx itself, so it cannot describe a different report from the one you download.
Live layout mockup
The report’s bands drawn in the browser at true proportions, on a sheet that stays white in both light and dark themes — because a report does. Drawn from the .repx, so what you check on screen is the file, not an approximation of it.
DevExpress XML
Real XtraReportsLayoutSerializer markup, syntax-coloured with line numbers and a copy action. A parse check runs before you ever download it, so a malformed generation shows up here — not when the designer refuses the file.
Built for the documents you already have.
Most reporting work starts from something that already exists — a printed form, a PDF a client sent, a report someone built years ago. Forma starts there too. And when it is not one document but a folder of them, the Batch panel takes the whole set and gives back one .repx per file.
Invoices and statements
Header block, addressed party, a line-item grid with totals underneath, payment terms in the footer. The shape Forma handles best.
Purchase orders and packing slips
Multi-column grids with merged headers, quantity and unit columns, and boxed totals — the widest layouts Forma is asked for.
Payslips and remittance advice
Dense two-column arithmetic with right-aligned figures and rule-separated bands. Alignment and per-side borders are carried through.
Certificates and letters
Centred typography, a signature block, a stamp or a seal — each one located as its own element rather than flattened into the background.
Legacy paper forms
A scan or a phone photo of a form nobody has the source for. Forma reads its words with OCR in your browser and its layout from the picture, and gives you a designer file to start from.
Redesigning an existing .repx
Upload the report file itself. It is parsed and validated as XML in the browser, then handed over as exact text — so refinements edit what is there.
Three steps, and the middle one is the only one you wait for.
Give it something to read
Drag in a screenshot, a scan, a multi-page PDF, or a .repx you already have. Images are downscaled and re-encoded, and their words read by OCR, in your browser; a .repx is parsed and validated as XML there first.
- Pictures, PDF, .repx and data files, several at once
- Multi-page PDFs read and text-extracted, up to 8 pages
- Every file you add is confirmed on screen before it is sent
Let it work
While Forma works the reply shows three dots, every step behind the scenes, and Stop aborts the request in flight. With a report open, the chat edits it in place rather than starting again.
- Three dots and Stop, as in the chat apps you know
- Edits made in place, each listed, with Undo and Redo
- Plain chat stays chat — asking a question does not build a report
Take the file
Download the .repx, named after the report title, and open it in the DevExpress designer. Or print it from the Preview, which pages it as DevExpress does.
- Parsed and checked in the viewer before you download
- Exported from the Preview as PDF, Excel, CSV, Word, RTF, HTML or a picture
- Saved as you work, to your account or on this device
It reads the file. Not a picture of the file.
A digital PDF already contains every string and its exact position. Rasterising it and asking a model to read the text back out of pixels throws that away — and the coordinates come back approximate.
Forma reads each page twice, for two different purposes. It renders the page as an image for visual structure — borders, fills, logos — and it extracts the page's own text layer, converting every position from PDF points into the report grid before anything is sent. The prompt ranks the extracted text above the image for content and position. A scan or a photo has no text layer, so its words are read by OCR in your browser instead.
ytop = pageHeight − (baseline + height)
A scanned PDF has no text layer. Its words are read by OCR in your browser instead, so expect the odd misread string where a digital PDF would have been exact.
Accurate down to the hundredth of an inch.
These are the details Forma carries through from your design into the XML, so the report opens in the designer ready to work with.
LocationFloat and SizeF in the report’s unit: hundredths of an inch unless a report you bring says otherwise, the unit DevExpress stores.
Letter, A4, Legal or Tabloid, portrait or landscape: worked out from your page, your words or your region, and written as the paper DevExpress prints on.
An XRTable with populated rows and cells, weighted relatively — not a grid faked out of loose labels.
Top, right, bottom and left carried individually, with their colour — a single underline stays a single underline.
Bold, italic, font family and size, horizontal and vertical alignment, and whether text wraps.
Each logo is located in your upload and cut out of it for the mockup, and placed and sized as a picture box in the .repx, ready for you to point at the image in the designer.
Forma ships with no API key, and cannot be given one.
You supply your own Gemini key and your browser calls Google directly with it. It never touches Forma's server — there is no generation endpoint there to touch. No shared quota, no waiting behind anyone else, no per-user cost to whoever runs it.
The working copy lives in sessionStorage, which the browser erases when the tab closes. If you want it on more than one machine, it is encrypted in your browser under a passphrase you choose, and only the ciphertext is uploaded.


Let's build something precise.
Bring a design and your own Gemini key. Once the key is in, there is nothing else to set and nothing to pay for.