Pages
A page is an ordered list of charts rendered in a CSS Grid. One link, multiple charts. Not a dashboard builder - a playlist.
Quick Start
Create some charts first, then combine them into a page:
# Create a page with 3 columns# mrr spans all 3, the rest span 1 eachrq pages create weekly-overview \ --columns 3 \ --charts mrr:3,churn,signups,arpu,ltv,cac
# Publish itrq pages publish weekly-overview# → https://rawquery.dev/p/xyz789# Create a page with 3 columns# mrr spans all 3, the rest span 1 eachrq pages create weekly-overview \ --columns 3 \ --charts mrr:3,churn,signups,arpu,ltv,cac
# Publish itrq pages publish weekly-overview# → https://rawquery.dev/p/xyz789Layout
Pages use CSS Grid. You choose the number of columns (1-4), and each chart gets a column span. That's the entire layout system.
The :N suffix in the chart list is the span. mrr:3 = full-width on a 3-column grid. burn:2 = two-thirds. No suffix = span 1.
# 3-column grid example:# Row 1: mrr (full width)# Row 2: churn | signups | arpu# Row 3: burn (2/3 width) | arrrq pages create kpi-board \ --columns 3 \ --charts mrr:3,churn,signups,arpu,burn:2,arr# 3-column grid example:# Row 1: mrr (full width)# Row 2: churn | signups | arpu# Row 3: burn (2/3 width) | arrrq pages create kpi-board \ --columns 3 \ --charts mrr:3,churn,signups,arpu,burn:2,arrResponsive by default: 3 columns on desktop, 2 on tablet, 1 on mobile. No config needed.
Auto-Refresh
Pages can auto-refresh all charts on an interval. Minimum 5 minutes to keep things sane. Set it when creating a page or update later:
# Refresh every 30 minutes (value in seconds via API)rq pages create live-dashboard \ --columns 2 \ --charts mrr,users,errors,latency \ --refresh 1800
# Or update an existing page via APIcurl -X PATCH /api/v1/workspaces/{workspace_id}/pages/live-dashboard \ -H "Authorization: Bearer ..." \ -d '{"refresh_interval": 1800}'# Refresh every 30 minutes (value in seconds via API)rq pages create live-dashboard \ --columns 2 \ --charts mrr,users,errors,latency \ --refresh 1800
# Or update an existing page via APIcurl -X PATCH /api/v1/workspaces/{workspace_id}/pages/live-dashboard \ -H "Authorization: Bearer ..." \ -d '{"refresh_interval": 1800}'Publishing
Same model as charts. Publish generates a link, unpublish kills it. Password protection optional.
rq pages publish weekly-overview# → https://rawquery.dev/p/xyz789
rq pages publish weekly-overview --password boardroom
rq pages unpublish weekly-overviewrq pages publish weekly-overview# → https://rawquery.dev/p/xyz789
rq pages publish weekly-overview --password boardroom
rq pages unpublish weekly-overviewAll charts on the page must be published individually for their data to load. Unpublished charts show an error state on the page - the page itself doesn't break.
Parameters
Charts inherit parameters from their saved queries. On a page, all charts receive the same URL parameters. Unknown params are ignored per chart. Missing required params show an error state.
# Page with default paramscurl -X POST /api/v1/workspaces/{workspace_id}/pages \ -d '{"name": "q1", "columns": 2, "charts": [{"name": "mrr"}, {"name": "churn"}], "params": {"from": "2025-01-01", "to": "2025-03-31"}}'
# Override via URL# https://rawquery.dev/p/xyz789?from=2025-04-01&to=2025-06-30# Page with default paramscurl -X POST /api/v1/workspaces/{workspace_id}/pages \ -d '{"name": "q1", "columns": 2, "charts": [{"name": "mrr"}, {"name": "churn"}], "params": {"from": "2025-01-01", "to": "2025-03-31"}}'
# Override via URL# https://rawquery.dev/p/xyz789?from=2025-04-01&to=2025-06-30No filter dropdowns. No date pickers. The filter is the URL.
CLI Commands
rq pages # List all pagesrq pages create <name> \ --columns <1-4> \ --charts "mrr:3,churn,signups" \ [--title "Page Title"] \ [--refresh <seconds>]rq pages show <name> # View page layoutrq pages update <name> [--charts ...] [--columns ...] [--title ...]rq pages delete <name>rq pages publish <name> [--password]rq pages unpublish <name>rq pages # List all pagesrq pages create <name> \ --columns <1-4> \ --charts "mrr:3,churn,signups" \ [--title "Page Title"] \ [--refresh <seconds>]rq pages show <name> # View page layoutrq pages update <name> [--charts ...] [--columns ...] [--title ...]rq pages delete <name>rq pages publish <name> [--password]rq pages unpublish <name>What Pages Are Not
- Not a dashboard builder. No drag-and-drop, no pixel-perfect layout.
- Not interactive. No filter widgets, no date pickers, no cross-filtering. Params are in the URL.
- Not a viewer portal. You have the link, you see the data. You don't, you don't.