Grist Tutorial: Master Every Dashboard Block, No Code (2026)

A beginner-friendly Grist tutorial covering every Advanced Charts dashboard block — charts, slicers, tables, invoices, calendars, barcodes and more, with every setting explained.

Grist Custom Widget · Beginner Tutorial
Advanced Charts · A free Grist widget by ANUPRESS

Grist tutorial: every dashboard block, explained

Advanced Charts gives a Grist table a whole shelf of building blocks, from KPI cards to invoices to a slicer that filters the page to barcodes that print at a real size. This Grist tutorial walks through every one of them: what each block does, every setting it has, and when you’d reach for it — written for someone who has never built a dashboard before.

By ANUPRESS Team · Last updated September 2026 · Applies to Advanced Charts v3.7 · Reference — skip to the block you need

Treat this Grist tutorial as a shelf reference rather than a straight read: the contents jump to any block, and each entry stands on its own. If you’d rather start from a finished design and work backwards, the ten starter templates are the faster door in.

The basics every block shares

Before the individual blocks, seven things work the same way everywhere. Learn these once and most of this Grist tutorial becomes obvious:

  1. Blocks are added from one panel. In edit mode, click the Add Section tile at the end of any page. The panel opens with a row of layouts (1×2, 2×1, 2×2, 3×2, 3×3, 4×2 or custom): pick one and a grid of cells lands on the page with the chooser open for its first cell. Below that is the single-element list, grouped into Data & Metrics, Content, Basic Elements and Advanced; a search box filters them, ★ marks the usual starting points, and the (i) on each tile explains it in a sentence.
  2. Every editor has a live preview. The block renders at the bottom of its settings panel and updates as you change things. Nothing lands on the page until you press Apply, and nothing is stored in your document until you press Save & Publish.
  3. Data blocks start with a table. Anything that reads your data has a Data table list naming every table in your document. Hover or arrow onto a table and the space beside the editor fills with it: its columns with their types and as many rows as fit, so “Members or People?” is settled by looking. Pick the table and the column dropdowns fill themselves from it. On a live document these editors also carry an “Edit the data in …” button for fixing a value without leaving the page.
  4. Every block has a width. The Block width row (XS · S · M · L · Full) decides how much of the row it takes. Four XS stat cards share a row; a Full chart takes its own. Phones ignore all of this and stack everything one column wide. Inside a Grid cell the row is greyed out, because the cell sets the width there; Column span under Layout & style takes over.
  5. Blocks are edited in place. Hover any block for drag, edit and delete buttons — or click the block itself to open its editor.
  6. Every change can be undone. The edit bar has undo and redo (Ctrl+Z and Ctrl+Y work too) and a History button that lists every step since you opened the editor, in plain words. Click a step to go back to it. The list lives while the editor is open and clears when you leave.
  7. Every block has a Layout & style section. It sits, closed, at the foot of every editor. Open it for margin and padding per side, a minimum height, a row span (column and row spans inside a grid, plus where the block sits in its cell), an order, a background, border, corner radius and shadow, hide-on-phones / tablets / desktops, and a CSS id, classes and z-index. It never touches the block’s own settings; Reset clears it, undo brings it back. While you edit, a block hidden on the current screen stays visible, faded and labelled.
The Add Section panel from this Grist tutorial: a row of layout tiles above the wizard, the search box and every dashboard block in four categories
Where every part of this Grist tutorial starts: the Add Section panel, with its layouts (1), the wizard (2) and the element list (3).
Grist tutorial: the table list open in a block editor, with a snapshot of the People table's columns, types and first rows shown on the left of the page
Choosing a table: the one under the mouse is shown on the left, columns, types and first rows, before you commit to it.
Grist tutorial: the Layout & style section open at the foot of a stat card editor, with margin and padding boxes per side, minimum height, row span, order, background and the visibility switches
The Layout & style section every editor ends with: spacing (1), placement (2), look (3) and visibility (4).
Don’t want to choose? The top entry, “Not sure? Let me help”, asks three plain questions and builds the right chart for you. It’s the best first move if words like “scatter” mean nothing to you — more on it under Chart.

