Rill 0.89 - Inline Explore Dashboards, Dashboard Favorites, Conditional Formatting, Scheduled Canvas Reports and Spanish Localization
β‘ Rill's BI-as-code powers fast dashboards, embedded analytics, and an agent-ready semantic layer β all running on top of the warehouses you already use.
π Get Started β’ Join our Discord

π¨ Introducing Conditional Formatting for Pivot Tablesβ
Pivot tables in Explore and Canvas dashboards now support conditional formatting: define value-based rules to color cells by measure, including a "lower is better" option for reversed scales. Rules are saved as part of the dashboard state: they persist when you switch table types and reset when you change the underlying metrics view.
π¬ Schedule Delivery of Canvas Dashboards PDFsβ
Canvas PDF exports can now be scheduled and delivered by email β a great way to send a weekly snapshot to stakeholders. Tab groups are included in the export.
β Favorite and Sort Dashboards on the Home Pageβ
Mark dashboards as favorites on the project home page to keep the ones you use most at the top, alongside a new sort selector for the dashboard list. Favorites are user-based, so each member of a project curates their own list.
πͺπΈ Rill Habla EspaΓ±ol - Announcing Spanish Localization (with More Languages on the Way)β
Rill is now available in Spanish, our first of dozens of languages we will be rolling out support for in the coming months. More than 1,700 user-facing strings across both Rill Cloud and Rill Developer have been translated, and a new language switcher lets you choose your locale.
π Securely Invite Users with Custom Attributesβ
Custom user attributes can now be passed in and assigned at invite time, from either the UI or the CLI, for organization and project invites. Attributes are stored on the invite and applied to the membership once it is accepted, so users whose dashboard access depends on these attributes are correctly handled from their very first login. No additional steps required.
π Metrics Views now Include Explore Dashboardsβ
A metrics view YAML can now define its Explore dashboard configuration inline, using a new explore key. Now a single metrics view file contains both the semantic model and its dashboard configuration, making every metrics view explorable by default. The inline block accepts the same field selectors as standalone explores (wildcards, explicit lists, regex, and exclusions), and existing explore files continue to work unchanged. See the metrics view reference for details.
Bug Fixes and Improvementsβ
Explore / Dashboardsβ
- Applied theme colors to the explore time picker
- Fixed chart resizing and dynamic y-axis behavior for non-line chart types
- Kept one decimal place on line chart y-axis tick labels
- Fixed leaderboard columns going stale when context columns are shown for all measures
- Fixed delta column widths in leaderboards and the dimension table
- Honored an explicit
format_d3in tooltips and big numbers - Fixed toggling off a pivot filter clearing existing filters
- Capped the pivot drop zone height so a long list of chips no longer hides the table
- Fixed the filter resource dropdown not scrolling
- Fixed the collapsed row resizer on wide dashboard rows
- Fixed the table sort dropdown rendering with a white background
- Fixed a lock leak in dashboard state sync that could freeze URL and state updates
- Fixed "View as" behavior, including while editing a project
Canvasβ
- Added a row limit setting to canvas pivot tables
- Returned a clear error instead of panicking on an invalid component variable
value
Metrics Views and Metrics SQLβ
- Applied security row and query filters in the metrics view
SummaryAPI - Enforced the metrics view access policy in the annotations resolver
- Fixed annotation validation checking the parent's model or table instead of the annotation's
- Rejected joins and other unsupported top-level clauses in metrics SQL, and allowed
DISTINCT - Fixed
NOT BETWEENcompiling to the same filter asBETWEENin metrics SQL - Fixed
IS FALSEbeing parsed identically toIS TRUEin metrics SQL - Fixed decimal comparisons in metrics SQL filters
- Fixed panics in Parquet exports of timeseries and in aggregation exports without a time range
- Fixed
ListResourcesfailing for projects with a large number of resources - Added a refresh trigger for all resources in the resource listing
Modelsβ
- Preserved model output when changing connectors in manual or patch change mode
- Prevented transient table lookup errors from marking all partitions pending
- Fixed a full model rebuild on rename by pointing the incremental state at the renamed table
- Cleared partition catalog rows when deleting a partitioned model
- Added validation against empty
pre_execandpost_execstatements
Connectorsβ
- Added support for multiple databases and schemas in the MotherDuck connector
- Upgraded the embedded DuckDB to 1.5.4
- Fixed STS configurations not working for DuckDB
- Used a lightweight system sync replica for replicated ClickHouse engines
- Supported passing query attributes to the Druid query context
- Fixed a BigQuery client leak by closing the client in the file iterator
AI / LLMβ
- Reworked the analyst agent into a generic skill with a richer user prompt
- Increased the AI conversation message limit to 100 and made the maximum message size configurable
- Included exact metrics view field names in the
develop_filesub-agent prompt - Instructed AI agents not to inspect Rill internal state with external tools
- Fixed a nil-pointer panic in the AI resolver when time ranges are omitted
Rill Developerβ
- Expanded file explorer directories by default and added an expand/collapse control
- Skipped interactive prompts in
rill service createwhen flags are passed - Fixed
.envvariables not being pushed to the newly created project on deploy - Added a gentle prompt to star Rill on GitHub
Cloudβ
- Fixed user lists not refreshing after adding, removing, or changing a member's role
- Fixed a broken infinite query in the user group table
- Made redeploying a project clean up old stopped deployments
- Exposed the disk size override in the
rill project getCLI output - Fixed a nil pointer dereference for non-email alert notifiers
Embeddingβ
- Added a
hide_navigation_barembed param that hides the navigation bar while keeping in-dashboard navigation, such as the Canvas to Explore drill-through, enabled; see the embedding docs
Security and Infrastructureβ
- Fixed a path traversal bypass in the local path sandbox and rejected paths outside the repo root in repo drivers and AI file tools
- Required the
ReadInstancepermission in connector service handlers - Upgraded Go to 1.26.5 and patched dependency vulnerabilities (
sigstore-go,excelize,kin-openapi, gRPC, and others)