Skip to main content
Table renders a live, paginated list of rows from a schema table. This page explains the props, how the runtime queries the table, and how row-click navigation pairs Table with DetailPanel. You declare which columns to show; the runtime handles the query, pagination controls, filter bar, and sort headers.

Example

table.json
{
  "block": "Table",
  "props": {
    "schema_table": "customers",
    "columns": ["name", "email", "status", "created_at"],
    "sortable": true,
    "filterable": true,
    "page_size": 25,
    "on_row_click": { "navigate": "/customers/{{id}}" }
  }
}

Props

How it binds to data

On render, the runtime issues a runQuery against schema_table. Sorting and filtering state is held client-side; user interactions trigger new runQuery calls. The query runs in the security context of the authenticated user, so row-level access is governed by your schema grants and the user’s authUser roles.

Row-click navigation

on_row_click.navigate is a URL template. The token {{id}} is replaced at runtime with the id field of the clicked row.
on-row-click.json
"on_row_click": { "navigate": "/customers/{{id}}" }
This sends the user to /customers/cust_01H... when they click the row whose id is cust_01H.... The destination URL typically hosts a DetailPanel block that reads the same record.

Patterns

Common props

In addition to the Table-specific props, every block accepts id, class_overrides, visible_if, and analytics_event. See common props on the PageBlocks overview.

Where to go next