Grist

Productivity

A modern relational spreadsheet that combines the flexibility of a spreadsheet with the robustness of a database.

Latest v1.7.17 · by Grist LabsWebsitegristlabs/grist-core

Release activity

Release activity — 10 releases across 10 days since Nov 26, 2025. Each cell is one day; darker means more releases that day. Nothing is recorded before Nov 26, 2025. Older weeks are hidden at this screen width.
MayJunJulAug
SundayNo releases on Apr 26, 2026No releases on May 3, 2026No releases on May 10, 2026No releases on May 17, 2026No releases on May 24, 2026No releases on May 31, 2026No releases on Jun 7, 2026No releases on Jun 14, 2026No releases on Jun 21, 2026No releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 2026
MondayNo releases on Apr 27, 2026No releases on May 4, 2026No releases on May 11, 2026No releases on May 18, 2026No releases on May 25, 2026No releases on Jun 1, 2026No releases on Jun 8, 2026No releases on Jun 15, 2026No releases on Jun 22, 2026No releases on Jun 29, 2026No releases on Jul 6, 2026No releases on Jul 13, 2026No releases on Jul 20, 2026No releases on Jul 27, 2026No releases on Aug 3, 2026No releases on Aug 10, 2026
TuesdayNo releases on Apr 28, 2026No releases on May 5, 2026No releases on May 12, 2026No releases on May 19, 2026No releases on May 26, 2026No releases on Jun 2, 2026No releases on Jun 9, 2026No releases on Jun 16, 2026No releases on Jun 23, 20261 release on Jun 30, 2026No releases on Jul 7, 2026No releases on Jul 14, 2026No releases on Jul 21, 2026No releases on Jul 28, 2026No releases on Aug 4, 2026No releases on Aug 11, 2026
Wednesday1 release on Apr 29, 2026No releases on May 6, 2026No releases on May 13, 2026No releases on May 20, 2026No releases on May 27, 2026No releases on Jun 3, 20261 release on Jun 10, 2026No releases on Jun 17, 2026No releases on Jun 24, 2026No releases on Jul 1, 2026No releases on Jul 8, 2026No releases on Jul 15, 2026No releases on Jul 22, 20261 release on Jul 29, 2026No releases on Aug 5, 2026
ThursdayNo releases on Apr 30, 2026No releases on May 7, 2026No releases on May 14, 2026No releases on May 21, 20261 release on May 28, 2026No releases on Jun 4, 2026No releases on Jun 11, 2026No releases on Jun 18, 2026No releases on Jun 25, 2026No releases on Jul 2, 2026No releases on Jul 9, 2026No releases on Jul 16, 2026No releases on Jul 23, 2026No releases on Jul 30, 2026No releases on Aug 6, 2026
FridayNo releases on May 1, 2026No releases on May 8, 2026No releases on May 15, 2026No releases on May 22, 2026No releases on May 29, 2026No releases on Jun 5, 2026No releases on Jun 12, 2026No releases on Jun 19, 2026No releases on Jun 26, 2026No releases on Jul 3, 2026No releases on Jul 10, 2026No releases on Jul 17, 2026No releases on Jul 24, 2026No releases on Jul 31, 2026No releases on Aug 7, 2026
SaturdayNo releases on May 2, 2026No releases on May 9, 2026No releases on May 16, 2026No releases on May 23, 2026No releases on May 30, 2026No releases on Jun 6, 2026No releases on Jun 13, 2026No releases on Jun 20, 2026No releases on Jun 27, 2026No releases on Jul 4, 2026No releases on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 2026

10 releases since Nov 26, 2025

Changelog

v1.7.17

Added 5
  • Add a Row numbers setting on grid widgets to choose between Numbers (position in current sort), Row IDs (bracketed format), or Hidden (collapse left-hand gutter)
  • Add setup checklist in Document Settings showing which notifications, automations, invite emails, and AI assistant features are ready and what prerequisites each unfinished feature requires
  • Add ability for admins to request prerequisite setup steps through an Admin Panel item
  • Add button in Admin Panel and Quick Setup to switch to the full edition by downloading matching extensions, verifying SHA-256, and restarting in place
  • Add optional "Help us improve" card at the end of Quick Setup to collect feedback on how users heard about Grist and their user type
Changed 8
  • Announce modals and popups as dialogs by screen readers and trap Tab key focus inside open modals
  • Translate temporary row IDs inside RefList values in addition to Ref values and row-ID positions to enable creating mutually-referencing rows in one bundle
  • Show Grist edition and version in left panel footer with links to compare editions and release notes
  • Make "Enable Access Rules", form reset warning, and color picker labels translatable
  • Improve OAuth apps re-authorization to pre-select previously granted resources and skip account picker when account can be identified
  • Explain how to enable OAuth apps on servers without GRIST_ENABLE_OIDC_SERVER instead of rendering UI over 404 endpoints
  • Add banner on home page and card on OAuth apps page explaining how to connect using MCP
  • Route MCP document calls through the same server forwarding as the rest of the document API to enable MCP support with Fleet
Fixed 7
  • Preserve "View as" for attachment previews and whole-document exports instead of resolving as document owner
  • Fix Airtable reference columns holding single values to import as working references instead of unusable text
  • Fix Airtable count columns to no longer error when the column they count was imported as a Ref rather than RefList
  • Fix wrapped list items in Markdown cells at maximum row height overlapping lines below
  • Fix server crash when a client disconnects part-way through a proxied request
  • Fix "reachable" self-check reporting false failure when anonymous access is disabled
  • Fix MCP clients passing a document's urlId in place of doc_id no longer receiving "Doc belongs to a different DocWorker" error
What's Changed
New features
  • Row numbers, row IDs, or neither. A new "Row numbers" setting on grid widgets, in Grid Options and in a menu at the grid's top-left corner. Choose Numbers (position in the current sort, as before), Row IDs (bracketed like [15], matching how references render), or Hidden, which collapses the left-hand gutter. Addresses #220, open since 2022, and #1927. (#2448)
  • Setup checklist for notifications and automations. Notifications, automations, invite emails, and the AI assistant each need plumbing behind them (an email backend, a Redis queue, an AI provider, the full edition), and when a prerequisite is missing the feature simply isn't there. Document Settings now lists what's ready and what each unfinished feature is waiting on. Users can press "Ask the admin" to request a step; admins see the requests in a new Admin Panel item. (commit)
  • Switch to the full edition from the Admin Panel. Previously this meant changing Docker image. Now it's a button, in the Admin Panel or the first step of Quick Setup: the server downloads the extensions matching its own version, checks their SHA-256, and restarts in place. Offered on release builds only, not on main, nightlies, or dev checkouts. GRIST_EXT_FULL_EDITION_BASE_URL points it at a mirror, or turns it off for air-gapped installs. (#2450)
  • "Help us improve" in Quick Setup. First-time setup now ends with an optional card: how you heard about Grist, what kind of user you are, and a switch subscribing an email address to product and security updates. It appears during setup only, and if you leave it blank nothing is sent at all. What you fill in goes to Grist Labs, along with your installation ID. (commit)
