Current release

Download Cassava

Get the latest macOS build and review recent fixes, improvements, and βeta releases.

Cassava v0.0.1-rc20

Version 0.0.1-rc20 macOS 13+

Evaluate Cassava for free. If it becomes part of your workflow, please purchase a license.

Changelog

Recent changes, newest first.

Cassava v0.0.1-rc20

Download

Bug Fixes

  • update to sign local macos builds correctly
  • io: strip leading UTF-8 BOM from first CSV cell
  • filter: reject non-finite numbers when parsing
  • expr: parse CSV-formatted numbers in cell references
  • search: preserve $$ literal-dollar escape in regex replacement
  • format: harden numeric formatting for large and tiny values
  • chart: show one pie slice per label instead of per series
  • chart: log corrupt chart definitions instead of skipping silently
  • analysis: order empty-value row after real values on count ties
  • grid: avoid NaN panic in column scroll math
  • grid: make compare_cell_values a total order
  • grid: stop scroll-snap from overscrolling past content
  • chart: note unmatched rows in cross-document join
  • chart: give None-aggregate series a non-blank name
  • document: keep manual sizes aligned across structural undo/redo
  • grid: type shifted characters when starting a cell edit
  • status: pluralize row/column/cell/value counts
  • clipboard: make copy/paste status reflect what happened
  • grid: polish keyboard navigation (Escape, Cmd+Home/End, F2)
  • grid: edit the clicked cell on double-click without altering selection
  • grid: cmd-click a selected header to deselect it
  • fix failing test
  • sql: collision-safe table names, per-frame copy, unique catalog
  • sql: reliably autofocus the editor on panel open
  • sql: load non-UTF-8 CSVs instead of erroring
  • sql: transcode non-UTF-8 CSVs to a UTF-8 temp copy
  • sql: keep queryable-tables list in sync as sheets open/close
  • sql: non-blocking per-file loads, read-only queries, Enter to run
  • sql: address code-review findings on the query panel
  • selection: keep active outline beneath frozen panes
  • find: clarify current-file search state
  • find: apply large-file search policy at the shared chokepoint
  • selection: split overlay layers across the frozen-cells boundary
  • goto: support range references in the go-to-cell overlay
  • function-bar: stop blur handler from fighting focus-region navigation
  • search: preserve semantic replace formatting
  • pivot: address review — capped allocation, durable paths, key escaping
  • ui: secondary button hover contrast; range-capture mode affordances
  • grid: stop secondary jumps at frozen panes
  • pivot: fixed two-decimal money format; custom value names
  • ui: stop simple-grid frame doubling panel chrome borders
  • ui: content-bounded simple-grid frame; pad the pivot result grid
  • pivot: reset relink state whenever a pivot model is applied
  • pivot: clear the configured range when switching source documents
  • header-freeze: apply initial freeze consistently
  • close correctness gaps found in a code-quality audit
  • settings: pin search box above scrollable results, fixing a collapse
  • render: request a follow-up frame when any grid's scroll bounds are unmeasured
  • ci: stabilize bundled DuckDB builds
  • release: handle empty feature matrix entry

Documentation

  • todo: note find-all panel render performance with many results
  • update ISSUES.md and PRD status for v1 accessibility/automation work
  • pivot: mark PIVOTS.md implemented; fix clippy redundant guard
  • defer execute_command_palette_action decomposition to Section 4

