Skip to content

Table View

The Table view is Octa's default for almost every format: Parquet, CSV, SQLite, Excel, you name it. It's a spreadsheet-like virtual renderer that streams large files smoothly and supports inline editing, multi-cell selection, sorting, filtering, and clipboard operations.

Table view

  • Arrow keys move the selected cell.
  • Scroll wheel scrolls vertically. Shift+Scroll wheel scrolls horizontally.
  • Ctrl+Shift+Up / Down jumps the selection to the first / last row of the column.
  • Ctrl+Shift+Left / Right jumps to the first / last column.
  • Ctrl+G (GoToCell) focuses the navigation field in the status bar. Type R5:C3 to jump to a cell, R5 to jump to a row, C3 for a column, or a column name (e.g. created_at) to jump to that column's first cell.

Selection

  • Click a cell to select just that cell.
  • Ctrl+click a cell to toggle it in a disjoint multi-cell selection. The first toggle promotes whatever cell was already selected into the set, so a single click + a few Ctrl+clicks builds an arbitrary cell selection without dragging.
  • Click a row number (grey column on the left) to select the entire row. Ctrl+click adds rows to the selection; Shift+click picks a contiguous range.
  • Click a column header to select the entire column. The same Ctrl / Shift modifiers extend / range-select columns.
  • Ctrl+A selects all rows (when no text editor is focused).
  • Ctrl+Up / Down (and Ctrl+Left / Right) extend the selection by one row/column from the current anchor.
  • Ctrl+PgUp / Ctrl+PgDn scroll the table by one viewport and advance the selected cell by the same number of rows (spreadsheet-style page navigation).

The active selection drives clipboard operations: Ctrl+C copies whatever is selected (single cell, multi-row block, multi-column block, or a free multi-cell selection) as tab-separated values.

To copy the same selection as a GitHub-flavoured Markdown table instead, including the column headers, use Edit -> Copy as Markdown table or the Copy as Markdown table entry in the cell / row right-click menu. Pipe characters and line breaks in cell values are escaped so the table stays well-formed. This is handy for pasting a slice of data straight into a pull request, issue, or Markdown doc.

Sorting

Click a column header to sort by that column ascending. Click again for descending. Click a third time to clear the sort.

The sort indicator (▲ / ▼) appears next to the column name. Sorting is applied to the filtered view, so searching first and then sorting works as you'd expect.

Sort by several columns

For a multi-level sort, open Data -> Sort by columns.... The dialog holds an ordered list of sort keys, each a column and a direction (ascending or descending). The first key is the primary sort; later keys break ties. Use the ^ / v buttons to reorder the keys, Add column for another key, and x to remove one. Apply sorts the table in place.

Resizing columns

  • Drag the right edge of a column header to resize it. Minimum width is 60 px; no upper limit.
  • Double-click the seam between two column headers to auto-fit the left column to its widest visible value (header included).
  • Ctrl+Shift+W (remappable) fits every column to its content.

Best-fit measures up to 5,000 sample rows so it stays snappy on multi-million-row tables.

Reordering columns

Drag a column header sideways to reorder. The cursor changes to a hand when you're over a draggable region; a drop indicator shows where the column will land.

To rename a column, double-click its header. Right-click a header for the data-type submenu (Int64 / Float64 / Utf8 / etc.), which re-types the column in place, with values that can't convert becoming nulls.

Editing cells

Double-click a cell to enter edit mode. The current text is selected so you can type to replace, or click to position the cursor. Confirm with Tab / Enter; cancel with Escape. Values parse based on the column's declared type:

For a non-trivial number of edits, see the dedicated Editing page which covers row/column structural operations, undo / redo, and the edit overlay.

Number display (separators and rounding)

Numeric columns (Int*, Float*) render with thousand separators by default, e.g. 1,234,567.89. This is a display-only convenience: saved and exported files, the CLI, and the MCP server always carry the raw values. Turn it off, or switch between English (1,234.56) and European (1.234,56) grouping, under Settings -> Table View (Thousand separators and Number style).

For a per-column rounding format, right-click a numeric column header and pick Number format... (also available as Columns -> Number format... for the selected column). The dialog applies changes live as you edit (no Apply step), and is movable and resizable. Choose:

  • Decimals - type a number, or leave empty for Auto (natural precision). A positive count fixes the digits after the decimal point and pads with trailing zeros (so 2.5 shows as 2.50 at two decimals). A negative count rounds before the decimal point, e.g. -2 rounds to the nearest 100.
  • Rounding - Normal (round half away from zero), Up (toward positive infinity), or Down (toward negative infinity).
  • Apply to columns - a checklist of every numeric column lets one format configuration round several columns at once. Selecting multiple columns before opening the dialog pre-checks them; All / None toggle the whole list. Unchecking a column drops its format. Drag the dialog taller to see more columns at a time.

