Dashboards
Built-in dashboards for every project, your own dashboards from queries and metrics, dashboards kept in your repository, and read-only public links.
Built-in dashboards
Every project has these, defined by the platform and read-only: Overview, APM, Database, Infrastructure, Errors, Crons, and one for each Durable Object class.
Your own
Create a dashboard under Observability → Dashboards. Each widget is a query, a metric, or a reference to something else in the project.
| Widget | Source |
|---|---|
timeseries, query_value, top_list, heatmap, distribution | A calculations query, or a metric |
table | Any query, or a metric |
log_stream | An events or invocations query |
issue_list | Runlot Errors issues, by search and sort |
slo | One SLO |
monitor_status | Monitors by ID or tag |
service_map | The project's service map |
markdown | Text |
A metric widget reads overview, memory, infra or custom (a custom metric by name, with tags and a group-by). Every timeseries carries deploy markers.
Template variables narrow every widget at once. A variable names a tag key — env, version, route, region, or one of your own — and a widget uses it by writing "$name" as a filter value. The dashboard's time range overrides any range in a widget's query.
A dashboard holds up to 50 widgets and 10 variables. Free has 3 custom dashboards per project; Pro has no limit.
Dashboards as code
Every .json file in .runlot/dashboards/ is applied when the deployment goes live:
{
"key": "checkout",
"title": "Checkout",
"variables": [{ "name": "version", "key": "version", "default": "*" }],
"widgets": [
{
"type": "timeseries",
"title": "Checkout p99",
"query": {
"view": "calculations",
"filters": [
{ "key": "$route", "op": "eq", "value": "/checkout" },
{ "key": "$deployment.version", "op": "eq", "value": "$version" }
],
"calculations": [{ "op": "p99", "key": "$wall_ms" }]
}
},
{
"type": "top_list",
"title": "Failure reasons",
"metric": { "metric": "custom", "params": { "name": "log.checkout.failed", "groupBy": ["reason"] } }
},
{ "type": "service_map" }
]
}keyis the dashboard's stable name: lower case, digits,-and_, and it may not start withbuiltin. A later deploy updates the dashboard with the same key, and removes a repository dashboard whose file is gone.- Each file is at most 128 KiB, and a deployment carries at most 50 dashboards. A malformed file fails the deploy instead of silently not appearing.
- A repository dashboard is read-only in the dashboard UI. Export on any dashboard, built-in ones included, gives you the file to commit.
Sharing
Every dashboard has a URL that any member of the organization can open.
A public read-only link needs two switches. First an admin turns on public dashboard links for the project; it is off by default, and while it is off every public link of the project answers 404. Then Share on a dashboard makes a link. The token is shown once and stored hashed; making a new one replaces the old one, and you can revoke it. A public link serves charts and numbers only — log streams, issue lists and event tables are never served through it.