Native Swift · macOS + iOS · MIT

A CSV editor that doesn’t flinch.

Open a 5 GiB file, fix a cell, write it back. TabTool indexes 77.7 million rows in 2.7 seconds, keeps them in about 90 MB of memory, and never sends your data anywhere.

1.0 in development · free to build from source · no account

real capture macOS · orders.csv
TabTool for macOS with a CSV of 1,200 orders open, showing the grid and the format bar.
1,200 rows × 8 columns · UTF-8 · comma · detected on open

5 GiB

Largest tested file

68.2M rows × 8 columns

77.7M

Rows in the release app

indexed 2.7 s after launch

~91 MB

Memory after indexing

Apple M4 Pro, 24 GB

2.7 MB

macOS release build

iOS build: 2.5 MB · no Electron

0

Network requests

no analytics, no SDKs

What it does

A small editor with strong opinions.

No formulas, no charts, no plugins. TabTool does the boring parts of CSV work carefully: read the format, let you change the data, write the bytes back.

  • Format detection that reads the file

    Encoding, separator, quote style, decimal mark, and header row come from the bytes, not the extension. Every choice stays editable in the format bar.

    • UTF-8/16/32
    • MacRoman
    • Windows Latin
    • GBK
    • Cyrillic
  • Editing without a spreadsheet

    Edit cells, add and delete rows and columns, rename headers, and drag rows or columns into order. Copy and paste ranges as TSV. Undo covers cells, structure, paste, and format changes.

    • Undo/redo
    • Drag & drop
    • TSV clipboard
  • Sort from the header, filter from a sheet

    Click a column header to sort. On iPhone and iPad, stack filter criteria as cards, switch each one on or off, and apply them without leaving the sheet.

    • Sort
    • Multi-criteria filters
  • Large files are a mode, not a warning

    Files at or above your threshold are memory-mapped and indexed in the background. Browsing and cell edits stay on; structural edits and export switch off. Saves stream with progress and a cancel button.

    • Memory-mapped
    • Streamed save
    • 2.7 s index
  • Save in the format you actually need

    Write the file back, or export with another delimiter, encoding, quote style, decimal mark, and header setting. CSV, TSV, and plain text, in both directions.

    • CSV
    • TSV
    • TXT
  • Nothing leaves the machine

    The app is sandboxed with no network entitlement, no analytics, and no third-party SDKs. The App Store privacy label will read Data Not Collected. Your CSV stays a file on your disk.

    • Sandbox
    • No telemetry
    • Offline
  • The same editor on iPhone and iPad

    A touch-first grid with a keyboard accessory, contextual actions for rows and columns, format and filter sheets, and the same detection and encodings as the Mac.

    • iOS 17+
    • Dynamic Type
    • Touch grid
  • Eleven interface languages

    English, French, Spanish, German, Italian, Polish, Belarusian, Ukrainian, Simplified Chinese, Japanese, and Korean, chosen in Settings or following the system.

    • String Catalog
    • System language
  • Native code, not a browser in a window

    macOS and iOS are pure Swift: a SwiftUI shell, an AppKit grid on the Mac, no Electron and no bundled web runtime. The release build is 2.7 MB on macOS and 2.5 MB on iOS, launches at once, and scrolls at native speed. The Windows and Linux ports are planned in Rust.

    • Swift 6
    • AppKit + SwiftUI
    • No Electron
    • Rust ports planned

Performance

Two million rows, no spinner.

Large files are memory-mapped and indexed in the background, so the first rows appear immediately. This is an unedited capture of the current build scrolling a 109 MB file.

Unedited capture · macOS build · 2,100,000 rows × 7 columns · 109 MB · 2026-10-29
  • 2.7 s to index a 5 GiB file with 68.2 million rows on an Apple M4 Pro.
  • ~91 MB of memory with 77.7 million rows loaded in the release app.
  • 6.3 s to save the 5 GiB file with one edit, streamed with progress and cancel.