Features

  • update to generate appcast with multiple platform support
  • update to generate appcast with multiple platform support
  • workspace: add shared bottom panel shell for SQL
  • sql: add query runner panel with DuckDB results
  • sql: cap preview rendering for wide results
  • sql: open query results as a new sheet
  • sql: add highlighted editor keyboard shortcuts
  • sql: polish query panel layout and copy
  • sql: make the SQL panel resizable
  • sql: query JSON and never-saved sheets (Phase 1)
  • sql: gate in-memory sheet re-staging on Arc identity (Phase 2)
  • sql: surface in-memory sheets in the panel (Phase 3)
  • sql: make the open-tables panel scrollable, copyable, clickable
  • sql: add gated performance logging for load/query/render
  • sql: show a per-table loading indicator while sheets import
  • panels: refactor find panel to behave more like our other panels, add sql to footer
  • sql: add stop button to cancel long-running sql queries
  • perf: improve loading/unloading window performance
  • ux: improve toggle button state clarity for open panels
  • a11y: add focus region commands
  • a11y: add focus region traversal
  • ui: add first-party button component
  • a11y: expose shell accessibility metadata
  • a11y: expose grid accessibility snapshot
  • find: make find-in-all-files results keyboard-navigable
  • commands: expose cell formats through the command palette
  • ui: add first-party toggle component
  • panels: unify right/bottom panel lifecycle and add per-panel focus commands
  • xtask: add demos compile command to validate AppleScript demos
  • update search results to include frozen headers
  • search: match formatted numbers in find
  • search: add value-aware find toggle
  • search: preserve formats during replace
  • pivot: composite-key grouping and pure pivot materialization
  • pivot: editable model, persistence, store, and source resolver
  • grid: selection → GridRangeRef conversion for range capture
  • pivot: pivot table panel with live cached results
  • pivot: charts-style lifecycle — multiple pivots, save/load, relink
  • pivot: Open as CSV export of the materialized table
  • pivot: resolve saved pivots as templates with a source hint
  • pivot: explicit whole-file / range scope toggle
  • clean up footer contents
  • go to cell buffer now tries to locate the traveled-to cell in a nicer location
  • pivot: per-value display formats (Auto/Number/Money/Percent)
  • icons: update icons in find panel
  • intelligently freeze inferred header rows
  • grid: add rainbow mode accessibility setting
  • cli: add shell launcher and stdin support
  • release: gate local releases before publishing

Performance

  • sql: load only the tables a query references
  • find: virtualize all-open results and debounce large-file current-file search
  • find: O(1) large-file gate and drop dead clones in live search
  • pivot: stop redundant row/col and range-column recompute
  • grid: avoid full-grid clones on shuffle/fill/sort hot paths
  • ci: use prebuilt DuckDB for checks
  • release: vendor prebuilt DuckDB libraries

Refactoring

  • licensing: extract and document fail-open revocation
  • ui: group panels into a coherent self-contained layout
  • ui: thin out shell.rs action wiring and reuse Kbd
  • ui: relocate misplaced modules out of src/ui top level
  • promote the Workspace view out of src/ui/ into src/workspace/
  • workspace: split the 1619-line types.rs into a types/ module
  • ui: split virtual simple grid by axis
  • sql: move workspace queries onto DuckDB file catalog
  • sql: drop dead metrics, share one connection per run
  • sql: align query panel layout with find panel
  • panels: group resizable bottom-panel sizes into a struct
  • sql: derive panel state and split helpers
  • grid: unify simple grids into one bidirectional component
  • grid: single-source the scrollbar thickness across grids
  • ui: name button click handler type
  • find: move find options to Toggle controls, dedupe result navigation
  • grid: share sign-handling logic across money formatters
  • search: share percent scaling, drop redundant round
  • chart: extract generic OpenItemCollection from ChartWorkspace
  • data: shared column-ref and range-bounds homes
  • pivot: value formats reuse the grid's CellFormat machinery
  • grid: reuse mix() for rainbow tint, drop redundant text_color param
  • grid: unify row/column axis logic behind a shared LineAxis
  • dedupe chart/pivot stores, open-item lifecycle, Button/Toggle, atomic writes
  • data: share whole-number and boolean-literal checks
  • data: wrap GridAddressParseError instead of flattening it
  • workspace: macro-collapse palette-only Action impls
  • workspace: collapse SwitchTab1..9 into one indexed action
  • pivot: extract shared value-cell loops in pivot_table_to_rows
  • logging: collapse Profile::start()/log() triplets with timed()
  • dedupe hit-test predicate, pluralization, and pivot field resolution
  • fix inspect()-as-counter and add JSON cell inference fast-path
  • pivot: decompose materialize_pivot into named helpers
  • io: extract open_reader/read_rows_with_progress/strip_leading_bom
  • workspace: split command_palette_items_for into per-category functions
  • workspace: decompose spawn_active_doc_save
  • workspace: extract escape-collapse and start-typing-to-edit
  • ui: decompose render_virtual_simple_grid along its comment boundaries
  • chart: decompose materialize_chart_preview_data_with_policy
  • grid: extract split_rect_excluding from toggle_cell
  • document: extract manual-size shift/delete primitives
  • document: extract set_dimension from set_col_width/set_row_height

Style

  • panels: normalize chart/pivot panel UX
  • rustfmt
  • rustfmt + fix clippy lints

