sqlite lens
JetBrains Marketplaceplugin 33684free viewer, Pro subscription
Install from the JetBrains Marketplacefree to read; the Pro trial runs 30 days
The last row is still down there, waiting, in a vault some app still holds open. Take the gloves: the open takes no lock and adds no file beside the database, so what you find stays exactly as it was found until you click Save.
SQLite Lens opens a SQLite database file in the editor tab of IntelliJ IDEA and the other JetBrains IDEs, read-only by default. While it browses, no lock is taken and the directory is left as it was found, with no -wal, -shm or journal file added beside the database, so a database a running app still owns is not disturbed by the open. The schema tree comes up first, rows page in as you scroll, and Find streams down every row with live progress. We claim no .sql file, so a SQL source file keeps the editor it had. Turn "Edit" on to change cells or add and delete rows, and the preview shows the exact rows and the exact SQL before anything is written. Pro saves that change in one transaction and adds a SQL console for SELECT, PRAGMA and EXPLAIN, exports to CSV, JSONL or Parquet, a column profile report, a diff of two database files, a whole-table sort, and a reader for the frames still waiting in the -wal.
“Muito intuitiva a aplicação, muito fácil de usar e economizou um bom tempo de trabalho.”
“Very intuitive, very easy to use, and it saved a good amount of work time.” (translated from Portuguese)
- opens
- .sqlite, .sqlite3, .db3, .db, .gpkg, .sqlitedb, .s3db, .sl3, .mbtiles, .spatialite, .sqlar, .fossil, .geodatabase and .anki2 files, and most files that start with the SQLite magic bytes, whatever their extension
- runs on
- IntelliJ IDEA, PyCharm, Android Studio (Ladybug and later) and every JetBrains IDE from 2024.2 on
- store
- JetBrains Marketplace, plugin 33684
- newest version
- 1.7.7, published 2026-10-17
- pro
- a subscription with its own 30-day trial; the price is quoted below as the store shows it

free
- Never writes on its own: the open is immutable and read-only; no lock is taken and no sidecar file appears, and Edit mode stages a change and writes nothing until you click Save
- Any size: metadata first, then rows in constant-memory pages of up to 5000; go-to-row lands anywhere, and there is no row cap
- Schema tree: tables with row counts, then views, indexes, triggers and virtual tables; under each table its column types, the primary key and any foreign keys
- Find in table: a search streamed down every row, with next and previous jumps between hits
- Cell inspector: long text windowed, BLOBs as hex, text or an image preview (PNG, JPEG, GIF)
- WAL-aware: pending WAL frames and hot journals are surfaced, with a one-click snapshot reload that never touches the original
- Exact types: 64-bit integers never rounded through floating point; INTEGER, REAL, TEXT, BLOB and NULL rendered exactly per cell
- Database facts: page size, encoding, journal mode, user_version, application_id, and the GeoPackage version a .gpkg declares
- Copy out: a row as JSON, the page as CSV
- Named errors: an encrypted or corrupt file reports a named reason instead of an error dialog
- Themes: twelve looks for the grid, the console results and the diff; trying one is free for the open window
pro
- Saving edits: the change you staged and previewed for free is written in one transaction; "Undo last save… (Pro)" takes the last save back until the file is closed or reloaded, and "Keep a copy of the file before saving", off until checked, leaves a copy of the database beside it first
- SQL console: your SQL goes to SQLite untouched; several statements run in order, each timed, and a failing one stops the run and is named; SELECT and PRAGMA rows land in the grid, Explain opens the query plan, and a statement that would write is refused
- Export: a table, the search matches or any query result to CSV, JSONL or Parquet, with Parquet columns typed from their values
- Profile report: rows and nulls for every column, ranges, histograms and an outlier count for the numeric ones, the largest gap in a timestamp column, a duplicate-row count and a correlation matrix, as HTML, Markdown or JSON
- Diff two databases: schema and rows compared between two files, with exact added, removed and changed counts, drill-in, and rows matched by primary key
- Whole-table sort: order by any column across every row, not just the visible page
- WAL frames: the frames SQLite would replay from the -wal beside the database, listed one per row, verified with SQLite's checksums or read from the frame headers only
- Kept themes: a chosen look stays set from file to file
price, as the store shows it
The viewer is free and stays free. Pro is a subscription for this plugin: USD 5.90 a month or USD 59 a year for individual use. For organizations it is, per user, USD 11.80 a month or USD 118 a year.
where it stops
- An encrypted database does not open; the file reports the reason and nothing else happens
- Tables without a usable primary key diff as counts only, and the diff says so
- Rows still in the WAL show after the one-click reload, not before it

what's new
- 1.7.7published 2026-10-17
A whole-table sort (Pro) with "Order text by bytes" now reads the rows in an index's order when the table has an index on that one column, under the BINARY collation, neither partial nor on an expression: sorted ascending, the first page of a large table comes at once, where every such sort read the whole table first (0.1 ms against about 4 seconds for the first 100 of 1,000,000 rows). Byte order stays the bytes on a column declared NOCASE, RTRIM or with a collation only its app registers, as Room's LOCALIZED, and that column's own index is not used for it. Two texts that differ only past their first 4,097 characters now sort by the whole value. While a sort reads rows before its first page, the status line reads "sorting by ts (whole table)…" and the IDE's task line says what it is sorting and what Stop will do. "Apply the WAL and turn Edit on", clicked again once the app that held the database has quit, now says "Nothing was waiting in the WAL any more, so nothing was written." under "Nothing to apply to events.db" instead of reporting an apply. When applying the WAL stops part way, on a full disk or after a failed write, the Edit strip says "The frames are still in the -wal, and any SQLite that opens the file read-write finishes the job." and the tab shows the database's rows from a recovered copy, where it showed "database disk image is malformed". Before it starts, the apply checks that the disk can hold the frames, and the copy when "Keep a copy of the file before applying" is ticked.
- 1.7.6published 2026-10-16
A database an app left with its -wal can take edits. A stopped process or a crash leaves the file that way, and so does a database pulled from a phone. The Edit strip says how many frames wait ("The -wal file beside this database holds 303 frames that are not in the file yet") and offers "Apply the WAL and turn Edit on"; the click puts the frames into the file, keeps a copy first when "Keep a copy" is ticked, and turns Edit on (editing and saving are Pro). While an app still has the database open the apply is refused with "An app has this database open; Edit is off until it closes it." Nothing is written without the click.
- 1.7.5published 2026-10-14
Closing a SQLite Lens tab lets go of the database at once, even on a large table whose row count is still running; before, the IDE froze until the count in progress finished, which on a multi-GB table could take minutes. A tab closed while its database was still opening left the file open until the IDE exited; the file is released now. Esri mobile geodatabases (.geodatabase) and Anki collections (.anki2) open in a SQLite Lens tab the same way as .sqlite and .db files, since each is a SQLite database under a name of its own. An internal error in the plugin can be reported from the IDE's error dialog, and the report goes to JetBrains only when you choose to send it.
more
- every format, every product
- opening a large file
- the exports and the profile report
- DuckDB Lens
- support
Pricing, invoices and licensing questions go to sales@twilightventures.dev; anything else about the product to support@twilightventures.dev.