The file viewer block displays whatever file a formula returns. Point it at a file column — [Invoice] — and each record shows its own upload. PDFs render page by page; CSVs open as a table. Anything else shows its filename with buttons to open or download it.
Try it: Page through the invoice, zoom in and out, and hide the filename bar in the settings strip.
Settings
Invoice-1042.pdf
1 / 3
Page 1 of 3100%
Example. A file viewer block showing the [Invoice] field of an Order record: the filename bar carries open and download buttons, the PDF renders page by page, and the page and zoom controls sit along the bottom. A CSV in the same field would open as a table instead.
The file's address. On a record page the formula runs against the record on screen, so [Invoice] shows that record's upload. On a page with no record block, only fixed text and USERROLE()/USEREMAIL() are available.
Show the filename bar
on / off
The strip across the top carrying the filename and the open/download buttons. On by default.
CSV: first row is a header
on / off
On by default. Off treats every row as data and numbers the columns instead. Ignored for other file types.
PDF — rendered a page at a time, sized to the block, with page and zoom controls along the bottom.
CSV — parsed into a scrollable table with a sticky header. Commas, semicolons, tabs, and pipes are all detected, as are quoted fields and quoted line breaks. Files are previewed up to 5,000 rows; past that the block says how many more the file holds.
Anything else — the filename, its type, and buttons to open or download. Nothing is fetched, so pointing the block at a large archive costs nothing.
The file type comes from the address's own filename, not from downloading the file first — so a .pdf link gets the PDF viewer and a .csv link gets the table.
Files uploaded through this app always display. A file hosted somewhere else can only be displayed inline if that server allows cross-origin reads — when it doesn't, the block says so and the open and download buttons still work. Addresses must be https://.
Like every block, this one also has the shared block settings: an optional title (which shows as a heading above the block) with a description under it, auto-height, conditional visibility, and role-based visibility.