duckdb lens
JetBrains Marketplaceplugin 33853free viewer, Pro subscription
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 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.2.7, published 2026-09-11
- pro
- a subscription with its own 30-day trial; the price is quoted below as the store shows it

free
- Never writes to your file: the connection opens in the engine's own read-only mode, so every write statement is refused by DuckDB itself
- 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
- 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, and a statement that would write is refused
- 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: click a header and the whole table reorders, fifty million rows included
- Kept themes: a chosen look stays set from file to file
price, as the store shows it
Pro is $2.90 a month or $29 a year for individual use, $5.80 or $58 for organizations. Each Lens plugin comes with its own free 30-day Pro trial. Keep a subscription running for a year and JetBrains' perpetual fallback license kicks in: the version you had when that year started is yours for good, fixes included. Pro only ever adds features.
where it stops
- Viewer by design: rows are never rewritten; a write mode does not exist here, hidden or paid
- 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.2.7published 2026-09-11
The engine inside this plugin used to fetch extensions on its own. Type a query that names a function from one it does not carry, st_point say, and DuckDB would download that extension from the internet before answering. Every connection now opens with extension auto-install and auto-load switched off, so the engine fetches nothing and that query fails with DuckDB's own catalog error instead. An INSTALL you type into the Pro SQL console yourself is still your own call. In the console, Explain over a selection of several statements now plans each one, headed "-- statement 2 (line 3)" with its number and the line it starts on; before this the whole selection went under one EXPLAIN, which planned the first statement and ran the second. When a script of several statements stops, the failing one names its line as well: "Statement 2 of 4 (line 7) stopped the run, so nothing after it ran."
- 1.2.6published 2026-09-09
The Theme picker has two more entries at the end. One is called lamplighter, the other catacombs. Both show a padlock, and in the open list each carries its own line: "unlocks when you share Lens with a colleague" for lamplighter, "unlocks the first time Pro runs for you" for catacombs. Pick a locked one and the plugin opens the way to earn it. For lamplighter that is the share card, which is also under Help as Share DuckDB Lens. The card is plain text for a colleague: where to find the plugin on the marketplace and the family page beside it, then a referral code of this install's own with the line "enter it under Theme in any Lens plugin" under it. Copy share card earns the theme here; the note under the button says "Copied. The lamplighter theme is yours to keep." A colleague who types that code into the same dialog and presses Unlock with code earns it on their side. A typo is refused ("codes read LENS-XXX-XXX-XXX"), and so is an install's own code. Catacombs opens the first time Pro runs for you. A trial counts, and the theme stays after the trial ends. An earned theme is kept, not tasted; the notice that appears says "It stays yours in every Lens plugin, Pro or not. Pick it under Theme." The code itself is random and minted once. It stays on this machine; nothing is sent anywhere.
- 1.2.5published 2026-09-08
Before DuckDB 2.0 lands we measured the engine inside this plugin. It is DuckDB v1.5.5 and it reads storage versions 64 to 68. A file outside that range used to fall through to the generic "could not be opened" line. Now the version is taken from the file header before the engine gets the path, and the status line says "was written by DuckDB storage version 69; this viewer's engine (DuckDB v1.5.5) reads up to 68". The fix follows in the same line: SET storage_compatibility_version to v1.5.0 or earlier in that newer DuckDB and COPY FROM DATABASE into a new file. An old file, from before version 64, is told to EXPORT DATABASE instead. The header checksum is checked as well, so a damaged file is called damaged, and an encrypted database now reads "is encrypted, and this viewer opens files without a key" rather than being taken for a wrong file. Two leaves in the schema tree answer a click now. An index shows whether it is unique and which columns it covers, and its CREATE statement sits under that. A sequence shows the value nextval hands out next as "Next value", then its increment and its range, with a line for a sequence that cycles. In the diff, the changed-rows drill marks the cells that differ between the stacked A and B rows and reports it, "3 changed cells marked across 2 rows", while Next changed cell walks them; a new comparison clears the rows of the old one. Row counts also fill in for tables outside main now.
more
Pricing, invoices and licensing questions go to [email protected]; anything else about the product to [email protected].