Screens

Every state is the real app.

The screenshots below come from the development build on 29 October 2026. No mockups, no composited UI.

TabTool for macOS showing a 1,200-row orders CSV, with the format bar below the grid.

The grid

1,200 rows, 8 columns, UTF-8, comma. The format bar below the grid is the file’s own format, changed in place.

A column selected in TabTool for macOS, with its header menu and the rest of the table dimmed.

Column selected

Click a header to select the column. Sort, rename, move, or delete it from the header, the context menu, or the Table menu.

TabTool in large-file mode showing a 2.1-million-row CSV with the large-file banner.

Large-file mode

2.1 million rows in this capture. Structural edits are off; scrolling, jumping, and cell edits stay on. The banner never hides the row count.

The same CSV open in TabTool for iPhone in landscape, showing the grid and row count.

The same file on iPhone

Row numbers, sticky headers, and a status line with the row count, encoding, and separator. The toolbar holds undo, search, export, and the overflow menu.

Open source

MIT, all of it.

The CSV core, the SwiftUI shell, the AppKit grid, the iOS grid, and the tests are in one repository. No license server, no telemetry, no open-core asterisk.

If TabTool saves you a spreadsheet detour, a star is the cheapest way to help other people find it.

Build from source
# Xcode 27.1, Swift 6.4, XcodeGen 2.46
brew install xcodegen
# clone and generate the project
git clone https://github.com/shurco/tabtool.git
cd tabtool
./scripts/app run macos
MIT license 254 core tests 320 app tests

Roadmap

macOS and iOS now. The rest is planned.

TabTool 1.0 is a Mac and iPhone app. Windows, Linux, and Android are on the list, with no dates attached until real builds exist.

  • macOS macOS 14 or later In development 1.0 release checklist in progress. Pure Swift.
  • iOS and iPadOS iOS 17 or later In development Same CSV core, touch-first editor. Pure Swift.
  • Windows Not started Planned Planned in Rust. No date yet.
  • Linux Not started Planned Planned in Rust. No date yet.
  • Android Not started Planned Language not chosen yet. No date.

Platforms are planned, not promised. No dates until a build exists. The repository is the source of truth.

FAQ

Questions people actually ask.

Pricing, file sizes, privacy, platforms, and what TabTool deliberately does not do.

Is TabTool free?

The source code is MIT-licensed, so you can read it, build it, and change it at no cost. Pricing for the signed App Store build will be published with the 1.0 release.

When can I download it?

TabTool 1.0 for macOS 14+ and iOS 17+ is in development. Watch the GitHub repository for the first build and the App Store listing. There is no public download yet.

How large a file can it open?

The tested ceiling is a 5 GiB file with 68.2 million rows and 8 columns. It was fully indexed 2.7 seconds after launch, using about 91 MB of memory. Files at or above the large-file threshold open in a read-only structure mode with background indexing; the threshold is a setting, 100 MiB by default.

Does TabTool upload my data?

No. The app is sandboxed and has no network entitlement. There is no analytics, no crash reporting SDK, and no account. Saving writes to the file you opened, and export writes a new file you choose.

Which formats and encodings does it support?

CSV, TSV, and plain text with automatic detection of encoding, separator, quotes, escape character, decimal mark, and header row. Encodings include UTF-8/16/32, MacRoman, Windows Latin 1 and 2, GBK, ISO Latin 2, Cyrillic, Greek, Turkish, and Japanese. XLSX, ODS, JSON, and database formats are not supported.

Does it have formulas, styles, or charts?

No, by design. TabTool is a CSV editor: cells, rows, columns, sorting, filters, and format conversion. For formulas and charts, a spreadsheet is the right tool.

All 12 questions →

Status

The source is ready.
The store builds are next.

TabTool 1.0 is in development for macOS 14+ and iOS 17+. Follow the repository for the first build, the release notes, and the Windows, Linux, and Android plans.