Data & Metrics blocks

The blocks that read your tables. This part of the Grist tutorial is where most dashboards live.

1. Stat card — one number that matters

A big number computed from a column: total revenue, headcount, samples logged. Usually the first row of any dashboard, three or four of them side by side at XS width.

Settings: Label · Data table · Value column (every column is listed; text ones say so) · Summarize by (Sum, Average, Count rows, Count values, Distinct count, Minimum, Maximum, Median, Std. deviation) · Trend & sparkline (Automatic uses the table’s date column; pick another, or none) · Icon (search 509 icons, browse them all, or upload your own) · Number format (compact 1.2K/3.4M, currency symbol) · Block width.

Pick a text column and the card switches to counting for you — “how many rows” is a perfectly good number. The trend is the small “+30.9% vs prev. period” line: it splits your rows by the trend column and compares the latest period against the one before.

Grist tutorial: the stat card editor with value column, summarize, trend, icon library and live preview
The stat card editor. Every data block follows this shape: table, columns, options, live preview.

2. Chart — eleven chart types in one block

Column, bar, line, area, pie, doughnut, treemap, funnel, radar, scatter and gauge, all inside one block. You choose data first and a chart type second — and types that don’t fit your selection grey out, so a nonsense chart is hard to build.

Settings: Title · Data table · Categories (the groups along the axis) · Values (the numbers to plot; add a second category to split into series) · Summarize values by (same nine options as stat cards) · Chart type grid with a ★ on the recommended fit · per-type extras (Stack series, Smooth curve, Sort by value) · Colors (inherit the theme palette, or custom per series) · Subtitle with live placeholders (%count, %groups, %total) · Block width.

If you’re unsure what any of that means, don’t configure a chart at all — the wizard exists so this part of the Grist tutorial can be skipped. Open Add Section → Not sure? Let me help. It asks which table, what to compare, and what number to show, then recommends the chart and adds it. Funnels have one extra trick — they can be built stage by stage from separate columns, which keeps them honest when your data isn’t already cumulative.

The guided chart wizard recommending a chart type with a live preview
The wizard’s final step: your answers as chips, the best-fit chart starred, a live preview below.

3. Breakdown — “how many of each?”

Counts each distinct value in a column and shows the split with coloured dots, counts and percentages. Empty cells get their own row, which quietly makes it a data-quality check too.

Settings: Title · Data table · Group by column · Show as (List, or a Donut / Pie / Bar / Column chart of the same counts) · Max rows shown (the rest roll into “Other”) · Subtitle placeholders (%total, %groups, %top, %topcount, %empty) · Block width.

4. Map — rows with coordinates, pinned

Every row with a latitude and longitude becomes a pin on an interactive Leaflet map, with clustering when pins crowd together and Street / Satellite / Terrain layers built in.

Settings: Title · Data table · Latitude / Longitude columns (guessed from names like sample_latitude, or picked) · Popup title · Color points by (optional category with a legend) · up to 4 tooltip fields · an optional extra tile layer (Tile URL, layer name, max zoom, attribution) for teams with their own map server · Subtitle placeholders (%count, %missing, %total) · Block width.
Privacy note: map tiles come from public servers (OpenStreetMap / Esri), which see the viewed area and the viewer’s IP — never your data. Everything else in the widget stays in the browser.

5. Progress bar — a number against a goal

“$1.17M of $3M — 39%.” One fill bar, endlessly useful for fundraising totals, sales targets and SLAs.

Settings: Title · Value comes from (Type a number, or From my data) · in data mode: Data table, Value column, Summarize by; in manual mode: Current value · Target (goal) · Prefix and Suffix (a currency sign leads the number, a unit follows it) · Block width.

6. Data table — the actual rows

Sometimes people don’t want a summary, they want the list. This block shows a table’s rows with live search, click-to-sort headings and paging.