Improvements
  • Accessibility
    • Modals and popups are announced as dialogs by screen readers, and Tab is trapped inside an open modal. Fixes a Mousetrap bug that let keyboard focus wander behind a modal. Contributed by @manuhabitela (#2371). Keyboard focus now works from the tooltip-style popups inside modals as well (commit)
  • API
    • Temporary row IDs are now translated inside RefList values, not just Ref values and row-ID positions. Rows that reference each other through RefList columns can be created in one bundle (#2477)
  • UI/UX
    • The Grist edition and version show in the left panel footer, with links to compare editions and to release notes. Previously visible only in the Admin Panel (#2470)
  • Internationalization
    • "Enable Access Rules", the form reset warning, and the color picker's fill / text / default / none labels are now translatable. Contributed by @fflorent (#2451)
  • Documentation
    • documentation/database.md is back in sync with the schema, with a regenerated home DB diagram. Contributed by @fflorent (#2458)
    • Freshened the comments that feed the generated reference on support.getgrist.com, with formatting fixes and a broken link repaired (#2462)
    • The README caught up with the last several releases: accessibility, Automations, OAuth apps, the MCP server, three new environment variables, and a table of full edition feature flags (#2443)
Fixes
  • "View as" is preserved for attachment previews and whole-document exports, which previously resolved as the document owner (#2478)
  • An Airtable reference column holding a single value imported as unusable text rather than a working reference, leaving the raw Airtable ID behind as alt text (#2446)
  • Airtable count columns no longer error when the column they count was imported as a Ref rather than a RefList (#2447)
  • In Markdown cells at a max row height, wrapped list items could overlap the lines below (#2465)
  • Improved error reporting when comparing documents via the API (/compare) (commit)
  • The server could crash when a client disconnected part-way through a proxied request (commit)
  • The "reachable" self-check reported a false failure whenever anonymous access was disabled (#2420)
  • Redirects when GRIST_PERSONAL_ORGS is disabled have been improved (#2420)
Full Grist edition extensions
  • OAuth apps
    • Re-authorizing a client pre-selects the resources you granted before instead of resetting the grant to everything, and skips the account picker when it can identify the account. Switching accounts no longer invalidates the previous account's tokens (commit)
    • A server without GRIST_ENABLE_OIDC_SERVER explains how to enable OAuth apps, instead of rendering UI over endpoints that 404 (commit)
  • MCP
    • A banner on the home page and a card on the OAuth apps page explain how to connect using MCP. See the MCP docs (commit)
    • Clients passing a document's urlId in place of doc_id no longer get "Doc belongs to a different DocWorker" (commit)
    • Document calls now travel to the server holding the document through the same forwarding as the rest of the document API, rather than MCP's own, which means MCP works with Fleet (commit)
  • Grist Fleet
    • New. Any Grist server in a pool of servers will now proxy WebSocket connections and document API calls to whichever peer server holds the document. Every server can then be deployed the same way behind a load balancer, with no separate home / static / doc worker configuration. Requires GRIST_FLEET=true and the installationFleet feature in an Enterprise activation key (commit)
Contributions
  • Grist Labs: @berhalak, @dsagal, @georgegevoian, @paulfitz, @Spoffy
  • @manuhabitela: keyboard and screen-reader support in modals and popups (#2371)
  • @fflorent: refresh and expand the database documentation (#2458), localize remaining UI strings (#2451)
Translations
  • Barna Kovács
  • linke
  • Martin Harari Thuresson
  • npluto

Full Changelog: https://github.com/gristlabs/grist-core/compare/v1.7.16...v1.7.17

Join our Discord Community if you'd like to get into development of Grist.

View originalPermalink
How v1.7.17 went

v1.7.16

Added 7
  • Forms can substitute the submitted record's ID into a redirect URL with {{ID}}
  • Telemetry can be turned on during the Quick Setup flow
  • New persist-data boot probe warns when documents and home DB sit on ephemeral storage and would be lost on restart
  • New Outgoing requests boot probe and Security Settings entry report how user-triggered outgoing requests are gated by GRIST_PROXY_FOR_UNTRUSTED_URLS
  • OAuth apps now support Dynamic Client Registration (RFC 7591) so OAuth and MCP clients can register without being pre-provisioned
  • Conditional style tools are now part of the v2 AI assistant and set_table_conditional_styles is no longer destructive
  • Telemetry added for MCP calls counting tool calls and unique sessions per doc and per org
Changed 5
  • Quick Setup authentication step recommends getgrist.com authentication with a hero card when no other provider is configured
  • Edition is now its own card in Admin Panel, legacy Enterprise toggle is gone, and switching edition clears the activation key
  • Building grist-core from source now produces the full edition by default, with yarn run set-community-edition for the previous behavior
  • Custom widgets: reverted restriction that disallowed same-origin custom-widget URLs
  • Apps can manage webhooks with just the doc:webhooks permission instead of the broader doc.schema:write
Fixed 5
  • Airtable imports of large schemas no longer time out by submitting ModifyColumn actions in batches of 25
  • ACL condition editors no longer render blank in Firefox at browser zoom below 100%
  • Duplicate document and Save Copy no longer fail with Unknown Host when both GRIST_PROXY_FOR_UNTRUSTED_URLS and APP_DOC_INTERNAL_URL are set
  • Undo no longer fails for action bundles that combine a table or column rename with a column removal in the same step
  • Locale document setting description now correctly says it affects only number formatting and the default currency, not date formatting
What's Changed

Airtable imports of large schemas no longer time out. Forms can substitute the new record's ID into a redirect URL with {{ID}}. ACL condition editors no longer render blank in Firefox below 100% zoom. The Quick Setup flow gained a telemetry toggle and a recommendation to use getgrist.com authentication. Two new Admin Panel boot probes warn when document data may not survive a restart and report how outgoing requests are gated. Building grist-core from source now produces the full edition by default, with yarn run set-community-edition for the previous behavior. In the full edition, OAuth apps now support OAuth Dynamic Client Registration (RFC 7591), so OAuth and MCP (Model Context Protocol) clients can register without being pre-provisioned, and apps can manage webhooks with just the doc:webhooks permission instead of the broader doc.schema:write.

Improvements
  • Forms
    • Redirect URLs can substitute the submitted record's ID with {{ID}}, so a form can send the user to a page about their own submission (#1831)
  • Airtable import
    • Large schemas are imported by submitting ModifyColumn actions in batches of 25, avoiding gateway timeouts on bases with many columns (commit)
  • Custom widgets
    • Reverted a restriction that disallowed same-origin custom-widget URLs, which had broken some unusual but legitimate setups (commit)
  • Quick Setup
    • Telemetry can be turned on during the Quick Setup flow, instead of only from the Admin Panel or an environment variable (#2419)
    • The authentication step recommends getgrist.com authentication with a hero card when no other provider is configured (#2410)
  • Admin Panel
    • New "persist-data" boot probe warns when documents and the home DB sit on ephemeral storage and would be lost on restart (the Docker default with no volume at /persist, a RAM filesystem, or the container's root mount). Shown in the Admin Panel and as a banner on the Backups page; external storage or Postgres count as durable (#2396)
    • New "Outgoing requests" boot probe and Security Settings entry report how user-triggered outgoing requests (REQUEST(), webhooks, Import from URL) are gated by GRIST_PROXY_FOR_UNTRUSTED_URLS (#2294)
    • Edition is now its own card, the legacy Enterprise toggle is gone, switching edition clears the activation key, and the trial banner links to Admin Panel / Edition (commit)
  • Build / packaging
    • yarn install in grist-core now builds the full edition by default, via a post-install hook that downloads the ext material from grist-ee. Use yarn run set-community-edition to skip it (the previous behavior) or yarn run set-full-edition to opt in explicitly. The chosen edition is saved to grist-edition, GRIST_EDITION takes precedence, and GRIST_SKIP_EXT_AUTOSETUP skips the hook for contexts where extensions are installed manually (Docker builds, grist-desktop, grist-static) (commit)
  • Internal / infrastructure
    • File uploading refactored so uploads route to the correct doc worker (doc-specific endpoints) or travel in the main request (imports), in preparation for simpler multi-server configuration (commit)
    • Bump @gristlabs/node-sqlite3 (#2392)
    • Test database connection now verifies it points at the database the caller asked for, fixing DocApiMisc share tests that failed after certain other suites (#2402)
Fixes
  • Duplicate document and Save Copy no longer fail with "Unknown Host" when both GRIST_PROXY_FOR_UNTRUSTED_URLS and APP_DOC_INTERNAL_URL are set, since trusted internal URLs now use a direct fetch instead of the untrusted-URL proxy (#2344)
  • ACL condition editors no longer render blank in Firefox at browser zoom below 100% (#2390)
  • Undo no longer fails for certain action bundles that combine a table or column rename with a column removal in the same step. Normal web-client editing was unaffected, since those happen as separate bundles (#2387)
  • Locale document setting description now correctly says it affects only number formatting and the default currency, not date formatting (#2397)
Full Grist edition extensions
  • OAuth apps
    • Dynamic Client Registration (RFC 7591): OAuth and MCP clients can register without being pre-provisioned, enabled with GRIST_ENABLE_OIDC_DCR. The POST /oidc/reg endpoint is rate-limited (GRIST_OIDC_DCR_RATE_LIMIT), clients can register without specifying scopes (common for MCP servers), and a Housekeeper job prunes clients with no grants or only expired ones (commit). See the OAuth apps and Connected apps docs.
    • Apps can manage webhooks with just the doc:webhooks permission. Webhook changes used to count as editing document structure, which required doc.schema:write; they now go through a helper that only touches the webhooks table, so the narrower permission is enough (commit)
  • Assistant
    • Conditional style tools are now part of the v2 AI assistant, and set_table_conditional_styles is no longer destructive: it changes styles only, with no data loss (commit)
  • MCP
    • Telemetry added for MCP calls (mcpToolCall and mcpSessionStart events, full telemetry level only), counting tool calls and unique sessions per doc and per org. The server now reads client name and version on initialize (commit). The Grist MCP server is now documented
    • Further MCP tool work (hosted Grist only): create_table builds columns in one atomic transaction, new tools for widget field config (column width) and table conditional styles, add_records/update_records preserve unspecified fields across mixed-shape records, widget tools gained sort and per-column filter support, and a fix for self-referential Ref columns with a show column (commit)
  • Automations and Audit Logs
    • Dropped the "New" tag from Automations and Audit Logs, and changed the Audit Logs tag to "full Edition" (commit)
Contributions
  • Grist Labs: @berhalak, @dsagal, @georgegevoian, @paulfitz, @Spoffy
  • @guillett: id substitution in form redirect URLs (#1831)
  • @eloupias: direct fetch for trusted URLs behind a proxy (#2344)
  • @fflorent: bump @gristlabs/node-sqlite3 (#2392)
Translations
  • Arif Budiman
  • Barna Kovács
  • Grégoire Cutzach
  • Kévin DUPOND
  • Martin Harari Thuresson

Full Changelog: https://github.com/gristlabs/grist-core/compare/v1.7.15...v1.7.16

Join our Discord Community if you'd like to get into development of Grist.

View originalPermalink
How v1.7.16 went

v1.7.15

Added 1
  • OAuth support extended to home API endpoints including GET /orgs, GET /orgs/:oid/workspaces, POST /workspaces/:wid/docs, and GET /profile/user with resource-level filtering for scoped tokens
Changed 9
  • TypeScript upgraded to 5.9.3 with tsc and esbuild targets bumped to es2020
  • External storage configuration tidied with each storage backend owning its option spec and S3 bucket probing at startup for early failure detection
  • Translation keys cleaned up to unblock auto-pruning by wrapping variable calls to t() with explicit switches
  • Dependency bumped: ws from 8.18.0 to 8.20.1
  • Dependency bumped: axios from 1.15.2 to 1.16.0 with fetch adapter now enforcing maxBodyLength and maxContentLength
  • Dependency bumped: tmp from 0.2.5 to 0.2.6
Fixed 2
  • Crash instead of silently failing when login middleware cannot initialize with unreachable identity provider at startup
  • Fix card widget bugs where new card widgets no longer borrow the record card layout and cards with stale field references fall back to default layout
Security 6
  • Harden value interpolation in server-rendered pages by escaping values embedded into inline script blocks with jsesc and canonicalizing openerOrigin to bare origin
  • Require a matching authenticated session to reconnect a websocket instead of allowing clientId alone to attach to an existing session
  • Disallow same-origin custom-widget URLs as defense in depth against XSS payloads being weaponized through widget URLs
  • Disable triggers when a document is downloaded or copied and regenerate webhook secrets correctly when a document with webhooks is uploaded
  • Sanitize link URLs from the next parameter on /welcome/select-account to be same-origin and sanitize URLs in document tours
  • Close metadata leakage in GET /forms by reading table metadata through fetchMetaTables and checking that the section is actually a form
What's Changed

An infrastructure release. First, an upgrade for OAuth access token authentication in Grist's REST API: a new credential framework in grist-core, with the token validator and OIDC server (including CIMD registration and MCP server tools) shipping in the Full Grist edition, where OAuth apps also move from experiment to available by default. Second, a wave of security hardening: a metadata leakage in GET /forms is closed, server-rendered pages get stricter value escaping, websocket reconnection now requires a matching authenticated session, custom-widget URLs can no longer be same-origin, and triggers are disabled when a document is downloaded or copied. TypeScript was upgraded to 5.9.3, and several dependencies were bumped to clear known vulnerabilities.

Improvements
API
  • OAuth support extended to home API endpoints. GET /orgs, GET /orgs/:oid/workspaces, POST /workspaces/:wid/docs, and a new GET /profile/user now accept OAuth tokens, with resource-level filtering so a scoped token sees only the orgs and documents it was granted, and is rejected when creating documents in un-granted workspaces or orgs. (commit)
Internal / infrastructure
  • TypeScript upgraded to 5.9.3, with tsc and esbuild targets bumped to es2020. (commit)
  • External storage configuration tidied. Each storage backend now owns its option spec, and a configured S3 bucket is probed at startup so a misconfiguration (such as a missing AWS_REGION) fails fast at startup rather than mid-request. (commit)
  • Translation keys cleaned up to unblock auto-pruning. Five call sites passed a variable rather than a literal to t(), hiding the keys from the i18next scanner; each is now wrapped in a helper with an explicit switch so every key is visible. Orphaned onboarding-choice and theme-label keys were migrated to the scopes the runtime actually looks them up under, fixing labels that previously always showed in English. (#2368)
  • Dependency bumps. ws 8.18.0 to 8.20.1 (fixes an uninitialized memory disclosure in websocket.close()) (#2370), axios 1.15.2 to 1.16.0 (the fetch adapter now enforces maxBodyLength and maxContentLength) (#2375), tmp 0.2.5 to 0.2.6 (#2369), shell-quote 1.8.1 to 1.8.4 (#2386), and an upgrade of picomatch, minimatch, glob, and serialize-javascript that cuts the high-severity advisories reported by yarn audit (#2381).
Documentation
  • README updated for the Quick setup first-run flow. Quickstart, Admin Panel, Logins, and building-from-source sections now describe the boot-key login and Quick setup wizard, with a new GRIST_IN_SERVICE entry in the env var table. (#2366)
Fixes
Security
  • Harden value interpolation in server-rendered pages. Values embedded into inline <script> blocks in sendAppPage and OAuth2Clients are now escaped with jsesc and inserted without interpreting String.replace patterns (such as $' and $&), and openerOrigin is canonicalized to its bare origin. (commit)
  • Require a matching authenticated session to reconnect a websocket. A clientId alone is no longer enough to attach to an existing session; the new connection must belong to the same authenticated user, so a clientId cannot be used on its own to impersonate a user. (commit)
  • Disallow same-origin custom-widget URLs. A new disallowCustomWidgetUrl() helper refuses widgets whose URL is same-origin or on Grist's configured base domain, as defense in depth against an XSS payload being weaponized through a widget URL. (commit)
  • Disable triggers when a document is downloaded or copied. Webhooks and email triggers are turned off in a downloaded or copied document and must be re-enabled by hand, preventing accidental sends from forks and clones. Webhook secrets are also regenerated correctly when a document with webhooks is uploaded. (commit)
  • Sanitize link URLs in two more places. URLs from the next parameter on /welcome/select-account are now sanitized and required to be same-origin, and URLs in document tours are sanitized too. (commit)
  • Close a metadata leakage in GET /forms. The endpoint read table metadata directly instead of through fetchMetaTables, and did not check that the section was actually a form. Anyone could pass the section ID of a non-form widget and read metadata that access rules would otherwise censor. (commit)
Other
  • Crash instead of silently failing when login middleware cannot initialize. When GRIST_IN_SERVICE=true and the configured identity provider is unreachable at startup, the server now exits rather than falling back to the boot-key login page, so an auto-restart can retry instead of leaving users unable to sign in. (#2384)
  • Fix card widget bugs. New card widgets no longer borrow the record card's layout while record cards are disabled, and a card whose saved layout references only stale fields now falls back to a default layout instead of throwing and leaving the widget broken. (#2379)
Full Grist edition extensions

The Full Grist edition ships OAuth apps, an OIDC server, and an MCP server on top of grist-core.

OAuth apps
  • OAuth apps are now available by default. The experiment flag was removed now that the feature is ready, so all full Grist users can register and manage OAuth apps without opting in. (commit)
OIDC server
  • CIMD registration support. A new GRIST_OIDC_CIMD_ALLOWED_HOSTS environment variable enables Client ID Metadata Document registration (set it to an allowlist of hosts; leaving it empty disables CIMD), and the oidc-provider library was updated. (commit)
  • Optional client_id for OAuth grants, plus a portless loopback fix. Loopback redirect_uris from a terminal app or CIMD flow that omit application_type are now treated as native clients, so localhost callbacks are accepted instead of rejected. The CIMD flow no longer requires registering clients in the home database. (commit)
  • JWKS handling cleaned up. JWKS loading moved from ext/ to app/, removing a misleading warning when no JWKS is configured and surfacing a clear error only if a signing operation is ever actually needed. (commit)
MCP server
  • MCP server improvements. New list_attachments and get_attachment_url tools, stricter doc_id input validation, a grist_ prefix on all tool names to avoid collisions with other tools, and smoke tests for the remaining endpoints. (commit)
  • MCP endpoints put behind the API throttle. Throttle middleware moved to the usage tracker and is now wired through to the MCP doc endpoint. (commit)
  • Per-tool permission checks on the MCP endpoint. Each MCP tool now enforces the OAuth scopes it requires, a user-profile tool was added to the MCP home endpoint, OIDC token requests support resource indicators, and tool descriptors gained titles and annotations. (commit)
Other
  • Restore the missing site-settings page in the full Grist edition. The /site-settings route and its client rendering had been dropped, even though the "Site settings" menu item is shown in all non-SaaS deployments. The core billing pages are composed back into the enterprise and hosted factories, and the page now renders based on its pageType rather than the edition. (commit)
Contributions
  • Grist Labs: @berhalak, @dsagal, @georgegevoian, @paulfitz, @Spoffy
  • @fflorent: crash on login-middleware init failure so auto-restart can retry (#2384), bump dependencies to clear yarn audit advisories (#2381)
Translations
  • Alberto Azzalini
  • Arif Budiman
  • Barna Kovács
  • Grégoire Cutzach
  • Kevin Kandlbinder
  • Martin Harari Thuresson
  • SadCivilian

Full Changelog: https://github.com/gristlabs/grist-core/compare/v1.7.14...v1.7.15

Join our Discord Community if you'd like to get into development of Grist.

View originalPermalink
How v1.7.15 went

v1.7.14

Added 7
  • Guided first-run setup wizard is now the default flow for fresh self-hosted installations
  • POST /records/list API endpoint for sending large queries in the request body
  • Screen-reader support in grid views
  • Keyboard shortcuts to open row and column menus in grid views
  • Keyboard shortcuts to open context menus when in widgets
  • Page widget picker now works with keyboard and screen readers
  • New date formats
Changed 7
  • Setup wizard now checks which formula sandboxes are available when it opens instead of waiting until that step
  • Custom CSS file configured with APP_STATIC_INCLUDE_CUSTOM_CSS is now also applied inside widgets
  • Built-in calendar widget now loads from the bundled copy instead of from GitHub
  • Install-wide default permissions can now be changed from the Admin Panel's Security Settings
  • Authentication changes in the setup wizard are now staged like other pending changes with sign-in required after changes
  • Action summaries now mark which cell values are genuinely unknown instead of replacing known values with wildcards when merging
  • Improved locale guessing and locale fallback logic
Fixed 5
  • Editing a document from the assistant popup now forks it first if it is a template or unsaved scratch document
  • Fixed a case where editing through the assistant could slip past access checks while previewing as owner
  • Prevent anonymous users from forking documents
  • The /status health check now returns starting (HTTP 503) on first startup until the server is ready
  • Prevent a console error when pressing ctrl+alt+o on the homepage
What's Changed

The first-run experience for self-hosted installations matures. The setup wizard previewed last release is now the default flow a fresh install lands on. It checks earlier which formula sandboxes are available, handles authentication changes more cleanly, and lets you edit the install-wide default permissions from the Admin Panel. Accessibility takes a big step forward too: screen-reader support and keyboard navigation now reach grid views, menus, and the page widget picker. There are also new date formats, a POST /records/list API endpoint for large queries, custom CSS inside widgets, and the usual dependency bumps and fixes. Two more features are under development in the full edition: OAuth Apps and an MCP (Model Context Protocol) endpoint. See "Full Grist edition extensions" below.

New features
  • Guided first-run setup wizard. The setup wizard previewed in v1.7.13 is now the flow fresh self-hosted installations land on. Sign in with the boot key (the GRIST_BOOT_KEY admin secret printed at startup), and the wizard walks you through /admin/setup to configure your instance. The "Quick setup" entry is now active in the admin sidebar. Refinements this release:
    • The wizard now checks which formula sandboxes are available as soon as it opens, not when you reach that step. No more waiting on a spinner (#2341)
    • Smoother entry into the wizard: cleaner redirects after an authentication change and after signing in with the boot key (#2340)
    • Set up "Sign in with getgrist.com" from the wizard, and returning from getgrist.com's registration page now brings you back into the wizard, not the main Admin Panel (#2310)
    • Signed-out and non-admin users can no longer open the Quick setup page. They get the same "unavailable" card as the Admin Panel (#2323)
    • Authentication changes are now staged like the wizard's other pending changes. Admins are sent back through sign-in after changing them (#2315, #2331)
    • The four install-wide default permissions (team sites, personal sites, anonymous access, anonymous playground) can now be changed from the Admin Panel's Security Settings, not just during the wizard (#2314)
  • POST /records/list endpoint. A POST companion to the records endpoint. Large queries can be sent in the request body instead of the URL (#2321).
Improvements
  • Accessibility (contributed by @manuhabitela)
    • Screen-reader support in grid views (#2114)
    • Open the row and column menus via keyboard shortcuts in a grid view (#2230)
    • Open the context menu via keyboard shortcuts when in widgets (#2226)
    • Page widget picker now works with keyboard and screen readers (#2273)
  • Custom widgets
    • A custom CSS file configured with APP_STATIC_INCLUDE_CUSTOM_CSS is now also applied inside widgets, not just the main app. Contributed by @manuhabitela (#2089)
    • The built-in calendar widget now loads from the copy bundled with Grist instead of the one hosted on GitHub. The GitHub copy pulled in external CDN files that ad blockers and privacy extensions sometimes blocked (#2262)
  • Localization
    • New date formats (#2347)
    • Improved locale guessing and locale fallback logic (#2313)
  • API
    • Action summaries (the change summaries used by features such as webhooks) now mark which cell values are genuinely unknown. Before, merging two summaries could replace a known value with a wildcard. Now it keeps the real value where it has one (#2361)
  • Internal / infrastructure
    • Added a filesystem-based document storage backend for tests, enabled with GRIST_FS_STORAGE_DIR. It implements Grist's external storage interface, normally backed by S3-compatible object storage (commit). It also gets a (test-only) card in the Admin Panel backups section (commit)
Fixes
  • Edit a document from the assistant popup, and Grist now copies (forks) it first if it is a template or an unsaved scratch document ("fiddle"). The original is no longer changed in place (commit)
  • Fixed a case where editing through the assistant could slip past access checks. It happened while previewing a document as owner, before the fork was made, and could leave the data engine in a bad state (commit)
  • Prevent anonymous users from forking documents (#2319)
  • On first startup, the /status health check now returns "starting" (HTTP 503) until the server is ready. Before, it could report healthy too early (#2322)
  • Prevent a console error when pressing ctrl+alt+o on the homepage (#2343)
Documentation
  • New accessibility documentation covering keyboard navigation, screen reader support, and the high-contrast theme. Contributed by @manuhabitela
  • Document how to run the browser-based end-to-end (nbrowser) tests locally (#2214)
Full Grist edition extensions

These features are under development in the full edition.

  • OAuth Apps. A way to register and manage OAuth apps, with a developer UI and REST API. Users can authorize an app, limit it to specific organizations, workspaces, or documents, and later review or revoke that access.
  • MCP (Model Context Protocol) endpoint. Lets external clients such as Claude or ChatGPT talk to Grist over JSON-RPC.
Dependency bumps

Thanks to the grist.gouv team for monitoring Grist dependencies.

  • Bump @gristlabs/grist-widget to 0.0.6 (#2329), file-type to 22.0.0 (#2209), uuid to 14.0.0 (#2290)
  • Bump axios (#2260, #2333), webpack-dev-server (#2357), ws (#2359), multiparty (#2355), fast-uri (#2342), basic-ftp (#2274, #2338), node-forge (#2210), postcss (#2316), lodash (#2238), fast-xml-parser (#2257), svgo (#2149), flatted (#2192), follow-redirects (#2264), dompurify (#2270), @xmldom/xmldom (#2289)
Contributions
  • Grist Labs: @berhalak, @dsagal, @paulfitz, @Spoffy
  • @manuhabitela: screen-reader support in grid views (#2114), keyboard access for row/column menus (#2230), keyboard access for the widget context menu (#2226), keyboard and screen-reader support in the page widget picker (#2273), custom CSS applied inside widgets (#2089), fine-tuning the experimental "New record" button (#2312), locale guessing and fallback improvements (#2313), console error fix on ctrl+alt+o (#2343)
  • @fflorent: prevent anonymous users forking documents (#2319), bump file-type (#2209), document running the browser-based (nbrowser) tests locally (#2214)
  • @cbontemps: add new date formats (#2347)
  • @wvengen: include package.json and yarn.lock for the Pyodide worker (#2297)
  • @machinelearningprodigy: tighten ISandbox types and resolve sort-spec lint/type-safety issues (#2211)
Translations
  • Arif Budiman
  • Igor Freire Rodrigues
  • Kévin DUPOND
  • Martin Harari Thuresson
  • Paul Janzen
  • Renato Portela
  • René Neumann
  • ssantos
  • xabirequejo
  • younger

Full Changelog: https://github.com/gristlabs/grist-core/compare/v1.7.13...v1.7.14

Join our Discord Community if you'd like to get into development of Grist.

View originalPermalink
How v1.7.14 went

v1.7.13

Added 4
  • New self-hosted installations generate a GRIST_BOOT_KEY and print it at startup, allowing login as install admin via /boot without a pre-existing account
  • WebSocket connections now accept API keys, boot keys, and access tokens for console clients and out-of-page custom widgets
  • Grist can restart in place to apply config changes without dropping the listening socket via GRIST_RESTART_SHELL flag
  • Team site owners on self-managed installations get a Site Settings page to edit team name, domain, and logo
Changed 12
  • Pyodide sandbox updated from 0.23.4 to 0.28.1
  • Airtable import now updates existing rows by default when the source has an Airtable ID column
  • Airtable import brings choice colors along with imported data
  • (Bulk)AddOrUpdateRecord API now returns id, recordIds, createdRecordIds, and updatedRecordIds
  • Custom widgets receive a new linking field on InteractionOptions indicating whether they are an incoming-link target (asTarget) or used as a source by other sections (asSource)
  • Search in document now ignores accents
Fixed 5
  • Fix wrong active section in the creator panel after duplicating a page with collapsed widgets
  • Fix CORS handling for opaque origins, eliminating spurious 500s for https:// widgets on http:// hosted sites
  • Fix padded checkboxes so the border and tick line up inside padded wrappers
  • Fix SELF_HYPERLINK() returning a share-key URL when a doc was first opened via a share link
  • Fix wrapped row height preservation after modifying a cell in suggestions
What's Changed

New self-hosted installations now print a boot key at startup that lets you log in as the install admin, with no pre-existing account needed. WebSocket connections now accept API keys, boot keys, and access tokens, not just session cookies, so consoles, scripts, and out-of-page custom widgets can talk to Grist over the same channel browsers use. The Pyodide sandbox jumped from 0.23.4 to 0.28.1. Airtable imports can update existing rows in place and bring choice colors with them. The (Bulk)AddOrUpdateRecord API hands back the IDs of the rows it added or updated, so upserts are easier to chain. Custom widgets now know whether they're a target or source of section linking. "Search in document" ignores accents. Team site owners on self-managed installations get a new Site Settings page for name, domain, and logo. And Grist can restart in place to apply config changes without dropping its listening socket.

New features
  • Boot key login. New installations generate a GRIST_BOOT_KEY and print it at startup. Visit /boot, paste the key, and you're logged in as the install admin and ready to set the admin email. No pre-existing account needed, and no window where the server is open to the world before authentication is configured. The key (and the related GRIST_IN_SERVICE flag) can also be set via env vars or managed from the Admin Panel. Existing installations are unaffected. (commit)
  • Restart in place. Grist can now apply config changes by restarting itself without dropping the listening socket. During the brief gap, /status keeps answering for liveness checks while readiness flips to 503. On by default for Linux under Node, off for Windows and Electron. Toggle with GRIST_RESTART_SHELL=true/false (#2265).
  • Site Settings page. Team site owners on self-managed installations can edit team name, domain, and logo from a new /site-settings page (commit).
  • WebSocket auth for API keys, boot keys, and access tokens. The WebSocket side now goes through the same identity-resolving code path as the REST API, so any auth method that works on one works on the other. Opens the door to console clients and out-of-page custom widgets. Also tidies up auth priority and unifies API rate-limiting between the two. (commit)
Improvements
  • Airtable import
    • Updates existing rows by default when the source has an Airtable ID column, and resolves references against rows already in the doc (#2216)
    • Brings Airtable choice colors along for the ride (#2199)
  • API
    • (Bulk)AddOrUpdateRecord now returns id / recordIds / createdRecordIds / updatedRecordIds, and BulkAddOrUpdateRecord accepts a record-shaped payload that can match different columns per row (#2193)
    • Webhook API ignores empty action payloads, matching the other endpoints (#2308)
  • Custom widgets
    • New linking field on InteractionOptions tells a widget whether it's an incoming-link target (asTarget) or used as a source by other sections (asSource) (#2259)
  • Sandboxing
    • Pyodide updated from 0.23.4 to 0.28.1 (#1754)
  • Suggestions
    • The number-of-suggestions badge is now a status dot, removing counting ambiguity (commit)
    • Per-document unsubscribe link for row-change notifications (commit)
  • Admin Panel
    • Authentication section rebuilt with a status-coded hero card, getgrist.com Reconfigure / Deactivate, and a collapsible "other methods" list (#2227)
  • UI/UX
    • "Search in document" now ignores accents (#2221)
    • Forms scroll like a normal page, fixing Tab not appearing to do anything on first press in Firefox (#2179)
    • Account settings split into Profile and Developer subpages, in preparation for OAuth Apps (commit)
    • Clearer error messages when personal orgs are disabled (#2285)
  • Internal / infrastructure
    • New eslint rule makes sure makeT(...) calls match their filename, with autofix (#2237)
    • Rebalanced nbrowser CI groups and added guards so silently skipped tests don't sneak through (#2267)
  • Documentation
    • Cleaned up style inconsistencies in the README (#2200)
Fixes
  • Fix wrong active section in the creator panel after duplicating a page with collapsed widgets (#2298)
  • Fix CORS handling for opaque ("null") origins, eliminating spurious 500s for https:// widgets on http:// hosted sites (#2299)
  • Fix padded checkboxes so the border and tick line up inside padded wrappers (#2300)
  • Fix SELF_HYPERLINK() returning a share-key URL when a doc was first opened via a share link (commit)
  • Wrapped row height is preserved after modifying a cell in suggestions, removing a flicker from unwrapped to wrapped (commit)
  • Airtable import UI translations are picked up properly (#2236)
  • Bump handlebars from 4.7.7 to 4.7.9 (#2208)
In progress: admin setup wizard

Work is under way on a new /admin/setup page, a guided first-run flow for self-hosted operators covering sandbox choice, base URL and edition, authentication, default permissions, and backups. It is not wired up by default this release, but the building blocks are in and you can preview by visiting /admin/setup directly. We expect this to be the official first-run experience next release.

Landed so far:

  • Sandbox setup card that auto-detects available sandbox flavors and recommends one (#2272)
  • Server section with a Test-URL-then-Confirm flow for the base URL, plus an edition picker (#2280)
  • Backups section that shows external storage status and lists how to enable each backend (#2283)
  • Final step with three permission presets (Locked, Recommended, Open) for GRIST_ORG_CREATION_ANYONE, GRIST_PERSONAL_ORGS, GRIST_FORCE_LOGIN, GRIST_ANON_PLAYGROUND (#2293)
  • Harmonized card styling, headers, and apply-and-restart flow across the steps (#2307)
  • Several Grist server settings (APP_HOME_URL, GRIST_SANDBOX_FLAVOR, GRIST_FORCE_LOGIN, GRIST_ANON_PLAYGROUND, GRIST_ORG_CREATION_ANYONE, GRIST_PERSONAL_ORGS, GRIST_BOOT_KEY, GRIST_IN_SERVICE, GRIST_ADMIN_EMAIL, GRIST_DEFAULT_EMAIL) can now be read from the home DB as well as the environment, so they can be edited from the browser during setup (commit)
  • Placeholder setup page and stepper component (commit)
Full Grist edition extensions
  • Automations
    • Emails are now grouped by action ID rather than subject (so test runs that reuse a subject still send each email). Padding restored on the automation page, name preserved when created with Enter, description converted to a text area, and scroll issues in the action log fixed (commit)
Contributions
  • fflorent: server tests for session-store API key isolation (#2246), eslint rule enforcing makeT filename match (#2237), Airtable import UI translation fix (#2236), test fixes (#2232, #2248)
  • OdysseyOfTheDragons: accent-insensitive search in document (#2221)
  • manuhabitela: form page scrolling fix for Firefox Tab navigation (#2179), flaky form view test (#2276)
Translations
  • Barna Kovács
  • Grégoire Cutzach
  • Igor Freire Rodrigues
  • Markus Spitzer
  • Martin Harari Thuresson
  • Renato Portela
  • Theo Heller
  • Xavi Montero
  • xabirequejo

Full Changelog: https://github.com/gristlabs/grist-core/compare/v1.7.12...v1.7.13

Join our Discord Community if you'd like to get into development of Grist.

View originalPermalink
How v1.7.13 went

v1.7.12

Added 3
  • API now has cellFormat=typed option for REST API and Custom Widget API to provide properly typed values
  • Add max length on text inputs in forms
  • Automations tool in the left-hand panel for document owners to create trigger-driven workflows with conditions, filters, and actions
Changed 13
  • Airtable imports now land in the current workspace instead of an unexpected location
  • Airtable formula columns with field references are imported as better comments
  • Airtable single record link fields are imported as Ref columns instead of RefList
  • Airtable imports now use the /tables endpoint for better availability
  • Suggestions now show comparison highlighting automatically in suggestion mode
  • Improved compare to original feature for suggestions
Fixed 3
  • Fix document icon when the second word of the doc name is an emoji
  • Fix unreadable dark mode colors in banners
  • Fix Row unavailable race condition
Removed 1
  • Remove the ⌘⇧H / Ctrl+Shift+H shortcut from the Use as table headers command
What's Changed

Airtable imports are now smoother, and the import lands in your current workspace instead of somewhere unexpected. Suggestions got a visual refresh with automatic comparison highlighting as you type. Forms are more accessible, and the API now has a cellFormat=typed option so you can get properly typed values back without guessing.

If you include extra extensions in your build, there's a new automations UI that lets you set up triggers on your data. You can define conditions on any table, then fire off email notifications or webhooks when rows match. You can send dynamic emails to different recipients based on column values, filter with Python conditions, and monitor everything from a delivery log. Automations are part of the full edition of Grist, which has a 30-day trial, and is free for individuals and small orgs (under $1M annual funding). The full edition funds the development of grist-core.

Improvements
  • Airtable import
    • Formula columns with field references are imported as better comments (#2201)
    • Single record link fields are imported as "Ref" (vs "RefList") columns (#2165)
    • Imports now use the /tables endpoint for better availability (#2171)
    • Import now targets the current org and workspace (#2139)
    • Show a nicer message when Airtable OAuth integration isn't configured (#2146)
  • Suggestions
    • Comparison highlighting is now shown automatically in suggestion mode (#2140)
    • Improved "compare to original" feature (#2068)
    • Fix suggestion count on a copied document that has been auto-forked (#2117)
    • Fix deleting rows correctly in suggestions (#2174)
  • Forms
    • Make select fields better usable with screen readers (#2164)
  • SCIM
    • Speed up user search (#2070)
  • Sandboxing
    • Use gristlabs/gvisor-unprivileged in the base Docker image for a more up-to-date version of runsc
  • API
    • New cellFormat=typed option for both the REST API and Custom Widget API, providing consistent, self-describing values that preserve type information for Ref, RefList, Attachments, Date, and DateTime columns
    • Reduce GRIST_LOG_API_DETAILS logging: omit body and result, add docId (#2175)
  • UI/UX
    • Improve accessibility of Undo / Redo action buttons (#2167)
    • Add max length on text inputs in forms (#2097)
    • Fix document icon when the second word of the doc name is an emoji (#2170)
    • Fix unreadable dark mode colors in banners (#2138)
    • Hide admin panel links in grist-desktop (#2181)
    • Remove the ⌘⇧H / Ctrl+Shift+H shortcut from the "Use as table headers" command
    • Store anchor links in comments as relative URLs
  • Documentation
    • Rewrite grist-data-format.md to reflect actual Grist data format (#2177)
    • Freshen list of features in README.md (#2142)
  • Internal / infrastructure
    • Upgrade @gristlabs/sqlite3
    • Add Storybook for documenting Grist UI components
Fixes
  • Fix 'Row unavailable' race condition (#2156)
  • Fix NumericFormatter test flakiness across ICU versions (#2176)
  • Fix typo in floating menu selector (#2187)
Full Grist edition extensions
  • Automations, a new tool in the left-hand panel for document owners to create trigger-driven workflows
    • Set conditions on any table, filter by column values, require specific columns to be filled, use custom Python filters
    • Choose when to trigger: when a row enters the filtered view, when it's newly added, or on any update
    • Actions: send an email (with dynamic recipients, variable placeholders, and Markdown support) or create a webhook
    • Monitor all automations from a delivery log with success/error/pending status
  • Automation tool visibility can be controlled via GRIST_HIDE_UI_ELEMENTS and GRIST_UI_FEATURES
Contributions
  • @fflorent: Speed up SCIM user search (#2070), improve Undo/Redo accessibility (#2167), fix document icon emoji handling (#2170), floating menu typo fix (#2187), bump axios (#2163), bump chrome driver (#2093), bump mocha-webdriver (#2198)
  • @manuhabitela: Make form select fields better usable with screen readers (#2164), add missing translation strings in themes selection (#2205)
  • @imagoiq: Add "still working..." to translatable strings (#2188)
  • @Vortezz: Add max length on text inputs (#2097)
  • @webash: Fix formatting for Advanced Admin Controls in README (#2161)
Translations
  • audus
  • Barna Kovács
  • Grégoire Cutzach
  • imagoiq
  • Martin Harari Thuresson
  • Philip Steffan
  • RapidShade
  • ssantos
  • xabirequejo
  • Zaim Ali Karim
  • தமிழ்நேரம்

Full Changelog: https://github.com/gristlabs/grist-core/compare/v1.7.11...v1.7.12

Join our Discord Community if you'd like to get into development of Grist.

View originalPermalink
How v1.7.12 went

v1.7.11

Added 5
  • Add optional authentication using getgrist.com accounts for self-hosted installations
  • Add ability to import Airtable bases directly into new or existing Grist documents
  • Add GRIST_PERSONAL_ORGS environment variable to disable personal organizations
  • Add GRIST_ORG_CREATION_ANYONE environment variable to prevent non-admins from creating new organizations
  • Add configurable email notifications for suggestions
Changed 5
  • Allow the maximum options limit on Forms to be configured up to 1000 options, defaulting to 30
  • Limit GVisor to 8 processes by default
  • Display references and reference lists in a friendlier fashion in suggestions
  • Add confirmation dialog when a resource is being shared publicly
  • Hide the bell icon showing connection state when Grist is connected and functioning normally
Fixed 9
  • Correct attachment endpoints having inconsistent permissions
  • Fix XLSX downloads when the export options don't include tableId
  • Fix an error that would pop up when doing multiple successive imports with the Pyodide sandbox enabled
  • Fix an error with importing when the Grist instance is hosted on Windows
  • Fix suggestions occasionally displaying incorrectly in documents with deleted tables
  • Fix role members having incorrect entries in SCIM
What's Changed
New features
Improvements
  • Forms
    • Allow the maximum options limit on Forms to be configured (defaults to 30 options, configurable up to 1000)
  • Sandboxing / security
    • Limit GVisor to 8 process by default
  • Suggestions
    • Display references and reference lists in a friendlier fashion
    • Prevent conditional formatting changes from being displayed as suggestions
  • UI/UX
    • Add a confirmation dialog when a resource is being shared publicly
    • Hide the bell icon showing connection state when Grist is connected and functioning normally
Fixes
  • API endpoints
    • Correct attachment endpoints having inconsistent permissions (#2116)
  • Exports
    • Fix XLSX downloads when the export options don't include tableId (#2054)
  • Import
    • Fix an error that would pop up when doing multiple successive imports with the Pyodide sandbox enabled (#2073)
    • Fix an error with importing when the Grist instance is hosted on Windows (e.g. Grist desktop) (#2064)
  • Suggestions
    • Fix suggestions occasionally displaying incorrectly in documents with deleted tables (#2069)
  • SCIM
    • Fix role members having incorrect entries (#2051)
  • UI/UX
    • Fix doubled-up overlays in filter-linked widgets that have rows blocked by access control lists (#2056)
    • Fix virtual table display and scrollbar issues on MacOS (#2075)
Contributions

@fflorent

Translations

@VaclavDort @filiphanes @qleroy @mirithillion @hexaltation @alimahwer @thuma @audez @vonbraun22 @umam15 @kraudio @xabirequejo @Artur Dabrowski @Thanyanit-J

Full Changelog: https://github.com/gristlabs/grist-core/compare/v1.7.10...v1.7.11

Join our Discord Community if you'd like to get into development of Grist.

View originalPermalink
How v1.7.11 went

v1.7.10

Fixed 1
  • Restore the Grist Labs custom widget repository as the default repository that was removed in v1.7.9
Hotfix

grist-core 1.7.10 is a hotfix release that fixes a regression from 1.7.9 where the Grist Labs custom widget repository stopped being included as the default repository by mistake. As a result, Grist Labs and community custom widgets are no longer shown when adding a new custom widget, and any previously added Grist Labs or community custom widgets will fail to load.

Contributions
Translations
  • @xabirequejo

Full Changelog: https://github.com/gristlabs/grist-core/compare/v1.7.9...v1.7.10

Join our Discord Community if you'd like to get into development of Grist.

View originalPermalink
How v1.7.10 went

v1.7.9

Added 5
  • New intro screen for Access Rules with Enable Access Rules button that creates initial recommended rules
  • Add Disable Access Rules button shown when there are no custom rules
  • New option to restrict non-owners from downloading or copying the document when permission to view Access Rules is enabled
  • Document owners can now resolve and reopen comment threads
  • Document owners can now delete comments
Changed 7
  • Restrict users who can view all data from viewing Access Rules by default
  • Redesigned authentication section in Admin Panel for configuring user authentication in self-managed Grist
  • Org and workspace modifications are now limited to users with owner permissions
  • Show a record is unavailable message when a user opens a record card blocked by ACLs
  • Improve rendering of changes in suggestions
  • Show a count of changes when making a suggestion
  • Optimize row filtering in Access Rules
Fixed 7
  • Fix frontend memory leaks
  • Fix styling issues when printing a document
  • Fix broken enable/disable document endpoints in multi-server environments
  • Fix how zero Date/DateTimes look to other formulas
  • Don't force reloads when a column is added to a user attribute table
  • Fix form sharing with references with no display column
  • Validate emails used to share access
Security 1
  • Fix vulnerability in pyodide sandboxing method
Security advisory

A security review identified a vulnerability in the "pyodide" sandboxing method that is available in Grist. You can check if you are affected in the sandboxing section of the Admin Panel of your instance. If you see "gvisor" there, then you are not affected.If you see "pyodide", then it is important to update to this version of Grist or later.

Link for advisory: https://github.com/gristlabs/grist-core/security/advisories/GHSA-7xvx-8pf2-pv5g

Notable fixes and improvements
  • New intro screen for Access Rules:
    • A document without rules now shows an intro screen with an "Enable Access Rules" button:
      • On confirming, it creates the initial recommended rules: namely, disable structure permission for non-owners
    • There is also a "Disable Access Rules" button that's shown when there are no custom rules
  • Restrict users who can view all data from viewing Access Rules by default:
    • If permission to view Access Rules is enabled, then there is a new option: to restrict non-owners from downloading or copying the document
    • This restriction is added by default when permission to view Access Rules is given
    • Granting permission to view Access Rules and removing the restriction on downloading/copying the document approximates the previous behavior
  • Redesigned authentication section in Admin Panel for configuring user authentication in self-managed Grist
  • Org and workspace modifications are now limited to users with owner permissions
  • Document owners can now resolve and reopen comment threads, and delete comments
  • Fixes for some frontend memory leaks
  • Fixes for some styling issues when printing a document
  • Fix for broken enable/disable document endpoints in multi-server environments
  • Optimizations to row filtering in Access Rules
  • Show a "record is unavailable" message when a user opens a record card blocked by ACLs PR #1896
  • Fix how zero Date/DateTimes look to other formulas PR #1995
  • Don't force reloads when a column is added to a user attribute table PR #2035
  • Several improvements to RecordSet handling PR #1992
  • Correctly share forms with references with no display column PR #2008
  • Improve rendering of changes in suggestions PR #1977
  • Show a count of changes when making a suggestion PR #1960
  • Validate emails used to share access PR #2016
Contributions
  • @fflorent: Bump js-yaml from 3.14.1 to 4.1.1 PR #1961
  • @fflorent: Bump Typescript to version 4.9.4 PR #1993
  • @fflorent: Eslint: Remove function appCommWaiter (dead code) PR #2001
  • @fflorent: Upgrade eslint PR #2000 PR #2005 PR #2020 PR #2030
  • @fflorent: develop.md: Simplify the paragraph detailing the coding rules PR #2031
  • @manuhabitela: Make sure a Form Submit row can't be removed with keyboard PR #1979
  • @manuhabitela: Choices text box: make sure all choice tokens are readable PR #1982
Translations
  • @maksim2005UKR
  • @hexaltation
  • @h0r0m
  • @winjie0618
  • @audez
  • @umam15
  • @mirithilion
  • @oliverne
  • @vonbraun22
  • Alexey
  • Paul Janzen

Full Changelog: https://github.com/gristlabs/grist-core/compare/v1.7.8...v1.7.9

Join our Discord Community if you'd like to get into development of Grist.

View originalPermalink
How v1.7.9 went

v1.7.8

Added 2
  • New API endpoints for disabling documents
  • New API endpoints for enabling documents
Fixed 1
  • Miscellaneous bug fixes
What's Changed
  • There are new API endpoints for disabling and enabling documents
  • Miscellaneous bug fixes and translations

Full Changelog: https://github.com/gristlabs/grist-core/compare/v1.7.7...v1.7.8 Join our Discord Community if you'd like to get into development of Grist.

View originalPermalink
How v1.7.8 went
View all

Discussion