Testing

  • data: cover money and thousands-separator parser edge cases
  • grid: declare reorder drop-boundary invariants and cover helpers
  • grid: cover toggle_cell rectangle decomposition
  • grid: assert finite-input invariant for selection aggregates
  • search: assert centered_window invariants
  • json: characterize numeric round-trip and type inference
  • csv: cover delimiter detection
  • aggregate: assert finite-input invariant for percentile and median
  • workspace: assert persisted rows and journal are mutually exclusive
  • chart: cover suggest_chart_config edge cases
  • data: cover aggregate_group out-of-range indices
  • grid: add co-located hit_test_grid_cell coverage
  • data: pin US-first parsing of ambiguous slash dates
  • grid: assert render_plan column-geometry subset invariant

Cassava v0.0.1-rc20

Download

Bug Fixes

  • update to sign local macos builds correctly
  • io: strip leading UTF-8 BOM from first CSV cell
  • filter: reject non-finite numbers when parsing
  • expr: parse CSV-formatted numbers in cell references
  • search: preserve $$ literal-dollar escape in regex replacement
  • format: harden numeric formatting for large and tiny values
  • chart: show one pie slice per label instead of per series
  • chart: log corrupt chart definitions instead of skipping silently
  • analysis: order empty-value row after real values on count ties
  • grid: avoid NaN panic in column scroll math
  • grid: make compare_cell_values a total order
  • grid: stop scroll-snap from overscrolling past content
  • chart: note unmatched rows in cross-document join
  • chart: give None-aggregate series a non-blank name
  • document: keep manual sizes aligned across structural undo/redo
  • grid: type shifted characters when starting a cell edit
  • status: pluralize row/column/cell/value counts
  • clipboard: make copy/paste status reflect what happened
  • grid: polish keyboard navigation (Escape, Cmd+Home/End, F2)
  • grid: edit the clicked cell on double-click without altering selection
  • grid: cmd-click a selected header to deselect it
  • fix failing test
  • sql: collision-safe table names, per-frame copy, unique catalog
  • sql: reliably autofocus the editor on panel open
  • sql: load non-UTF-8 CSVs instead of erroring
  • sql: transcode non-UTF-8 CSVs to a UTF-8 temp copy
  • sql: keep queryable-tables list in sync as sheets open/close
  • sql: non-blocking per-file loads, read-only queries, Enter to run
  • sql: address code-review findings on the query panel
  • selection: keep active outline beneath frozen panes
  • find: clarify current-file search state
  • find: apply large-file search policy at the shared chokepoint
  • selection: split overlay layers across the frozen-cells boundary
  • goto: support range references in the go-to-cell overlay
  • function-bar: stop blur handler from fighting focus-region navigation
  • search: preserve semantic replace formatting
  • pivot: address review — capped allocation, durable paths, key escaping
  • ui: secondary button hover contrast; range-capture mode affordances
  • grid: stop secondary jumps at frozen panes
  • pivot: fixed two-decimal money format; custom value names
  • ui: stop simple-grid frame doubling panel chrome borders
  • ui: content-bounded simple-grid frame; pad the pivot result grid
  • pivot: reset relink state whenever a pivot model is applied
  • pivot: clear the configured range when switching source documents
  • header-freeze: apply initial freeze consistently
  • close correctness gaps found in a code-quality audit
  • settings: pin search box above scrollable results, fixing a collapse
  • render: request a follow-up frame when any grid's scroll bounds are unmeasured
  • ci: stabilize bundled DuckDB builds
  • release: handle empty feature matrix entry

Documentation

  • todo: note find-all panel render performance with many results
  • update ISSUES.md and PRD status for v1 accessibility/automation work
  • pivot: mark PIVOTS.md implemented; fix clippy redundant guard
  • defer execute_command_palette_action decomposition to Section 4