Settings: Title · Data table · Columns to show (tick the ones you want; they keep the table’s own order) · Rows per page · Let viewers search (on/off) · Let viewers sort by clicking column headers (on/off) · Highlighted cells — spreadsheet-style ranges like G1:G48 that tint cells, e.g. a profit column or a promotion zone · Block width.

Reference columns show the name they point at, not the row number, and search and sorting use that name. Reference lists and choice lists come out as readable text, attachments as a file count. It also prints properly: the print button renders every row as a clean report with your site’s branding, not a screenshot with a pager in it.

The data table block with search, sortable columns and pagination
The data table block on the demo’s Live data page — search, sorting, paging and a tinted column.

7. Invoice — a row becomes a document

Pick a row from an invoices table and it renders as a finished, printable document: your logo and details, the client’s address, line items, totals. It has the most settings of any block in this Grist tutorial because it replaces a whole app, but the editor guesses most of them from your column names the moment you pick the table.

Settings, grouped the way the editor groups them:
The document — Block title · Word on the document (type “Invoice”, “Receipt” or “Quote” — it’s free text) · Style (four mastheads: Classic, Banded, Letterhead, Minimal).
Where the invoices are — Invoice table · Invoice number · Client · Issue date · Due date · Amount · Status · Note · Their reference / PO and its label.
Line items — either a single Amount with a one-line description, or a separate line-items table (linked back by an invoice column) with Description, Quantity, Unit price and an optional Line total.
Client address book — a clients table, its Name column and Address lines.
Your details — Business name, Address, Email, Phone, Tax ID and its label, Logo.
Money & text — Currency symbol · Accent colour · Tax label and rate · Payment terms · Payment details · Prepared by · Closing message · Total label · Block width.

The block’s print button prints only the invoice — the rest of the page is left out — and “Save as PDF” in the print dialog turns it into a file you can send.

An invoice document rendered from a Grist row with line items, VAT and totals
A Grist row rendered as a sendable invoice, with an invoice picker above it.

8. Calendar — anything with a date

Rows plotted on a month view. On a live document it’s two-way: drag an event to a new day and the date is written back to your table as one undoable change, and edits made in Grist appear on the calendar by themselves.

Settings: Title · Data table · Date column · Event title column · Color events by (optional category) · up to 4 detail fields shown when an event is clicked · Let viewers drag events to reschedule (on/off) · Block width.

Dates respect the column’s own timezone, so nothing drifts a day when a dashboard is opened from another continent. Busy days collapse into a “+N more” link rather than stretching the whole month.

Grist tutorial: the calendar block plotting rows as draggable events on a month view
The calendar block. Dragging “Review Q3 marketing spend” to Thursday updates the row in Grist.

9. Slicer — let readers filter the page

One column’s values as a row of chips (or a menu, once there are more than twelve). A reader picks a value and every other block on the page narrows to match: the KPI cards and their trend lines, the charts, the table, the map, the calendar. It is the one block that changes what all the others show, and the reader’s choice is never saved into the design.

Settings: Table · Column (a Choice, Reference or Text column works best; a new slicer starts on the table’s first Choice column if it has one) · Label (optional) · Show as (Auto, Chips, Menu — Auto uses chips up to twelve choices, then a menu) · Selection (Several, or One at a time) · Show how many rows each choice has (on/off) · Blocks (Automatic, or Choose from a checklist of the blocks on this page) · Block width.

Automatic is the interesting setting. A block is filtered if it reads the slicer’s table, a table with a column of the same name, or a table joined to it by a reference column in either direction — the same “select by” idea Grist uses between widgets, so a slicer on Clients narrows every table that points at Clients. The editor prints the answer as you change things (“Filters 9 blocks on this page: …”), and Choose is there for when the rules are not what you meant, say a chart that should stay whole as context while the rest narrows. Several slicers on one page combine, so Region and Category together show only the rows that match both.

