duckdb lens
JetBrains Marketplaceplugin 33853free viewer, Pro subscription
Install from the JetBrains Marketplacefree to read; the Pro trial runs 30 days
Read-only by default means it cannot write back until you say so. Take the shelter from that one danger: the engine rides inside the plugin in its own read-only mode and refuses every write itself until you turn Edit or Write statements on, and it downloads no extension by itself.
DuckDB Lens opens a DuckDB database file in the editor tab of IntelliJ IDEA and the other JetBrains IDEs. The connection is opened in the engine's own read-only mode, so any statement that would write is refused by the engine itself. The console's Write statements switch, off on every open, reopens the connection read-write for that file once you turn it on and the file stays byte for byte as it was. The first thing on screen is the schema tree, every schema's tables, views, sequences and indexes, and the rows page in as you scroll. The engine ships inside the plugin, there is no server to reach, and the engine fetches no extension on its own, so a laptop with no internet access opens a file the same way as one on the office network. Pro adds a whole-table sort, a diff of two database files, exports to CSV, JSONL or Parquet, and a SQL console for SELECT and EXPLAIN. We ship the engine at version 1.5.5 and measured which database files it opens: storage versions 64 through 68, the rest refused with the engine's own message.
- opens
- .duckdb and .ddb files, and any file that starts with the DuckDB magic bytes; a pending .wal beside the file is called out in a banner
- runs on
- every JetBrains IDE from 2024.2 on; Linux x64, Windows x64 and macOS (Intel and Apple Silicon), not Linux ARM
- store
- JetBrains Marketplace, plugin 33853
- newest version
- 1.4.1, published 2026-10-27
- pro
- a subscription with its own 30-day trial; the price is quoted below as the store shows it

free
- Read-only by default: the connection opens in the engine's own read-only mode, so while the console's Write statements switch is off every write statement is refused by DuckDB itself; the file changes only at your word: Save (Pro) or Undo last save (Pro) with Edit on, or a script run with the switch on
- Any size: rows arrive in constant-memory pages of up to 5000, and go-to-row jumps anywhere in the table
- Schema tree: every schema's tables, views, sequences and indexes with estimated row counts and exact counts behind them; column types and primary keys, an index's columns, a sequence's next value
- Find in table: every column of every row, case folded, with the match position inside the cell; next and previous jump between hits
- Cell inspector: the whole value behind a cell, long text in windows; BLOBs as hex or text, PNG, JPEG and GIF blobs as the picture
- WAL-aware: a pending .wal sidecar is called out in a banner, in bytes, with a one-click snapshot reload that folds it into a copy and leaves the original alone
- Exact types: BIGINT stays exact, HUGEINT and DECIMAL never pass through a double, BOOLEAN renders as true and false, and a LIST, STRUCT or MAP cell renders as the engine's own text for it
- Database facts: storage version, block size, engine version, sidecar state; a file written by a newer DuckDB is refused with both versions named and the fix in the same line
- Copy out: a row as JSON, the page as CSV
- Wrong file: something that is not a DuckDB database is reported by reason, in words, with no stack trace
- Themes: eight looks for the grid, the console results and the diff; trying one is free for the open window
pro
- Saving edits: with Edit on, change cells in the grid, insert or delete rows, or set one column on the rows the page shows; Review lists every change beside the file's value with the exact SQL, Save (Pro) runs it as one transaction, a copy of the file kept beside it first when you ask for one, and Undo last save (Pro) takes the save back until the file is closed or reloaded
- SQL console: your SELECT or EXPLAIN goes to DuckDB untouched, one statement or a whole script run in order, each timed; results land in the same grid. Writes need the Write statements switch, which is off when a file opens. Turned on, it runs the script as one transaction, so a statement that fails takes the whole run back with it, and before the first write of the session it keeps a copy of the file beside the original (there is a box to untick if you do not want one)
- Export: a table, the search matches or any query result to CSV or JSONL
- Parquet out: name the export .parquet and DuckDB writes it itself, whole table or search matches, streamed
- Diff two databases: schema and rows compared between two files; exact added, removed and changed counts, drill-in to the rows matched by primary key, the changed cells marked
- Whole-table sort: order by any column across every row, not just the page a header click sorts
- 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 2.90 a month or USD 29 a year for individual use. For organizations it is, per user, USD 5.80 a month or USD 58 a year.
where it stops
- Read-only by default: rows are rewritten only at Save (Pro) with Edit on, every change listed first; a view, a table with no primary key and a column of its own named rowid, or a storage version the engine cannot write cannot be edited, and a file another program holds open stops the save, with the reason on screen
- Tables without a usable primary key diff as counts only, and the report says so
- Rows still in the .wal appear after the one-click snapshot reload, never silently
- The engine fetches no extension on its own; an INSTALL typed into the Pro console is your own call

what's new
- 1.4.1published 2026-10-27
The description's first paragraph now reads read-only by default, and says the file is never written until you say so. Everything 1.4.0 added stands; no code changed.
- 1.4.0published 2026-10-27
With 1.4.0, a table can be edited in DuckDB Lens. Read-only stays the default; "Edit" in the toolbar turns editing on, and the file is untouched until you click "Save… (Pro)". While Edit is on, F2, a double-click or a typed key opens a cell, "Insert row" and "Delete row" do what they say, and "Set column for visible rows…" puts one value on every row the page shows. "Review" shows the SQL before anything runs, with "Copy SQL" and "Save as .sql…" beside it. "Keep a copy of the file before saving" is a box on the preview, and "Undo last save… (Pro)" takes the last save back until the file is closed or reloaded, and a save that cannot be undone says why. What cannot be written back safely is refused, with the reason on screen: a view, a table with no primary key and a column of its own named rowid, a file held open by another program, a storage version the engine cannot write. A row that changed in the file since it was read stops the save, its staged change dropped with a note and the rest kept staged. Edit mode and "Review" are free; saving is Pro. The console's "Write statements" switch of 1.3.12 works as before, and it and Edit are never on together.
- 1.3.12published 2026-10-27
The Pro console can write. "Write statements" in the console toolbar is off on every open; turn it on and your statements run read-write, one transaction per run, so a statement that fails rolls the whole run back. The first write of a session keeps a copy of the file beside it, unless you untick the box when the switch asks. After a run the tree and the grid reload, so the change is on screen. If another program has the database open, the console says so, nothing runs, and the switch goes off again. With the switch off nothing changes: the console reads, and a statement that would write fails with DuckDB's own error, as before.
more
Pricing, invoices and licensing questions go to sales@twilightventures.dev; anything else about the product to support@twilightventures.dev.