VS Code extension · v0.1.6

A full-featured SQLite editor, right inside VS Code.

Click any .db file and browse, edit, query, and export it in place. Think phpMyAdmin, but for SQLite. No native dependencies, no telemetry. Free.

  • Free
  • No telemetry
  • Zero native deps
  • Win · macOS · Linux
chinook.db — SQLitePad
SQLitePad browsing and editing a database table in VS Code
01 / Why SQLitePad

A real editor, not just a viewer.

/01

It just works

SQLite runs as WebAssembly with file I/O through a Node VFS. No native binaries, nothing to compile, no “module failed to load”. Identical on Windows, macOS, and Linux.

/02

A true editor

Inline cell editing, row insert / delete / duplicate, CSV import, a SQL runner, and undo. Every editing feature is included, and it's all free.

/03

Fast

A canvas-rendered grid handles 100k+ row tables smoothly, with virtualized scrolling, sorting, and paging. Writes go to the file page by page, so big databases are never fully loaded into memory.

/04

AI-ready

Copy a whole schema as Markdown, or export any table as a SQL dump, ready to paste straight into your favorite assistant.

/05

Private by design

No telemetry, no tracking, no network calls. Your databases never leave your machine.

02 / Screenshots

See it in action.

SQL query runner with syntax highlighting and per-statement results
SQL query runner: syntax highlighting, autocompletion, per-statement results.
Per-column filters and bulk editing in the data grid
Filters & bulk edit: per-column filters, quick search, multi-row edits.
Row detail panel with JSON pretty-printing and BLOB preview
Row details: JSON pretty-printing, BLOB / image preview, FK navigation.
The main data grid browsing and editing rows
Data grid: sort, pin, resize; edits committed transactionally to the file.
03 / Features

Everything, included.

Twelve things SQLitePad does, all free.

Open by clicking

.sqlite, .sqlite3, .db, .db3 and .s3db files open directly in the editor, with no command-palette dance.

Full editing

Inline cell editing with type-affinity coercion, insert via a form panel, delete, set NULL with Del. Every change is committed immediately and transactionally.

SQL query runner

CodeMirror editor with theme-aware highlighting and schema autocompletion; multi-statement scripts, run-selection, per-statement timings; save a SELECT as a view in one click.

Filters & quick search

Per-column filters (=, contains, ranges, NULL/empty), right-click a cell to filter or exclude, plus a debounced box searching every column.

Foreign-key superpowers

Filter an FK column by searching the referenced table by name; jump to the referenced row; FK autocompletion in insert forms; preview columns remembered per database.

Import & export

Import CSV into tables (header matching, preview, single transaction); export tables or query results to CSV / JSON / Markdown / SQL dump, either to a file or the clipboard.

Undo & history

A session audit log showing old → new values for every change; undo with Ctrl+Z or from the History tab. Updates, inserts and deletes are fully reversible.

Row details

A vertical field view for wide rows, JSON pretty-printing, BLOB hex preview with image detection (PNG/JPEG/GIF/WebP) plus download/replace, and inline FK previews.

Schema view

Columns, primary keys, foreign keys, indexes, and pretty DDL. Copy the whole schema as Markdown.

Safe with shared databases

Read-only is enforced at the file-system level, so a read-only session is invisible to any other program using the same file. Databases in use elsewhere open read-only, deletes are all-or-nothing, and an outside change shows a refresh banner.

Remembers your layout

Column widths, pinned columns, and FK preview choices persist per database. One command resets it all.

Yours to tune

Page size, open-as-read-only by default, and single-row delete confirmation are settings. Refresh, New Query, Export and Read-Only sit in the editor title bar and the Command Palette.

04 / Usage

Getting around.

ActionHow
Open a databaseClick the file in the Explorer
SortClick a column header (asc → desc → off)
Edit a cellDouble-click it, type, Enter
Set NULLSelect cell(s), press Del
Insert a rowToolbar + Insert
Delete rowsSelect via row markers, press Del
Run SQLQuery tab, Ctrl+Enter
Save query as viewQuery tab → Save as view…
Filter via a foreign keyFK column header ▾ → search the referenced table
Lock the fileToolbar 🔒 Read-only or the title-bar icon
Copy cellsSelect, press Ctrl+C or right-click → Copy selection
Reset the layoutCommand Palette → SQLitePad: Reset Layout for This Database
05 / Honest notes