Grist tutorial: the slicer editor with the column picker and a live line listing which blocks the slicer will filter
The slicer editor: pick the column (1), and the panel says which blocks it reaches before you apply it (2).
A slicer block with North selected, showing 12 of 48 rows, and the KPI cards and charts below it narrowed to the North rows
On the page: North picked, the status reads 12 of 48 rows, and every card and chart below shows only North.

Content blocks

Seven blocks that carry words and pictures rather than metrics — the difference between a wall of charts and a page someone actually reads. This stretch of the Grist tutorial goes faster: these are simpler tools.

10. Text — headings and paragraphs

A heading plus formatted text, for introductions, explanations and context between charts.

Settings: Heading · Body (basic HTML allowed — bold, links, lists; anything unsafe is stripped before it renders) · Block width.

11. Image — uploaded, or straight from your data

A photo with an optional caption. The interesting mode is the second one: point it at a Grist Attachments column and a specific row, and the image comes out of your document — a product photo, a headshot, a site plan.

Settings: Image source (Upload my own / From my Grist data) · in data mode: Data table, Attachment column, Row · Alt text (accessibility) · Fit (Fill & crop, or Show whole image) · Caption · Link · Block width.

12. Counter — a number that counts up

The classic “1,250+ happy customers” effect: a number animates from start to end when it scrolls into view. The values are typed in, not calculated — for computed numbers use a stat card.

Settings: Label · Start and End number · Prefix and Suffix · Decimal places · Animation length (ms) · optional icon · Block width.

Visitors whose systems ask for reduced motion see the finished number, no animation.

13. Testimonials — quotes with stars

A grid of quote cards: name, quote, star rating, optional photo. Type them in, or — the better trick — read them from a feedback table so new reviews appear on their own.

Settings: Section title · Content comes from (Type them in / From my data) · in data mode: Data table, Name column, Quote column, Rating column (1–5), Photo column, Max shown · Block width.

14. Accordion — questions that expand

A list of questions that open to reveal answers. Made for FAQ sections, works for anything long that shouldn’t fill the page by default.

Settings: Title · the question & answer list (add, edit, reorder) · First question open by default (on/off) · Block width.

15. Timeline — dated milestones

A vertical line of events, each with a date, a title and a short description. A history, a roadmap, a process — anything with an order.

Settings: Title · the milestone list (date, title, description each) · Block width.

16. Pricing table — plans side by side

Plan cards with a price, a feature list and a button each. One plan can be highlighted as the recommended pick.

Settings: Section title · Plans (each with name, price, period, feature list, Highlight this plan, button label and link) · Block width.

Basic elements

The quickest section of the Grist tutorial: the small blocks that do layout and utility jobs. None of them read data on the page, and all of them earn their place.

17. Button — a call to action

Settings: Label · Style (Primary, Soft, Outline) · Alignment (Left, Center, Right) · Link — another page of your dashboard, or an external URL in a new tab · Block width.

18. Icon — one symbol in a badge

A standalone icon in a coloured badge, from the same 509-icon library the stat card uses. Decorative on its own, or clickable with a link.

Settings: Icon (search or browse all 509) · Size · Alignment · Link (optional) · Block width.

19–20. Spacer & Divider — breathing room

The spacer is invisible vertical space; the divider is a thin rule. Between them they turn one long scroll into visible sections.

Spacer: Height (pixels) · Block width. Divider: Style (Solid, Dashed, Dotted) · Thickness (1–10px) · Color · Block width.

21. Countdown timer — a deadline that ticks

Days, hours, minutes and seconds to a date you set, ticking live in the visitor’s browser. Grant deadlines, launches, registration cut-offs.

Settings: Title · Counts down to (date & time) · Message once it ends · Block width.

22. QR code — scan to open

A scannable code for any link or text, generated entirely in the browser — nothing is sent anywhere to make it. Put one on a printed report so paper leads back to the live page.

Settings: Link or text · Error correction (Low / Medium / Quartile / High — higher survives smudges, holds less) · Code color and Background · Size (80–600px) · Caption · Block width.

