Skip to main content

A browser-based CSV database with SQL query support

Project description

CSVSQL

A browser-based CSV database application. Open CSV, Excel, and compressed files as database tables, run SQL queries, edit data inline, and save — all in a multi-window interface with no server, build step, or internet connection required. Fully self-contained with all dependencies bundled locally.

Try the live version

Features

  • Multiple file formats — CSV, TSV, PSV, Excel (.xlsx/.xls), Gzip (.csv.gz), and ZIP archives
  • SQL queries — Full SQLite syntax from the built-in console, including joins, subqueries, aggregates, UNION, CASE, and REGEXP. Query results are queryable tables too
  • SQL syntax highlighting — Keywords, strings, numbers, comments, and identifiers are color-coded in the SQL console and filter inputs
  • Inline editing — Click a cell to select it; press F2 or Ctrl/Cmd+U to edit. Tab/Enter to navigate, Escape to revert
  • Sort and filter — Click column headers to sort (multi-column with Shift+click). Filter with SQL WHERE expressions including REGEXP
  • Multi-window workspace — Draggable, resizable subwindows. Tile, Grid, or Cascade layouts
  • Row and column management — Add/delete rows, insert at position (right-click), add/rename/reorder columns (drag or keyboard)
  • Cell selection — Click a cell to highlight its row, column, and row number. Move the selection with plain arrow keys, extend to a rectangle with Shift+arrow, Shift+click, or click-and-drag. With no cell selected, any arrow key focuses the cell in the middle of the view. Ctrl+←/→ moves the selected columns as a block
  • SELECT INTO — Create new tables from query results (SELECT ... INTO tablename ...)
  • CREATE TABLE — New tables created via SQL auto-open as editable windows
  • Drag and drop — Drop files directly onto the window to open them
  • Open from URL — Load data files from any HTTP/HTTPS URL
  • Save — Write directly back to the original file (Chrome/Edge) or download. Save As supports CSV, TSV, PSV, Excel, Gzip, and ZIP formats
  • Virtual scrolling — Handles large datasets efficiently
  • AI analysis (experimental) — Natural language data analysis with automatic SQL query execution, inline charts, formatted tables, and PDF report generation. Supports WebLLM (in-browser), Ollama (local), Claude, and OpenAI

Installation

Option 1: pip (recommended)

pip install csvsql
csvsql

This starts a local server and opens CSVSQL in your browser. If csvsql conflicts with another command on your system, use csvsqlw instead — it's an identical alias.

csvsql --port 9000          # custom port (default: 8000)
csvsql --no-browser          # don't auto-open browser
csvsql --host 0.0.0.0       # bind to all interfaces

Option 2: No install — open directly

All dependencies are bundled locally — no internet connection needed. Clone the repo and open index.html in your browser:

git clone https://github.com/markuskimius/csvsql.git
open csvsql/index.html

Or serve with any static file server:

python3 -m http.server 8000
# open http://localhost:8000

Usage

Opening Files

Use File > Open (Ctrl+O / Cmd+O), File > Open URL, or drag and drop files onto the window.

Format Extensions Notes
CSV .csv, .txt Delimiter auto-detected (comma, tab, pipe, etc.)
TSV .tsv Tab-delimited
PSV .psv Pipe-delimited
Excel .xlsx, .xls Each non-empty worksheet opens as a separate table
Gzip .csv.gz, etc. Decompressed in browser; inner file opened by type
ZIP .zip All recognized data files inside the archive are opened

Editing

  • Edit cells — Click a cell to select it; press F2 or Ctrl/Cmd+U to enter edit mode
  • Navigate — Tab/Shift+Tab between cells, Enter to save and move down, Escape to revert the edit (or clear the selection when not editing)
  • Add rows — Click + Row in the toolbar, or right-click a row number to insert above
  • Delete rows — Right-click a row number and choose Delete Row
  • Add columns — Click + Col in the toolbar
  • Rename columns — Ctrl/Cmd+click a column header
  • Reorder columns — Drag a column header to a new position. With a header selected, press Ctrl/Cmd+←/→ to nudge it. With cells selected, Ctrl/Cmd+←/→ moves the columns spanned by the selection
  • Rename tables — Ctrl/Cmd+click the window title
  • Highlight row & column — Clicking a cell highlights its row and column. Move the selection with plain arrow keys; extend to a rectangle with Shift+arrow, Shift+click, or click-and-drag. Esc clears the selection

Touch Gestures

  • Edit a cell — Press and hold a cell for about half a second
  • Reorder a column — Tap a column header, then tap-and-hold the same header and pan to the target position

Sorting and Filtering

  • Sort — Click a column header to cycle: ascending → descending → unsorted
  • Multi-column sort — Shift+click additional headers. Numbers next to arrows show sort priority
  • Filter — Type a SQL WHERE expression in the filter bar (without the WHERE keyword):
    age > 30 AND name LIKE '%Smith%'
    name REGEXP 'smith|jones'
    

SQL Console

The SQL Console at the bottom runs queries against all open tables using SQLite syntax. Press Ctrl+Enter (Cmd+Enter on Mac) to execute. The console and filter inputs feature SQL syntax highlighting. Query results open as new queryable tables.

-- Query a loaded table by its filename (minus extension)
SELECT * FROM sample WHERE name LIKE 'A%'