Features

  • update to generate appcast with multiple platform support
  • update to generate appcast with multiple platform support
  • workspace: add shared bottom panel shell for SQL
  • sql: add query runner panel with DuckDB results
  • sql: cap preview rendering for wide results
  • sql: open query results as a new sheet
  • sql: add highlighted editor keyboard shortcuts
  • sql: polish query panel layout and copy
  • sql: make the SQL panel resizable
  • sql: query JSON and never-saved sheets (Phase 1)
  • sql: gate in-memory sheet re-staging on Arc identity (Phase 2)
  • sql: surface in-memory sheets in the panel (Phase 3)
  • sql: make the open-tables panel scrollable, copyable, clickable
  • sql: add gated performance logging for load/query/render
  • sql: show a per-table loading indicator while sheets import
  • panels: refactor find panel to behave more like our other panels, add sql to footer
  • sql: add stop button to cancel long-running sql queries
  • perf: improve loading/unloading window performance
  • ux: improve toggle button state clarity for open panels
  • a11y: add focus region commands
  • a11y: add focus region traversal
  • ui: add first-party button component
  • a11y: expose shell accessibility metadata
  • a11y: expose grid accessibility snapshot
  • find: make find-in-all-files results keyboard-navigable
  • commands: expose cell formats through the command palette
  • ui: add first-party toggle component
  • panels: unify right/bottom panel lifecycle and add per-panel focus commands
  • xtask: add demos compile command to validate AppleScript demos
  • update search results to include frozen headers
  • search: match formatted numbers in find
  • search: add value-aware find toggle
  • search: preserve formats during replace
  • pivot: composite-key grouping and pure pivot materialization
  • pivot: editable model, persistence, store, and source resolver
  • grid: selection → GridRangeRef conversion for range capture
  • pivot: pivot table panel with live cached results
  • pivot: charts-style lifecycle — multiple pivots, save/load, relink
  • pivot: Open as CSV export of the materialized table
  • pivot: resolve saved pivots as templates with a source hint
  • pivot: explicit whole-file / range scope toggle
  • clean up footer contents
  • go to cell buffer now tries to locate the traveled-to cell in a nicer location
  • pivot: per-value display formats (Auto/Number/Money/Percent)
  • icons: update icons in find panel
  • intelligently freeze inferred header rows
  • grid: add rainbow mode accessibility setting
  • cli: add shell launcher and stdin support
  • release: gate local releases before publishing

Performance

  • sql: load only the tables a query references
  • find: virtualize all-open results and debounce large-file current-file search
  • find: O(1) large-file gate and drop dead clones in live search
  • pivot: stop redundant row/col and range-column recompute
  • grid: avoid full-grid clones on shuffle/fill/sort hot paths
  • ci: use prebuilt DuckDB for checks
  • release: vendor prebuilt DuckDB libraries

Refactoring

  • licensing: extract and document fail-open revocation
  • ui: group panels into a coherent self-contained layout
  • ui: thin out shell.rs action wiring and reuse Kbd
  • ui: relocate misplaced modules out of src/ui top level
  • promote the Workspace view out of src/ui/ into src/workspace/
  • workspace: split the 1619-line types.rs into a types/ module
  • ui: split virtual simple grid by axis
  • sql: move workspace queries onto DuckDB file catalog
  • sql: drop dead metrics, share one connection per run
  • sql: align query panel layout with find panel
  • panels: group resizable bottom-panel sizes into a struct
  • sql: derive panel state and split helpers
  • grid: unify simple grids into one bidirectional component
  • grid: single-source the scrollbar thickness across grids
  • ui: name button click handler type
  • find: move find options to Toggle controls, dedupe result navigation
  • grid: share sign-handling logic across money formatters
  • search: share percent scaling, drop redundant round
  • chart: extract generic OpenItemCollection from ChartWorkspace
  • data: shared column-ref and range-bounds homes
  • pivot: value formats reuse the grid's CellFormat machinery
  • grid: reuse mix() for rainbow tint, drop redundant text_color param
  • grid: unify row/column axis logic behind a shared LineAxis
  • dedupe chart/pivot stores, open-item lifecycle, Button/Toggle, atomic writes
  • data: share whole-number and boolean-literal checks
  • data: wrap GridAddressParseError instead of flattening it
  • workspace: macro-collapse palette-only Action impls
  • workspace: collapse SwitchTab1..9 into one indexed action
  • pivot: extract shared value-cell loops in pivot_table_to_rows
  • logging: collapse Profile::start()/log() triplets with timed()
  • dedupe hit-test predicate, pluralization, and pivot field resolution
  • fix inspect()-as-counter and add JSON cell inference fast-path
  • pivot: decompose materialize_pivot into named helpers
  • io: extract open_reader/read_rows_with_progress/strip_leading_bom
  • workspace: split command_palette_items_for into per-category functions
  • workspace: decompose spawn_active_doc_save
  • workspace: extract escape-collapse and start-typing-to-edit
  • ui: decompose render_virtual_simple_grid along its comment boundaries
  • chart: decompose materialize_chart_preview_data_with_policy
  • grid: extract split_rect_excluding from toggle_cell
  • document: extract manual-size shift/delete primitives
  • document: extract set_dimension from set_col_width/set_row_height