Where the edges are.

  • !

    A database that another program is using (WAL mode, or -wal / -shm / -journal files next to it) opens read-only and cannot be unlocked from inside the editor. The WASM VFS has no shared memory, so SQLitePad never competes for the write lock.

  • !

    Editing needs a row identity: tables with a primary key or a free rowid alias are editable; views, and tables where rowid, _rowid_ and oid are all user columns with no primary key, are read-only.

  • !

    BLOB values are viewed and replaced through the row detail panel, not inline in the grid. A NULL in a BLOB column is filled only via Replace…; text stored in a BLOB column stays inline-editable.

  • !

    Text values containing a NUL byte are cut at the NUL by the WASM SQLite binding, in the grid and in exports. The bytes on disk are never touched.

  • !

    Not yet available in VS Code for Web; it reads and writes files directly on disk.

06 / Changelog

What's shipped.

v0.1.6Data safety, performance, settings
  • Rows are addressed reliably even when a table has its own rowid, _rowid_ or oid column; editing a primary-key value no longer breaks the row.
  • Deletes are all-or-nothing and refuse a stale selection; cascading deletes are recorded as not undoable; History records a change only once it is committed.
  • Query tab: WITH … INSERT/UPDATE/DELETE and PRAGMA writes go through the write path, RETURNING rows are shown, results are capped at 10,000 rows with a notice.
  • Big tables: edits no longer re-read every schema or re-count every table, the 30-second timeout is gone, and a locked database is reported in half a second.
  • New settings (page size, default read-only, single-row delete confirmation), title-bar icons for the four commands, keyboard-navigable sidebar, Escape closes panels.
  • CSV delimiter is detected from the header, exporting selected rows works for any count, save dialogs open next to the database, copy cells with Ctrl+C.
v0.1.5Responsiveness & memory
  • Switching tables quickly no longer shows the wrong table's rows, and an edit is never sent against the wrong table.
  • A Query script that leaves a transaction open is rolled back automatically with a notice; deleting a cell range runs as one transaction with one undo.
  • CSV import decodes UTF-16 via BOM and frees memory when a preview is cancelled; large BLOB previews are capped at 64 KB, images up to 2 MB load automatically.
  • Exports under an active search select exactly the shown rows; the detail panel's Go to link opens the target table filtered to the referenced row.
v0.1.4Invisible read-only
  • Read-only is enforced at the file-system level: no -wal or lock files are created, written, truncated or deleted, so a read-only session is invisible to every other program using the database.
  • Fixes a Linux case where closing the editor deleted a live -wal file and caused a disk I/O error in the other program.
  • Refresh genuinely reloads a live database; the Query tab flags stale results with a re-run button; a safety self-check runs before the first read-only open.
v0.1.3Shared-database safety
  • Databases with -wal / -shm / -journal siblings open genuinely read-only and stay locked, preventing corruption when another program is using the same file.
  • The read-only toggle truly reopens the connection, holds no write lock and never checkpoints on close; the SQL runner respects read-only mode.
  • If another program starts writing, SQLitePad switches to read-only and refuses writes, with a clear message instead of “malformed”.
v0.1.2Bug fixes
  • Failed multi-statement scripts in the Query tab now roll back cleanly, instead of leaving earlier statements committed.
  • Quick search and LIKE filters treat % and _ as literal characters, so searching for “50%” no longer matches everything.
  • A render error now shows a recoverable screen with a Reload button, not a blank panel.
  • CSV import no longer drops a final all-empty record.
v0.1.1Fixes & hardening
  • Column filters match TEXT values exactly, so zero-padded codes like 0123 and phone numbers stay intact while numeric columns still compare as numbers.
  • Memory guard: CSV imports over 50 MB and exports over 500,000 rows are refused with a clear message, instead of freezing the editor.
  • WITHOUT ROWID inserts with a server-assigned primary key are now undoable, and large tables page faster thanks to cached row counts.
  • Smaller fixes: expression-based indexes show correctly in the schema view, the multi-row delete warning is accurate, and truncated files are rejected.
v0.1.0Initial release
  • Custom editor for .sqlite / .sqlite3 / .db / .db3 / .s3db files.
  • Virtualized grid: sort, page, pin and resize columns, layout saved per database.
  • Inline editing, insert / delete / duplicate, with immediate transactional persistence.
  • SQL runner, foreign-key tools, schema view, CSV import and CSV/JSON/Markdown/SQL export.
  • Undo / history, read-only toggle, external-change detection, WAL support.
07 / Feedback

Found a bug? Got an idea?

SQLitePad's source is private, but bug reports and feature requests are very welcome, and they're tracked publicly on GitHub. Pick a template and tell me what happened.