Changelog

Every release of Quadratic, published automatically as we ship.

  1. Aug 11, 2026
    v0.26.12

    PDF export and Print

    Sheets can now be exported as PDF with Excel-style print semantics, implemented in Rust so the same engine serves the client, MCP, and Developer API (#4881, #4906):

    • Choose paper size, orientation, margins, zoom or fit-to-pages scaling, page order, centering, and whether to print gridlines and headings; print areas, repeat rows/columns, and manual page breaks are honored
    • The renderer draws formatted values, fills, borders (including double lines), merges, table headers, and native charts into a multi-page PDF
    • File → Print opens the same options dialog and hands the generated PDF to the browser print dialog instead of downloading it; Excel-style "Fit to: N pages wide by M tall" is available in the scaling controls
    • MCP gains an export_pdf action, and the Developer API adds POST /v1/files/{file_id}/export/pdf

    Shared AI chats

    AI Analyst chat history is now file-scoped and collaborative instead of browser-local (#4803):

    • Chats persist on the server (trimmed transcript in Postgres, full payload in S3) and follow file access, so they survive across devices and browsers and are visible to everyone with access to the file
    • Collaborators share a live prompt queue with soft turn-taking — one turn runs at a time, each author runs their own turn for correct attribution, and completed results sync via presence signals rather than polling
    • Presence UI shows typing and processing status, chat-list badges, and author avatars on each message and in the chat header

    Hide and unhide columns and rows

    Excel-style hide/unhide is available end to end (#4921):

    • Hide or unhide from the heading and cell context menus, the command palette, or the Excel shortcuts (Ctrl/Cmd+0/9 to hide, Ctrl/Cmd+Shift+0/9 to unhide)
    • Hidden columns and rows keep their underlying size so unhide restores the exact width or height; paired chevrons in the heading mark each hidden run
    • Navigation never lands on a hidden column or row, matching Excel, and hide state round-trips with Excel and Google Sheets import/export, undo/redo, and multiplayer

    Data validations for Excel and Google Sheets

    Data validations now round-trip with spreadsheet files and are easier to insert (#4897):

    • Importing an .xlsx brings list, number, text-length, date/time, custom, checkbox, and message-only rules (including Excel 2010+ / Google Sheets x14 encodings); exporting writes them back with Excel-faithful operators and message limits
    • Native Google Sheets import pulls data validations and conditional formats through the Sheets API, coalescing identical per-cell rules into ranges
    • Checkboxes map to native Excel in-cell checkboxes on import and export, and Logical checkbox rules round-trip losslessly between Quadratic files
    • Insert → Data validation (and matching command-palette and context-menu commands) apply each validation type to the current selection; Clear formatting now unmerges like Excel's Clear Formats
    • List sources, custom formulas, and conditional-format rules shift with column/row insert, delete, and reorder so rules stay pointed at the right cells

    Custom formula validation

    A new Custom formula validation rule matches Excel's Custom data-validation type (#4897): store a formula as a rename-safe AST, evaluate it relative to an anchor cell (seeing the candidate value before commit), edit it in the validation UI, and drive it from the AI validation tool.

    Freeze panes round-trip

    Excel freeze panes now import as Quadratic frozen rows/columns and export back out as Excel freeze panes (#4873), covering .xlsx/.xlsm, .xls, and .xlsb. Split (non-frozen) panes and pane-read errors are treated as no freeze so a bad view record cannot fail a data import.

    DeepSeek V4 Flash default model

    The AI analyst now defaults to DeepSeek V4 Flash (via Baseten), with Claude Sonnet 5 moved into the Other AI models list (#4917).

    Bug fixes

    Various bug fixes and polish including:

    • QuickBooks Online sync requests enhancedAllCustomFields so all custom fields (not only the first three legacy string fields) land in synced tables (#4926)
    • AI edit_code_cell_value requires an exact old_string from the current cell, recovers cleanly on mismatch, and pins recent code-cell source in context compression so mid-conversation edits stop failing against stale text (#4911)
    • Heading-drag column/row reorders, MoveCells, and insert/delete now retarget formulas, defined names, validations, and conditional formats that would otherwise point at the wrong cells (#4913)
    • Sentry noise reduction and recovery: aborted/truncated API responses are classified correctly, truncated WASM downloads self-heal, unsupported browsers are detected before fetching core, cell-history requests are debounced, and a batch of crash and rage-click paths were hardened (#4893)
    • Security dependency update: bumped Electron in the desktop app (#4919)
    • E2E suite repairs for hide/unhide, upload flake clusters, and ctrl+click selection changes (#4922, #4915, #4909, #4903)
  2. Jul 30, 2026
    v0.26.11

    Pivot tables

    Quadratic now has native, Excel-style pivot tables (#4877):

    • Create a pivot table from a table or selection via the menus or right-click, then reshape it with the PivotTable Fields panel — drag source fields into rows, columns, values, and filters, straight from the field list
    • Reports draw Excel-style in-grid collapse/expand outline controls, suppress gridlines and table chrome to match Excel, and offer Create, Edit, Show details, and Delete actions
    • A new GETPIVOTDATA formula addresses a pivot cell by value field and item pairs instead of by position, so formulas keep pointing at the right number as the report changes shape
    • Importing an .xlsx brings its pivot tables in as live pivots, and they round-trip back out on export
    • The AI analyst gains a set_pivot_table tool, and native charts and pivot tables are exposed to MCP agents
    • Pivots and their dependent charts dim while a recompute is in flight, hovering outline controls pre-warms the aggregation cache, and value-field number formats persist across recomputes
    • Renaming a source table follows through into pivot specs and dependencies, table-selection sources include their headers, and AI "days" grouping maps to calendar dates

    Table column filters

    Data tables gain Excel AutoFilter with a shared sort-and-filter column menu (#4878):

    • Filter a column by checking values or by conditions, including Excel Number Filters, Date Filters, and two-criteria And/Or custom conditions (Custom AutoFilter)
    • A new set_table_filter AI tool lets the analyst apply native table filters
    • Filters are reapplied when an overwrite import replaces the table, clearing all filters runs as a single undoable transaction, and the filter menu opens at its final size with collapsible sections and proper focus handling

    Cell comments

    You can now attach threaded comments to cells (#4847):

    • Comment threads support @mentions, replies, and resolving, with live multiplayer sync and a "…is typing" indicator
    • Commented cells show a yellow indicator in the top-right corner; the popover positions beside the cell, keeps a constant size while zooming, and hides while the inline cell editor is open
    • Comments round-trip with Excel .xlsx import and export, move with their cells, and are available as context to the AI analyst
    • A comment action was added to code and data table cell context menus alongside a keyboard shortcut, drafts survive closing the popover with Escape, and comment authors resolve correctly even for former collaborators

    Named ranges

    Defined names are now first-class (#4856):

    • Create a named range by typing a name into the name box, jump to names from a new section in Go To, and rename a selected name from the name box — references nested inside other defined names are rewritten on rename
    • Excel defined names import as native named ranges instead of being expanded away
    • Names move with selections that fully enclose them, name validation follows Excel's rules (including ? after the first character), table names and defined names share a namespace so conflicts are rejected, and validation errors are surfaced in the name box

    Find & replace

    The legacy quick-find popover was replaced by a full find & replace with a docked results panel (#4862). Search the sheet, file, or current selection with optional regex, review every match in the panel, and replace individually or all at once; the AI analyst can search and replace through a new text_search tool. Read-only results show a lock icon instead of a disabled checkbox, match highlights use the dialog's yellow, and background sheet changes no longer yank the cursor to a result.

    Parquet export

    Sheets and selections can now be exported as Parquet files (#4875), joining the existing CSV and Excel options in the export dialog.

    AI improvements

    • A price tracker in the AI panel shows what the last message cost, automatically enabled on paid plans with price tier labels (#4874)
    • PDF import defaults to Gemini 3.6 Flash, retries failed chunks on smaller page ranges and reports any ranges that still produce nothing instead of silently dropping them, shows import progress with the file name and section counts, and imports multiple attached PDFs in a single response with mid-import cancel (#4883)
    • Dropping files anywhere on the AI panel now routes them into the chat composer (#4865)
    • The analyst proactively suggests scheduled tasks and live connections when it notices recurring work (#4882)

    Bug fixes

    Various bug fixes and polish including:

    • Persisted validation warnings are re-checked on file load, dependent cells revalidate when a list validation's source range changes, and list-from-selection values compare by display string, fixing stale validation warnings (#4885)
    • Inviting an existing user to a team from the in-app members overlay no longer makes them briefly appear and then disappear until a reload (#4879)
    • The export dialog closes automatically once an export completes (#4895)
    • Fixed a duplicate chart appearing when chart iframe swaps raced during an update (#4887)
    • Tooltips only open on keyboard focus, so Escape reliably closes popovers instead of re-opening a tooltip
    • The debug file-contents view uses a copy button instead of rendering huge JSON into a textarea
    • Preview infrastructure: a new preview-client label serves client-only previews from a shared host instead of a full per-PR deploy (#4863)
    • Security dependency update: bumped the npm dependency group (#4866)
    • E2E suite hardened against WorkOS login rate limiting, with new coverage for defined names, comments, pivot tables, and filters (#4872, #4898)
  3. Jul 23, 2026
    v0.26.10

    Excel-native charts

    Quadratic now has first-class, Excel-compatible charts built on a native ChartML data model and layout engine, rendered as crisp vectors directly on the grid instead of code-generated images (#4841):

    • Create a chart from a selection and Quadratic infers the chart setup from your data and places the chart in nearby empty space, avoiding existing content and other charts
    • Broad chart type coverage: bar/column (matching Excel's bottom-to-top category order), line, area, pie and of-pie, scatter, radar, 3D and surface charts, plus modern types — waterfall, funnel, histogram, pareto, box & whisker, treemap, sunburst, and region map
    • A chart editor panel live-previews every edit on the canvas and covers trendlines, error bars, secondary axes, data labels and data tables, number and date axis formats, 3D view rotations, and rich fills and effects; the editor stays pinned to the chart's sheet so cross-sheet references keep working
    • Charts round-trip with Excel: importing an .xlsx brings its charts in (#4853), and exporting writes native Excel charts (including modern chartEx types) with matching anchor geometry
    • Charts are first-class objects: each gets a per-sheet name ("Chart 1") shown in the name box, Go To and rename work by name, chart selection is broadcast to collaborators, and Escape returns to the cell cursor
    • Click a chart element to highlight it along with its source cells; the right-click menu offers copy/paste/duplicate, mention in AI chat, trace source data, and download as PNG, and charts can be nudged with the arrow keys
    • The AI analyst gains add_chart and update_chart tools with display-name support and chart-aware context; chart images are always sent to the AI, and AI-created charts automatically relocate off existing content
    • Charts work on mobile with a charts pane, double-tap to edit, and touch-friendly drag and resize, and they render correctly inside frozen panes
    • Performance is kept in check: only charts whose referenced ranges intersect changed cells re-layout, chart text is batched into shared MSDF meshes, charts reflow live while resizing, and file thumbnails draw vector charts
    • Fidelity details match Excel, including the 3D chart depth angle, 3D pie rim sizing, and emoji rendering in chart labels

    Cell edit history

    Every cell now tracks who — a person or the AI — last changed its value, formula, or code (#4620):

    • The toolbar shows "last edited by" for the selected cell, and clicking it opens a resizable panel with the cell's full history of values over time
    • History follows content through cut/paste and cell, row, column, and table moves, with clickable "Moved from" / "Moved to" links that navigate to the other end of the move
    • AI edits link back to the originating chat prompt, so you can see exactly which request produced a value
    • Code cells record history too, updating live as code runs, and dependency recomputes don't pollute a cell's history
    • A new read_cell_history AI tool lets the analyst inspect a cell's edit history — values over time, who or what changed it, and moves — when answering questions

    Mobile AI and sheet split view

    On mobile, the AI chat and the sheet now share the screen in a split view instead of the AI pane covering the grid (#4771). A touch-friendly drag handle resizes the split, so you can watch the AI's changes land on the sheet while you chat, and charts show placeholders correctly in the smaller viewport.

    Spreadsheet import limits

    File imports now enforce size and cell-count limits — 100 MB for CSV, 50 MB for Excel and Parquet, and 10 million cells overall — checked both before upload and in the core engine (#4859). Oversized imports get a clear error message up front instead of aborting the WASM allocator and poisoning the worker with an out-of-memory crash.

    Multiplayer file rename sync

    Renaming a file now updates the title for everyone viewing it, without a reload (#4854). A new multiplayer message broadcasts the name to peers already in the room.

    Bug fixes

    Various bug fixes and polish including:

    • Sentry session replays now record the grid canvas correctly (#4849)
    • Excel export maps no-padding date format tokens to valid Excel format codes, so exported date formats open cleanly
    • Fixed the formula bar editor collapsing to zero height, which left its textarea invisible and unclickable
    • The export dialog, cell history panel, and cell history toolbar button show loading indicators while their async work is in flight
    • QuickBooks synced connections now refresh twice a day instead of on every sync pass (#4855)
    • E2E suite updated for the new charts and formula bar behavior (#4858), and a CI benchmark timeout was raised to survive cold-cache compiles
  4. Jul 20, 2026
    v0.26.9

    Code and formulas inside data tables

    Formula, Python, and JavaScript cells can now live inside editable (imported) data tables, where previously any attempt was blocked with a "Cannot create code cell inside table" error (#4760):

    • Type a formula or create a code cell in a table's data region and it computes in place, displays its output, and stays editable via double-click or the cell type menu; the table name and column-header rows still reject code
    • In-table code participates fully in the dependency graph: it can reference cells inside or outside the table, be referenced from outside, and recomputes when its inputs change
    • Sorting the table moves a code cell's code and output with its row; copying carries the code while paste-values carries the output; in-table code survives save and reload
    • Cell references and dependencies now move correctly when the containing table is moved, fill autocomplete replicates in-table code cells, and deleting in-table cells clears their code properly
    • In-table code errors surface in the cell hover, the cursor UI, and the code editor console, and the autocomplete drag handle takes priority over table resize when the two overlap

    Voice input for AI chat

    You can now dictate prompts to the AI analyst (#4772). While the prompt is empty, the composer shows a microphone button; tap it to start dictation (the mic blinks while listening), tap again or press Escape to stop, and the button switches to the normal send arrow as soon as there is text. Dictation only fills the composer — you still review and submit. It works in the desktop AI analyst, the mobile AI pane, and inline message editing, uses the browser's built-in speech recognition with no audio uploaded to Quadratic, and simply doesn't appear on browsers without speech support.

    AI prefers formulas and plain cells

    The AI analyst's output style is now more Excel-like (#4820):

    • It prefers formulas over Python/JavaScript whenever formulas can do the job, reserving code for charts, machine learning, complex transforms, and web/API requests
    • Data tables are now opt-in: the AI defaults to writing plain cell values (with the header row formatted) unless you explicitly ask for a table or the file already uses them
    • Basic historical stock prices use the STOCKHISTORY formula, with Python q.financial reserved for adjusted prices, financial statements, dividends, splits, and intraday/economic data
    • The same guidance applies across the AI analyst and the MCP server

    Excel downloads from the dashboard and version history

    Excel is now the default file download (#4776). The dashboard file menu offers "Download as Excel" (available on paid plans) in place of the old .grid download, and file version history gains a "Download as Excel" button that exports the previewed historical version. The .grid format remains available via the in-app File menu's Export dialog, and Excel exports are clamped to valid Excel worksheet names (#4837).

    Persistent AI code summaries

    The AI-generated summaries of Python and JavaScript code cells are now persisted with the cell instead of being regenerated on every visit (#4736). Summaries survive re-runs and dependency recomputes, are cleared and regenerated only when the code text actually changes, and are backfilled lazily when the cursor lands on an unsummarized cell. A new Summary tab in the code editor shows the persisted summary, and the file summary the AI sees each turn now includes a one-line purpose summary for every code cell and chart, so the analyst understands a file's logic without re-reading each code body.

    Connection reliability and memory fixes

    • Connection schemas are now cached in the AI context, eliminating a flood of duplicate schema fetches on every AI turn (#4805); synced-connection token writes are batched and refreshes are jittered
    • Connection query results are capped in size before crossing into WASM, preventing out-of-memory crashes and poisoned worker state on very large result sets (#4835)
    • Relayed upstream proxy errors are logged at the correct severity so expected upstream failures no longer page as service errors (#4833)

    Sentry noise reduction

    Another pass cut non-actionable alerts (#4845):

    • Team loading degrades gracefully when a WorkOS user lookup fails, and a member missing from WorkOS no longer fails the whole lookup
    • Messages with empty parts are dropped from Gemini requests instead of erroring
    • Rapid clicks on the sheet-bar scroll arrows no longer report as false-positive rage clicks
    • Sourceless stack-overflow errors are dropped

    Bug fixes

    Various bug fixes and polish including:

    • Formula autocomplete no longer pops open while editing cell references, so arrow-key reference selection isn't hijacked by the suggestion list (#4844)
    • Closing an untouched cell editor no longer commits a no-op transaction, which was silently clearing the redo stack (#4829)
    • The inline editor no longer rotates the first typed character to the end when starting an edit (#4814)
    • Sheet-bar wheel scrolling works again after a file's empty state, and the sheet tab bar is no longer clipped when the AI panel is open (#4831)
    • A stuck file-drag overlay can no longer linger and block clicks on the grid (#4840)
    • The AI chat context meter reports context size correctly again (#4839)
    • Internal tool-orchestration text is filtered out of AI responses instead of leaking into chat (#4834)
    • Charts render placeholders on mobile instead of disappearing, and stored chart thumbnails are served with the correct image Content-Type (#4836)
    • The grid canvas releases keyboard focus when hidden behind a dialog, fixing keys leaking into the sheet
    • Security dependency update: bumped the cargo dependency group (#4842)
    • Preview infrastructure costs reduced: preview deployments are cleaned up after two business days of inactivity (#4846) and Global Accelerator is now production-only (#4816)
    • E2E suite reworked: the full suite now runs against QA with a blocking smoke test on preview branches, publishes agent-readable triage reports and a results landing page with service health history, and 17 previously skipped tests were rewritten and re-enabled
  5. Jul 9, 2026
    v0.26.8

    Plotly chart rendering fix

    Fixed Plotly (Python) charts rendering blank with a "Plotly is not defined" error. The latest unpinned plotly Python package bakes a cdn.plot.ly/plotly-<version>.min.js loader into each chart's HTML, but cdn.plot.ly does not host every published plotly.js release (for example, 3.7.0 returns a 403), so the chart iframe could not load Plotly. The loader URL is now rewritten to jsDelivr (which mirrors npm and serves all versions) at render time on the client, which also repairs existing saved charts on load without re-running their code cell.

  6. Jul 7, 2026
    v0.26.7

    Formula bar polish

    Follow-up refinements to the new formula bar from the previous release:

    • The AI code summary shown for Python and JavaScript cells is now read-only — its text can still be selected and copied, but it can no longer be accidentally edited (#4789)
    • Clicking the code summary now toggles the formula bar between its expanded and collapsed states while preserving any text selection (#4801)
    • Formula syntax highlighting was simplified so function names and operators are no longer color-coded, reducing visual noise while editing (#4797)
    • Fixed formula bar content overflowing its container

    AI formula and reliability fixes

    Several fixes to how the AI analyst writes formulas and reports run results, cutting down on pointless rewrite loops:

    • AI formula writes now strip a leading = before storing, fixing the doubled ==SUM(...) that made models treat their own formulas as malformed and rewrite cells repeatedly (#4782)
    • Successful Python runs that emit non-fatal warnings (FutureWarning, SettingWithCopyWarning, etc.) are no longer reported to the AI as errors, so the analyst stops rewriting code that actually worked (#4783)
    • set_formats confirmations now render the applied numeric format readably (e.g. CURRENCY ($)) instead of [object Object] (#4781)
    • The AI prompt composer is now plain-text only, so pasted rich text, HTML, and links no longer keep their formatting or remain clickable (#4785)
    • Gemini 3 tool calls without a thought signature are now accepted instead of being rejected by signature validation, and the Anthropic client uses an explicit request timeout to avoid tripping a non-streaming guard
    • AI request failures are reported with a narrower, more useful payload and routed through the shared analytics-error path so distinct failures stop collapsing under one giant serialized-JSON title

    Sentry noise reduction

    Another pass cut non-actionable alerts and kept handled failures from crashing the app (#4768):

    • WASM out-of-memory traps, clipboard permission denials, static-ips 401s, and AI context-length-exhausted errors are downgraded from Sentry errors to warnings or dropped entirely
    • Unactionable PixiJS WebGL shader-init errors and a null snapshot on the embed route are handled instead of reported
    • The templates gallery and recipe fetches degrade gracefully when Sanity is unavailable, and team data is preserved on a failed reload so the dashboard no longer crashes
    • The multiplayer update loop stops cleanly instead of throwing when it hits torn state, and the app recovers from a stale WASM asset served right after a deploy
    • Reviewed Sentry failures are kept visible rather than being silently swallowed

    Broader browser compatibility

    Monaco (the code editor) now loads from the app bundle instead of the jsDelivr CDN, and Object.groupBy was replaced with a helper, so the app works on more locked-down networks and older browsers.

    Bug fixes

    Various bug fixes and polish including:

    • Cmd/Ctrl+Enter to run code now keeps focus and the caret in the code editor instead of jumping, because it is handled as a Monaco command rather than intercepted first
    • Opening the code editor no longer leaves a lingering multiplayer edit lock on the cursor cell; a cell is only locked for collaborators while the editor is actually open (#4810)
    • Proxied connection responses now strip upstream cache headers and are marked no-store, so a cacheable response for one target can no longer be replayed for a different connection that reuses the shared proxy URL (#4804)
    • Excel export is clamped to Excel's row and column grid limits so exporting a very large sheet no longer produces an invalid workbook
    • Formatting a very large region no longer overflows an internal hash-map capacity and crashes the worker
    • The export dialog's share action is now a single primary button and the share-vs-export feedback prompt was removed (#4777)
    • Table header re-run button clicks are now tracked so code re-run adoption is measurable (#4775)
    • Security dependency update: bumped cmov (#4796)
    • E2E suite reworked around the new formula-bar behavior, with regression guards and coverage for the June/July fixes and more reliable auth-retry cleanup
  7. Jul 1, 2026
    v0.26.6

    Excel-style formula bar

    A dedicated formula bar now sits below the toolbar for viewing and editing cell values and formulas, backed by a rebuilt cell editor that replaces the previous Monaco-based inline editor:

    • The bar shows the active cell address and provides formula autocomplete, function documentation previews, argument hints, cell-reference highlighting, and inline formula errors, and it mirrors the in-cell editor live while it is open
    • It can be expanded or collapsed for multiline editing of long formulas, and changes commit on Enter or blur
    • When a Python or JavaScript code cell is selected, the bar shows a language badge, Chat and Code Editor actions, and a short AI-generated summary of what the code does (debounced and cached), falling back to "Open in code editor" when AI is disabled or the cell is empty
    • Visibility is controlled by a new Show formula bar toggle in the View menu and General Settings; the old code-peek hover popover was removed in its favor, and toolbar visibility was consolidated into the shared grid settings

    Claude Sonnet 5 default model

    The AI analyst now defaults to Claude Sonnet 5, the newly added flagship Sonnet-tier model:

    • Sonnet 5 is the "Default" option in the model picker, with Vertex and direct Anthropic variants, 1M-token context, and updated pricing
    • Opus 4.8 moves out of "Default" and becomes the first entry under other AI models; Sonnet 4.6 is no longer directly selectable but stays configured for internal backup/routing
    • Image-bearing prompts on non-image models now fall back to Sonnet 5

    LET, LAMBDA, and ISOMITTED formulas

    LET, LAMBDA, and ISOMITTED already evaluated correctly but were hidden from autocomplete and documentation. They are now first-class, discoverable formulas that appear in autocomplete, hover docs, and the generated formula reference, alongside the array functions (MAP, REDUCE, BYROW, BYCOL, SCAN, MAKEARRAY) that consume lambdas.

    Charts follow Storytelling with Data style

    Generated charts now follow a cleaner "Storytelling with Data" visual style by default, and the AI charting guidance was tightened to match while staying within its context budget.

    Connections in the file empty state

    The default new-file empty state now surfaces the connections picker directly, making it faster to start from a data connection. Users arriving with a specific persona flow and users who already have a connection set up are unaffected.

    AI reliability fixes

    Several production AI failure modes were addressed:

    • Fixed the get_cell_data re-read "death loop" where the agent re-requested the same range until it exhausted its tool-call budget; contradictory placeholder wording was removed and a circuit breaker now stops re-issuing a read whose result is already in context
    • MCP device-flow authentication now survives cross-session tool calls, so remote connectors (ChatGPT/Claude) no longer report an auth failure on the call right after a completed browser login
    • PDF import now retries a backup model when a chunk comes back with text but zero tool calls, instead of silently dropping that chunk's tables
    • get_cell_data defaults to the first page when the model omits the page argument or sends NaN, fixing reads that failed for Anthropic and Gemini models

    Security dependency updates

    A broad remediation pass cleared flagged vulnerabilities across container base images, Rust crates, and npm dependencies (including apt-get upgrade in every service runtime image and version bumps for pyo3, reqwest, quinn-proto, uuid, and others), with no intended behavior changes.

    Bug fixes

    Various bug fixes and polish including:

    • Dragging a data table by its body or edge (rather than its name) no longer strips its table structure and formatting or deletes the underlying data when the drop overlaps its original location (#4673)
    • Exporting to Excel no longer aborts the entire workbook when a cell exceeds Excel's 32,767-character limit; over-long strings are clipped instead (#4681)
    • Go To and AI summary/mention navigation links now anchor the cursor at the top of tables, code cells, and charts instead of the first data cell (#4719)
    • AI-generated data tables now auto-size their columns to fit the generated content so wide values are no longer clipped (#4684)
    • Renaming a table column and clicking away outside the table now commits the new name instead of discarding it (#4680)
    • Read-only (viewer) cells can now be opened as a read-only inline preview so their text can be selected and copied, while all edits stay blocked (#4682)
    • The formula error popup is anchored below the inline editor (flipping above near the viewport bottom) so it no longer covers the formula you are editing (#4065)
    • Clipboard copy/cut/paste now follows focus rather than a lingering selection, so you can copy from the sheet while text is selected in the AI analyst and vice versa
    • Clicking a scrolled table's floating sticky header now selects the table instead of the cell beneath it, and image double-click is cancelled when the pointer moves between clicks
    • Duration values now coerce to fractional days in numeric formula contexts, fixing Expected number, got duration errors in datetime arithmetic (#4667)
    • Duplicating a sheet now remaps self-referential sheet-name references in 1x1 formula cells (e.g. =Sheet1!A1), not just in code runs (#4663)
    • Coercing a cell to a boolean now propagates the underlying error instead of masking it with Expected boolean, got error (#4664)
    • Writing a queued code cell now waits for the code queue to drain, so newly placed code cells are no longer reported missing at their target coordinates (#693083f3)
    • PDF import surfaces the real, actionable API error instead of a generic "Unable to add any data table" message
    • Creating a new file now resets the cursor to A1 in the toolbar and formula bar instead of showing the previous file's position
    • The Show cell type outlines setting takes effect immediately when toggled and no longer suppresses the table selection outline; the setting now defaults to off
    • Selecting Formula from the slash (cell type) menu no longer pops open the full code editor after submitting the inline formula
    • The layout no longer breaks at smaller viewports, and the export dialog copy clarifies that its text field is optional feedback rather than a required email
    • Fixed the production Electron desktop build never running and disabled automatic QA Electron builds to conserve ToDesktop's build quota
    • Preview (per-PR) deploys are faster and more reliable: client WASM artifacts are cached in S3 keyed by content hash, unchanged services sync from QA instead of rebuilding, and deploys self-heal missing preview backend images from QA
    • Reduced Sanity API request volume by caching content, keeping usage under the monthly allotment
    • E2E suite reworked to derive grid mouse coordinates from the live canvas and adapt to the new cell-editor/formula-bar layout
  8. Jun 25, 2026
    v0.26.5

    Code editor AI assistant removed

    The separate in-code-editor AI assistant has been removed in favor of the AI analyst, which already handles code generation and edits across the app. This drops the update_code_cell assistant tool and its dedicated request, model-routing, and context-injection paths, consolidating AI code help on a single, better-maintained surface.

    AI chat focus and notification fixes

    • Focus management for the AI analyst composer input was tightened so focus lands and returns to the right place when opening chat history, previous chats, and the mobile AI pane
    • Browser notifications for finished AI responses now also fire when Quadratic is the active tab but the browser window is sitting behind another app — previously they were suppressed whenever the tab was merely "visible"

    Data table column deletion crash fix

    Deleting a column from a data table whose stored headers are out of sync with its actual width (for example, a legacy or corrupted table) no longer panics the worker. The delete now guards against the mismatch and leaves the table consistent.

    Bug fixes

    Various bug fixes and polish including:

    • CI now only runs the version-match check on release pull requests into main, so feature and preview branches are no longer blocked by a stale or partially-merged version bump
  9. Jun 24, 2026
    v0.26.4

    AI reliability fix for malformed tool calls

    Fixed a production issue where a truncated AI tool call — left behind by an interrupted or cut-off model response — could be saved into a chat and then cause every following message in that chat to fail. The API now rejects incomplete tool calls before they're stored, fails fast instead of silently retrying the same broken request across every backup model, and caps backup-model retries so a misconfigured fallback chain can't loop. A matching infrastructure change lets a stuck API instance be detected and replaced automatically.

    AI chat input fixes

    Polish for the redesigned AI chat input from the previous release:

    • The Edit button on a sent message now reliably puts focus back in the message editor
    • Typing a follow-up while a response is still generating now shows a Send button (so you can queue the message) instead of the stop button

    Color picker fixes

    Three fixes to the cell color picker (#4565):

    • The Custom and Clear buttons no longer overflow the swatch grid
    • The saturation/brightness and hue handles can now be dragged, with touch support, instead of only responding to clicks
    • A single click outside the picker now dismisses it instead of requiring two

    Synced-connection memory crash fix

    The files service no longer crash-loops out of memory while backfilling a high-volume synced connection (such as a multi-month Mixpanel events history). Sync now enforces a per-connection memory budget and automatically splits an oversized date window into smaller pieces, keeping peak memory bounded without increasing upstream API calls for normal connections.

    Bug fixes

    Various bug fixes and polish including:

    • Fixed serving of SVG assets
    • Agent (REST API) connection usage is now tracked on code-cell runs, not just at setup time, so runtime adoption is measurable
    • E2E suite updates: fixed functional regressions, re-baselined visual drift, and flagged an edit-message bug
  10. Jun 18, 2026
    v0.26.3

    Quadratic desktop app

    Quadratic now ships as a standalone desktop application built on Electron, packaged and published through ToDesktop for macOS and Windows. The desktop build runs the full app in its own window with hardened deep-link path validation, scoped security-warning handling, and a Rust-backed proxy for connection requests. CI now produces signed production and QA desktop builds, posting download links to the relevant QA pull request when a build finishes.

    Frozen rows and columns

    Excel-style frozen (pinned) rows and columns keep header rows and columns visible while you scroll the rest of the sheet:

    • Freeze controls live in the View menu, the cell right-click menu, and the command palette (Freeze up to row/column, Unfreeze), with corner freeze handles when no panes are frozen
    • Frozen panes stay pinned with a divider at the boundary while scrolling, and clicks inside frozen panes select the correct cell
    • Inserting or deleting rows/columns within the frozen band grows or shrinks the freeze count automatically, with full undo/redo and multiplayer sync
    • Google Sheets import preserves frozen row/column counts, and frozen panes can be set via the AI set_frozen_panes tool, the MCP SetFrozenPanes tool, and the Developer API

    AI chat mentions for connections

    The AI analyst chat input was rebuilt around a rich editor that renders structured inline pills instead of fragile @text string parsing:

    • You can now mention data on the sheet or connections, including more than one connection in a single prompt
    • Each pill carries a structured reference (kind + id + metadata) so the AI knows exactly what you referenced rather than guessing from the text
    • Connection context is unified so SQL and agent (REST API) connections behave identically: a compact routing list of every connection is always sent, mentions act as additive focus markers rather than filters, and rich schemas are fetched on demand instead of re-injected every turn

    AI can ask clarifying questions

    A new ask_user_question tool lets the analyst ask one or more multiple-choice questions when a request is ambiguous instead of guessing. The chat renders an interactive card (single- or multi-select with an always-available "Other" free-text option), the tool loop pauses until you answer, and your selection is returned to the model so it can continue. Cancelling while a question is pending unwinds the loop cleanly.

    Developer API client libraries

    Generated TypeScript and Python client libraries for the Developer REST API are now published, so you can call the spreadsheet engine without hand-writing HTTP requests. The clients are generated from the OpenAPI spec, versioned in lockstep with the API, and covered by smoke tests and publishing CI.

    Faster loads on slow connections

    File loads are faster on slow connections and on repeat visits:

    • Large cacheable binaries (Pyodide, esbuild.wasm, fonts, emojis, the Python wheel) are no longer served with no-store; content-stable assets are now immutable and runtime binaries self-heal within a day
    • Heavy Python/JavaScript language workers are deferred off the critical path and started during idle time, so they no longer compete for bandwidth with the resources needed to open a file
    • An opt-in service worker (PWA) caches immutable assets for fast repeat loads while keeping update detection accurate; it's off by default
    • A single compiled WASM module is now shared across the main thread and workers, with hardened initialization and double-init guards

    PDF import improvements

    AI-assisted PDF import is faster and more reliable on large documents: imports now default to Gemini 3 Flash, and large PDFs are chunked into page ranges so they import in batches instead of failing on size.

    AI model fallback updates

    The model fallback chain was adjusted in response to provider availability: GPT-5.4 and Opus 4.5/4.6/4.7 were disabled in favor of falling back to 3.1 Pro, with Opus 4.6 retained as a backup path.

    Bug fixes

    Various bug fixes and polish including:

    • The code editor reopens correctly for read-only code table cells, and selecting/dragging across multi-line code no longer misplaces the cursor
    • The validation dropdown is hidden when previewing read-only code table cell content, and the table column dropdown fits even when the table name is truncated
    • Resizing columns, rows, or tables no longer changes the current selection, and several column-resize glitches were fixed
    • The inline editor is now sticky and extends to the full cell width so the cursor stays visible while editing
    • AI chat notifications fire correctly after clicking, chats can be resumed after subscribing, and the AI empty state renders at the right size with correct icons
    • The onboarding skip-file-creation flow shows a loading screen instead of a blank state
    • Plaid balances and liabilities sync is throttled to twice a day, with synced markers written for point-in-time historical dates
    • Disabled Monaco selection-match highlighting in the inline editor, and restored grid focus after committing an inline edit
    • AI Python code-cell docs and prompt guidance were expanded to address recurring production issues, with refreshed context budgets
    • Fixed Mixpanel analytics so events actually land: payloads are now sent in the array shape Mixpanel expects with a required distinct_id, and application-level rejections are logged instead of silently succeeding (this had been dropping MCP and Developer API auth-funnel events)
    • The files service no longer hangs (HTTP requests, including health checks, stalling while CPU is pinned) during large synced-connection backfills: Parquet encoding for Mixpanel, Plaid, QuickBooks, and Google Analytics now runs on the blocking thread pool, concurrent sync processing is bounded by a semaphore, and the concurrency cap scales with available CPU cores so a sync storm can't starve the async HTTP workers
    • The Python (Pyodide) worker installs the quadratic_py wheel directly from its URL again on the web, reserving the in-memory filesystem install path for the desktop app
    • Enabled AWS Systems Manager Session Manager on the files instance profile so a wedged box can be reached without SSH
    • E2E suite expanded with new product test IDs and coverage, with blob reports stored in S3
  11. Jun 15, 2026
    v0.26.2

    Production database schema drift repair

    Resolved a production schema drift that caused runtime errors such as The column Secret.kind does not exist in the current database. Two earlier migrations were edited in place after they had already been applied to production, so the new columns and enum values were never picked up. A new idempotent repair migration re-applies those changes safely:

    • Recreates the SecretKind enum and adds the missing OAuth columns to Secret (kind, encrypted_refresh_token, access_token_expires_at, oauth_metadata)
    • Adds the agent_connection_plan_proposal value to the AIChatSource enum
    • Brings AgentConnection in line by adding plan_json and dropping the obsolete custom_* and code_template columns
    • Every statement is a no-op on dev and fresh installs, and backfills only the missing schema on production
  12. Jun 12, 2026
    v0.26.1

    AI-guided agent connections

    The AI analyst can now research, set up, and authenticate data connections for you through a guided conversation instead of filling in a connection form by hand:

    • A new connection-setup flow lets the analyst research a target API, propose a connection plan, create the connection, walk you through OAuth, and test it end-to-end with dedicated tool cards for each step
    • Backed by a curated agent catalog (with admin-managed entries and a community proposal/approval pipeline) so the AI can suggest the right connection for common services
    • New team agent-connection API routes handle create, update, delete, OAuth auth-url/exchange, and secret bindings, with a background OAuth token refresher and connection thumbnail capture
    • Agent connection credentials reuse Team Secrets and per-secret allowed-domain rules, and redirect hosts are validated when fetching connection thumbnails

    AI chat browser notifications

    You can now opt in to a browser notification when a long-running AI analyst response finishes, so you don't have to watch the chat while it works. A prompt card offers to enable notifications, preferences are remembered, and the notification only fires when the tab isn't focused.

    Previous chats in AI empty state

    The AI analyst empty state now surfaces your recent chats alongside prompt suggestions, making it faster to jump back into an earlier conversation. Chat naming and history handling were tidied up as part of the change.

    View and edit large cells inline

    Viewing and editing cells with large amounts of text or code is more reliable:

    • The inline editor handles large content without truncation or layout glitches, and read-only code tables get their own inline view with appropriate editor actions
    • Double-clicking a code table cell targets the right element so opening large code cells behaves consistently

    MCP and Developer API usage analytics

    The MCP server and Developer REST API now emit Mixpanel events for key actions (auth, reads, writes, file operations, connection access) so adoption and usage of the programmatic surfaces is measurable. A shared Rust Mixpanel analytics module in quadratic-rust-shared backs both services with per-action property builders.

    Core WASM performance profiler

    A new opt-in profiling layer instruments quadratic-core's WASM entry points, capturing per-call timing metrics that surface through a worker-side performance reporter. This makes it easier to find slow grid operations in production-like builds without external tooling, and compiles out entirely when disabled.

    Sentry noise reduction

    Another pass to cut non-actionable Sentry alerts:

    • IndexedDB-unavailable errors are downgraded to warnings
    • Empty console.error captures are dropped instead of reported
    • Expected connection-schema fetch failures no longer report to Sentry
    • Benign Plotly chart-capture noise is silenced

    Bug fixes

    Various bug fixes and polish including:

    • The code editor now reopens correctly for non-outputting, spilled, and errored code cells, and quick repeated clicks on a code cell are handled cleanly
    • Cell references stay valid across structural edits such as sheet rename, table name collisions, and recompute
    • Data validations UI now populates after duplicating a sheet (#2008), and code cells can no longer be inserted into tables (#4583)
    • New files show Sheet1 as the active sheet (#4588), and closing the cell type menu returns focus to the cell (#4585)
    • The AI is steered away from deleting table and sheet data (#4579), AI-generated numbers default to 2 decimal places, and overactive tool-call groupings in chat were fixed
    • q.financial functions are now awaitable in cloud runs (#4571)
    • The home logo navigates to your own dashboard from a cross-team shared file (#4557), the file breadcrumb no longer shows a stale name (#4504), and the social share image logo was updated
    • Fixed a memory bug in core cell-value deletion
    • E2E suite expanded with new product test IDs, regression guards, flake fixes, and pre-run environment cleanup
  13. Jun 5, 2026
    v0.26.0

    AI thinking stream fix for Opus 4.7/4.8

    Opus 4.7 and 4.8 thinking blocks are now visible in the AI analyst chat. The Anthropic handler was updated to set display:'summarized' on extended thinking so streamed thinking content surfaces in the UI instead of being silently dropped.

    getCells compression and schema fixes

    The AI getCells tool result is now compressed more aggressively to stay within context limits:

    • Old tool results for getCells are now compressed/summarized when compacting conversation history so large cell reads don't bloat the prompt on multi-turn sessions
    • The cellData schema and Python language model description were tightened to match the actual response shape

    Python connection proxy credential isolation

    Python connection proxy credentials are now isolated per-execution via contextvars, preventing credential leakage across concurrent async requests. The fix ensures each code cell execution sees only its own connection secrets when patching the requests and httpx proxies.

    Walking ants performance on large copies

    Copy/cut selection animations ("walking ants") were redrawing the entire highlight layer on every frame for large selections. The rendering path was optimized to avoid redundant redraws, keeping the UI responsive during large copy operations. Formula range highlights also update correctly as the mouse cursor moves.

    Leave-team UI stale state fix

    Leaving a team no longer leaves you appearing as a member in the team list. The client now correctly invalidates team membership state after the leave action completes.

    Bug fixes

    Various bug fixes and polish:

    • Code editor no longer opens empty on subsequent opens in Safari (issue #2875)
    • Export dialog now asks what would make users share instead of just export, to better understand sharing friction
    • E2E test suite expanded with network-mocked AI tool-call coverage and deterministic model smoke tests
  14. May 29, 2026
    v0.25.21

    Claude Opus 4.8 default model

    The AI analyst now defaults to Claude Opus 4.8, the latest flagship Claude model for Quadratic's max reasoning mode:

    • Opus 4.8 is the new default model for AI analyst and assistant chats
    • The model picker now labels the default option as Claude Opus 4.8, while Opus 4.7 remains available under other models
    • Vertex Anthropic and direct Anthropic Opus 4.8 variants were added with thinking toggle support, image support, 1M context limits, prompt caching, and updated token pricing
    • Fallback routing was updated so Opus 4.8 can fall back through the existing Opus 4.7 paths when needed

    OpenAI strict-mode tool schema fixes

    OpenAI and Azure OpenAI tool calls are more reliable when strict mode validates Quadratic's AI tool schemas:

    • Context editing and history tools now include every declared parameter in required, preventing OpenAI from rejecting the entire AI request with a schema validation 400
    • Scheduled-task tool schemas now list all action parameters in required so GPT-path models can use the tool consistently
    • Optional numeric parameters such as context-history limit are represented as nullable values, matching OpenAI strict-mode expectations while preserving optional behavior for the AI

    AI tool-schema guardrails

    A new Cursor project rule documents the strict-mode requirement for AI tool schemas, including examples for adding optional parameters safely. This should help future schema changes avoid regressions that only affect OpenAI-path models.

  15. May 28, 2026
    v0.25.20

    AI memory and team knowledge

    The AI analyst can now use more durable workspace context without stuffing every conversation with repeated setup:

    • New user, team, and connection context endpoints support storing, editing, versioning, and retrieving AI memory/context from the dashboard and sheet flows
    • A post-turn memory reflection step captures useful user preferences and recurring instructions for future AI sessions
    • Team knowledge adds scoped retrieval with tighter permission checks, atomic writes, order-stable attachment boosting, paginated UI search, and clearer service errors
    • Quadratic-scoped knowledge is hidden from user-facing tool cards while still being available to the analyst through the intended context path
    • AI usage billing now only counts user-initiated work where appropriate, and context routes include additional tests for permissions and escaping

    AI context trimming, audits, and telemetry

    AI requests now send less low-value context and include better measurement so prompt size regressions are easier to catch:

    • Always-on context was reduced by moving transaction history to an on-demand tool, slimming non-active sheet summaries, trimming CSV cell summaries, and consolidating documentation
    • Several tool descriptions were shortened, including scheduled tasks, borders, and data-oriented tools, saving tokens without changing the available capabilities
    • Context measurement, audit reports, shared chars-per-token helpers, and CI gates now track prompt size and alert on unexpected drift
    • AI context usage telemetry includes chat id and app version for better debugging of production sessions
    • Prompt hardening escapes context wrapper tags in ai_context bodies and trims redundant queries before sending them to models

    Streamlined AI tool cards

    AI tool-call display was rebuilt around a shared registry so chat output is easier to scan and cheaper to maintain:

    • Dozens of one-off tool card components were replaced with a generic line-based display registry and grouping helpers
    • Sequential and hidden tool-call display was fixed so grouped actions show up in the right order
    • ManageScheduledTasks now appears as a chat tool card when the analyst uses scheduled-task tools
    • The format summary now calls out clear text color and clear fill color actions explicitly
    • AI instructions now steer bulk copy/paste flows toward batched cell reads and writes

    Spreadsheet editing fixes

    A large set of grid correctness fixes landed across formulas, tables, formatting, charts, and selection:

    • Formula errors now report spans by line and column, read-only users can no longer edit formulas inline, and undo in the sheet correctly updates the code editor
    • Autocomplete works across multiple async code cells and checkboxes, while auto-formatting can reset decimals back to the default
    • Table operations now preserve selection and formatting more reliably: inserted rows/columns shift surrounding content correctly, table header selections include the table name and headers, hiding columns affects the intended column, and deleting table rows/columns selects the full table afterward
    • Cutting or deleting a data table with a spill error is allowed, and chart y-axis labels no longer disappear on zoom
    • Chart interactions now use the Quadratic context menu, right-click state is preserved after menu item actions, and hiding a chart name row no longer leaves the chart stuck
    • Currency formatting now spaces Euro and Rupee symbols correctly, Excel export avoids duplicate decimal patterns, and reserved currency defaults are preserved

    Connection, import, and Sentry resilience

    More handled failures now surface as useful warnings instead of crashes or noisy Sentry events:

    • Google Sheets, unsupported import types, in-file imports, and malformed AI table data now report user-facing validation/warning states instead of crashing the app
    • Expired AI sessions, missing AI code cells, handled Plotly capture fallbacks, no-detail multiplayer worker warnings, JavaScript worker load failures, emoji mapping failures, and AI helper empty responses are downgraded or filtered where appropriate
    • Sheet offset loading is guarded against WASM traps, stale render dirty-hash updates are ignored, and empty sheet-meta fills payloads are valid
    • GA4 API-disabled connection errors now show friendlier messaging, synced-connection log lookup avoids repeated full scans, and latest-log writes are more efficient
    • Zotero extension errors are detected across frames and filtered from Sentry noise
    • Prisma connection limits and pool timeouts can now be raised through the datasource override

    E2E and infrastructure reliability

    Test and deployment infrastructure received another hardening pass:

    • E2E helpers moved from hardcoded waits to event-driven DOM/network readiness signals, improving reliability and shaving time off upload-heavy tests
    • API-based test-data cleanup replaces compounding browser cleanup state, with updated helpers, trace extraction cleanup, and refreshed grid fixtures
    • The preview deploy pipeline retries transient SSM/deploy failures and validates more of the environment before promotion
    • Postgres/Aurora versions were aligned with supported 17.7 images for local, CI, and managed database paths
    • Security/dependency updates include rustls-webpki, uv, idna, and removal of the deprecated @types/aws-sdk stub

    Bug fixes

    Various bug fixes and polish including:

    • Dashboard search keeps the existing file list visible while refetching, and duplicating a file now preserves folder properties
    • The Stocks connector was moved into the Data sidebar menu and nested under Financial in the Add a Connection dialog
    • Shift-click range extension preserves earlier ranges, pasted content remains selected, and column width persists when moving columns
    • @ mentions no longer reference tables that have been deleted
    • Summaries no longer show totals when selecting only text content
    • The context menu closes correctly across more application interactions, and table sticky-header hit bounds stay in sync with the floating header position
    • Invite selector and folder soft-delete setup races were fixed
  16. May 18, 2026
    v0.25.19

    Paged dashboard for large teams

    The dashboard's monolithic file load was replaced with cursor-paginated, server-side search/sort/filter so teams with thousands of files no longer pull everything up front:

    • New GET /v0/teams/:uuid/files (folder-scoped Drive listing with scope, search, sort, order, cursor, limit) and GET /v0/teams/:uuid/files/recent (Recent Files server-side union of team + private + explicit-share files across teams)
    • Cursor pagination uses an opaque base64 token over a stable (sortField, id) key so paging is correct across ties and sort columns can change later without breaking clients; cursor/sort mismatches fall back to a fresh page
    • Two new composite indexes on File back the new endpoints with indexed range scans instead of in-memory sort
    • Client switches to TanStack Query infinite scroll: 30s stale time, 300 ms debounced search, IntersectionObserver sentinel, and a single useFileMutationInvalidation hook so rename/delete/move/duplicate/restore/share-toggle invalidate both list trees
    • The additional-filters dropdown (scheduled tasks, shared publicly, creators) now applies to every Drive view, including roots and folders, so toggled filters can always be seen and cleared
    • teamDataAtom no longer carries files / filesPrivate; optimistic move helpers and per-mutation overlay atoms are replaced by query invalidation
    • Cmd+A now selects across pages, and a developer file-debug tool was added for the new endpoints

    MCP auth resilience and connection discovery

    Two issues that were forcing reauth and hiding connections from the AI are fixed, plus a substantial test backfill:

    • Auth no longer drops on transient WorkOS hiccups — refresh failures are classified Definitive (invalid_grant, invalid_client) vs. Transient (network errors, 5xx, 429, parse failures); only definitive errors clear the stored token, transient failures retry with up to 3 attempts of exponential backoff and a 15s per-attempt HTTP timeout
    • Refresh buffer bumped from 60s to 120s so we always refresh well before the access token expires
    • New read_data(list_connections) action returns each connection's uuid, name, type, created_date, semantic_description, and is_demo; auto-discovers team_uuid for single-team users and gives an actionable error listing teams for multi-team users
    • get_database_schemas with empty connection_ids now points the AI at list_connections instead of returning a confusing error; tool descriptions document the list_connectionsget_database_schemasset_sql_code_cell_value flow
    • MCP list_files rebuilt for the paged dashboard endpoints; write_data/read_data tool descriptions now inline per-action signatures so the model picks the right call directly
    • MCP worker watchdog raised and stale sessions are evicted on disconnect; an MCP smoke job runs in the preview workflow before promoting builds
    • 21 new wiremock-backed integration tests cover auth refresh classification, device flow, connection discovery, worker round-trips (SQL, CSV import, convert_to_table, table_meta), and session lifecycle

    Long-running cloud worker JWT refresh

    Scheduled tasks and other long-running cloud-worker jobs no longer fail with JWT error: ExpiredSignature partway through. Workers used to snapshot the JWT as a String at task start; any task that ran past the JWT lifetime then 401'd on every controller call. The worker now holds a SharedJwt with a background refresher that rotates the token before expiry, and every controller-bound HTTP call snapshots the latest JWT immediately before sending. Plumbing covers quadratic-core-cloud, quadratic-cloud-worker, the MCP state, and the developer-API path.

    Immediate invoicing on plan upgrade

    When users upgrade their plan (e.g. Pro → Business), Stripe now invoices the prorated charges immediately via proration_behavior: 'always_invoice' instead of bundling them into the next billing cycle. This avoids the confusing "charged for 2 months at once" appearance on the next invoice.

    AI chart resize validation

    The AI update_image resize used to claim success even when SetChartCellSize silently failed because the model targeted a cell outside the chart's output rect. A new validate_chart_cell_resize_target preflight runs the same resolution rules synchronously, so the WASM call returns { result: false, error } on bad targets and the AI gets an explicit tool error instead of a false success. Tool copy clarifies that resize applies to charts and HTML as well as images, and that position can be any cell overlapping the rendered output.

    Bug fixes

    Various bug fixes and stability improvements including:

    • Secrets + Basic auth end-to-end: Python requests.get(..., auth=("{{USER}}", "{{PASS}}")) no longer base64-encodes the placeholders before they reach the proxy; the proxy reads X-Proxy-Basic-Auth, substitutes secrets on the raw user:password string, then encodes and sets Authorization: Basic. JS fetch overrides handle Authorization: "Basic {{U}}:{{P}}" the same way. AI Python/JS docs and tool descriptions rewritten to use the right placeholder pattern and explicitly forbid manual btoa() / base64
    • Cancel during AI prompt: codeCellToMarkdown no longer forces a schema-cache bypass on every prompt (slow connections like a 10–30s GA were hit on every chat); cache bypass is now reserved for the schema browser's explicit refresh icon. AbortSignal threads from AISession.executeToolCallLoop through ContextBuilder.buildContext into connectionClient.schemas.get, so cancel actually interrupts in-flight schema fetches instead of waiting for the timeout
    • Renamed tables flash on refresh: S3 .grid checkpoints can lag the room's true sequence number, so renames/edits applied after the checkpoint only landed after multiplayer's first EnterRoom catch-up. FileLoadingOverlay now stays up until multiplayerSynced fires, scoped to /file/:uuid, with a 5s safety timeout and explicit gate-open on every error/abort/reset path. Embed and version-history previews skip the wait
    • Synced-connection test errors are now visible: SyncedClient::test_connection changed from -> bool to -> Result<()>, so failed Google Analytics, Mixpanel, QuickBooks, and Plaid connection tests surface the upstream error message in the red banner instead of Unknown error
    • Overage billing double-count: stripeOverageBilledPeriodStart rows written before the period-anchor normalization carried the raw Stripe renewal hour/minute/second, so a strict equality check against the new 00:00:00 UTC anchor always missed and re-billed the entire period. Comparison switched to a UTC-day check (and later a >= compare) in both reportAndTrackOverage and the team AI usage route, with regression tests
    • Chart resize from outside the canvas: AI-driven chart resizes now apply immediately when triggered externally instead of waiting for the next interaction
    • Inline editor test instrumentation: Monaco content is mirrored onto #cell-edit via onDidChangeModelContent so paste/typing sync to the test attribute, gated behind navigator.webdriver so the DOM writes only run under Playwright/Selenium; new data-test-cell scopes assertions to the active cell. Plus app-background, goto-menu-input, and split desktop/mobile testids on the view toggle and breadcrumb
    • Branding: removed the legacy gray-background logo so the animated paint-on logo renders cleanly in dark mode
    • q.financial usage tracking: Python code cells now emit a [PythonWebWorker].qFinancialRequest mixpanel event (with endpoint) on every q.financial.* call, even when guarded by embed mode or missing team UUID, so adoption is measurable
    • Developer API infrastructure: Pulumi now uses replaceOnChanges + deleteBeforeReplace on the dev-api NLB and ASG, the service moved into apiVPC with the live DATABASE_URL injected, and create_file can build a blank file with the current grid version derived from contents
    • Updated raindrop integration to the new SDK; pinned the client Dockerfile to dockerfile:1.10; cargo bumps for russh 0.54.5 → 0.60.1, rand 0.8.5 → 0.8.6, and rustls-webpki 0.103.10 → 0.103.13
  17. May 13, 2026
    v0.25.18

    Mobile and non-Chromium browser support

    Quadratic now ships first-class mobile and Safari/Firefox support. Non-Chromium desktop browsers load directly into the app, and phones get a full mobile UI:

    • Removed the non-Blink browser warning gate on file routes — desktop Safari and Firefox land straight in the app; only browsers actually missing WebAssembly or WebGL see the unsupported page
    • iOS Safari pinch-zoom, gesture, and body rubber-band bounce are suppressed so the app owns all pan/zoom; localStorage/sessionStorage writes wrapped in try/catch for Safari private mode
    • New QuadraticMobileUI with view, cell-selected, and multi-select modes; mobile top bar, bottom bar, formatting bar, color picker, AI pane, cell type pane, code editor, and settings pane
    • Long-press support for mobile dashboard actions; mobile-specific onboarding routes phone users through the standard questions
    • Mobile memory safety: pre-flight check blocks files larger than 40 MB compressed with an override, OOM detection short-circuits subsequent loads, charts render as Pixi sprite placeholders, and iframe loading is capped on iPhone
    • WASM release build trimmed ~15% via panic = "abort", single codegen unit, and wasm-opt --strip-debug --strip-producers for faster mobile loads

    Developer REST API

    A new quadratic-developer-api service exposes the spreadsheet engine to developers via a token-authenticated REST API, mirroring the MCP server surface with HTTP verbs and resource-oriented routes:

    • /v1/files, /v1/files/{id}/sheets, /v1/files/{id}/cells, /v1/files/{id}/tables, plus context, outline, search, undo/redo, and batch endpoints
    • POST /v1/files/import creates a file and imports data in one call
    • API tokens scoped to (user, team) with qdx_live_ prefix for GitHub/truffleHog/gitleaks leak detection; created, renamed, and revoked from team settings
    • Transparent per-file worker session management with an idle reaper (default 5-minute TTL)
    • OpenAPI spec generated from utoipa annotations, served from /docs
    • Pulumi infrastructure for the service wired into QA and production verify matrices

    Async code queueing and full cancel

    Operations that modify the grid while Python, JavaScript, or Connection code is running are now queued in FIFO order so async results stay consistent, and Cancel actually clears all pending work:

    • Safe operations (formatting, borders, resizing, sheet metadata, cursor moves) execute immediately
    • Unsafe operations (cell values, code execution, insert/delete rows/columns, sheet add/delete) are queued and processed once async work completes
    • Pending cells show 50%-opacity spinners; KernelMenu displays the pending count and "Stop all" cancels currently running and queued work across all language workers
    • "Stop all in run menu" now also cancels pending code cells

    AI Trace Value cell action

    A new right-click context menu action on cells and tables opens the AI analyst with a pre-built prompt asking it to trace where the value comes from end-to-end (literal, formula, code cell output, data table, or connection query) so you can verify and follow the value through the spreadsheet.

    Download as PNG

    A new Download as PNG item appears alongside Copy as PNG in grid context menus. It uses the same rendering path as copy-to-clipboard so the exported image matches, but saves a .png file to disk — useful in Firefox and other browsers where clipboard image writes are unsupported.

    Personal finance landing page

    A new /get-started/personal-finance landing page takes users to a new file with a custom screen to either connect Plaid or import a file, tailored for personal-finance onboarding.

    Anonymous viewers for public files and MUI removal

    Public read-only files no longer force anonymous viewers to log in, and the client is now MUI-free:

    • File loads, education calls, JWT refresh, AI request paths, and connection client all skip the auth redirect for anonymous viewers; AI requests show a friendly "sign in to use AI" message instead of redirecting
    • Anonymous viewers no longer attempt multiplayer connections (was a 5-second reconnect loop indefinitely); the sync indicator shows a calm check with "Log in to save changes and collaborate live"
    • Fixed validation cell crash from Vite's dep optimizer wrapping MUI icon default exports
    • Fixed validation message overlapping cells in column A and showing while the inline editor is open
    • Migrated 15 client files off @mui/material and @mui/icons-material, removed 8 dependencies including @emotion/react and @emotion/styled; useGlobalSnackbar() now uses sonner under the hood with the existing API preserved

    Sentry noise reduction

    Another pass to cut non-actionable Sentry alerts driven by recent production events:

    • Mixpanel synced-connection ingestion now parses NDJSON line-by-line so a single malformed line no longer tanks the whole batch
    • QuickBooks token-refresh 400 spam: permanent OAuth failures mark the synced connection INACTIVE with a single descriptive failure log; reauthenticating flips it back to ACTIVE
    • Team-connections list query replaces N+1 nested includes with a single DISTINCT ON query for faster loads
    • Multiplayer worker "no details available" errors after tab suspension are suppressed; WASM preload scoped to file routes; preload uses Promise.allSettled
    • PDF import EmptyResponseError retries on the backup model before any Sentry capture; user message tailored for PDF imports
    • AI chat 401s collapse into a warn-level "session expired, please refresh" message; 5xx surfaces "service temporarily unavailable" with one structured Sentry event instead of three [object Object]-titled events
    • /version.json polling is no longer captured by Sentry; cadence now uses exponential backoff (5s → 60s) and re-entry cancels in-flight chains
    • WebAssembly reference-types support is probed before loading file routes so ancient browsers hit the unsupported page instead of failing mid-pageload
    • Rate limiting (500 requests/minute) added on the /financial Intrinio endpoint with a snackbar when hit

    Bug fixes

    Various bug fixes and stability improvements including:

    • Cursor no longer snaps to the right edge of left-aligned cells when typing a leading space
    • Removed stray 1px indent guide line in the inline editor when text has leading whitespace; hid Monaco whitespace dot rendering inside cells
    • Inserting a row or column at a chart's anchor no longer produces an unfixable #SPILL!, and undo correctly restores chart position and size
    • MoveDataTable now clears the source HTML/image cell so charts no longer leave a ghost render at the previous position on undo
    • Persona auto-fill into the AI Analyst chat input now waits for the input to mount instead of guessing from atom state
    • HtmlCell iframe load listener attached before DOM insertion to avoid missed load events
    • Silenced Monaco "ERR Canceled" clipboard noise on Safari/iOS
    • Clicking "Connections" in the sidebar refreshes back to the list view
    • Sidebar collapse icons now appear on folders with children; legacy /files route redirects to /drive/team
    • Loading animation gif is transparent so it renders correctly in dark mode
    • Reworked end-to-end test suite for the redesigned UI and SPA navigation; standardized selectors and Linux CI compatibility
  18. May 5, 2026
    v0.25.17

    Plaid institution logos

    Plaid connections now display the institution's logo throughout the connection UI for faster recognition and a more polished look:

    • New connection-service logo endpoint with on-disk caching and 404 retry via force_cache_refresh when an institution's logo first becomes available
    • Logos are fetched lazily from a shared usePlaidInstitutionLogo hook and shown in the connections list, sidebar, schema browser, AI context, code editor header, and connection form
    • Backfill of institution_id via Plaid item/get for older synced connections so existing Plaid links light up with logos

    Cloud controller telemetry and worker runtime cap

    More observability and tighter runaway protection for the cloud controller:

    • New public /stats endpoint returning version, max-worker count, and a per-worker snapshot (file id, image, runtime, running state) for live ops debugging
    • Worker wallclock runtime now capped at 10 minutes for both Docker and Kubernetes paths, with a WORKER_RUNTIME_TIMEOUT_SECONDS override for stacks that legitimately need longer-running workers
    • Daily AWS DLM snapshots of the controller's root volume with 7-day retention, plus Docker log rotation (100m × 3) so the volume can't fill from un-rotated container logs
    • Optional Datadog synthetic monitor on /health for stacks with the Datadog Pulumi provider configured

    AI model fallback improvements

    Refined the backup-model chain so primary-model outages fall through to the strongest available alternative instead of an older Claude:

    • Opus 4.7 now falls back to Opus 4.6, which in turn falls back to GPT-5.4
    • Opus 4.5 also falls back to GPT-5.4 directly
    • Both thinking and non-thinking variants updated consistently

    AI percentage formatting defaults

    When the AI analyst applies percentage formatting, the result now defaults to 2 decimal places via the core formatter (so the same default applies everywhere percentages are formatted). Format-tool descriptions for both the client and the MCP server were updated to inform the model about the default behavior.

    Color picker fixes

    Several fixes to the custom color picker in the formatting bar and Format menu:

    • Wider picker layout (40 → 52) so RGB and HSL inputs no longer truncate
    • Stop pointer/mouse events from leaking into the parent menu so the dropdown stays open and focus stays in the picker while you drag
    • Replaced DropdownMenuItem/MenubarItem wrappers with plain divs to avoid menu item highlight/focus side effects

    File loading and SPA navigation fixes

    Cleaner failure handling for in-flight file loads and clearer error states:

    • The route loader's request.signal is now forwarded through loadFile into files.get and checkpoint fetches; navigating away mid-load aborts in-flight requests with AbortError instead of leaking into a later generic Failed to fetch reported to Sentry
    • Stale/aborted loads are dropped without touching state or notifying Sentry
    • Core deserialization failures now surface as HTTP 422 (Unprocessable Entity) with a tailored error screen, separate from generic 500s
    • Switched to react-router's official isRouteErrorResponse and moved isAbortError into shared utils for reuse
    • Added a checkpoint-route 500 fix and a developer script for downloading a file's checkpoint locally
  19. May 1, 2026
    v0.25.16

    Cloud controller reliability

    Hardening pass on the cloud controller to eliminate race conditions and prevent stuck workers from blocking traffic:

    • Closed a JTI registration race so workers can't end up with duplicate or orphaned auth entries
    • Reconcile leaked JTI entries when a worker exits without calling /shutdown — the heartbeat reconciler now snapshots tracked file ids and clears stale ones automatically
    • Decoupled /health/full from the pub/sub mutex via a background probe, so health checks stay responsive even while pub/sub is contended
    • Made the heartbeat reaper's cluster-lock window explicit, narrowing how long the reaper holds the cluster lock and improving visibility
    • Additional protection around controller locking and worker lifecycle to avoid deadlocks under load

    Smarter file loading overlay

    The file loading overlay is less flickery on fast connections and more informative on slow ones:

    • Progress bar gating is now throughput-based: a 200 ms warmup samples real download speed, then the bar only appears when the projected remaining time is meaningful — fast/cached loads finish without ever flashing the bar
    • Once shown, the bar stays sticky for the rest of the load so transient network jitter doesn't cause it to disappear
    • Eliminated a flash of the dashboard between route transitions before the sheet is ready to display
  20. Apr 30, 2026
    v0.25.15

    Quadratic brand refresh

    Updated logo, icons, and first-load branding across the app:

    • New Quadratic wordmark and in-product logo using the official SVG artwork (including onboarding)
    • Refreshed favicons and a new paint-on loading animation for a clearer first impression
    • Favicon tweaks for better contrast on light and dark browser chrome

    Single-page app navigation and file history

    Client-side routing between the dashboard, folders, and files is smoother and more dependable:

    • Back button, subfolder navigation, and “return to dashboard” behavior fixed for SPA flows
    • File history and version switching reworked for in-app navigation, with correct read-only mode and HTML preview when switching versions
    • Improved file switcher behavior, Safari compatibility, and option to open some flows in a new tab
    • Closing side panels when switching files; gridline and heading rendering fixes after navigation

    Files dashboard interactions and optimistic folders

    Faster, clearer file management on the dashboard:

    • Improved click and keyboard interactions for selecting and acting on files
    • Drag-marquee selection persists across re-renders; bulk-delete context menu shows an accurate deletable count
    • Folder views derive from team data with optimistic folder creation and moves—creating a folder no longer flashes the dashboard, and moves in/out of the open folder update instantly
    • Optimistic folder moves are faster and safer (single-pass ordering, correct ownership when the drop target is ambiguous, and UI guards while saves are in flight)
    • New folders expand automatically in the tree

    Plaid reconnect and clearer errors

    Plaid connections are easier to recover when something goes wrong:

    • Guided reconnect flow when Plaid returns NO_ACCOUNTS
    • User-friendly handling and reconnect for ITEM_LOGIN_REQUIRED and expired credentials
    • Clearer sync error messaging overall

    AI tool calls for scheduled tasks

    The AI analyst can use dedicated tool calls when working with scheduled tasks, so automated runs are easier to configure and inspect from chat.

    Reliability and infrastructure improvements

    Backend and API hardening alongside client resilience:

    • File loading: release stream reader locks on errors, tighter file-route matching, and general load-path cleanup
    • Cloud controller: expanded tests for read retries, heartbeats, and background streaming workers; clearer 401 logging
    • API cache protection and improved performance logging with retries on transient failures
    • Mixpanel proxy respects ip=0 opt-out; tests restored for the proxy
    • JWT/JTI handling improvements for auth edge cases

    Bug fixes

    Various bug fixes and polish including:

    • Canvas drag: off-window edge scrolling driven by a RAF loop, faster off-canvas scroll tuning, scroll when the cursor leaves the canvas, cancel stuck drags when mouse buttons release, clamp drag outline to the canvas, and avoid layout thrash while dragging
    • Prevent dragging column/row gridlines before column A or above row 1
    • Inline formula editor: first-keystroke focus loss fixed; Monaco Ctrl+G “Go to line” and Mac Cmd+Shift+G find-previous suppressed so they do not hijack the inline editor
    • Right-click on the table column sort indicator opens the column menu
    • Pointer-gesture cancellation scoped to leaving the app, not only the canvas
    • Fixed pulsing AI highlight, duplicate templates, onboarding spacing, and restored financial-analyst persona auto-open with pre-filled prompt
    • Removed stale aiPanelAttentionAtom reference from AI analyst open/run flow
    • Double-click and inline-editor interaction fixes from the SPA rollout
  21. Apr 22, 2026
    v0.25.14

    Team secrets

    Securely store and use API keys, tokens, and other credentials across your team. Secrets are managed per team and injected automatically into Python and JavaScript code, so you never have to paste sensitive values into your sheet:

    • New Secrets tab in team settings for creating, editing, and deleting secrets
    • Secret names enforced to SCREAMING_SNAKE_CASE and surfaced as plain text to avoid browser password-manager interference
    • Allowed-domain allowlist per secret controls which external hosts the secret can be sent to
    • Automatic proxy patching in Python (requests, httpx, urllib) and JavaScript (fetch, XHR) injects secrets on outbound requests to allowed domains
    • New get_secrets AI tool lets the AI analyst list available secrets (names only) and guide you to use them in generated code
    • Team-id header added to all proxy calls for correct secret scoping

    PDF import in data sidebar

    PDF has been added to the Data sidebar import menu alongside CSV, Excel, Parquet, and Google Sheets, making it easier to discover and import PDF data directly from the editor.

    MCP server Claude standards compliance

    Refactored the MCP server to meet Claude's Connectors Directory requirements and improve reliability:

    • New ContextMode::McpServer for Connectors Directory-compliant context assembly
    • Added Claude-required tool annotations and split the unified files tool into dedicated files_read and files_write tools
    • MCP_ALLOWED_HOSTS is now required in production and optional in non-prod, with correct permissive-mode behavior
    • QUADRATIC_APP_URI is required in production for correct OAuth redirects
    • Health endpoint now returns version JSON for easier deployment verification
    • Fixed worker container networking on Linux Docker and Docker socket access
    • Removed stray behavioral directive from the auth.login response

    Data validation dropdown improvements

    Data validation list dropdowns are now easier to discover and use:

    • Improved dropdown discoverability for cells with list validation
    • Fixed formula-based list validation evaluation
    • Dropdown list now renders above the validation warning popup so both are readable at once
    • Validation warning/error message is hidden while the dropdown is open

    Annual billing and AI usage chart

    Billing improvements for teams on annual plans:

    • Fixed annual billing range calculation and checkout session handling
    • New yearly AI usage chart in team settings, with a collapsed view for at-a-glance totals
    • Expanded plan-helper and Stripe test coverage for annual subscriptions

    Sentry error reduction

    Another pass to cut non-actionable Sentry noise and make real errors easier to spot:

    • Centralized AI error handling with dedicated helpers and richer test coverage
    • Anthropic overloaded_error and AI empty-response failures demoted to warnings with retry and finishReason context
    • 401 file loads now redirect to login instead of reporting as errors, and file-load failures are no longer double-reported
    • Network/offline, WebGL-unavailable renderer inits, and format-summary races downgraded from error to warning
    • Render messages for missing sheets are now dropped instead of throwing
    • Transient upstream API fetch failures downgraded to warning with retry

    Bug fixes

    Various bug fixes and stability improvements including:

    • Removed the legacy AI Assistant panel from the code editor; AI workflows now consolidate in the AI analyst
    • Restored the async cells() method on the q class so Monaco Python type stubs generate correctly
    • File empty-state layout and import flow polish across the sidebar, toolbar, and top bar
    • Connection menu fixes for attaching connections to AI chat
    • Ended the introductory 50% off pricing for Claude Opus 4.7
    • CI self-heals missing preview image tags and fails fast on deploy; E2E matrix no longer silently skips on preview PRs
    • Production Docker builds now use private ECR with a -production suffix and MCP crates are included in version bumps
    • Automated E2E test generation workflow and expanded spreadsheet computation, smoke, and fundamental test coverage
  22. Apr 16, 2026
    v0.25.13

    Claude Opus 4.7 support

    The AI analyst now defaults to Claude Opus 4.7, the latest and most capable model from Anthropic:

    • Opus 4.7 is the new default model for AI analyst and assistant chats
    • Available in the model picker with thinking mode toggle support
    • Introductory 50% off pricing for a limited time

    AI financial data improvements

    Improved AI behavior when working with stock prices and financial data:

    • AI now uses adjusted prices (adj_close, adj_open, adj_high, adj_low) by default for more accurate historical analysis
    • Updated Python docs and code schemas to guide AI toward adjusted prices unless explicitly asked for unadjusted
    • Fixed deprecated titlefont Plotly property usage in AI-generated charts

    MCP server auth fix

    Fixed the MCP server OAuth device authorization flow silently looping forever when the token endpoint returned an error. Unexpected responses (e.g. invalid_client, invalid_grant) are now surfaced as errors instead of being swallowed, making auth failures diagnosable.

    CI/CD reliability improvements

    Several improvements to make the build and deployment pipeline more resilient:

    • Added image size validation after each Docker build to catch silent build failures that push degenerate images
    • Added post-deploy container health check to verify services are running on EC2 instances
    • Added retry logic to apt-get update across all service Dockerfiles to handle transient mirror sync failures
    • Added auto-deploy toggle to manual build workflow with automatic environment detection

    Bug fixes

    Various bug fixes and stability improvements including:

    • Fixed MCP server token endpoint errors causing infinite polling loops
    • Fixed transient Docker build failures from Ubuntu mirror sync issues
    • Fixed preview deploy pipeline silently succeeding with broken images
  23. Apr 15, 2026
    v0.25.12

    MCP server

    A new MCP (Model Context Protocol) server lets AI assistants like Claude and Cursor interact with your Quadratic spreadsheets directly. Connect any MCP-compatible client to read data, write data, execute Python and JavaScript code, and manage files:

    • Full MCP support via streamable HTTP transport at the root URL for easy client setup
    • OAuth device authorization flow for secure authentication
    • Read and write data, execute code cells, import files, and manage spreadsheets
    • Rich context including sheet schemas, table outlines, and dependency graphs
    • Batched and parallel tool call support for faster AI workflows
    • Per-connection session isolation for auth, API client, and file state
    • Cloud worker container spawning for sandboxed code execution
    • Configurable DNS rebinding protection for secure public deployments

    Recipe picker for connections

    A new recipe picker in the data sidebar and command palette makes it faster to set up common connection workflows. Browse pre-built recipes to get started quickly with popular data sources instead of configuring connections from scratch.

    CI/CD improvements

    Several improvements to the build and deployment pipeline:

    • New manual build workflow to trigger Docker image builds for any service on demand via GitHub Actions or CLI
    • PR image builds now only rebuild services that changed in the latest push, reducing CI time
    • QA workflow automatically creates ECR repositories for new services
    • MCP server added to QA deployment and version verification

    Test infrastructure improvements

    Broad improvements to E2E and integration test reliability:

    • Updated test IDs, selectors, and helpers across the E2E suite
    • Fixed flaky zoom and multiselect test assumptions
    • Improved helper compatibility with Linux CI runners
    • Expanded MCP server integration test coverage

    Bug fixes

    Various bug fixes and stability improvements including:

    • Fixed transient cloud worker failures with automatic retry and file URL resolution
    • Fixed MCP parameter deserialization when AI passes JSON strings instead of objects
    • Fixed OAuth device flow hanging on HTTP transport clients
    • Fixed MentionsTextarea behavior
  24. Apr 13, 2026
    v0.25.11

    Stock data panel

    A new Stock Data panel in the sidebar makes it easy to explore and insert financial data directly into your spreadsheet:

    • Browse stock data categories with ready-to-use Python code snippets
    • Insert snippets into the sheet or copy to clipboard with one click
    • Configurable parameters like frequency (daily/weekly/monthly) update the code in real time
    • Ask AI about any stock data category directly from the panel
    • Fixed data_point financial endpoint and Intrinio client double-escaping

    Financial analyst persona

    A new financial analyst persona provides a tailored onboarding experience for finance users. Navigate to /get-started/financial-analyst to get a pre-configured workspace with the stock data panel open, AI analyst ready, and finance-specific prompt suggestions.

    Dashboard drag-select for multi-file selection

    Select multiple files in the dashboard by clicking and dragging to draw a selection box:

    • Drag-select box for multi-file selection with modifier key support (Ctrl/Cmd to toggle, Shift to add)
    • Cmd/Ctrl+A keyboard shortcut to select all visible files
    • Fixed bulk actions bar layout to prevent shifts during selection
    • Fixed bulk move dialog not showing filenames

    Dashboard navigation fix

    Fixed an issue where opening files from the dashboard could fail due to client-side navigation. File links now trigger a full page reload, ensuring files open reliably.

    Bug fixes

    Various bug fixes and stability improvements including:

    • Fixed nginx-brotli container image after upstream digest removal
    • Fixed three-dot menu event propagation in dashboard
    • Improved CI artifact storage by replacing GitHub artifacts with S3 staging
  25. Apr 10, 2026
    v0.25.10

    Custom zoom controls

    The zoom menu now includes a text input for typing any zoom percentage directly. Zoom in/out stepping has also been refined for smoother incremental zooming:

    • Type a custom zoom level (1%–1000%) from the toolbar zoom dropdown
    • Smoother zoom in/out with smaller incremental steps

    Google Sheets import improvements

    Google Sheets can now be imported directly into the active sheet from within the editor, in addition to creating a new file:

    • Import Google Sheets into the current file from the file menu and data sidebar
    • Fixed PKCE verifier persistence for more reliable Google authentication
    • Improved error messaging when the Google Picker API key is missing

    Mobile experience improvements

    Several improvements to the mobile experience:

    • New mobile onboarding screen directing users to desktop for full functionality
    • Long-press gesture support for file selection on touch devices
    • Disabled accidental drag interactions on mobile
    • Skipped team onboarding flow on mobile devices

    Dashboard fixes

    Multiple fixes to the dashboard file management experience:

    • Fixed multi-delete not working correctly in the dashboard
    • Fixed single file selection behavior
    • Fixed dashboard list mode display issues
    • Improved selection handling across grid and list views

    Bug fixes

    Various bug fixes and stability improvements including:

    • Fixed empty SQL query results blocking subsequent executions with data
    • Fixed proxy header priority so user-set headers correctly override browser-auto-set headers
    • Updated Rust toolchain to 1.91.1
    • Fixed leaking browser instances in E2E tests
    • Improved subscription success handling and conversion tracking
  26. Apr 8, 2026
    v0.25.9

    AI improvements

    Multiple improvements to AI model support and tool handling:

    • Improved Gemini model filtering and compatibility
    • Fixed OpenAI and Gemini tool card rendering
    • Minor tweaks to tool call behavior for more reliable AI workflows

    Google Sheets import improvements

    Further improvements to the Google Sheets import experience:

    • Added Google Sheets import to the file menu, command palette, and AI
    • Google Sheets import now opens in a new tab from the editor
    • Updated formulas grid to match new formula support

    Personalized onboarding

    New persona-based onboarding flow that tailors the getting-started experience to your role and use case.

    Bug fixes

    Various bug fixes and stability improvements including:

    • Fixed copy-paste bug for single-column range selections
    • Fixed table column resize cancel behavior
    • Fixed connections loading issue
    • Fixed Mixpanel proxy CORS errors in production
    • Improved formula cached value preservation
  27. Apr 6, 2026
    v0.25.8

    New formula functions

    Added several new formula functions for logical comparisons, engineering conversions, and data analysis:

    • Logical comparison functions: EQ, NE, LT, GT, LTE, GTE for flexible value comparisons
    • Engineering conversion functions for number base conversions (binary, octal, decimal, hex)
    • Improved datetime functions with better DATEVALUE and TIMEVALUE parsing
    • New FLATTEN function for array transformation
    • Distinct value counting with COUNTDISTINCT and UNIQUECOUNT

    Embed improvements

    Multiple improvements to the embed experience for a more polished embedded spreadsheet:

    • Viewport clamping to prevent scrolling beyond content bounds
    • Initial view configuration for controlling the default embed viewport
    • Improved scrollbar behavior and positioning in embed mode
    • Fixed contact links in customize embed settings

    Excel import row height auto-fit

    Row heights are now automatically adjusted during Excel import to properly accommodate larger font sizes, producing more faithful imports of formatted spreadsheets.

    AI context improvements

    Improved AI context handling for better responses:

    • Reordered AI context for improved prompt quality
    • Added AI Chat as a referral source in onboarding
    • Enabled parallel tool calls for faster AI workflows

    Sentry error reduction

    Significant reduction in Sentry noise by filtering non-actionable errors:

    • Suppressed browser extension and translation interference errors
    • Replaced FontFaceObserver with native document.fonts API
    • Improved error handling for multiplayer, AI, and auth flows
    • Downgraded transient network errors from error to warn level

    Bug fixes

    Various bug fixes and stability improvements including:

    • Fixed data table resize handler priority and activation
    • Fixed table text clipping with right-aligned content
    • Fixed cancel mouse interaction
    • Improved formula cached value preservation during imports
    • Routed Mixpanel events through API proxy for reliability
    • Updated shared folder icons for consistency

    Google Sheets import

    Import Google Sheets directly into Quadratic. Connect your Google account and import spreadsheets with support for values, formulas, and multiple sheets.

  28. Apr 3, 2026
    v0.25.7

    File and folder organization

    Organize your files and team files into folders. Create nested folder structures, move files between personal and team folders, and navigate your workspace with an expandable sidebar tree:

    • Create, rename, and delete folders for personal and team files
    • Drag and move files between folders and teams
    • Expandable folder tree in the sidebar with chevron navigation
    • Context menu actions for folder management

    AI schema browser

    A new schema browser in the AI analyst panel makes it easier to explore and use your connected data:

    • Browse table schemas with column names and types directly in the AI chat
    • Preview table data with headers even when tables have no rows
    • Insert table references into your AI prompts with one click
    • Schema viewer auto-opens when attaching a connection to chat

    Dashboard and empty state improvements

    Improved the new file and empty state experience:

    • Refined AI prompt suggestions with clearer labels and descriptions
    • Streamlined connection management with a dedicated Add Connection button
    • Fixed empty state flash for users with existing connections
    • PDF prompt prefill for faster onboarding

    Connection improvements

    • Limited q.financial access in embed mode for security
    • Fixed duplicate connectionComplete calls after cancellation
    • Moved parquet processing to shared library with row limiting

    Bug fixes

    Various bug fixes and stability improvements including:

    • Fixed keyboard navigation regression with Shift+(Cmd+)+Arrow
    • Fixed pricing hint styling to match in-app settings
    • Added show/hide toolbar toggle
    • Fixed empty text items rendering in AI analyst messages
    • Fixed centering issues in UI components
    • Improved E2E test coverage for folders and teams
  29. Mar 31, 2026
    v0.25.6

    AI and prompting improvements

    Improved AI chat behavior and prompt quality to make responses more reliable across follow-up requests and complex multi-range queries:

    • Improved follow-up handling and queueing behavior in AI workflows
    • Refined prompt construction to reduce long-prompt failure cases
    • Improved AI schema caching and tool card behavior for cleaner context

    Financial data reliability improvements

    Improved Intrinio-backed financial functions and error handling:

    • Fixed q.financial.data_point() behavior
    • Removed unsupported financial function paths and improved error messages
    • Restored economic data support in financial workflows

    Data import and analytics fixes

    Improved correctness for imports and analytics tracking:

    • Fixed CSV header detection when date columns contain values like N/A
    • Fixed analytics timing and gclid precedence handling

    Stability improvements

    Additional reliability and quality-of-life fixes:

    • Fixed TypeScript and clippy lint issues across the codebase
    • Improved selector/helper consistency in E2E coverage and billing test stability
  30. Mar 26, 2026
    v0.25.5

    Embeddable spreadsheets

    Embed Quadratic spreadsheets directly into external websites and applications using iframes. Share interactive, live spreadsheets anywhere on the web:

    • Embed any file via a dedicated /embed URL
    • Share dialog with embed code generation
    • "Edit in Quadratic" button for viewers to jump into the full editor
    • Configurable embed settings and blank mode for clean presentations
    • Code editor support within embedded views

    Recipes

    Recipes provide guided, step-by-step workflows for common connection setups. Instead of configuring connections from scratch, pick a recipe to get started quickly with pre-built templates for popular data sources and use cases.

    Formula references follow moved cells

    When you move cells via cut/paste or drag-move, formula references now automatically update to reflect the new location. This works across all code cell types including Formulas, Python (q.cells), JavaScript (q.cells), and Connection references.

    AI spending limits

    When enabling AI overage usage, a spending limit dialog now requires you to set a dollar amount cap. This ensures you stay in control of AI costs with clear confirmation before any overage charges apply:

    • Required spending limit confirmation when enabling overage
    • Support for fractional dollar amounts
    • Minimum $1 spending limit enforced

    Security improvements

    Multiple security enhancements from audit findings and vulnerability remediation:

    • Resolved Vanta-reported vulnerabilities across containers and infrastructure
    • Prevented leaking of internal configuration errors to clients
    • Added character limits and input validation on API endpoints
    • Pinned dependency versions for reproducible and secure builds

    Bug fixes

    Various bug fixes and stability improvements including:

    • Fixed synced connection reporting completion before all streams are processed
    • Fixed date formatting missing zero-padding for month and day
    • Fixed crash when the last user leaves a multiplayer room
    • Fixed formula and table reference bugs
    • Fixed formula editing autocomplete
    • Fixed multiple insert rows/columns
    • Fixed TEXT formula output
    • Fixed code cell borders not showing for cells with empty output
    • App now reloads gracefully on chunk load errors instead of showing a developer error page
    • Reverted to Vite 7 for improved build stability
  31. Mar 20, 2026
    v0.25.4

    Team invite links

    Team owners can now generate shareable invite links to onboard new members. Share a link and anyone with it can join your team directly, streamlining the team setup process:

    • Generate invite links from the Share dialog
    • New members join instantly via the link without manual approval
    • Links can be regenerated or disabled by team owners

    Deployment stability

    Improved application reliability after deployments:

    • Fixed stale asset 404 errors after deployment by preserving previous hashed chunks alongside new ones
    • Fixed chunk loading errors that could occur after version upgrades with automatic retry and cache-busting

    Plaid improvements

    Added min_last_updated filtering for Plaid balance queries, ensuring balance data freshness by filtering out stale account balances.

    Bug fixes

    Various bug fixes and stability improvements including:

    • Fixed cell fill color disappearing during inline editing
    • Fixed conditional formatting 'Add' button not responding when selection was unchanged
    • Fixed feedback submission for users without an email address
    • Fixed table name remaining visible when a data table converts to a single code cell output
  32. Mar 18, 2026
    v0.25.3

    AI improvements

    Several enhancements to the AI experience:

    • Default model now uses Opus for improved reasoning and code generation
    • Renamed 'Auto' to 'Default' in the model select menu for clarity
    • Fixed AI context: sheets containing only connections are no longer ignored
    • Improved AI tool behavior: code cells auto-run after edits, eliminating redundant rerun calls
    • Persistent context for better continuity across AI interactions

    Synced connections fix

    Fixed Parquet schema conflicts for synced connections. When synced connection data has mismatched column schemas across batches, the system now reconciles them automatically, preventing sync failures with complex data sources.

    Table improvements

    Several fixes to table behavior and UI:

    • Fixed table paste with expansion so pasted data correctly extends the table
    • Fixed 'Hide column' option incorrectly appearing for single-cell tables
    • Fixed inconsistent icons in the table context menu

    Bug fixes

    Various bug fixes and stability improvements including:

    • Fixed a bug where deleting one AI chat would delete all chats
    • Fixed STOCKHISTORY (Intrinio) errors returning 500 instead of proper 424 status
    • Fixed AI analytics event scoping for billing limits and paywall events
    • Set default on-demand usage limit for billing
    • Upgraded to Vite 8 for faster builds
  33. Mar 15, 2026
    v0.25.2

    Images

    Insert images directly into your spreadsheet. Drop image files onto the grid, paste from clipboard, or insert from URL:

    • Drag and drop image files directly onto the grid
    • Insert images from URLs with the new Insert Image from URL dialog
    • Resize images by dragging edges or corners
    • Move images by dragging after selecting
    • Right-click context menu for cut, copy, paste, rename, and delete
    • Large images auto-scale to fit within reasonable dimensions

    AI improvements

    Several enhancements to the AI experience:

    • New partial code editing: AI can now make targeted edits to existing code cells instead of rewriting entire cells
    • Chart inspection: AI automatically inspects chart outputs to improve quality
    • Context optimizations: Reduced unnecessary tool calls with better upfront context including sample data from all sheets and formula strings
    • Model updates: Auto model now uses Sonnet 4.6, GPT updated to 5.4
    • Prompt suggestions now appear inline in AI responses

    Bug fixes

    Various bug fixes and stability improvements including:

    • Fixed dark mode column headers display
    • Fixed SQL cloud connection issues with scheduled tasks
    • Fixed AI + STOCKHISTORY interaction bug
    • Fixed Excel export of single-cell formulas
    • Improved numerical value cursor visibility
  34. Mar 3, 2026
    v0.25.1

    QuickBooks connection

    Connect QuickBooks Online to sync your accounting data directly into Quadratic. Link your QuickBooks account via OAuth and query 28 entity types including invoices, customers, vendors, payments, and more:

    • Sync accounts, bills, customers, employees, invoices, items, payments, vendors, and more
    • Snapshot-based sync pulls current accounting data
    • OAuth flow for secure account linking

    Financial statements in Python

    Fetch standardized financial statements in Python using q.financial.financial_statements(). Query income statements, balance sheets, cash flow statements, and financial calculations by ticker symbol, fiscal year, and period:

    • Statement types: income statement, balance sheet, cash flow statement, calculations
    • Fiscal periods: FY, Q1–Q4, TTM, and YTD variants
    • Returns a DataFrame with tag, name, balance, unit, and value columns
    • Updated Python type hints for better autocomplete in the code editor

    Restore sheet state

    A new setting lets you restore your sheet view when reopening files. When enabled, Quadratic saves your current sheet, cursor position, and viewport locally so you can pick up exactly where you left off. Enable it in General Settings under "Restore sheet when reopening files."

    Invoice history

    Team billing settings now display your Stripe invoice history and upcoming invoices. View past invoices with dates, amounts, and payment status, download invoice PDFs, and cancel scheduled plan downgrades directly from the billing UI.

    Table improvements

    Several improvements to data tables:

    • Fixed text clipping at table boundaries for cleaner layouts
    • Fixed first column display bugs
    • Fixed rich text rendering in data tables
    • Improved autocomplete behavior with table names and columns
    • Added menu option for data validations
    • Auto-recovery from mismatched column types during sync

    Bug fixes

    Various bug fixes and stability improvements including:

    • Increased AI Analyst tool call limit for complex tasks
    • Added retry with exponential backoff for AI rate limit errors
    • Fixed WASM out-of-bounds table access errors
    • Guarded WebSocket sends to prevent InvalidStateError spam
    • Filtered WorkOS auth noise from Sentry error reporting
    • Fixed auth logout errors
    • Fixed API-related unnecessary re-renders
    • Fixed graph rendering for multiple users
    • Fixed subscription downgrade and invoice display bugs
  35. Feb 26, 2026
    v0.25.0

    Business plan

    We've introduced a new Business plan tier with enhanced features for teams. The billing UI has been redesigned with clearer plan comparisons and improved subscription management:

    • New Business tier with expanded capabilities
    • Redesigned billing cards and plan selection
    • Educational users now have no file limits
    • Subscription reactivation support

    STOCKHISTORY formula

    Introducing the STOCKHISTORY formula for fetching historical stock price data directly in your spreadsheet. Query stock prices by ticker symbol and date range to build financial models and track market performance:

    • Fetch historical open, high, low, close, and volume data
    • Specify date ranges for custom time periods
    • Powered by Intrinio for reliable financial data

    Google Analytics OAuth

    Google Analytics connections now use a streamlined OAuth flow. Connect your Google Analytics account with proper token refresh handling for more reliable data syncing.

    Excel rich text import/export

    Excel imports and exports now preserve rich text formatting including bold, italic, underline, and strikethrough. Color tints are also supported, making it easier to work with formatted Excel files.

    AI model upgrade: Sonnet 4.6

    The default thinking model has been upgraded to Claude Sonnet 4.6, bringing improved reasoning capabilities. AI models now display helpful descriptions so you can choose the best model for your task:

    • Sonnet 4.6: Excellent balance of speed and intelligence
    • Opus 4.6: Most capable model for complex reasoning
    • Haiku 4.5: Fast and efficient for simple tasks

    Connections UI improvements

    The in-app connections experience has been improved with a cleaner UI, better form layouts, and inline help text. Connection setup is now more intuitive with field-level guidance.

    Bug fixes

    Various bug fixes and stability improvements including:

    • Added error boundaries to prevent cascading crashes
    • Fixed OpenAI API bugs and improved error handling
    • Fixed merge cell client warnings
    • Fixed onboarding login and signup issues
    • Fixed AI conditional formatting Zod schema issues
    • Fixed command palette bugs
    • Improved AI message validation before sending to providers
  36. Feb 17, 2026
    v0.24.0

    Merge cells

    You can now merge cells in Quadratic. Select multiple cells and merge them into a single cell to create cleaner layouts and organize your data more effectively. Merge cells work seamlessly with existing features:

    • Insert and delete rows/columns correctly update merged regions
    • Merged cells move properly when moved alone or with other content
    • Full support for conditional formatting and table sorting with merged cells

    Conditional formatting

    Conditional formatting lets you automatically style cells based on their values. Highlight important data, visualize trends, and spot outliers at a glance:

    • Apply rules based on cell values, text, or custom formulas
    • Color scales and gradients to visualize numeric ranges
    • Works with tables, merged cells, and sorted data
    • AI can create and manage conditional formatting rules for you

    Complex formula support

    The formula parser now correctly handles deeply nested formulas, including complex nested IF statements that previously failed with a "formula too complex" error. You can use more elaborate formulas without hitting parsing limits.

    Plaid connection improvements

    Several enhancements to the Plaid connection experience:

    • Extended data window to 2 years when linking accounts
    • Additional tables: balances and liabilities with date support
    • Flattened timeseries data for easier analysis
    • AI receives Plaid-specific context when you ask about a Plaid connection's schema
    • Separate options and flows for Banks, Brokerages, and Credit Cards

    Connections UI and IP allow-list

    Connections list and sidebar have been improved with clearer layout and language. The connections sidebar now correctly shows the IP allow-list section when setting up database connections, so you can copy Quadratic's IPs to add to your network allow-list.

    Faster paste with code cells

    Pasting many code cells at once is now faster. The compute queue is pre-populated during paste, avoiding an expensive full-queue reorder and making bulk paste of code cells more responsive.

    Stripe subscription fix

    Fixed an issue where checkout could create duplicate Stripe subscriptions. The checkout endpoint now prevents duplicate subscriptions from being created in the first place.

    Rust 1.91

    Quadratic's Rust codebase has been updated to use Rust 1.91.0.

    Bug fixes

    Various bug fixes and stability improvements including:

    • Fixed "Format cells if..." not properly scrolling into view
    • Fixed COL/ROW not retriggering and Cmd+Enter not executing formulas in some cases
    • Fixed AI pane showing when it shouldn't
    • Improved formula performance with large numbers of formulas
    • One failing connection no longer blocks other connections from processing
    • Fixed Docker WASM builds (getrandom/uuid compatibility)
    • Conditional formatting now updates correctly when sorting tables
  37. Feb 11, 2026
    v0.23.11

    AI model upgrade: Opus 4.6

    The Auto AI model setting now uses Opus 4.6, delivering improved reasoning and code generation capabilities for a better AI-assisted spreadsheet experience.

    Move multiple tables

    You can now select and move multiple tables at once. This makes reorganizing your spreadsheet layout faster and easier, with proper handling of overlapping table positions.

    Excel named ranges support

    Excel imports now properly decode named ranges to A1 notation, improving compatibility when importing complex Excel files that use named ranges.

    AI error handling improvements

    Several improvements to AI reliability and error handling:

    • Buffered AI responses for smoother streaming and reduced parsing errors
    • Clear error message and new chat button when context length is exceeded
    • Dedicated error messaging for out-of-memory situations
    • Fixed AI suggestion crashes and safeguarded the formatting bar
    • Fixed AI response parsing errors

    Bug fixes

    Various bug fixes and stability improvements including:

    • Fixed floating table headers showing improperly on copy as PNG
    • Fixed share dialog triggering a page reload
    • Fixed scheduled task error handling
    • Improved performance for very large tables by optimizing content cache
    • Fixed sheet-not-found errors during navigation
    • Fixed N+1 query issue in Connections API calls
    • Fixed display buffer inconsistencies with column data
  38. Feb 5, 2026
    v0.23.10

    Agent mode

    Introducing Agent mode—a new way to interact with AI in Quadratic. Agent mode provides an enhanced, focused experience for working with your data:

    • Expanded chat interface with contextual suggestions
    • Smart file import suggestions when dragging files
    • Improved connection schema browsing
    • Toggle between Agent mode and standard mode from the top bar

    Move files between teams

    You can now move files between your personal space and team folders directly from within the spreadsheet. Access this feature from the File menu or the file name dropdown in the top bar.

    Excel font size support

    We've upgraded our Excel import/export capabilities to include font size support. Font sizes from Excel files are now preserved on import, and your font sizes will be exported when saving to Excel format.

    Connections improvements

    Several improvements to the connections experience:

    • Simplified workflow for creating new connections
    • Focus automatically shifts to chat when adding a connection
    • Added "Learn more" documentation links for connection setup
    • Improved visibility and UI for connection options

    Bug fixes

    Various bug fixes and improvements including:

    • Fixed hyperlink editing when the inline editor is open
    • Fixed a filter bug in cell type menu
    • Fixed alignment and styling issues
  39. Jan 30, 2026
    v0.23.9

    Feature walkthrough for new users

    New users are now greeted with an interactive walkthrough that highlights key Quadratic features:

    • The infinite canvas with pinch-to-zoom navigation
    • External data connections for live dashboards
    • Scheduled tasks for automatic updates
    • AI-powered assistance for building formulas and workflows

    The walkthrough can be skipped at any time and is disabled on mobile devices.

    Free team file limits

    Free teams can now edit up to 5 files. Files beyond this limit become read-only with an option to upgrade. A banner is displayed when the limit is exceeded, and individual files show an "Upgrade to edit" prompt.

    AI thinking improvements

    We've simplified the AI thinking UI to provide a cleaner, more streamlined experience when the AI is reasoning through your requests.

    Bug fixes

    Various bug fixes and improvements including:

    • Fixed an issue where inactive or archived connections were still being processed
    • Improved build performance for faster deployments
  40. Jan 28, 2026
    v0.23.8

    Streamlined onboarding

    New users are now taken directly to create their first file after completing onboarding, making it faster to get started with Quadratic.

    Synced connections improvements

    We've made several improvements to synced connections:

    • Added semantic layers support for Google Analytics, Mixpanel, and Plaid connections
    • Improved sync status display in the code editor
    • Simplified sync state UI with better error messaging
    • Better handling of synced connection errors

    JavaScript autocomplete enhancement

    Improved JavaScript autocomplete so that (await q.cells()) now properly supports dot notation for method chaining.

    Bug fixes

    Various bug fixes and improvements including:

    • Fixed hyperlink popup positioning issues
    • Fixed template display bug and user filter in dashboard
    • Fixed bug with improperly deleting tables after spills
    • Fixed favicons in QA environment
    • Updated Plaid connection branding from Coinbase to Fidelity

Monthly deep dives

Longer write-ups on the releases behind the highlights above.

Quadratic logo

Get started for free

The AI Spreadsheet built for speed, clarity, and instant insights — without the pain.

Try Quadratic free