Style

  • panels: normalize chart/pivot panel UX
  • rustfmt
  • rustfmt + fix clippy lints

Testing

  • data: cover money and thousands-separator parser edge cases
  • grid: declare reorder drop-boundary invariants and cover helpers
  • grid: cover toggle_cell rectangle decomposition
  • grid: assert finite-input invariant for selection aggregates
  • search: assert centered_window invariants
  • json: characterize numeric round-trip and type inference
  • csv: cover delimiter detection
  • aggregate: assert finite-input invariant for percentile and median
  • workspace: assert persisted rows and journal are mutually exclusive
  • chart: cover suggest_chart_config edge cases
  • data: cover aggregate_group out-of-range indices
  • grid: add co-located hit_test_grid_cell coverage
  • data: pin US-first parsing of ambiguous slash dates
  • grid: assert render_plan column-geometry subset invariant

Cassava v0.0.1-rc18

Download

Bug Fixes

  • grid: improve column width calculations

Features

  • updates: improve UX of update notification bar
  • licensing: add licensing integration
  • licensing: add license management surfaces
  • licenses: refactor to support cross-platform open link

Cassava v0.0.1-rc17

Download

Bug Fixes

  • updates: fix release notes for more readability

Features

  • perf: increase overscan slightly to avoid flash of white

Performance

  • render: summarize grid render profiling
  • render: reduce grid scroll overhead

Refactoring

  • grid: extract cell render planner

Cassava v0.0.1-rc16

Download

Bug Fixes

  • analysis: parse money, percent, and thousands-separated values in statistics
  • analysis: align pinned label column with scrolled grid and stop borders overhanging
  • analysis: section separators, anchored In/Out toolbar, tighter padding
  • analysis: clarify filtering actions and percentiles
  • analysis: use checkbox component for value selection
  • deps: pin gpui to component zed revision

Documentation

  • analysis: add file analysis panel design document

Features

  • analysis: add per-column statistics, attributes, and unique-value computation
  • filter: synthesize value-set filters from selected values
  • analysis: add file analysis sidebar panel
  • analysis: collapsible sections, virtualized grids, and UX cleanups
  • add percentile aggregators
  • add zebra stripe settings
  • settings: add settings sidebar panel
  • settings: refactor after code review for consistency
  • settings: add toggle to titlebar
  • settings: fix grid scaling on font size changes
  • settings: add settings for minimum number of rows/cols, number of padding rows/cols
  • settings: add setting for default number of frozen rows/cols
  • settings: add settings for column widths
  • settings: add support for removing trailing empty rows/cols on save, snapping to row/col on scroll, case sensitive sorting, and saving with trailing delims
  • settings: add support for settings for active row/col highlight, representing cols as numerical index, fix percent parsing for agg functions

Performance

  • analysis: share rows via Arc instead of cloning on the main thread
  • analysis: single parallel table scan instead of one pass per column
  • analysis: compute visible columns on demand

Refactoring

  • ui: extract loading_state component and add SimpleGrid row selection
  • ui: split app render panels

Cassava v0.0.1-rc15

Download

Performance

  • save: avoid main-thread stalls during csv saves

Cassava v0.0.1-rc14

Download

Bug Fixes

  • lint: resolve all clippy warnings
  • charts: fix clippy warnings
  • charts: fix two remaining stale cache issues
  • charts: fix layout issue preventing find panel and chart panel from being open at the same time
  • apply upstream zed gpui_platform patches

Documentation

  • record chart review findings and architecture decisions
  • pivot: add pivots PRD and technical design

Features

  • chart: phase 6 — ValidatedChartSettings and typed validation errors
  • chart: phase 7 — rendering/export adapter
  • charts: add additional render settings for charts
  • support window drag in titlebar
  • chart: add workspace chart collection
  • chart: add lifecycle controls and relinking
  • chart: add chart variants and display controls
  • charts: clean up known issues after chart feature implementation
  • data: shared grouping engine, forgiving value parsing, chrono dates
  • charts: clean up UX around managing open charts
  • charts: update iconography for saved/unsaved charts

Performance

  • grid: make bulk delete O(moves) via range-based ClearCells op
  • save: atomic background saves with profiling

Refactoring

  • chart: complete phase 5 — source resolver, async materialize, fix cache bugs
  • chart: collapse duplicate models onto the shared data foundation
  • charts: clean up charts panel UI rendering, normalize components
  • logging: centralize debug/profiling logging into src/logging.rs