Number formats are display-only and per tab (session-only). When you Save a tab that has a rounding format, Octa asks whether the file should carry the rounded values or the full-precision originals - see Saving.

Lazy row loading (large files)

For streaming formats (Parquet, CSV, TSV), Octa loads the first 5,000,000 rows at open and keeps loading the rest in the background as you scroll. The status bar shows a busy spinner during background load.

The 5 M default is the initial-load row cap, configurable under Settings → Performance → Initial-load row cap. Raising it improves first-paint completeness on giant files at the cost of more memory; lowering it makes the initial open faster. Tick the Unlimited checkbox next to the input to load every row up front (recommended only when you have RAM to spare).

Parquet files with very many row groups (> 32,767) fall back to a DuckDB-backed reader automatically, so they open without manual recompaction.

Files smaller than the cap load entirely on first open, with no streaming.

Read-only mode

F8 (ToggleReadOnly) toggles a session-only read-only mode that disables every editing path (cell edits, structural changes, marks, undo/redo, raw text editor). Useful when you're poking around a file you don't want to accidentally modify. The status bar shows a [Read-only] pill when active.

A one-shot notice explains the mode the first time you toggle it; suppress with Settings → File-Specific → Read-only mode notice.

Right-click context menu

Right-click anywhere on the table for context-aware actions:

  • On a cell: Copy, Mark, Parse in new tab, Insert / Delete row / column, etc.
  • On a row number: Copy row, Mark row, Delete row, Insert row, Move row.
  • On a column header: Copy column, Mark column, Rename, Change Type, Delete column, Move column, Hide column, Copy column name(s), Filter values..., Value frequency..., and Number format... (numeric columns only).

Selection stats

Selecting more than one cell adds a pill to the right side of the status bar summarising the selection:

  • For numeric selections: Count, Sum, Avg, Min, Max.
  • For mixed or non-numeric selections: just Count.

The selection sources fall through in the same order Ctrl+C uses: multi-cell (Ctrl+Arrow) first, then row selections, then column selections. A single-cell selection keeps the existing Cell / Type info pill instead.

Freeze columns

Right-click a column header and pick Freeze columns up to here to pin that column and every column left of it, exactly like freezing panes in a spreadsheet. The pinned columns stay visible at the left edge while the rest of the table scrolls horizontally underneath, so an ID or name column never scrolls out of sight in a wide table. A thin separator marks the boundary; Unfreeze all columns in the same menu reverts.

The freeze is per tab and session-only, like column widths. If the window gets too narrow to keep the whole frozen band and still scroll, Octa temporarily pins fewer columns and restores the full band when there is room again.

Hide and show columns

Right-click any column header and pick Hide column to drop it from the view. Hidden columns are still part of the underlying table on disk: both Save and Save As write them out unchanged. Pull them back via Columns → Show hidden columns (the menu entry is greyed when nothing is hidden).

Hidden state is per tab and session-only, so closing the tab or reopening the file clears the hidden set. Use it as a viewport-management tool, not a schema modification.

Copy column name(s)

Right-click any column header and pick Copy column name(s) to copy the header text to the clipboard. If you have multiple columns selected (Ctrl-click their headers) and right-click one of them, all selected names are joined with newlines. Useful for constructing SQL SELECT lists or scripts from the columns Octa sees.

Pinned tabs

Right-click any file-backed tab in the tab strip and pick Pin tab. Pinned tabs:

  • Show a 📌 prefix in the tab label.
  • Hide the small × close button.
  • Refuse to close on Ctrl+W or the unsaved-changes prompt. You have to unpin them first (same right-click menu).

Persistence across restarts

Pinned tab paths are saved to settings.toml's pinned_tabs field and reopened on next launch. Files that no longer exist on disk are silently dropped from the list. Scratch tabs (no source path) cannot be pinned; the menu entry is greyed out for them.

Unsaved changes in pinned tabs are NOT auto-saved

Pinning does not change save semantics. Closing the application or closing the tab with unsaved changes still runs the standard Save / Don't Save / Cancel dialog. The pinned tab reopens on next launch with whatever is on disk. Any unsaved edits from the previous session are lost if you didn't save them. Save with Ctrl+S (or Save As) before quitting.

See also

  • Search & Filter narrows the table to rows that match a pattern.
  • Editing covers structural row/column operations plus undo semantics.
  • Colour Marking highlights cells, rows, and columns.
  • Saving writes back to disk, with format-specific notes for databases.