23. Barcode — a code that prints at a real size

The QR code’s linear cousin: Code 128 for any text (asset tags, internal references), or EAN-13, EAN-8 and UPC-A for the digits on retail packaging. Drawn in the browser like the QR code, but sized in millimetres, because a scanner reads bar widths against the narrowest one and a barcode the browser scaled to fit its column is a barcode that no longer scans. It overflows visibly instead.

Settings: Symbology (Code 128, EAN-13, EAN-8, UPC-A) · Value (EAN and UPC work out the check digit, so paste the number with or without it) · Bar width in mm (0.33 by default; below about 0.25 many printers and hand scanners struggle) · Height in mm · Show the number underneath (on/off) · Bars and Background colours · Caption · Block width.

The live preview says what it will print at (“Code 128 · prints 79.2mm wide by 20mm tall” for the demo value at 0.4 mm), so you can check it against the label before you buy the labels. Write %ColumnName in the value or caption and the block becomes a template: in a printout set to repeat once per row, every copy carries that row’s value, which is how one block turns into a sheet of product labels.

Grist tutorial: the barcode editor with the four symbologies, the %ColumnName hint and the bar width and height fields in millimetres
The barcode editor: four symbologies (1), the %Column placeholder for repeated printouts (2), and bar width and height in millimetres (3).

24. Grid — a panel with its own rows and columns

The one block that holds other blocks. Pick columns and rows, one to four each, and every cell can take a block: four small stat cards in one panel, a chart beside its notes, a 3×3 of icons. The panel moves, resizes and prints as one, and a slicer on the page reaches the blocks inside it as if they stood on the page.

Settings: Title (optional; with one the grid draws as a card, without one only its blocks show) · Columns (1–4) · Rows (1–4) · Gap between cells (Compact / Normal / Roomy) · Block width.

The quickest way to a grid is the layout row at the top of Add Section: pick 1×2 and the chooser opens for the first cell at once. Blocks go in from the page rather than from this panel: every empty cell has an Add button that opens the usual chooser, minus the grid itself, since a grid cannot hold another grid. A block in a cell is edited by clicking it and deleted with its bin icon, which leaves the cell empty rather than closing it up. Click the grid’s edge or its title to edit the grid. Shrinking it keeps each block in its row and column where both still exist, moves the rest into free cells, and says how many would be removed before you apply.

Grist tutorial: a Grid block in the editor with a stat card in the first cell and five empty cells showing Add buttons
A new 3×2 grid with a stat card in its first cell. Each empty cell has its own Add button.

Advanced

25. HTML/CSS/JS — the escape hatch

The escape hatch. For the one thing no block covers: write your own HTML, CSS and JavaScript. By default it runs in a sandboxed frame that cannot read your Grist data or the widget’s settings, so a pasted snippet can’t become a data leak. The frame can be up to 4000 pixels tall, so a whole form or a long page shows at its real height instead of scrolling inside a box.

Switch Access to your document to Grist plugin API and the block becomes a custom widget written in place: the plugin API is loaded ahead of your code, so grist.ready({ columns: […] }) and grist.onRecords(…) work exactly as they would in a widget you host yourself. The editor then shows the same Table it reads list and column pickers as the Widget block below, and the note at the top says plainly that your code now has this dashboard’s access.

Settings: Access to your document (None, sandboxed · Grist plugin API) · Table it reads and column mapping (with access on) · HTML · CSS · JavaScript · Height (pixels, up to 4000) · Block width.
Grist tutorial: the HTML/CSS/JS block editor with Grist plugin API access switched on, the access note, the table list and a picker for the Task column the code asked for
The embed with Grist access on: the switch (1), and the column the code asked for in its ready() call, offered with a picker (2).
Reality check before you use it: if you’re reaching for the embed to show a number, a table or a chart, there’s almost certainly a real block for it above — and the real block reads your data live with no code at all.

26. Widget — another custom widget, inside this one