-- Aggregate queries
SELECT department, AVG(salary) as avg_salary FROM employees GROUP BY department

-- Join across tables
SELECT a.name, b.value FROM table1 a JOIN table2 b ON a.id = b.id

-- REGEXP (case-insensitive)
SELECT * FROM employees WHERE name REGEXP '^(John|Jane)'

-- Create a new table from query results
SELECT name, salary INTO high_earners FROM employees WHERE salary > 100000

-- Create an empty table
CREATE TABLE projects (id, name, status)

Table names are derived from the filename (e.g., employees.csvemployees). All column values are stored as TEXT.

INSERT, UPDATE, DELETE, ALTER TABLE, and DROP TABLE all work. Changes to existing tables are reflected in their windows immediately.

AI Analysis (experimental)

The AI tab lets you analyze data using natural language. The AI automatically writes and executes SQL queries against your full dataset, so it works with tables of any size. You can also chat with the AI without any tables loaded.

Providers:

Provider Type Setup
WebLLM (default) In-browser No setup — runs via WebGPU in Chrome/Edge 113+
Ollama Local Install from ollama.com, run ollama pull llama3.2
Claude Cloud API key from console.anthropic.com
OpenAI Cloud API key from platform.openai.com

Type a question and press Enter to send. Use Shift+Enter for multiline prompts and Up/Down arrows for prompt history. Click the gear icon to configure provider, model, and API keys.

The AI receives column statistics and sample rows, then writes SQL queries to get exact answers. Queries are executed automatically and results fed back for up to 5 rounds of analysis.

Rich output: The AI can render inline charts (Chart.js), formatted tables, and downloadable PDF reports. Ask for a visualization, a formatted table, or a PDF report and it will appear inline in the chat. Chart.js and jsPDF are loaded on demand when first needed. Drag and drop images (PNG, JPG) onto the AI chat area to upload them for inclusion in PDF reports (e.g., company logos).

Saving Files

  • Save (Ctrl+S / Cmd+S) — Writes directly back to the original file on Chrome/Edge (via File System Access API). On Firefox, triggers a download
  • Save As — Prompts for a new filename. Supports CSV, TSV, PSV, Excel (.xlsx), Gzip, and ZIP formats
  • ZIP archives — Saving any table from a ZIP re-packs all tables from that archive into the same ZIP
  • Excel workbooks — Saving any sheet re-packs all sheets into the same workbook

Window Management

  • Move — Drag the title bar
  • Resize — Drag any edge or corner
  • Maximize/Restore — Double-click the title bar, or click the maximize button
  • Minimize — Click the minimize button. Restore from the Windows menu
  • Close — Click the close button. Ctrl/Cmd+click closes all windows
  • Layout — Use the View menu to Tile Horizontally, Tile Vertically, Grid, or Cascade
  • Proportional scaling — Windows reposition and resize proportionally when the browser window or console panel is resized

Keyboard Shortcuts

Shortcut Action
Ctrl+O / Cmd+O Open file
Ctrl+S / Cmd+S Save table
Ctrl+N / Cmd+N New table
Ctrl+W / Cmd+W Close window
Ctrl+← / Ctrl+→ (or Cmd+arrow on Mac) Move selected header column, or cell-selection's columns, left / right
F2 or Ctrl+U / Cmd+U Enter edit mode on the selected cell
Arrow keys (no cell selected) Focus the cell in the middle of the view
Arrow keys (cell selected, not editing) Move selection to the adjacent cell
Shift+arrow Extend cell selection — highlights each selected cell's row & column
Ctrl+Enter / Cmd+Enter Execute SQL query
Enter (AI tab) Send AI prompt
Shift+Enter (AI tab) Newline in AI prompt
Up / Down (AI tab) AI prompt history
Tab / Shift+Tab Navigate between cells
Enter Move to next row
Escape Cancel cell edit

License

MIT — see About dialog in the app for full text.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

csvsql-0.10.4.tar.gz (3.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

csvsql-0.10.4-py3-none-any.whl (3.1 MB view details)

Uploaded Python 3

File details

Details for the file csvsql-0.10.4.tar.gz.

File metadata

  • Download URL: csvsql-0.10.4.tar.gz
  • Upload date:
  • Size: 3.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for csvsql-0.10.4.tar.gz
Algorithm Hash digest
SHA256 84abba3c51e56a8a74d657216703e21463064b83ba10c3bd0dfcd6308727f6cf
MD5 dcbf5e265221557c6bf41e9c68244ae2
BLAKE2b-256 06c209d1602ed548d7d9e6b3ff87788a81af6341cef285b11bba4e7ee5f53068

See more details on using hashes here.

File details

Details for the file csvsql-0.10.4-py3-none-any.whl.

File metadata

  • Download URL: csvsql-0.10.4-py3-none-any.whl
  • Upload date:
  • Size: 3.1 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for csvsql-0.10.4-py3-none-any.whl
Algorithm Hash digest
SHA256 0c3215b24fb7b1917443672b6544740e55870509434ccd7226ae7ea2cebf055f
MD5 7a827c8f2a4b4d4e7cba09e5fb846ce2
BLAKE2b-256 085978d16252385e6802d139036def8dbf80b29bd72e1af3878354d94f08a243

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page