The last stop in this Grist tutorial. Any custom widget you could give Grist, you can now give this page: paste its URL and it runs inside the dashboard, reading your document through this widget. Grist still sees one widget; the calls the nested one makes are carried up and its answers carried back, with its own settings kept under a key of their own so they never collide with the design.

Two choices matter. Table it reads: pick a table and the widget reads that one; leave it blank and it follows the table this dashboard is linked to in Grist, with live change notifications. Columns the widget asks for: when the widget loads in the live preview it says which columns it needs, and each one appears with a picker, the same mapping step Grist shows in its own panel. A required column left unmapped is exactly what the widget would see in Grist, so it shows its own “map the columns” message until you do.

Settings: Widget URL · Table it reads · one picker per column the widget asks for · Forget the widget’s saved settings · Height (pixels, up to 4000) · Block width.

One thing neither this block nor the HTML/CSS/JS block can do is join a printout. An embedded frame lives in its own document and prints as a blank rectangle, so the + that every other block shows in view mode is not offered on these two.

Grist tutorial: the Widget block editor with the access note, the widget URL, the table it reads and pickers for the Label and Value columns the nested widget asked for
A Widget block being edited: the URL (1), the table (2), and the two columns the widget asked for (3).
Grist tutorial: a small example widget running inside the demo's Page elements page as a Widget block, listing rows with a value bar each
The demo’s own example widget, nested on the Page elements page. Outside a document it shows sample rows.
Trust before you paste: a nested widget runs with this dashboard’s access to your document. Whatever this widget can read it can read, and if this widget can write, so can it. The editor says so at the top, in orange, every time.

Grist tutorial FAQ

Do I need to know statistics or code?

No. The wizard picks chart types from plain-English questions, impossible combinations grey themselves out, and the only block involving code is optional and labelled Advanced. This Grist tutorial deliberately assumes zero prior knowledge.

Which blocks read my Grist data?

All of the Data & Metrics blocks (stat card, chart, breakdown, map, progress bar, data table, invoice, calendar and slicer) always can, and three Content blocks optionally can: images from an Attachments column, testimonials from a reviews table, and progress bars calculated from a column. Everything else is typed in, though a barcode, QR code or text block can carry %ColumnName placeholders that fill in per row when a printout repeats.

Can I change a block after adding it?

Yes. Hover it in edit mode and click the pencil (or click the block). Apply updates the page, Save & Publish writes it to the document. Delete is the bin icon next to the pencil.

How do block widths work?

Every block has XS–Full widths. Blocks flow into rows left to right: four XS cards share a row, a Full chart takes its own. On phones everything stacks one column wide, whatever you chose.

Can a reader filter the page without editing it?

Yes, with a Slicer block. It shows one column’s values as chips or a menu, and a reader’s choice narrows every other block on the page that reads the same table, shares the column, or is joined to it by a reference column. The choice lives in the reader’s session and is never saved into the design.

Can I put another custom widget inside the dashboard?

Yes, with the Widget block. Paste the widget’s URL, choose the table it reads (or let it follow the table the dashboard is linked to), and map the columns it asks for in the editor. It runs with the same access to your document as the dashboard itself, so nest only widgets you trust. The HTML/CSS/JS block can do the same for code you write in place once its Grist access is switched on.

Where does the sample data in the screenshots come from?

The widget’s built-in demo — a real Grist-style table read live, not mockups. You can poke at everything in this Grist tutorial yourself in the live demo, no account needed.

Keep going

That is the whole Grist tutorial — every block the widget has. Two places to go next:

Advanced Charts v3.7 — a free, open custom widget by ANUPRESS. Your data stays in your Grist document. © 2026 ANUPRESS.

ANUPRESS Team
ANUPRESS Team

ANUPRESS Team writes and builds everything on this site — reviews and 48+ free browser-based tools alike. We test what we review by actually using it, not by summarizing a spec sheet. Spot something wrong or want to know more about a specific piece? Reach us through the contact page.

Articles: 37