changelog
Each product below lists the versions it has released, newest first. A version carries the day it went live and the note it went out with, quoted as the stores show it, and a link of its own. The newest note of every product is also on what's new.
- jsonl lens
- log lens
- parquet lens
- sqlite lens
- xlsx lens
- notebook lens
- duckdb lens
- heap dump lens
- jsonl lens for vs code
- parquet lens for vs code
- log lens for vs code
- lens file, log, & attachment viewer for confluence and rovo
- lens file, log, & attachment viewer for jira and rovo
jsonl lens
- 1.9.9published 2026-10-17
A large file used to open far from page 1: the view moved with the index as it was built and stopped wherever indexing ended. It opens on page 1 now and stays there while indexing runs. The last-page button pressed during indexing follows the end on purpose, and it now stops on the true last page instead of short of it.
- 1.9.8published 2026-10-15
The profile report kept up to 100,000 of a column's distinct strings to count them, hundreds of megabytes on a column of long values; it keeps a 64-bit hash of each now, about 2 MB a column at the cap. A buyer whose subscription has lapsed sees Get Pro in the footer, and the gate says the trial has ended; 1.9.7 offered a second free trial there, which JetBrains does not grant. The footer reads the license key eight times on a refresh and used to check its certificate chain every time; the verdict is kept per key now.
- 1.9.7published 2026-10-13
From 1.9.7 the profile report, and the file behind Open exported file, open through the navigation call that Go to File uses, because IntelliJ 2026.3 deprecates the editor call they went through until 1.9.6. A report already open in another split comes forward rather than a second tab opening.
- 1.9.6published 2026-10-13
The "Profile written" balloon now says "1 record", "1 field" and "1 duplicate record" when there is one of them, as every other count in the plugin now does. Cancelling an index from the progress bar leaves the status line at the point it reached, with "Reload to index the whole file." for the way on, and Reload does index again. The Pro gate has changed too. A Pro button pressed without Pro opens a "JSONL Lens Pro" dialog that names what the button needs and the price, "Pro is USD 1.90 a month or USD 19 a year for individual use", then "Start Trial" first and "Buy Pro" beside it; after the trial on this machine has ended, "Buy Pro" and "Enter Key" instead. The dialog waits for the IDE to load the license data before it calls any trial ended.
- 1.9.5published 2026-10-09
The trial notices "JSONL Lens Pro trial ends in ..." and "JSONL Lens Pro trial has ended" now end with the price, "Pro is USD 1.90 a month or USD 19 a year for individual use", and a "See pricing" button that opens the marketplace page. During a trial you may see one request for a marketplace review, with "Write a review", "Feedback" and "No thanks". A profile report and the first record of a clean copy showed the plugin version as "unknown"; they show the real one now.
- 1.9.4published 2026-10-09
A .jsonl, .ndjson, .ldjson or .jsonlines file too large for the IDE's text editor now opens on the JSONL Lens tab first, with the IDE's preview beside it. Files the text editor can show still open there first, and it now carries a banner, "Browse this file as records in JSONL Lens.", with "Open in JSONL Lens" to switch tabs and "Don't show again" to hide it. Export and Export Clean Copy on a .jsonl.gz now offer the folder of the original file and a name taken from it, where before they offered a temporary folder the system may clean. With more than a week of a Pro trial left, JSONL Lens now says once when you have used a Pro feature: after a filter query, an export, a full-file stats run or a clean copy, a notice titled "JSONL Lens Pro trial" names it and says what stays free. The trial-ending notices and the footer's trial line count those actions; a Find is free and is not counted. At IDE start the footer shows no Pro line until the IDE has read the license.
- 1.9.3published 2026-10-07
Duplicates now needs the whole file indexed first. Run while a large file was still indexing, it counted only the records indexed so far, and Export Clean Copy wrote only those as a success. Until indexing finishes, the stats dialog leaves the Duplicates button out. Cancelling a "Schema stats" sample no longer brings up an IDE error report. If your data comes as .ldjson.gz or .jsonlines.gz, it now opens the same way as .jsonl.gz, and plain .ldjson or .jsonlines files get the JSONL Lens tab alongside the IDE's editor.
- 1.9.2published 2026-09-23
JSONL Lens now offers "Feedback" between "Write a review" and "No thanks" in its one-time review prompt, as links in one row. "Feedback" opens a feature request form on GitHub titled "Improve JSONL Lens 1.9.2", with your IDE already filled in, and nothing is sent until you submit it there. The thank-you prompt after a purchase now has the same three links.
- 1.9.1published 2026-09-23
The status line, the Pro line and two new links now sit in a footer under the grid, where a narrow editor no longer hides them. "Try Pro free for 30 days" shows on a machine where the trial has not run and opens the IDE license dialog, where the trial starts. Once a trial has run there, the same spot reads "Get Pro" and leads to the pricing page. While Pro is running, bought or on trial, the spot is empty. "Write a review" shows in every state and opens the reviews page of the listing. The toolbar wraps onto a second row instead of hiding its right end. A "Schema stats" run that finds fields now counts toward the one-time review prompt. The trial notices and the review prompt now wait until the IDE has finished reading the license, so a licensed machine is never told at startup that its trial has ended.
- 1.9.0published 2026-09-19
The Pro trial notices now end with a question and the support address. A key issued for another plugin no longer opens JSONL Lens Pro. A key for JSONL Lens itself is unaffected.
- 1.8.0published 2026-09-17
The stats dialog gains a Duplicates action, free on both tiers. It walks every record once and says how many repeat an earlier record exactly: two records are the same record when they hold the same values with their keys in any order and any whitespace, while a number keeps its text, so 1 and 1.0 stay two records. The first occurrence is kept; a truncated record is skipped and counted, and one that could not be parsed is counted too and kept, uncompared. When repeats were found, the Duplicate Records dialog offers Export Clean Copy, a Pro action: it writes the survivors to a new .jsonl, each line as read, after a header record on line 1 that names the operation, and lists the removed records in a .removed.jsonl file beside it, each with its position, its byte offset and the record it repeats. The open file is never written, and a cancel leaves neither file. The Export Records dialog now also takes a .profile.html, .profile.md or .profile.json name and writes a column profile of the selected records instead of the records: for every field the sample shows (up to 256), the count, the nulls and the type mix, then the min, max, mean, quartiles and histogram of a number field, the lengths, distinct count and top values of a text field, the trues and falses of a boolean field; the duplicate-record count heads the report and the correlations between number fields end it. The HTML report is self-contained, and the Markdown and JSON reports carry the same measures; the balloon at the end offers Open report. A grid cell whose text is an http or https address opens in the browser on a double-click, and its context menu offers Copy value and Open link; in the Pretty and Raw panes a Ctrl-click (Cmd on a Mac) on an address opens it. The address goes straight to the browser and the plugin fetches nothing. A Pro trial that is about to end now says so a week before the end and again on its last day, and each notice names what Pro adds, with a See pricing action that opens the marketplace pricing tab. A large record is also read and parsed with less memory than before.
- 1.7.0published 2026-09-09
Export to Parquet, a Pro action. Pick a .parquet name in the Export Records dialog, where the filter now lists Parquet beside JSONL and CSV, and the current page or the matches of a search or a filter are written as one Parquet file. The columns are the dot paths a sample of the file shows, in the order the grid uses, up to 256 of them. Each column takes its type from the values the exported records hold: whole numbers become int64, any other number double, strings text, true and false a boolean column. A nested object or array is written as the JSON text of itself in a JSON column. Where the records disagree on the kind the column is text, and a field a record does not have is null. Records the reader cut short and records that do not parse are left out and counted on the status line, the same rule the CSV export follows. The open file is refused as a destination, as it is for CSV and JSONL. A cancelled export leaves no file behind, not even the scratch file the writer keeps beside the destination while it works. When the export finishes, the balloon offers Open exported file, and the file lands in Parquet Lens when that is installed; when nothing installed opens Parquet files, the click says so instead and offers the Parquet Lens page. The plugin download is larger than before, because the Parquet writer now ships inside it. The Theme picker ends with two locked entries now: lamplighter, whose line in the open list reads "unlocks when you share Lens with a colleague", and catacombs, whose line reads "unlocks the first time Pro runs for you". Pick a locked one and the plugin opens the way to earn it. For lamplighter that is the share card, also under Help as Share JSONL Lens: plain text for a colleague with the marketplace page, the family page beside it and a referral code of this install's own, under the line "enter it under Theme in any Lens plugin". Copy share card earns the theme here, and a colleague who picks lamplighter in their own Theme picker, types that code into the share card and presses Unlock with code earns it there. Catacombs opens the first time Pro runs for you, and a trial counts. An earned theme stays whatever the license says. Four night themes join the picker, Duskhollow, Abyss, Obsidian and Moonlit Garden; trying one is free for the open window and keeping it is Pro, like the eight.
- 1.6.0published 2026-09-09
The encoding sniffer now recognizes Polish files written in Windows-1250, ISO-8859-2 or CP852, and the Encoding menu lists all three so a file can be switched by hand. A blocked gzip file, the kind bgzip writes, opens in place: the reader seeks into the file's blocks and inflates them where they lie, so such a .jsonl.gz opens with no temp copy, and the status line says so ("Read in place" with the block count, then "no temp copy"). An ordinary .jsonl.gz still decompresses to a temporary file the way it did, pre-flight refusal included. Reload walks a blocked file again before it re-indexes, so blocks appended since the tab opened come into view, and a file rewritten in the meantime as ordinary gzip is refused by name ("is no longer blocked gzip, so it cannot be read in place. Close the tab and open it again.") rather than read through a map that no longer describes it. The decompression note states a floor only when the file on disk does not already beat it, and an empty .jsonl.gz is refused as "Not a gzip file: the file ends before a gzip header" instead of "Not a gzip file: null".
- 1.5.1published 2026-09-07
A Pro trial started from your JetBrains account no longer stays unlocked after its 30 days. The plugin used to check only the key's signature, which stays valid, so a lapsed trial kept Pro open and was even taken for a purchase: the trial-ended notice never showed, and the thank-you could go to someone who had not bought. The trial's end date is now read from the key itself. Paid keys and perpetual fallback licenses work exactly as before. A .jsonl.gz is now asked how big it will get before it is decompressed. A file that cannot fit in temp space is refused up front, with both numbers named, instead of failing after minutes of work, and the note under the file says the size while it runs. A bgzip file gives an exact size; for any other gzip file the number is a floor and the note says so. The schema stats table and the record pane say why they are empty instead of showing a blank grid or a blank pane.
- 1.5.0published 2026-09-05
Find in file now takes regular expressions. Tick the .* box next to Aa and the Find field tests its pattern against each record on its own, so ^ and $ mean the start and end of a record, and hits highlight in the Raw tab as before. A pattern that backtracks too far on a record is skipped and the match line says how many were, and one that keeps doing it stops the search with a message instead of stalling the viewer. Free, like the rest of Find.
- 1.4.4published 2026-09-04
A JSON string escape written as backslash u followed by a sign used to be accepted and decoded as if the sign were a hex digit. It is rejected now, like every other malformed escape. String values in filter queries get the same fix.
- 1.4.3published 2026-09-03
The one-time review ask now waits for five moments of use (a file opened, indexed and shown as a grid, a search with hits, an export) instead of three, so it comes after real work rather than right after the first open. The trial tally that leads the trial notices moved into the shared Lens platform, so every Lens plugin names what Pro did during its trial in the same words. Nothing else changes.
- 1.4.2published 2026-09-03
A Pro trial that is about to end says so once, with a link to pricing, and a trial that has ended says so once. Pro gate messages and the listing now say what is true: each Lens plugin has its own free 30-day trial.
- 1.4.1published 2026-09-02
Themes: an untinted cell no longer inherits the previous cell's tint, and switching back to Default clears every tint at once; the renderer now states both colors on every cell. A kept theme comes back only while the license holds, so a lapsed trial opens on Default. Export refuses the open file as its destination and asks for another name.
- 1.4.0published 2026-09-02
Themes: pick a look for the whole tab from the toolbar. Eight strands shared across the Lens family (default, hacker, cyberpunk, goblincore, neon, nosferatu, halloween, blue lagoon) restyle the record table: record numbers and JSON numbers take the number tint, strings and booleans the text tint, nested arrays and objects the structure tint, with row striping and the selection color from the strand; the default look is unchanged and null values take no tint in any strand. Any strand tastes free for the open window, and keeping one set is Pro.
- 1.3.2published 2026-09-01
Grid fixes: the selected record survives a switch between Grid and Preview, and Reload keeps the grid instead of dropping it. When a sample has no fields to show, the Grid box unchecks itself and the status line says why; the one-time review ask now counts a search or an export too, not only opened files.
- 1.3.1published 2026-08-31
No more clipped toolbar buttons: nav, search and filter rows wrap to a second line when the panel gets narrow. A few titles and tooltips traded long dashes for plainer punctuation.
- 1.3.0published 2026-08-29
The encoding release. A .jsonl file in EUC-KR / CP949 or Shift_JIS / CP932 is detected on open and rendered correctly, and an Encoding selector on the search row overrides the guess when it has to - display and search both work in the file's own encoding, on files of any size. Subscribers get a one-time thank-you the first time the plugin sees its license, then a quiet Supporter-since line in the footer from that day on - stored locally, and still no network calls. The free tier stays free.
- 1.2.1published 2026-08-27
The plugin name now says both of the format's names, JSON Lines and NDJSON, so the viewer is easier to find in search. Nothing else changes.
- 1.2.0published 2026-08-26
Find in file gets two upgrades: a Matches only checkbox that pages through just the matching records, and search-term highlighting in the Raw tab. Both free, like the rest of search. The Help menu gains a Report a JSONL Lens Problem action that opens a pre-filled issue on the family tracker - you see the whole text before anything is sent, and the plugin still makes no network calls. The panel footer now names what Pro adds, or how many trial days are left, and the plugin asks exactly once for a review after the third fully indexed file.
- 1.1.0published 2026-08-14
Maintenance release. Cleans up the two deprecated platform API calls flagged by the Marketplace verifier; where a newer IDE provides the current save and registration APIs, those are used instead. No feature changes. Everything free stays free.
- 1.0.0published 2026-08-14
Out of early access. Everything that was free stays free; adds an optional Pro tier: whole-file filter queries, export to .jsonl/CSV, and exact full-file schema stats.
log lens
- 1.9.12published 2026-10-17
In a plain-text log, a line without a time stamp that opens with a level word more severe than the stamped line above it counts under its own level again, in the level chips, in follow and in Log Statistics. 1.9.11 counted such a line under the stamped line, so a Go panic printed after a line from Go's log package (a time stamp and no level) counted as OTHER and was missing from the FATAL chip, and a JVM WARNING line or an "ERR!" line from a package manager after an INFO line was missing from WARN and ERROR. A level word further along a line changes nothing: the lines after the panic, an exception message that names FATAL in its text and every stack trace line still count under the stamped line above them.
- 1.9.11published 2026-10-16
The ERROR chip keeps every stack trace under its error: a line that continues a record (an indented frame, a Caused by or Suppressed line, an elision, and in a plain-text log any unstamped line under a stamped one) counts under the level of that record in the chips, in follow and in Log Statistics, while the table still shows each line on its own level. On a 1 GiB Spring Boot console log the chip previously counted 33,259 headlines and no trace; it now counts 1,688,296 lines in 7.3 s against 7.5 s before. The Pro query keeps up to 1,000,000 matches, previously 10,000, and a query that reaches the cap names the line and time where it stopped and offers Continue. On the same log the query for the ERROR level previously kept the first 10,000 headlines in 23.8 s and never reached an incident of 13,705 errors at 02:10; it now keeps all 33,259 ERROR headlines of 4,955,770 lines in 52.9 s. A blocked gzip log with a damaged block trailer is refused with "Decompression failed: Corrupt gzip stream: Corrupt GZIP trailer", previously it opened with that block missing; a .gz cut short is refused with a message that says so; a line opening with a byte order mark is read like any other line, its time shown and counted.
- 1.9.10published 2026-10-14
Selecting a very long line no longer freezes the IDE. The detail pane opens at once with the first 256 KB of the line, the header says how long the whole line is, and "Copy whole line" puts all of it on the clipboard. Reload, or a log file that rotates while you follow it, now forgets a filter query that was still running, so matches from the file as it was no longer show up in the new one. A followed file with a filter query keeps its new matching lines in file order, so none go missing when a level filter is on too. When Log Lens fails, the IDE's error dialog now offers to send a report to JetBrains Marketplace; a report is sent only when you choose to send one from that dialog, and nothing is sent on its own. The "Log Lens Log" file type and icon cover the rotated .log.1 to .log.9 and the .gz form of each, as in 1.9.4; a later generation such as .log.12 still opens on the Log Lens tab.
- 1.9.9published 2026-10-13
Open exported file, the hand-off of a JSONL export to JSONL Lens and the sample in the muster book now go through the navigation call of the IDE rather than an editor call IntelliJ 2026.3 deprecates. You will not see a difference, except that a file already open in another split comes forward instead of opening a second copy.
- 1.9.8published 2026-10-13
A JSON log line longer than 8 KB is now counted under the level in its level field, in the level filters and while following. Before, only the first 8 KB of a line was read for its level, so a logstash-logback ERROR line with a long stack trace counted as OTHER and was missing from the ERROR filter while the table showed ERROR, and a pino warning with an err object counted as an error.
- 1.9.7published 2026-10-10
A .log, .out or .err file too large for the IDE's text editor, rotated logs included, now opens on the Log Lens tab first, with the IDE's preview beside it. A gzipped log now opens on the Log Lens tab first at any size. Files the text editor can show still open there first, and it now carries a banner, "Browse this file in Log Lens.", with "Open in Log Lens" to switch tabs and "Don't show again" to hide it for good.
- 1.9.6published 2026-10-09
The trial notices "Log Lens Pro trial ends in ..." and "Log Lens Pro trial has ended" now end with the price, "Pro is USD 2.90 a month or USD 29 a year for individual use", and a "See pricing" button that opens the marketplace page. A followed file with a filter query on it stops filtering new lines when the trial ends, as the 1.9.0 note said it would; until now the query kept running on the open tab. During a trial you may see one request for a marketplace review, with "Write a review", "Feedback" and "No thanks".
- 1.9.5published 2026-10-08
With more than a week of a Pro trial left, Log Lens now says once when you have used a Pro feature. After a filtered follow, a whole-file filter query, an export or Log Statistics, a notice titled "Log Lens Pro trial" names it ("That filter query was Pro."). It gives the days the trial has left and says what stays free ("Level filters and Find stay free."). The notices as the trial ends now lead with a count of those actions ("This trial: ..."), and a Find, which is free, no longer counts. The "Pro trial" line in the footer adds how many Pro actions the trial has run. At IDE start the footer shows no Pro line and no trial link until the IDE has read the license, so a buyer or a running trial is no longer offered Pro while it loads. Rotated logs from .log.10 to .log.99, and the .gz form of each, now get the "Log Lens Log" file type and icon, which stopped at .log.9 before; the Log Lens tab already opened them.
- 1.9.4published 2026-10-07
Log Lens now opens .out and .err files and gzipped rotated logs, and the "Log Lens Log" file type and icon cover .log, .out and .err, the rotated .log.1 to .log.9 and the .gz form of each, while a binary such as a.out gets no Log Lens tab. Files saved in an older code page (Western European, Hungarian, Turkish, Cyrillic, Chinese GBK or GB18030, Japanese EUC-JP) open readable, and the "Encoding" list offers each one. A stamp with a comma before the milliseconds, or an offset without a colon, keeps its time of day in "Log Statistics". The stray B some colored output left behind is gone. File errors say what went wrong (the file was not found, permission denied), cancelling a .gz says "Decompression cancelled", a log the IDE cannot read says "Cannot open" and why in its tab, and a .log.gz keeps its own name in titles and the Export dialog.
- 1.9.3published 2026-09-23
Log Lens now keeps the text color and bold of an ANSI-colored line in the "Pretty" tab when the line also sets a 256-color or truecolor background or underline color. The extra numbers in those codes used to be read as styles of their own, so the style could reset partway through the line or the text could change color. The one-time review prompt and the thank-you prompt after a purchase now offer "Feedback" between "Write a review" and "No thanks".
- 1.9.2published 2026-09-23
At a narrow editor the paging, level, find and query rows now wrap onto more rows instead of hiding their right end. The status line, the Pro line and the "Marketplace page", "Try Pro free for 30 days" and "Write a review" links now sit in a footer at the bottom of the view, where the project pane no longer hides them. When the editor is narrow, the Pro line and the links move below the status line, and a status line longer than the row shows its whole text as a tooltip. The trial notices and the review prompt now wait until the IDE has finished reading the license, so a licensed machine is never told at startup that its trial has ended, and a thank-you prompt no longer follows a trial notice in the same sitting.
- 1.9.1published 2026-09-21
Two links now sit in the Log Lens footer. "Try Pro free for 30 days" shows on a machine where the trial has not run and opens the IDE license dialog, where the trial starts. Once a trial has run there, the same spot reads "Get Pro" and leads to the pricing page. While Pro is running, bought or on trial, the spot is empty. "Write a review" shows in every state and opens the reviews page of the listing. A Parquet export now carries the parsed stamp beside the text one. The new $time_utc column holds a timestamp on every line whose stamp the plugin can read, so those lines sort and range as time, and the CSV columns are unchanged.
- 1.9.0published 2026-09-19
Follow with a filter now stops when the license lapses mid-session. The Pro trial notices now end with a question and the support address. A key issued for another plugin no longer opens Log Lens Pro. A key for Log Lens itself is unaffected. After a purchase, a balloon says thank you once on this machine. Its one action is "Write a review".
- 1.8.0published 2026-09-17
Log levels are read from more shapes of line. A logcat prefix such as W/System.err: is a warning before the words after it are looked at. The threadtime and time forms that logcat prints classify by their level letter. A numeric level from pino or bunyan reads its own ladder, so level=30 is info and 50 is error. The ECS log object with a level inside it is read, and a level= pair inside a plain line counts the way a level word would. A blocked-gzip .log.gz, the kind bgzip and the log shippers built on it write, opens in place with no temp copy. The note under the file says it was read in place and gives the block count. Reload picks up blocks appended since the open, and Follow now catches the blocks a shipper keeps appending instead of waiting on Reload. An http or https address in a log line opens in the browser: Ctrl-click it in the message column or the detail pane (Cmd on a Mac), or pick Open link from the line's right-click menu. The address is handed to the browser and nothing is fetched. Lines made of one long dotted token no longer stall the detail pane while their source links are looked for. A Pro trial gets a notice a week before it ends and again on its last day. Each notice names what Pro adds and offers a See pricing action that opens the marketplace pricing tab. A level filter that narrowed the file and a follow that showed new lines now count toward the one-time review ask.
- 1.7.0published 2026-09-09
Export to Parquet, a Pro action. Pick a .parquet name in the Export Lines dialog, whose filter reads Log, JSONL, CSV or Parquet, and the current page, the filtered view, the search matches or the query matches are written as one Parquet file. The columns are the ones the CSV export has, $level, $time and $message first and then one column per parsed field in the order the fields first appear, and a $raw column at the end holds each line exactly as it was read, so nothing the parser did not understand is lost. Each field column takes its type from its values: a number written as an integer becomes int64, any other number double, true and false booleans, text stays text, a nested object or array is written as JSON text, a line without the field leaves a null, and a field that mixes kinds is written as text. $time is text in this cut. The open file is refused as a destination, "That is the open file. Pick another name.", as it is for every export, and a cancelled export leaves no file behind, not even the scratch file the writer keeps beside the destination while it works. When the export finishes, the balloon offers Open exported file, and the file lands in Parquet Lens when that is installed. The Theme picker has two more entries at the end, lamplighter and catacombs, each with a padlock and its own line in the open list, "unlocks when you share Lens with a colleague" and "unlocks the first time Pro runs for you". Pick a locked one and the plugin opens the way to earn it. For lamplighter that is the share card, also under Help as Share Log Lens: the marketplace page, the family page and a referral code of this install's own. Copy share card earns the theme here; a colleague who types the code into their own share card, reached by picking lamplighter in the Theme picker, and presses Unlock with code earns it on their side. Catacombs opens the first time Pro runs for you, a trial included. An earned theme stays whatever the license says. Four night themes join the picker, Duskhollow, Abyss, Obsidian and Moonlit Garden; trying one is free for the open window and keeping it is Pro, like the eight.
- 1.6.0published 2026-09-09
Polish logs in Windows-1250, ISO-8859-2 or CP852 open with their letters intact, and the Encoding menu lists each of them. Opening a compressed log now says what the wait will cost: a .log.gz is decompressed to a temporary file before its first line can show, and the note under the file reads "Decompressing" with the file name and the temp space it needs, and "to at least" that space when the gzip container can only prove a floor. That floor is stated only when it stands at or above the compressed size, since a smaller one reads as nonsense, and an exact size is always stated. The footer of a one-line file now says "1 line", and a single search hit reads "1 / 1 matching line".
- 1.5.1published 2026-09-07
A trial key now unlocks Pro only through the trial's last day. Through the JetBrains account flow a trial arrives as a signed license key carrying "trial": true and the end date in paidUpTo; Log Lens verified the signature and nothing else, so the key kept Pro open after the trial ran out. The lapsed key also looked like a paid license from the inside, which is why the "Log Lens Pro trial has ended" notice never showed while the "Log Lens Pro is active" thank-you went to someone who had not paid. Paid keys and the perpetual fallback licenses read as before, and the offline trial, the kind without an account, was never affected: its stamp carries its own expiry. Export gains the narrowed view. With the level chips set to ERROR, Export used to offer the current page alone, one page a save; the menu now adds "Filtered view (12,408 lines)", the whole narrowed set, and skips it when the page or the query matches already hold exactly those lines. Opening app.log.3.gz reads the gzip container before any temp file is written. If the temp directory cannot hold the decompressed size, the open is refused at once with "Not enough temp space: this file expands to at least 8.20 GB" and the free-space figure. Before, the same file failed only after the whole decompression had run.
- 1.5.0published 2026-09-05
Plain log lines with a dotted day-first date, 04.09.2026 15:42:01, now carry their time, and so do year-first dates written 2026.09.04 or 2026/09/04 and Apache access log stamps like [10/Oct/2026:13:55:36 -0700]. The time shows in the detail pane, a filter query can match it through $time, and the Pro time histogram places those lines on the same clock as ISO ones, with the Apache offset applied, so the statistics cover such a file instead of reporting it as unstamped. An all-numeric slashed date like 04/09/2026 stays unstamped on purpose, since nothing in the line says which number is the day.
- 1.4.3published 2026-09-03
Both trial notices, the one that a Pro trial is about to end and the one that it has ended, now open with the trial's own record: how many exports wrote lines and how many searches found matches while it ran. Nothing from outside the trial is counted. The single review ask waits for five useful moments now instead of three.
- 1.4.2published 2026-09-03
A Pro trial that is about to end says so once, with a link to pricing, and a trial that has ended says so once. Pro gate messages and the listing now say what is true: each Lens plugin has its own free 30-day trial.
- 1.4.1published 2026-09-03
The muster book. Choosing a color theme now leaves a mark: a small muster book joins the viewer for those who have ever picked a lens, holding a few pages that are earned rather than shown, one closed door per lens chosen, and a bundled sample - a Korean household register stored in EUC-KR, read the way 1.3.0 taught the viewer to read. A few quiet things for those who choose a lens. Also new and free on every theme: Compare for rotation families - open a log that has siblings like app.log.1, click Compare, and read the strata side by side, with a streaming first-divergence summary instead when a file is too large for the diff viewer. On the default theme the muster book does not exist at all: nothing extra to find, exactly the advertised tool. The free tier stays free.
- 1.3.1published 2026-08-31
Two of the dark trace colors, Cyberpunk and Goblincore, sat below the readability floor; both are brighter now, and a contrast check keeps every look legible from here on. A few interface messages also traded their long dashes for plainer punctuation.
- 1.3.0published 2026-08-29
The encoding release. Log files in EUC-KR / CP949 and Shift_JIS / CP932 are detected on open and render correctly, with an Encoding selector in the toolbar for manual override - display and search both honor the chosen charset, so legacy Korean and Japanese logs finally read like they should. A new Theme selector restyles level and ANSI colors with five looks: Default, Hacker, Cyberpunk, Goblincore, and Blue - Default keeps exactly the colors you already know. Subscribers now get a one-time thank-you the first time the plugin sees its license, and a quiet Supporter-since line in the footer from then on. The free tier stays free.
- 1.2.0published 2026-08-26
The review groundwork release. Report a Log Lens Problem now sits in the Help menu and opens a pre-filled issue on the family tracker - you see the whole text before anything is sent, and the plugin still makes no network calls. The panel footer names what Pro adds, or how many trial days are left, and the plugin asks exactly once for a review after the third fully indexed file. ANSI colors render in the viewer, match counts show for every search, and .log.gz opens directly. Levels, follow mode, and the whole free tier stay free.
- 1.1.0published 2026-08-14
*.log files now have a real file type registration with an icon in Settings | File Types; the editor provider and .log.N / .log.gz handling are unchanged, and the plain text editor stays available. After a .jsonl export, a notification offers to open the result in JSONL Lens when it is installed; when it is not installed, a one-time suggestion points to it.
- 1.0.0published 2026-08-14
Out of early access. Everything that was free stays free, plus new free follow mode (rotation-safe tail) and jump-to-source from stack-trace lines. Adds an optional Pro tier: filtered follow, whole-file filter queries, export to .log/.jsonl/CSV, and per-level time histograms.
parquet lens
- 1.9.10published 2026-10-17
Feather files that pandas or pyarrow write at their defaults, and Arrow files polars writes under lz4, showed their columns and then no rows. The first page, Find, the filter, the sort and exact stats stopped on "LZ4 decompression failed: Dependent block stream is unsupported", and an export wrote no rows. For pandas and pyarrow files this began once a column passed one 64 KB lz4 block, about 8,000 rows of 64-bit numbers; polars files failed at any size. The lz4 library these tools use links each block to the one before it, and the Arrow reader now follows those links the way the Parquet reader already did, so these files read in full.
- 1.9.9published 2026-10-15
The profile report kept up to 100,000 of a column's distinct strings to count them, hundreds of megabytes on a column of long values; it keeps a 64-bit hash of each now, about 2 MB a column at the cap. A buyer whose subscription has lapsed sees Get Pro in the footer, and the gate says the trial has ended; 1.9.8 offered a second free trial there, which JetBrains does not grant. The footer reads the license key eight times on a refresh and used to check its certificate chain every time; the verdict is kept per key now.
- 1.9.8published 2026-10-13
The exported file, the profile report and a JSONL export handed to JSONL Lens now open by way of the IDE navigation call, the one Go to File uses. A file already showing in another split is brought to the front instead of a second copy. The editor call these used until 1.9.7 is deprecated as of IntelliJ 2026.3.
- 1.9.7published 2026-10-13
HDF5 files (.h5, .hdf5, .he5) open in a new HDF5 tab, with the group tree beside the grid and, under the grid, the attributes of the group or dataset you pick. The first page of any dataset is free, and a dataset of three or more axes shows one slice of its first two, with a picker for each other axis. Parquet Lens Pro adds paging past the first page of a dataset or slice, a search of names and attribute values from the "Search names and attributes:" box, and "Export…", which writes every row of the dataset or slice on screen to CSV or Parquet; "Copy page as CSV" stays free. What the HDF5 reader cannot decode shows as unknown with the reason, as in "the szip filter (id 4), which this reader does not decode". The largest and smallest text values a column reports are the ones Parquet states, with emoji and fullwidth characters ordered as Parquet orders them. NaN is no longer reported as a maximum, and a column holding only NaN reports no minimum or maximum. When one row group states no minimum or maximum, the file-level bound is unknown; the other groups' bounds are not borrowed for it. A cell the reader could not decode is shown as unknown, never as null, and the Stats tab counts those cells.
- 1.9.6published 2026-10-09
The trial notices "Parquet Lens Pro trial ends in ..." and "Parquet Lens Pro trial has ended" now end with the price, "Pro is USD 2.90 a month or USD 29 a year for individual use", and a "See pricing" button that opens the marketplace page. During a trial you may see one request for a marketplace review, with "Write a review", "Feedback" and "No thanks".
- 1.9.5published 2026-10-09
Numbers and dates in the Parquet Lens grid now follow the IDE's format locale, with a Local format checkbox beside Theme; the stored value shows on hover, and copy, search, filter, sort and export keep using it. A timestamp keeps its nanoseconds when copied or exported. A file cut short says "Parquet file magic missing at end of file (truncated or still being written?)". Exact stats count every distinct value of a binary, list or map column and stay on the Stats tab until a Reload or a new run, and a top-level column with a dot in its name keeps its own codec and statistics. Filter, Sort, Exact stats, Search and Export run only on the file the grid opened; a rewrite since the open refuses them with "The file changed on disk. Reload, then try again." After a Reload that carries a filter or a sort, a rewrite that lands before the view is back no longer leaves the grid empty: the first page of rows shows with that message, and the next Reload carries the view again. Go to row, or a Find that jumps to a hidden row, during that restore now drops the carried view, where the next Reload, filter or sort used to bring it back. With more than a week of a Pro trial left, the first Pro action is named once, as in "That filter query was Pro.", and the footer's trial line counts the Pro actions used. The footer shows no Pro line at IDE start until the license is read.
- 1.9.3published 2026-09-23
Parquet Lens now notices when the open file changes on disk: a bar above the tabs offers "Reload" beside the words "The file changed on disk." Nothing reloads on its own. When the columns are unchanged, a reload now brings back the filter and the sort, then the page. With neither a filter nor a sort set, it goes back to the selected row. If the columns changed, both are cleared, with a note saying why. A reload without a license keeps the page and does not ask for one. Two links now sit in the Parquet Lens footer, under the tabs, beside the status line and the Pro line. "Try Pro free for 30 days" shows on a machine where the trial has not run and opens the IDE license dialog, where the trial starts. Once a trial has run there, the same spot reads "Get Pro" and leads to the pricing page. While Pro is running, bought or on trial, the spot is empty. "Write a review" shows in every state and opens the reviews page of the listing. At a narrow editor the Pro line and the links move below the status line instead of crowding it, and a status line longer than the row shows its whole text as a tooltip. The trial notices and the review prompt now wait until the IDE has finished reading the license, so a licensed machine is never told at startup that its trial has ended.
- 1.9.2published 2026-09-19
The two notices before a Pro trial ends now finish with a question and the support address. A key issued for another plugin no longer opens Parquet Lens Pro. A key for Parquet Lens itself is unaffected.
- 1.9.1published 2026-09-17
The listing now names every compression the reader opens, lz4 in each of the layouts it has been written in, and a test pins that list to the codec table; the no-row-cap and nested-type sentences carry tests of their own, with a sixty-thousand-row file read to its last row and nested and logical cells rendered as values.
- 1.8.0published 2026-09-11
The profile report, a Pro export. Pick a name ending in .profile.html, .profile.md or .profile.json in the Export Rows dialog and the rows you chose are read once and written out as a report rather than a copy. Every column gets its row, null and empty counts and the kinds of value it holds. A numeric column adds the min, max, mean and standard deviation, the quartiles, a histogram and an outlier count; a text column its lengths, its distinct count and its most frequent values; a date or timestamp column the earliest and latest value, the median step and the largest gap. The whole table gets a duplicate-row count, which stays exact up to two million rows, and a correlation matrix over up to forty numeric columns. Where a figure came from a sample rather than from every row, the report says so beside the number, and it says the same wherever a count stopped at a cap. When the export finishes, the Export finished balloon offers Open report: the HTML opens in your browser, the Markdown and the JSON in an editor tab. A cancelled profile leaves no file, and the open file is refused as a destination, as it is for the other exports.
- 1.7.0published 2026-09-09
Export to Parquet, a Pro action. Pick a .parquet name in the Export Rows dialog, whose filter now reads CSV, JSONL or Parquet, and the rows you chose, all of them, the search matches or the filter matches, are written as one snappy-compressed Parquet file. That is the whole conversion: an Avro, TFRecord, Arrow or Feather dataset becomes Parquet in one step. A column keeps the type its file declares where the writer has it, so int64, float64, text, bytes, bool, date, timestamp and a decimal of up to 18 digits go out as they came in. An int32 or float32 column widens to int64 or float64, a nested column lands as JSON text, and a value with no Parquet shape of its own, a time of day for instance, is written as the text the grid shows. A raw binary column keeps its bytes whatever Bytes as is set to; the charset applies only where a cell has to become text. TFRecord columns are sampled from the first records rather than declared, so there the values alone decide each type. The file that is open is refused as a destination with "That is the open file. Pick another name.", as it is for CSV and JSONL, and a cancelled export leaves nothing behind, neither the file nor the scratch copy the writer keeps beside it while it works. When the export finishes, the Export finished balloon offers Open in Parquet Lens, and the new file opens in its own tab here.
- 1.6.0published 2026-09-09
Bytes as, a new choice beside the sort controls, reads a raw binary column as text. Parquet writers that never mark a column as a string leave it as bare bytes, and the grid showed a hex dump with its byte count. Pick UTF-8, Windows-1250, ISO-8859-2, CP852, EUC-KR, Shift_JIS or Windows-1254 and the column decodes, in the grid, the detail pane, find, copy page and export alike; a value that is not text under that charset keeps its hex, so an image column stays as it was. The export popup has a row for the CSV dialect: "RFC 4180 (comma)" as before, or "Excel EU (semicolon, decimal comma)", which is what Excel and LibreOffice expect on a European locale, where the fields are split on semicolons and floating point and decimal cells carry a decimal comma. The choice is remembered across files. The lz4 reader knew one layout, the hadoop block frame Spark and Hive write. It now opens every layout the legacy lz4 id has been used for: the standard LZ4 frame whether its blocks are linked or independent, plus the bare raw block that fastparquet and older arrow write. A page that fits no layout is refused by name, with both sizes in the message, and a page header claiming more than lz4 can produce is refused before any buffer exists.
- 1.5.2published 2026-09-07
A trial that came from the JetBrains account page did not end. The IDE stores such a trial as a signed activation key with the trial's last day in it, and the plugin looked at the signature only, which stays valid for as long as the key exists, so Pro stayed on past the 30 days and the notice that the trial had ended never appeared. Paid keys and the perpetual fallback license read the way they always did. The free viewer is not touched.
- 1.5.1published 2026-09-05
Parquet files compressed with the older LZ4 codec, the one Spark and Hive write when asked for lz4, now open. Such a file used to fail with a stack trace as soon as its first page was read, and an export from either tool no longer needs re-saving with a different codec before it opens here. A file compressed with a codec the plugin cannot read, brotli for example, is refused by name when it opens rather than failing on the first page.
- 1.5.0published 2026-09-04
TFRecord files (.tfrecord, .tfrecords, .tfrec, gzip or zlib compressed too) open in the same tab. Records are indexed by their framing, tf.Example and SequenceExample features become columns with their values decoded, and byte features show as text or as an image label with its size.
- 1.4.1published 2026-09-04
The plugin name now says Avro alongside Parquet, Arrow and Feather; nothing else changed.
- 1.4.0published 2026-09-04
Avro object-container files (.avro) open in the same tab as Parquet, Arrow and Feather. The row count comes from the block headers, blocks decode only as you page through them, and files compressed with deflate, snappy or zstandard open without unpacking them first. Nested records, arrays and maps show as readable cells; decimals, dates, times, timestamps and uuids decode to their values.
- 1.3.3published 2026-09-03
The trial notices now say what the trial did. The notice that a Pro trial is about to end, and the one that it has ended, open with a count of the exports and searches made while the trial ran (an export that wrote rows, a search that found something); nothing from before or after the trial is counted. The one-time review ask now waits for five moments of use instead of three (a file opened, a search with hits, the grid, an export), so it arrives after real use and not right after the first file opens.
- 1.3.2published 2026-09-03
A Pro trial that is about to end says so once, with a link to pricing, and a trial that has ended says so once. Licensed users now get the thank-you and the Supporter line in the footer, and the family link stays visible. Pro gate messages and the listing now say what is true: each Lens plugin has its own free 30-day trial.
- 1.3.1published 2026-09-02
Themes: an untinted cell no longer inherits the previous cell's tint, and switching back to Default clears every tint at once; the renderer now states both colors on every cell. A kept theme comes back only while the license holds, so a lapsed trial opens on Default. Export refuses the open file as its destination and asks for another name.
- 1.3.0published 2026-09-02
Themes: pick a look for the grid from the toolbar. Eight strands shared across the Lens family (default, hacker, cyberpunk, goblincore, neon, nosferatu, halloween, blue lagoon) restyle the data grid with text, number and blob tints by column type, row striping and selection; the default look is unchanged and null stays quietly dimmed in every strand. Any strand tastes free for the open window, and keeping one set is Pro.
- 1.2.3published 2026-09-02
The selected row stays selected through a page size change and a reload from disk; the grid used to drop it whenever the page came back. A finished export now counts toward the one-time review ask the way it does in the other Lens plugins, and the ask follows a single rule across opening, find, the grid and export.
- 1.2.2published 2026-09-01
At narrow windows the paging toolbar used to print over the status line and the Pro line at the top of the Data tab; now that strip drops to its own row on the right when the two no longer fit, the toolbar wraps in the room it gains, and everything rejoins one row when the window is wide enough.
- 1.2.1published 2026-08-31
No more clipped toolbar buttons: every control row wraps to a second line when the window gets narrow. A few tooltips and status lines traded long dashes for plainer punctuation, and empty stats cells print a plain hyphen instead of a dash.
- 1.2.0published 2026-08-27
The review groundwork release. Report a Parquet Lens Problem now sits in the Help menu and opens a pre-filled issue on the family tracker - you see the whole text before anything is sent, and the plugin still makes no network calls. The panel footer names what Pro adds, or how many trial days are left, and the plugin asks exactly once for a review after the third file it opens cleanly. The listing says plainly what the plugin does not do. Everything free stays free.
- 1.1.0published 2026-08-14
After a JSONL export, a notification offers to open the result in JSONL Lens when it is installed; when it is not installed, a one-time suggestion points to it.
- 1.0.0published 2026-08-14
Out of early access. Everything that was free stays free - and dataset files now register their own file type and icon. Adds an optional Pro tier: whole-dataset filter queries, CSV/JSONL export, global sort, and exact full-scan statistics.
sqlite lens
- 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.
- 1.7.3published 2026-10-09
The trial notices "SQLite Lens Pro trial ends in ..." and "SQLite Lens Pro trial has ended" now end with the price, "Pro is USD 5.90 a month or USD 59 a year for individual use", and a "See pricing" button that opens the marketplace page. A query result in the console can now be exported, the Pro action the listing names; it had no menu entry before. During a trial you may see one request for a marketplace review, with "Write a review", "Feedback" and "No thanks".
- 1.7.2published 2026-10-08
During a Pro trial the first Pro action of the trial is named once, in a note with the days left and what stays free: when that action is a console run, it reads "That SQL query was Pro." and ends on "Browsing, Find (Ctrl+F) and the schema tree stay free." The footer's trial line counts the trial's Pro actions after the days left, and the notices before a trial ends lead with the same tally, in which a Find no longer counts. A console run, an export of rows, a whole-table sort, a diff, a save and a WAL frame list count as one each; paging and an undo do not. Find matches a number typed the way the grid shows it, so where the grid writes a decimal comma, as in German, Turkish or Brazilian Portuguese, a price typed with the comma finds its row. When the filter is pasted from a copied cell, the page filter keeps a row whose text holds the unit separator the grid paints as ␟. Until the IDE has loaded its license data the footer offers nothing, so a buyer or a running trial is not offered Pro at start, and it fills in when the data arrives.
- 1.7.1published 2026-10-07
The "SQLite Lens: page" task has a Stop now. When a whole-table sort is stopped before its first page comes, the table falls back to table order and the status line says "sort stopped (table order)"; a stop on a later page keeps the sorted page and the sort. Choosing another sort, changing the page size or closing the editor mid-sort froze the IDE until the sort finished; the sort is now told to stop and closed in the background. Find and the storage walk on the Info tab keep their own Stop when both run. Cancel ends a Find even where nothing matches, and a stopped walk no longer breaks the grid's next page. Each control character shows as its control picture, NUL as ␀. The Pro "Sort Whole Table" orders text the way a header click does, in the language's own order.
- 1.7.0published 2026-09-25
SQLite Lens 1.7.0 adds editing. Read-only stays the default, and the file is untouched until you click "Save… (Pro)": turn "Edit" on in the toolbar, change cells, add or delete rows, then review the exact rows and the SQL of the save, which runs in one transaction. Saving is Pro, and "Undo last save… (Pro)" takes the last save back until the file is closed or reloaded; "Keep a copy of the file before saving" in the preview, off until checked, leaves a copy of the database beside it before the write. These are free: Ctrl+V pastes a block of cells copied from a spreadsheet, Ctrl+C copies a block out, "Set column for visible rows…" stages one value on every visible row of the loaded page, and "Copy SQL" and "Save as .sql…" in the preview write the preview's statements to the clipboard or to a file. In a narrow editor the toolbar now keeps every control after the project pane is hidden and shown, the footer's links stay visible while its long line ends in an ellipsis with the full text on hover, and the table tree keeps at least 120 pixels with "Copy page as CSV" wrapping onto its own line. A filter that hides every row of the loaded page says so. The status line shows how many rows of the page the filter keeps. The first time a file with one of the plugin's endings such as .db opens, a single notice, once per installation, points to Settings | Editor | File Types, the page where an ending is handed to another tool. An ending you give to another type there stays with that type, except Text: a database under a Text mapping still opens here, because the text editor cannot show one. ignat10 asked for editing in a review; thank you.
- 1.6.3published 2026-09-23
SQLite Lens now opens .mbtiles, .spatialite, .sqlar and .fossil files the same way as .sqlite and .db files. Nothing else changed.
- 1.6.2published 2026-09-23
SQLite Lens now opens .sqlitedb, .s3db and .sl3 files the same way as .sqlite and .db files. For an empty table, the status line reads "no rows" instead of a row range. The trial notices and the review prompt now wait until the IDE has finished reading the license, so a licensed machine is never told at startup that its trial has ended.
- 1.6.1published 2026-09-21
Two links now sit in the SQLite Lens footer. "Try Pro free for 30 days" shows on a machine where the trial has not run and opens the IDE license dialog, where the trial starts. Once a trial has run there, the same spot reads "Get Pro" and leads to the pricing page. While Pro is running, bought or on trial, the spot is empty. "Write a review" shows in every state and opens the reviews page of the listing. The SQL console now has a wrap toggle and an undo stack, and the Info tab shows how much of the file each table and index takes.
- 1.6.0published 2026-09-19
Diff now checks the license each time it runs, and so does the row drill-in. The Pro gate message now names the WAL frame list. The Pro trial notices now end with a question and the support address. A key issued for another plugin no longer opens SQLite Lens Pro. A key for SQLite Lens itself is unaffected. After a purchase, a balloon says thank you once on this machine. Its one action is "Write a review".
- 1.5.0published 2026-09-17
Integer columns can be read as timestamps: right-click a column header and pick Show as timestamp with epoch seconds, milliseconds, microseconds or nanoseconds, with the unit the page suggests marked by magnitude, or Raw integer to turn it off. Each cell then shows the integer and the ISO-8601 UTC time in parentheses, the header tooltip names the unit, the inspector's Value tab carries the same reading, copy and export keep the integer, and the grid keeps the choice per file and table for the IDE session. The schema tree has a right-click menu now: every table, view, index, trigger and virtual table offers Copy Name and Copy Qualified Name, the second as SQL, qualified with main. and double-quoted only where the identifier needs them, and the grid header menu leads with Copy Column Name, and Copy Qualified Column Name when the grid shows a table or view. A CSV or JSONL export can carry its blobs whole (Pro): pick Whole table, blobs to files, or the same for the search matches, and every BLOB cell lands in its own file under a folder named after the export, with an index.jsonl that lists each file by row and column, while the row line keeps its preview. A file that is a SQLite database with a part that does not read now says so in plain words, the driver's detail staying in parentheses, and suggests what to try: copying it again together with any -wal and -shm files beside it if it came from a device or a server, or letting the write finish and pressing Reload if a program was writing it. A later read that lands on the damaged part says the file itself has not changed. A Pro trial hears from us twice before it ends: a notice when a week is left and another when a day is left, each naming what Pro adds, with a See pricing action to the marketplace pricing tab; a paid license sees neither.
- 1.4.0published 2026-09-11
A column profile report, the second Pro export. Give the export a name ending .profile.html, .profile.md or .profile.json in the Export Rows dialog and the open table, or the search matches, is walked once and profiled instead of copied: every column gets its row, null and empty counts and the kinds of cell it holds; a numeric column its min, max, mean and standard deviation, quartiles, a histogram and an outlier count; a text column its length range, distinct count and most frequent values; a date or timestamp column its earliest and latest value, the median step and the largest gap. The table as a whole gets a duplicate row count, exact up to two million rows and marked when it stops there, and a correlation matrix over its numeric columns, forty at most. The quartiles, the histogram, the outliers and the gaps come from a sample once a column holds more than a thousand values, and the report says so beside each of those figures. The HTML is one page with nothing loaded from outside, and the JSON keeps every number at full precision. The finished balloon offers Open report, and a cancelled run leaves no file. The Pro SQL console also runs several statements in one go now: separated by semicolons they run in order, each timed in the status line; a failing statement stops the run and is named with its line number, the driver's own message and how many ran before it; a semicolon inside a string, a quoted name or a comment stays text; Explain gives one plan per statement; the grid shows the last result set; a statement that would write is refused as before, while BEGIN, COMMIT and ROLLBACK go to SQLite as typed.
- 1.3.0published 2026-09-09
Export to Parquet, a Pro action. Pick a .parquet name in the Export Rows dialog, whose filter reads CSV, JSONL or Parquet, and the whole table or the search matches are written as one snappy-compressed Parquet file, each column typed from the values in it: integers as int64, reals as double, text as UTF-8 strings, blobs as bytes. A column of integers with a real among them is written as double, and a column that mixes text or blobs with numbers is written as the text the grid shows. Declared column types are not consulted, since SQLite keeps a type per value, and so does this export. The open database and its -wal, -shm and -journal files are refused as a destination, as they are for CSV and JSONL, and a cancelled export leaves no file behind, not even the scratch file the writer keeps beside the destination while it works. When the export finishes, the balloon offers Open exported file, and the file lands in Parquet Lens when that is installed. A new Pro tab, WAL (Pro): Read frames (Pro) reads the -wal beside the open database and lists the frames SQLite would replay from it, one row each, with the page number, whether the frame commits, the database size that commit leaves behind, its offset and its size. Above the rows the summary counts the committed frames and any unfinished tail apart, and names the frames left from an earlier cycle without listing them. The copied count from the -shm is added when that record can be trusted. Two read levels are offered, Verify with SQLite's checksums and Frame headers only (faster), and the summary names the one used. The Theme picker has two more entries at the end, lamplighter and catacombs, each with a padlock and its own line in the open list, "unlocks when you share Lens with a colleague" and "unlocks the first time Pro runs for you". Pick a locked one and the plugin opens the way to earn it. For lamplighter that is the share card, also under Help as Share SQLite Lens: the marketplace page, the family page and a referral code of this install's own, with the line "enter it under Theme in any Lens plugin" below it. Copy share card earns the theme here; a colleague who picks lamplighter in their own Theme picker, types the code into the share card and presses Unlock with code earns it on their side. Catacombs opens the first time Pro runs for you, a trial included, and an earned theme stays whatever the license says. Four night themes join the picker, Duskhollow, Abyss, Obsidian and Moonlit Garden; trying one is free for the open window and keeping it is Pro, like the eight. Files ending in .gpkg open here too, since a GeoPackage is a SQLite database by specification, and the Info tab names the GeoPackage version the file declares.
- 1.2.8published 2026-09-07
Trials that begin from a JetBrains account come with a signed key, and that key went on opening Pro after the 30 days were used up. It stops the day after the trial ends. Bought licenses are left alone, the perpetual fallback license too. The same mistake had the plugin thank a lapsed trial the way it thanks a buyer, and the notice that a trial has ended never showed; both are right now. Second fix, in the WAL banner: every frame in the -wal file was counted as one you had not seen yet. After a checkpoint that could not shorten the file, the frames stay where they are even though the database already has them, so a fully checkpointed database still warned about pending changes. The count now takes the -shm file into account, which records how many frames a checkpoint copied in, and the banner says nothing is waiting once none are left. If that record cannot be trusted, every live frame is counted, as before. The facts row carries the same number, and one frame is written as 1 frame, not 1 frames.
- 1.2.7published 2026-09-05
Files ending in .db now open in SQLite Lens by extension, the same way .sqlite, .sqlite3 and .db3 files do, so the IDE can offer the plugin when a project contains one. Before this the plugin only picked up a .db file after reading its first bytes. A .db file that is not a SQLite database, a Thumbs.db for example, says so in the panel.
- 1.2.6published 2026-09-05
The WAL banner used to count the frames the -wal file had room for, so a database whose -wal had been rewound by a checkpoint but not shortened reported changes not yet visible when the reader was already seeing all of them. The count now comes from the frame headers, and the size beside it is the size of those frames rather than the whole file. A -wal that declares a different page size than the database was written for another file, so the banner says that instead and the reload offer is withheld. On a very long -wal the walk stops early and the banner says at least how many frames it found.
- 1.2.5published 2026-09-03
Both trial notices now open with what the trial did, exports first, then searches; only a search with hits and an export that wrote rows count, and only while the trial runs. The one review ask waits for five value moments now, not three, so a first open no longer reaches it on its own. The listing text was tightened.
- 1.2.4published 2026-09-03
A Pro trial that is about to end says so once, with a link to pricing, and a trial that has ended says so once. Opening a database now counts toward the review ask. Pro gate messages and the listing now say what is true: each Lens plugin has its own free 30-day trial.
- 1.2.3published 2026-09-02
A saved theme comes back on open only while the license is active; without one the grid opens in the default look, and tasting any theme stays free for the window. Going back to Default no longer counts as a chosen theme. Export refuses to write over the file that is open (the database, its snapshot or a sidecar) and asks for another name instead of failing.
- 1.2.2published 2026-09-02
Reloading the page used to drop the selected row and cell; they stay put now, through a page reload and a reload from disk. The same row is found again by its key when the same page comes back, by position otherwise. The one review ask also counts its moments by one rule now: a load with rows, a search with hits and a grid with columns count once per opened file, every finished export counts, and a failure, a cancel or an empty result never does.
- 1.2.1published 2026-09-01
At narrow windows the footer used to print the file size on top of the Pro line; now the Pro line drops to its own row on the right when the two no longer fit, and rejoins the row when there is room again.
- 1.2.0published 2026-09-01
Themes: pick a look for the whole tab from the toolbar. Eight strands shared across the Lens family restyle the data grid, console results and diff drill-in with text, number and blob tints, row striping and selection; the default look is untouched and NULL stays quietly dimmed in every strand. Any strand tastes free for the open window, and keeping one set is Pro. Two diff repairs ride along: drill-in row fetches now key off the declared primary key, so Show rows works on keyed tables it used to fail on, and a finished comparison now survives the editor view rebuilding instead of coming back empty.
- 1.1.1published 2026-08-31
The toolbar wraps at narrow widths now, instead of pushing Sort and Export past the window edge, and the diff view controls follow the same rule.
- 1.1.0published 2026-08-29
Blob hex now renders through a lookup table: full-table CSV export on a 5M-row bench with a blob in every row went from 38k to 460k rows a second, about 12x. Changed rows in the diff drill-in now highlight the exact cells that differ, with a Next difference jump. The first time the plugin sees your Pro license it says a one-time thank you, then keeps a quiet supporter line in the footer - stored locally, like everything else.
- 1.0.1published 2026-08-26
Right-click lands in the data grid: copy the row as JSON, copy the page as CSV, and jump straight to Export on Pro. WAL banners now lead with what you might be missing, and a WAL database with no -wal file beside it points back at the source machine. Failure messages in the console, diff, export and snapshot paths now say what happened and what to try. The listing description is synced with the marketplace page.
- 1.0.0published 2026-08-21
First release. Free: read-only viewer with an immutable no-locks guarantee, schema tree with row counts, constant-memory paged grid, streaming Find, cell inspector with BLOB image preview, WAL and hot-journal banners with snapshot reload. Pro: execute-only SQL console with EXPLAIN QUERY PLAN, CSV/JSONL export, two-file database diff with exact counts, whole-table sort.
xlsx lens
- 1.6.11published 2026-10-17
A workbook built to unpack to gigabytes, a zip bomb, is refused at once with one line naming the part and both sizes; 1.6.10 could run the IDE out of memory opening it. A part read whole stops at 64 MB even when the zip entry lies about its size, and a sheet too large for the IDE's memory says so in the status line. A workbook whose XML breaks a line inside a sheet tag opens now, and so does one with a part saved in UTF-16; 1.6.10 refused both as "workbook has no sheets". A sheet name written as a numeric character reference past Unicode no longer stops the open, and an emoji written that way shows as the emoji. A damaged sheet says what is wrong in one line, "the workbook's XML ends early", "holds bytes that are not valid text" or "a part of the workbook does not unpack", where 1.6.10 showed the XML parser's own message. A file deleted or locked while its tab is open reads "the file is no longer there (deleted or moved)" or "no permission to read the file", not "corrupt zip". An Excel binary workbook (.xlsb) is named as one, with the way to view it (save it as .xlsx). When the temp folder cannot be written, picking a sheet says so in the status line. A sheet whose table sits under a title opens with its columns sized by the table, where the title sized column A at the 420 px cap and the first screen of a mailed report showed two columns. Copy row as JSON keeps a zero-padded number as the grid shows it: 2134 under the format 00000 copies as "02134", as 1.6.9 did; 1.6.10 copied 2134.
- 1.6.10published 2026-10-16
The toolbar toggle "First row = headers" is now a "Header row:" field: type the row number, or click "Detect" to fill in the first row under a merged title block whose cells are all text, standing over a row of numbers or dates; the field is empty by default, so every row is data until a row is named. With a header row named, the grid labels every column from it, the whole-sheet sort and the filter leave the rows at and above it in place, column stats count only the rows below it, and every export writes the rows below it under the header names: a Parquet export of a report with a title block now types its dates, numbers and timestamps, which used to land as text in columns named by their letters. The sheet diff (Pro) pairs rows by their content, so a row inserted or removed reads as one row added or removed; before, one removed row marked every row after it changed, and a 120,000-line report against its re-export a week on (40 lines changed, 25 removed, 30 added) read "+5 added, -0 removed, ~112216 changed". It now reads "+30 added, -25 removed, ~62 changed" and takes 3.4 seconds against 2.8 for the pairing by row number, which the "Compare by row number" tick box brings back. "Copy row as JSON" now writes numbers as JSON numbers from the stored cell, with the header names as keys when a header row is named, and both copy buttons, row as JSON and page as TSV, report what they copied in the status line.
- 1.6.9published 2026-10-15
The profile report kept up to 100,000 of a column's distinct strings to count them, hundreds of megabytes on a column of long values; it keeps a 64-bit hash of each now, about 2 MB a column at the cap. A buyer whose subscription has lapsed sees Get Pro in the footer, and the gate says the trial has ended; 1.6.8 offered a second free trial there, which JetBrains does not grant. The footer reads the license key eight times on a refresh and used to check its certificate chain every time; the verdict is kept per key now.
- 1.6.8published 2026-10-13
IntelliJ 2026.3 deprecates FileEditorManager.openFile, the call Open Workbook, Open exported file, the profile report and the hand-off to JSONL Lens went through until 1.6.7. From 1.6.8 they use the navigation call behind Go to File, and a workbook that was already open in another split is where you land, not in a second tab.
- 1.6.7published 2026-10-13
Open an Excel add-in workbook (.xlam) and it shows in the viewer like an .xlsm would: read-only, no macro run, and the Info tab's Macros line reads "present (.xlam) - never read, never executed; data only".
- 1.6.6published 2026-10-09
The trial notices "XLSX Lens Pro trial ends in ..." and "XLSX Lens Pro trial has ended" now end with the price, "Pro is USD 2.90 a month or USD 29 a year for individual use", and a "See pricing" button that opens the marketplace page. During a trial you may see one request for a marketplace review, with "Write a review", "Feedback" and "No thanks".
- 1.6.5published 2026-10-08
The first Pro action of a trial now gets a notice of its own, once, while more than a week of the trial is left. Sort the whole sheet and it reads "That whole-sheet sort was Pro." It says how many days the trial has left and ends on what stays free: "Sorting the loaded page stays free - click a column header." Filters, sheet diffs, exports, profile reports and column stats are named the same way. The footer's "Pro trial" line gains the count of Pro actions the trial has run, and the notices at the end of a trial open with the Pro actions used most, by name, instead of exports and searches. Find stays free and is no longer counted. When the IDE starts, the footer shows no Pro line and no "Try Pro free for 30 days" or "Get Pro" link until the license is known, so a machine that bought Pro, or is partway through a trial, is no longer offered Pro while the license loads.
- 1.6.4published 2026-10-07
Numbers and dates now read with a decimal point and the digits 0 to 9 on every machine, in the grid and in the CSV, JSONL and Markdown exports and the text columns of a Parquet export, like the rest of the sheet. Under a regional format that writes decimals with a comma (German, Polish, Hungarian, Turkish or Portuguese), a cell in scientific format read 1,23E+10 instead of 1.23E+10 and those exports wrote it that way. On a locale with Arabic-Indic digits, the year, the zero-padded date and time parts and an elapsed time came out in those digits. The footer's "Pro" line now ends in an ellipsis with its full text as a tooltip when the footer is too narrow, instead of being cut off.
- 1.6.3published 2026-09-24
The plugin description now names the .xltx and .xltm template files beside .xlsx and .xlsm and says how they are handled: a template is parsed and rendered exactly as a workbook. Nothing else changed.
- 1.6.2published 2026-09-23
XLSX Lens now opens .xltx and .xltm template files the same way as .xlsx and .xlsm files. When the editor is narrow, the Pro line and the "Marketplace page", "Try Pro free for 30 days" and "Write a review" links now move below the status line and wrap onto more lines instead of pushing the status line out of view, and a status line longer than the row shows its whole text as a tooltip. The trial notices and the review prompt now wait until the IDE has finished reading the license, so a licensed machine is never told at startup that its trial has ended, and a thank-you prompt no longer follows a trial notice in the same sitting.
- 1.6.1published 2026-09-21
Two links now sit in the XLSX Lens footer. "Try Pro free for 30 days" shows on a machine where the trial has not run and opens the IDE license dialog, where the trial starts. Once a trial has run there, the same spot reads "Get Pro" and leads to the pricing page. While Pro is running, bought or on trial, the spot is empty. "Write a review" shows in every state and opens the reviews page of the listing. Drag a block of cells in the grid and Export now offers that range, the rows you dragged over and only the columns they cover, in any format the Export dialog writes. That export is Pro like the others, and Copy Page stays free. The chooser names the range before you pick it, and the column letters travel with the data.
- 1.6.0published 2026-09-19
Watch and Diff now check the license each time they run. The Pro trial notices now end with a question and the support address. A key issued for another plugin no longer opens XLSX Lens Pro. A key for XLSX Lens itself is unaffected. After a purchase, a balloon says thank you once on this machine. Its one action is "Write a review".
- 1.5.2published 2026-09-17
The compatibility line on the listing now covers the whole range a release is checked across before it ships. A test pins that line to the release ladder.
- 1.5.0published 2026-09-14
The sheet's own conditional formatting paints in the grid: a cell value rule, the text rules, blanks and errors, duplicate and unique values, top and bottom rank, above and below average, each with the fill and the font colour the file gives it, applied in priority order. A rule the viewer cannot evaluate the way Excel does, a formula rule, a colour scale, a data bar, an icon set, a percent rank, paints nothing and is named in the Info tab under Formatting. Stats opens for everyone now and leads with Duplicate rows, which walks the finished sheet and says how many rows repeat an earlier one, all columns compared, the first occurrence of each kept. Two rows are the same row by the rule the diff uses, the stored value and the formula text, never the number format, so 1 and 1.0 agree and x and X do not. Export the clean copy, a Pro action on that report, writes a workbook with the kept rows on a sheet named for the source and every removed row on a second sheet, _lens_removed, beside the row it repeats. The export dialog takes an .xlsx name as well now, where the filter reads CSV, JSONL, Markdown, Parquet, XLSX or a profile report: the sheet, the search matches or the current view go out as a workbook copy, every cell with its value and its number format, and the finished balloon offers to open the copy in this plugin.
- 1.4.0published 2026-09-11
The column profile report, a second Pro export for the open sheet. Give the export a name ending .profile.html, .profile.md or .profile.json and the rows are profiled instead of copied: every column gets its row, null and empty counts and the kinds of cell it holds, a numeric column its min, max, mean, quartiles, a histogram and an outlier count, a text column its distinct count and most frequent values, a date or timestamp column its earliest and latest value and the largest gap in the series. The sheet as a whole gets an exact duplicate-row count and a correlation matrix over its numeric columns, forty at most. Wherever a figure came from a sample rather than every row, the report says so beside it. The HTML page opens in your browser from the finished balloon, the Markdown pastes into a ticket as it is, and the JSON keeps every number at full precision. Search matches and the current view profile the same way the whole sheet does, and a cancelled run leaves no file.
- 1.3.0published 2026-09-09
Export to Parquet, a Pro action. Pick a .parquet name in the export dialog, where the filter reads CSV, JSONL, Markdown or Parquet, and the sheet, the search matches or the current view are written as one Parquet file, one column per sheet column, named by its letter. A column of numbers is written as numbers, and a column of dates as dates, or as timestamps when the cells carry a time, read by the date system the workbook declares, 1900 or 1904. Where a column mixes kinds, say a header row over numbers, the cells are written as the text the grid shows, so it reads the way the CSV would. The open workbook is refused as a destination, as it is for CSV, and a cancelled export leaves no file behind. When the export finishes, the balloon offers Open exported file, which lands in Parquet Lens when that is installed; with no viewer for it, the click says so and points at Parquet Lens instead. The Theme picker has four more themes, Duskhollow, Abyss, Obsidian and Moonlit Garden, and two entries at the end, lamplighter and catacombs, each with a padlock and its own line in the open list: "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, also under Help as Share XLSX Lens: plain text for a colleague, a marketplace line, a Lens family line and a referral code of this install's own. "Copy share card" earns the theme here, and a colleague who enters that code under Theme in any Lens plugin earns it there. An earned theme stays, whatever the license says. The four night themes follow the rule of the eight: trying one is free for the open window, keeping it is Pro.
- 1.2.2published 2026-09-08
Reload and watch mode reopen the workbook on the sheet that was open; both used to land on the first sheet, with the selected row carried over to the wrong one. File | Open Workbook... opens an .xlsx or .xlsm from anywhere on disk in an XLSX Lens tab, attaching nothing to the project, and the same entry answers in Search Everywhere; it is free, like the rest of the viewer. Each sheet in the list shows its size as rows x columns once it has been read, and a sheet with nothing in it reads empty.
- 1.2.1published 2026-09-07
A Pro trial started from your JetBrains account arrives as a signed license key, and only the signature was checked, which stays valid after the 30 days. So a trial that had ended kept Pro unlocked and passed for a purchase: no trial-ended notice, and a thank-you meant for buyers. A trial key now unlocks Pro through its last day and then stops; paid licenses, the perpetual fallback included, are unchanged. The workbook diff marks the cells that changed. In the changed-rows drill-in, the A and B rows paint the cells where they differ, by the same rule the counts use: the stored value and the formula text, never the number format, and both rows of a pair carry the same marks. Next difference steps through those cells in reading order and wraps at the end. The status line says how many cells differ in the rows shown, and a new comparison clears the old drill-in.
- 1.2.0published 2026-09-05
Currency and accounting formats render now, and so do fractions, with the symbol or the parentheses where the workbook puts them; those cells used to fall back to the plain number. Optional decimal places stop inventing zeros, so 0.## on 1.5 reads 1.5 rather than 1.50, and a value like 2.675 rounds to 2.68 the way the spreadsheet shows it. Date formats no longer print a locale or color tag in front of the date, and a bracketed [mm] or [ss] shows the elapsed total, as [h] already did.
- 1.1.4published 2026-09-03
The trial notices name what the trial did: how many exports and how many searches, counted only while the trial runs. The one-time review ask now waits for five value moments, so it arrives after real use rather than on the first open.
- 1.1.3published 2026-09-03
A Pro trial that is about to end says so once, with a link to pricing, and a trial that has ended says so once. Opening a workbook now counts toward the review ask. Pro gate messages and the listing now say what is true: each Lens plugin has its own free 30-day trial.
- 1.1.2published 2026-09-02
A saved theme comes back on open only while the license is active; without one the grid opens in the default look, and tasting any theme stays free for the window. Going back to Default no longer counts as a chosen theme. Export refuses to write over the open workbook and asks for another name instead of failing.
- 1.1.1published 2026-09-02
The selected row and cell stay put through a page reload and a reload from disk; the grid used to drop them whenever the data came back. The one-time review ask follows a single rule now across opening, find, the grid and export, and an empty sheet does not count.
- 1.1.0published 2026-09-01
Themes: a Theme combo at the end of the toolbar picks a look for the whole workbook tab. The eight strands the Lens family shares restyle the data grid and the diff drill-in: text and number tints, row striping, the selection color. Default stays exactly as shipped, and empty cells and merged echoes keep their quiet dimming under every strand. Tasting any strand is free for the open window; keeping one set is Pro. Also fixed: a toolbar row that wrapped at narrow widths was laid out but hidden under the row above it, so its controls vanished. The row gets its full height now.
- 1.0.3published 2026-08-31
Sixteen toolbar controls used to sit in two fixed rows, and a narrow panel still pushed the last buttons past the edge. The rows reflow now, and the sheet diff controls do the same.
- 1.0.2published 2026-08-29
Find shows a live match count while it scans; a 500k-row sheet no longer sits on searching until the end. Named ranges appear in the Info tab, name and reference exactly as the workbook stores them. And the first time a Pro license shows up, one thank-you, said locally, never repeated.
- 1.0.0published 2026-08-25
First release. Free: read-only workbook viewer with streaming open (first page renders while large sheets index), all sheets listed, merged cells rendered, cached formula values, 1900/1904 date systems, builtin and common custom number formats, whole-sheet Find across values and formulas, cell inspector, in-page sort/filter and copy. Pro: CSV/JSONL/Markdown export, two-workbook sheet diff with exact counts, whole-sheet sort and multi-column filter, column stats, formula view, watch mode.
notebook lens
- 1.2.7published 2026-10-15
A buyer whose subscription has lapsed sees Get Pro in the footer, and the gate says the trial has ended; 1.2.6 offered a second free trial there, which JetBrains does not grant. The footer reads the license key eight times on a refresh and used to check its certificate chain every time; the verdict is kept per key now.
- 1.2.6published 2026-10-13
Pressing a Pro button without Pro used to open the IDE's license dialog with our sentence shown there as an error. It now opens a "Notebook Lens Pro" dialog that says what the button needs and states the price, and once your trial has ended it offers "Buy Pro" and "Enter Key". A trial you start from that dialog shows in the footer right away, where it used to wait for the next refresh, a Find or a theme change. Pick a notebook in the "Compare With Notebook" chooser after the trial has run out and you get the dialog rather than the diff. The notice that names the first Pro action of a trial now ends with the price and a "See pricing" button too.
- 1.2.5published 2026-10-09
The trial notices "Notebook Lens Pro trial ends in ..." and "Notebook Lens Pro trial has ended" now end with the price, "Pro is USD 2.90 a month or USD 29 a year for individual use", and a "See pricing" button that opens the marketplace page. During a trial you may see one request for a marketplace review, with "Write a review", "Feedback" and "No thanks".
- 1.2.4published 2026-10-09
Notebook Lens no longer offers Pro in its footer before the IDE has read the license: at start the footer shows nothing, then fills in. With more than a week of a Pro trial left, the first Pro action of the trial is named once: after a first notebook diff that found changes, a notice reads "That notebook diff was Pro." and ends on "The viewer and cell navigation stay free." The trial-ending notices and the footer's trial line now count the trial's notebook diffs that found changes, its exports and its cross-cell searches with hits.
- 1.2.3published 2026-10-07
"Find" in the current cell now reports the right line when the Turkish letter İ stands ahead of the match more times than the search term has letters, where it used to count a later line if a line break fell in between or raise an IDE error if the cell ended there, and typing "istanbul" into it now finds "İstanbul".
- 1.2.2published 2026-09-23
Notebook Lens now counts a successful "Find" in the current cell toward its one-time review prompt, once per notebook. That prompt and the thank-you prompt after a purchase now offer "Feedback" between "Write a review" and "No thanks", as links in one row. "Feedback" opens a feature request form on GitHub that already names the plugin, its version and the IDE.
- 1.2.1published 2026-09-23
Two links now sit in the Notebook Lens footer. "Try Pro free for 30 days" shows on a machine where the trial has not run and opens the IDE license dialog, where the trial starts. Once a trial has run there, the same spot reads "Get Pro" and leads to the pricing page. While Pro is running, bought or on trial, the spot is empty. "Write a review" shows in every state and opens the reviews page of the listing. At a narrow editor the Pro text and the links move below the status line instead of crowding it, and a status line longer than the row shows its whole text as a tooltip. The trial notices and the review prompt now wait until the IDE has finished reading the license, so a licensed machine is never told at startup that its trial has ended.
- 1.2.0published 2026-09-19
The Pro trial notices now end with a question and the support address. A key issued for another plugin no longer opens Notebook Lens Pro. A key for Notebook Lens itself is unaffected.
- 1.1.9published 2026-09-17
Compare now offers the committed version. The Compare (Pro) button opens a short list, Another notebook or The committed version (from version control), and the second row reads what your version control last committed for the open notebook and diffs it against the file as it is now, sources only, without picking a second file. The diff names the revision in its title, and the copy it read from is removed when the dialog closes. The reading goes through the IDE's own version control, so the plugin runs no version control command and reads nothing off the network, and a notebook the IDE maps no version control over, one with no committed version yet, or a committed version that cannot be read says so in the status line. On the free side, ctrl+click an http or https address in an output, a traceback, a source string or a markdown cell to open it (cmd on a Mac), and the cell menu has Open link. An output the viewer cannot draw, a plotly figure or a widget, now shows a chip naming it ("not rendered - only text and images are shown") instead of nothing, and Copy Cell Output marks it as not copied while the exported page marks it as not exported; and a notebook holding a lone surrogate in an output now exports, where before the export stopped part way. The Pro trial notices now come a week before the trial ends and again on its last day, each saying what Pro adds, with a See pricing action to the marketplace pricing tab.
- 1.1.8published 2026-09-09
Two new themes sit at the end of the Theme picker, lamplighter and catacombs, each behind a padlock until you earn it, and the open list says how beside the name: lamplighter "unlocks when you share Lens with a colleague", catacombs "unlocks the first time Pro runs for you". Sharing goes through the share card, under Help as Share Notebook Lens and opened as well when you pick the locked lamplighter entry. The card is a few lines of text for a colleague, the marketplace page and a referral code of your own among them; Copy share card earns the theme right there, and so does entering a code a colleague gave you. Catacombs is yours once Pro has run on your machine, trial or paid, and it stays after the trial ends. An earned theme is kept without Pro, in every Lens plugin, and comes back the next time you open a notebook; the other themes still taste free for the window and keep with Pro, as before.
- 1.1.7published 2026-09-08
The export now goes through a sibling part file and is renamed into place once it is whole. Before this it wrote straight into the file you named, so cancelling an export that was replacing an earlier one deleted the earlier file too; now a cancel or a failure leaves it as it was. The HTML export, new since the last update, carries the notebook with its outputs and images in one page that opens offline, and it no longer re-reads a big image for every window it writes, which had made such a page slow to produce. Search across cells reads outputs as well now. It matches them as the notebook paints them, with the color codes of a traceback set aside, so a match that sits across a color change is found and the rows in the result list come out clean, and cancelling a search leaves the status line saying so with what it had found.
- 1.1.6published 2026-09-07
A Pro trial started through a JetBrains account now ends when its 30 days do. The trial arrives as a signed key that stays valid after its last day, and the check read the signature alone, so a lapsed trial kept Pro open and was thanked as if it were a purchase. The trial's end date is read as well now; paid licenses and the perpetual fallback are not affected. Right-click a cell to copy its source, its output, or both. The whole cell goes on the clipboard, not just the lines the collapsed view shows, and an image output leaves a short note in its place.
- 1.1.5published 2026-09-05
The Pro notebook diff now says why its table is empty. Two notebooks with the same cell sources used to leave a blank grid under the zero counters, which looked no different from a compare that had broken. The grid now reads that there are no differences, and a compare that failed or was cancelled says so in its place. Cancelling part-way also stops the compare cleanly instead of showing a diff cut short.
- 1.1.4published 2026-09-03
The trial notices now say what the trial did. When a Pro trial is about to end, and again once it has ended, the notice opens with the number of exports and searches that ran while it was on, so the choice to subscribe rests on real use. The review request also waits longer: five useful moments instead of three.
- 1.1.3published 2026-09-03
A Pro trial that is about to end says so once, with a link to pricing, and a trial that has ended says so once. Pro gate messages and the listing now say what is true: each Lens plugin has its own free 30-day trial.
- 1.1.2published 2026-09-03
Notebook Lens now names the .ipynb file type. The project tree shows a notebook icon, Settings lists the type, and the marketplace can suggest the plugin when an IDE meets a notebook it cannot open. The notebook association is not taken over: where the IDE's own Jupyter support is installed, that support keeps the file and the Notebook Lens tab stays beside it as before.
- 1.1.1published 2026-09-02
Four fixes. A saved theme comes back on open only while the license is active; without one the notebook opens in the default look. Exporting over the open notebook is refused with a plain message. The outline and the search results keep their selection across a reload. The review ask counts value moments by one rule: a load with cells, a search with hits and a first render once per file, every completed export, and never an empty compare.
- 1.1.0published 2026-09-02
Themes: pick a look for the notebook from the toolbar. Eight strands shared across the Lens family (default, hacker, cyberpunk, goblincore, neon, nosferatu, halloween, blue lagoon) restyle the chrome around each cell: cell labels, execution counts and image chips take the strand's tints, odd cells take its stripe, and the outline's selection takes its color. Everything inside a cell stays as saved: syntax coloring, stderr, and every ANSI color in outputs and tracebacks keep their hues. The default look is unchanged. Any strand tastes free for the open window, and keeping one set is Pro.
- 1.0.2published 2026-08-31
Compare now paints its result. The diff dialog was quietly modal, and dialogs of that kind hold their repaint runnables until they close, so the comparison rendered as an endless empty wait. It stays non-modal now, with a test pinning it that way.
- 1.0.1published 2026-08-29
Clearer failure messages across the viewer: each one now says what happened and what to try. A truncated file names the byte where it ends and the likely cause, a broken or oversized image says why it is not rendered instead of loading forever, an unreadable file and an empty notebook are named plainly, and a failed export confirms no partial file was left behind. Pro subscribers get a one-time thank-you the first time their license is seen - recorded locally, nothing phones home. The footer's marketplace link now points at the real listing. The description now says outright what was always true: one plugin with no companion install, and a static render that cannot freeze on long outputs. The free tier is unchanged.
duckdb lens
- 1.3.9published 2026-10-16
Every viewer connection of DuckDB Lens now runs the engine under a memory cap and half the cores (two at least): a quarter of the IDE heap between 256 MiB and 2 GiB, 512 MiB at the default 2 GB heap, where the engine ran on its own defaults, 80 percent of the machine's memory and every core. A table page reads only its own rows instead of sorting the whole table first; measured in a plain JVM at the default heap, the first 100 rows of a 5,000,000-row table took the process from 104 MB to 3,416 MB resident before and from 107 MB to 126 MB now, and on 28,000,000 rows to 18,496 MB before and 127 MB now. When a query spills past the cap, it spills into a folder per open file and IDE process under the system's temp folder, never beside the database, and the folder goes when the file closes. The Info tab lists the caps in effect under "Engine limits"; the VM options -Dtwilightventures.duckdb.memoryLimit=1GB and -Dtwilightventures.duckdb.threads=8 (the Help menu, Edit Custom VM Options) set other values.
- 1.3.8published 2026-10-14
The footer keeps its links on screen in a narrow editor. With the project pane open in a window about 1100 pixels wide, Try Pro free and Write a review were cut off or pushed past the right edge; the Pro line and its links now wrap onto lines of their own under the status, each link whole. Closing a tab while its database is still opening now lets go of the file at once. Until now the viewer kept its read-only hold on the file, and a program of your own that wanted to write to it was refused until the IDE restarted. A Local format box in the toolbar takes numbers, dates and times back to the stored ISO forms when you clear it. It starts ticked for any language but English, as the grid behaved before, and your choice is kept for every DuckDB Lens tab; ticked in an English IDE, it shows the local forms. When the plugin fails, the IDE's error dialog now offers to send a report through the JetBrains Marketplace. Nothing is sent unless you choose to send it.
- 1.3.7published 2026-10-13
Open exported file, and the hand-off of a JSONL export to JSONL Lens, open the file through the navigation call behind Go to File from this version on; the editor call they used until 1.3.6 is deprecated in IntelliJ 2026.3. You should notice nothing. If the file is already open in another split, that tab comes forward instead of a second one opening.
- 1.3.6published 2026-10-13
The grid's cells now use the same regional format as Find and the filter box under the grid. Where the operating system's display language and its regional format were different languages, the cells followed the display language. With German as the display language and US formats, a cell showed 1234,50 and 03.10.2026, and typing that into Find matched nothing. The other way round, an English display language with German regional formats now shows 1234,50 and 03.10.2026 where 1.3.5 showed 1234.50 and 2026-10-03.
- 1.3.5published 2026-10-10
read_parquet('orders.parquet') in a view now reads the file beside the database. Before, the viewer looked in the IDE's own folder and reported that the file could not be read. A view whose files never answer, a network share that stopped responding for one, used to hold the tab; now, after 15 seconds, its definition and the line "the files it reads gave no answer within 15 seconds" take the place of the grid, and every other table and view stays browsable. A view's row count is read when the view opens, so the status line shows the total instead of "(view)", and the Info tab shows the definition of the view you picked.
- 1.3.4published 2026-10-09
The trial notices "DuckDB Lens Pro trial ends in ..." and "DuckDB Lens Pro trial has ended" now end with the price, "Pro is USD 2.90 a month or USD 29 a year for individual use", and a "See pricing" button that opens the marketplace page. A query result in the console can now be exported, the Pro action the listing names; it had no menu entry before. During a trial you may see one request for a marketplace review, with "Write a review", "Feedback" and "No thanks".
- 1.3.3published 2026-10-09
Dates and times now read as the engine writes them: a spring-forward gap hour no longer reads an hour late, a BC date no longer reads as AD, an infinity reads as infinity, and a TIME of 24:00:00 no longer makes the whole table unreadable, in the grid, in copy, in the diff and in the CSV and JSONL exports. Numbers and DATE, TIMESTAMP and TIME columns show in the IDE's own format, which follows your system's regional settings, with the stored value in the tooltip ("Stored as 1234.50 (DECIMAL(10,2))."); an English IDE keeps the ISO dates and plain numbers it always showed, and copy, export and the inspector keep the stored text. A header click sorts the loaded page the way your language orders text, so an English page reads apple, Apple, Banana where 1.3.2 read Apple, Banana, apple, and Find ignores case in any language (ß finds SS, İ finds i) and full-width forms. Find also matches a number or a date typed the way the grid shows it, such as 1234,50 or 03.10.2026 in a German IDE. A database that only points at files elsewhere now opens: each view shows its rows, or, when its files are missing, what it reads and why in place of the grid, and every other table and view stays browsable. DECIMAL and HUGEINT cells align right like every other number, and a column dragged to a new place keeps its own sort and inspector. With more than a week of a Pro trial left, the first Pro action is named once. The trial-ending notices lead with what Pro did (SQL queries, exports, whole-table sorts and diffs), and the footer's Pro trial line counts the Pro actions used. The footer offers nothing until the IDE has loaded the license, and a tab opened before then fills in its footer once the license is known.
- 1.3.2published 2026-09-23
DuckDB Lens now saves the one-time review prompt for a later sitting when a trial notice is due as a table's first rows load. The trial notices and the review prompt now wait until the IDE has finished reading the license, so a licensed machine is never told at startup that its trial has ended. A thank-you prompt no longer follows a trial notice in the same sitting. The one-time review prompt and the thank-you prompt after a purchase now offer "Feedback" between "Write a review" and "No thanks".
- 1.3.1published 2026-09-22
Two links now sit in the DuckDB Lens footer. "Try Pro free for 30 days" shows on a machine where the trial has not run and opens the IDE license dialog, where the trial starts. Once a trial has run there, the same spot reads "Get Pro" and leads to the pricing page. While Pro is running, bought or on trial, the spot is empty. "Write a review" shows in every state and opens the reviews page of the listing. Nothing else changed.
- 1.3.0published 2026-09-19
Drilling into a row now checks the license each time. The Pro trial notices now end with a question and the support address. A key issued for another plugin no longer opens DuckDB Lens Pro. A key for DuckDB Lens itself is unaffected. After a purchase, a balloon says thank you once on this machine. Its one action is "Write a review".
- 1.2.9published 2026-09-17
The notice that a Pro trial is ending now comes a week before the last day instead of three days, and a second notice comes on the last day itself. Both notices name what Pro adds in this plugin, a SQL console, CSV, JSONL and Parquet export, whole-table sort and two-file diff, and say that Pro features stay on until the trial ends and the free tier stays after. Each carries one button, See pricing, which opens the pricing tab of the marketplace page. The notice for a trial that has already ended reads the same way, with Pro features paused. The Pro line in the footer now names the Parquet export as well; it had been left out. Nothing else in the viewer changed.
- 1.2.8published 2026-09-13
A database that opens to an empty tree, nothing in it yet, no longer counts as an open toward the one review ask. It used to, and the file stayed spent, so a later open of the same database, once it held something, did not count either. The ask still waits for five moments of use and appears once, and No thanks is for good.
- 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.
- 1.2.4published 2026-09-07
A trial started with a JetBrains account arrives in the IDE as a signed key, with the trial's last day written inside it. We were checking the signature and nothing else, and a signature does not expire, so on day 31 the trial went on opening Pro, the footer thanked the person as if they had bought it, and the ended notice never showed. The date inside the key is read now. A paid license, and the fallback license JetBrains grants after a year, behave as they did. The console takes a script too: type SELECT count(*) FROM orders; SELECT * FROM orders LIMIT 5 and both run, in that order, each timed on its own, with the status line reading "2 statements in 9 ms • statement 2: 5 rows in 4 ms (first row 1 ms)". A statement that fails halts the rest: "Statement 2 of 3 stopped the run, so nothing after it ran." Semicolons inside quotes or comments stay where they are, the text goes to DuckDB as typed, and Explain plans whichever statement the caret is on.
- 1.2.3published 2026-09-05
When a statement fails in the console, the status line now says what went wrong and what to try, and it does the same when a file will not open or an export stops early. The engine's own message is still there, in the tooltip of that line or in the line itself. Until now every failed statement showed the driver's line "Attempting to execute an unsuccessful or closed pending query result" in place of the real error, so a typo in a table name read as an internal fault; a missing table or column is now named outright.
- 1.2.2published 2026-09-03
The trial notices now say what the trial did: how many exports and how many searches ran while it was on, as in "This trial: 12 exports, 40 searches." The one review ask waits for five value moments instead of three, since a single open already counts for three. The listing text was tightened, with prices and trial terms left as they were.
- 1.2.1published 2026-09-03
A Pro trial that is about to end says so once, with a link to pricing, and a trial that has ended says so once. Licensed users now get the thank-you and the Supporter line in the footer, and the family link stays visible. Opening a database now counts toward the review ask. Pro gate messages and the listing now say what is true: each Lens plugin has its own free 30-day trial.
- 1.2.0published 2026-09-03
Export to Parquet. Pick a .parquet name in the export dialog and the engine writes the file itself, the whole table or the search matches, streamed, with the same refusal to write over the open database. When the export finishes, one click opens the file in the IDE, so it lands in Parquet Lens when that is installed.
- 1.1.1published 2026-09-02
A saved theme comes back on open only while the license is active; without one the grid opens in the default look, and tasting any theme stays free for the window. Going back to Default no longer counts as a chosen theme. Export refuses to write over the file that is open (the database, its snapshot or its .wal) and asks for another name instead of failing.
- 1.1.0published 2026-09-02
Themes: pick a look for the whole tab from the toolbar. Eight strands shared across the Lens family (default, hacker, cyberpunk, goblincore, neon, nosferatu, halloween, blue lagoon) restyle the data grid, console results and diff drill-in with text, number and blob tints, row striping and selection; the default look is unchanged and NULL stays quietly dimmed in every strand. Any strand tastes free for the open window, and keeping one set is Pro.
- 1.0.5published 2026-09-02
Reloading the page used to drop the selected row and cell; they stay put now, through a page reload and a reload from disk. The same row is found again by its key when the same page comes back, by position otherwise. The one review ask also counts its moments by one rule now: a load with rows, a search with hits and a grid with columns count once per opened file, every finished export counts, and a failure, a cancel or an empty result never does.
- 1.0.4published 2026-09-01
At narrow windows the footer used to print the status text on top of the Pro line; now the Pro line drops to its own row on the right when the two no longer fit, and rejoins the row when there is room again.
- 1.0.3published 2026-09-01
Two diff repairs ride this patch. Drill-in row fetches now key off the declared primary key, so Show rows works on keyed tables it used to fail on: the grid pages those tables by rowid while the diff keys them by primary key, and the old fetch trusted the grid. A finished comparison now survives the editor view rebuilding instead of coming back empty, and the drill controls say what they need, a diff or a selected row, instead of doing nothing.
- 1.0.2published 2026-08-31
The toolbar keeps its buttons. Sort, Export and Reload used to fall off the right edge at ordinary window widths; the toolbar now wraps to a second row instead of clipping, and the same fix covers the diff view controls.
- 1.0.1published 2026-08-27
Housekeeping release. The editor no longer volunteers for SQLite extensions (.sqlite, .sqlite3, .db3) left over from the family template: DuckDB Lens now claims .duckdb and .ddb plus magic-detected files, exactly as the listing says. Marketplace links inside the plugin point at the DuckDB Lens page instead of a sibling's.
- 1.0.0published 2026-08-27
First release. Free: a read-only viewer for .duckdb files - every schema in the tree, constant-memory paged grid, streaming case-insensitive Find, a cell inspector with image preview, a .wal banner with one-click snapshot reload, and HUGEINT, DECIMAL and BOOLEAN rendered exactly. Pro: read-only SQL console with EXPLAIN, CSV and JSONL export, two-file diff with exact counts, whole-table sort.
heap dump lens
- 1.4.11published 2026-10-17
Shallow and retained bytes now follow the JVM's GC.class_histogram: the object header, the array length field, references counted at 4 bytes (the compressed-oops size, the JVM's default below a 32 GB heap) and the rounding to 8. A String reads 24 bytes where it read 14, and on our 2.6 GB test dump the heap total ran about 18 percent short. Compute retained sizes (Pro) estimates its need before it starts, about 72 bytes an object, and when the IDE's free heap is short the tab says what it needs and what to raise ("Raise the IDE's heap to at least 2,560 MB") instead of dying part way. Where that 2.6 GB test dump sits beside the build, the release check now runs its index pass inside a 512 MB heap.
- 1.4.10published 2026-10-17
The thread dump viewer now reads dumps written by JDK 21's jcmd Thread.dump_to_file, in its text form. Each thread comes in by its id and name, with the frames as the file writes them, and the Daemon column is now headed Kind: "daemon", "virtual" where the dump marks a virtual thread, or blank. Up to 1.4.9 such a file read as a dump with no threads. For this form the header line counts platform and virtual threads, where a jstack or Thread.print dump counts states. The JSON form (-format=json) is still not read, and the empty table says which forms were looked for: "No jstack, Thread.print or Thread.dump_to_file threads in this dump".
- 1.4.9published 2026-10-17
Export (Pro) now refuses a destination that is the open dump under a second name, such as a hard link made with ln: the balloon reads "Not written: that is the open file under another name. Pick another name." and nothing is written. Up to 1.4.8 the rows went through that name into the dump itself, and the dump was lost. An export that fails now says why, "Export failed: permission denied." or "Export failed: the file no longer exists.", where the balloon repeated the file's path. A thread dump from JDK 21's jcmd Thread.dump_to_file, which the thread dump parser does not take yet, now says so in the empty table: "No jstack or Thread.print threads in this dump". A dump with classes loaded and no objects reads "No objects in this dump" where it said no classes, and an empty file is called empty.
- 1.4.8published 2026-10-17
A cancel from the progress bar of "Compute retained sizes" (Pro), or closing the tab, is now heard after the dominator pass too, before and after each of the three steps that follow it: the field names behind each row, the ranking and the Dominator tree's index. In 1.4.7 those steps ran to their end once the pass made its last report, 0.94 seconds on our synthetic 2.6 GB test dump of 20 million objects, and a tab closed in that time still got its ranking. An object with more than 200,000 children in the Dominator tree (Pro) or the Retained tab (Pro) reads them off the UI thread now, behind one row, "Reading 10,000,000 children...", until the first rows land. Sorting the children of that dump's biggest object held the IDE for 0.35 seconds in 1.4.7, 0.45 with the class rollup; the rollup no longer boxes a key per child, 414 MB on that node. The top retainers CSV export writes held_by as its last column, so a file read by column position has the 1.3.0 columns where they were. The field file written beside the reference file during a retained-size run is removed once read; on that dump it kept 120 MB in the work folder while the tab stayed open. The Held by column reads "more than one route" where it read "more than one GC root", which was wrong where a route starts at a loaded class or at an object no GC root reaches.
- 1.4.7published 2026-10-16
The Retained tab (Pro) now names what holds each of its top retainers. A new "Held by" column gives the object that keeps a ranked object alive and the field holding it, so a session cache reads static com.example.Service.SESSIONS, and the CSV export carries the same column. A collection and its backing array read as one row, a HashMap and its table, instead of repeating each other. Every row opens onto the objects only it keeps alive, biggest first, one line per class once there are more than 100, and a new "Dominator path to GC root" action lists the objects that keep the selected one alive, from the object up to the GC roots. A cancel from the progress bar of "Compute retained sizes", or closing the tab, now takes effect through the reference and dominator steps, within 0.3 seconds on our synthetic 2.6 GB test dump of 20 million objects; on that dump, references, dominators and the new "Held by" step together take 27.3 seconds on a 2 GB JVM heap, up from 23.9 without the step. A dump cut off between records is reported as truncated in the Summary tab; it used to open as a smaller heap. A .hprof.gz cut off in its first bytes also reads as truncated; it used to end in a gzip error. A dump that ends in a run of zeros, as a stopped copy or a full disk leaves, is refused at the first zero byte instead of after a long read, and a complete dump followed by zeros now opens. A dump deleted or replaced while it opens is read whole from the file that was opened, class names with characters beyond U+FFFF read as the JVM wrote them, and a thread dump saved as UTF-16, as Windows PowerShell 5.1 saves jstack output, opens with its threads.
- 1.4.6published 2026-10-14
The new "Dominator tree (Pro)" tab, beside "Retained (Pro)", shows the heap as a tree: the top level by retained size, and under each object the objects only it keeps alive, 100 at a time. Search lists the objects of every class whose name contains the text, at any depth. "Paths to GC roots" shows, for the selected object, up to 5 reference chains from a GC root down to it, with the field, array index or static field on each step. Export also writes the tree as shown or the paths to CSV. On our synthetic 2.6 GB test dump (20 million objects) the top level of 13,117 objects took under 60 ms to build once retained sizes were computed; the first paths search spent about six seconds indexing references, and one search after it took 77 ms. The tree and the paths are Pro. During a trial, the first look at a computed tree and each paths search that finds a path add to the count of Pro actions in the footer, as retained-size runs and exports do. Indexing can now be cancelled from its progress bar, and closing the tab stops it at once and removes the files it had written, where a wrong 20 GB dump used to keep the CPU and the disk busy for minutes after its tab was closed. The work folder of a closed tab, which holds the index and the inflated copy of a .hprof.gz file, is removed in the background, so closing the tab of a big dump no longer holds up the IDE. The class names in a top retainers CSV export are always the names in the dump; an export that ran while the Retained table repainted could write a garbled class name. 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.
- 1.4.5published 2026-10-09
Compute retained sizes no longer slows with the square of a linked list's length: a 54,000-entry LinkedList ran 19 minutes without finishing before, and a 200,000-node list now computes within ten seconds in our test. The run has a progress bar and a Cancel; a cancelled run hands the "Compute retained sizes" button back. The histogram's byte column is now "Shallow bytes". When one primitive array class holds most of the heap, a line above the grid says so, with the share, and points at the Retained tab. The header counts loaded classes and classes with instances. The JVM's own threads read "VM internal". A class whose statics hold the memory shows as "class com.example.Cache (static fields)" in the top retainers. The trial notices "Heap Dump Lens Pro trial ends in ..." and "Heap Dump Lens Pro trial has ended" end with the price, "Pro is USD 4.90 a month or USD 49 a year for individual use", and a "See pricing" button. During a trial you may see one request for a marketplace review, with "Write a review", "Feedback" and "No thanks".
- 1.4.4published 2026-10-08
A Pro trial now counts the work Pro did: each "Compute retained sizes" run that ranked something, each CSV export of the class histogram, and each export of the top retainers. The first Pro action of a trial is named once in a short notice, such as "That retained-size run was Pro.", followed by how many days the trial has left and what stays free; it comes only while more than a week of the trial is left. The footer's "Pro trial:" line adds the count of Pro actions after the days left, and the notices about the trial ending open with a "This trial:" line that names them. Filtering the histogram is free, so it no longer counts. At IDE start the footer's Pro line and its Try Pro or Get Pro link stay empty until the IDE has read the license, where before they could offer Pro to someone who already had it; both fill in within about two seconds of the license being read.
- 1.4.3published 2026-10-07
Fixes to "Export" and to "Compute retained sizes", both Pro. Exporting over a file that already exists no longer loses that file when the export stops early (a cancel, a failed write, a second export started before the first is done, the tab closed mid-export): the rows go to a part file beside it and replace it only when the run is complete, so the file keeps its mode, owner and group, and through a symbolic link the rows land in the file the link names. Where no part file can be made beside the file, the rows are written into the file itself, as before. Part files left behind by a killed IDE are removed at the next export to that file. "Compute retained sizes" runs once per dump tab: a second click used to start a second computation beside the first, over the same index on disk, so the ranking on screen could come from a run that was not finished. Once a computation starts, the button stays disabled until you close the tab and open the dump again, which is also the way to retry after a failure. If the computation runs out of memory, the "Retained" tab now says so and suggests raising the IDE heap size, where it used to keep offering the button.
- 1.4.2published 2026-09-23
Heap Dump Lens no longer tells a licensed machine at startup that its trial has ended. A thank-you prompt no longer follows a trial notice in the same sitting. The one-time review prompt and the thank-you prompt after a purchase now offer "Feedback" between "Write a review" and "No thanks", as links in one row. "Feedback" opens a feature request form on GitHub with the plugin name, version and IDE filled in for you.
- 1.4.1published 2026-09-21
The one-time review ask now counts the rest of an incident: a heap dump on screen counts, and so does a thread dump read with threads in it or a GC log read with pauses in it, where a second heap dump used to be needed. A file that will not parse, or one with nothing in it, counts for nothing, and the same thread dump or GC log read twice in one IDE session counts once. Two links now sit in the footer beside the Pro line. "Try Pro free for 30 days" shows on a machine where the trial has not run and opens the IDE license dialog, where the trial starts. Once a trial has run there, the same spot reads "Get Pro" and opens the pricing page. While Pro is running, bought or on trial, the spot is empty. "Write a review" shows in every state and opens the reviews page of the listing. Nothing else changed.
- 1.4.0published 2026-09-19
The Pro trial notices now end with a question and the support address. A key issued for another plugin no longer opens Heap Dump Lens Pro. A key for Heap Dump Lens itself is unaffected.
- 1.3.0published 2026-09-17
Export in the toolbar writes a table to a CSV file, a Pro feature. The popup under the button lists what the tab holds: the whole class histogram, the rows a filter has matched, and the top retainers ranking once it has been computed. The histogram file follows the grid's sort with the filter set aside, and the other two files hold their rows as the grid shows them; the first line of every file names its columns (class, instances, shallow_bytes for the two histogram files; rank, class, retained_bytes, shallow_bytes, object_id for the top retainers ranking). The dump itself is never accepted as the destination, and a cancelled or failed run leaves no partial file behind. The balloon at the end offers to open the file. The histogram on screen, and copying rows out of it, stay free. A Pro trial in its last week now says so once, and once more with a day left; each notice names what Pro adds, and its See pricing action opens the pricing tab of the marketplace page. The one-time review ask now also counts a sorted histogram and the top retainers ranking once computed, not only a dump opened and a filter that kept rows.
- 1.2.7published 2026-09-13
A dump that ends early now says "the file is truncated". A heap dump the JVM never finished writing, or a copy that stopped part way, used to fail with "Could not read the dump: null" or a bare byte offset. The reader now names the byte the file ends at and the record it ends in, and a record that claims more bytes than the file holds is refused before anything reads past the end. A file that is not a dump at all still says so.
- 1.2.6published 2026-09-09
Two new themes in the Theme picker, lamplighter and catacombs. They sit after the eight with a padlock and a hint until earned: lamplighter "unlocks when you share Lens with a colleague", catacombs "unlocks the first time Pro runs for you". Share Heap Dump Lens, new in the Help menu, shows a card with the marketplace page and your referral code; copying the card, or entering a code a colleague gave you, unlocks lamplighter. Catacombs comes with the first Pro run, a trial counts, and it stays after the trial ends. A theme earned this way is kept without Pro, here and in every Lens plugin. Picking a locked entry opens its unlock path instead of applying it. Thread dumps and GC logs read the saved theme under the same rule now.
- 1.2.5published 2026-09-08
Two fixes, one for a dump still indexing and one for a dump that could not be read. A class name typed into the filter while a large dump was still indexing was dropped when the histogram landed: the grid showed every class under a filled field until the next keystroke, and the rows now arrive already filtered. And a dump that could not be read no longer offers to compute retained sizes. That tab used to keep its button, and pressing it wrote "still indexing" into the header of a dump that had already failed; it now carries the reason the dump would not open.
- 1.2.4published 2026-09-07
A trial key that has run out no longer opens Pro. Trials from the JetBrains account arrive as signed keys, the same shape as a paid license, with the trial's last day inside; the signature alone was checked, and a signature holds for years, so retained sizes, the saved theme, the Supporter footer line and the thank-you meant for buyers all stayed on a lapsed trial while the trial-ended notice never showed. The last day inside the key decides now, and the day after it retained sizes ask for a license again, the tables open in the default look, the ended notice shows once, and the histogram, thread dumps and GC logs carry on free. Paid keys and the perpetual fallback license read as before.
- 1.2.3published 2026-09-05
An empty table says why it is empty. A dump still indexing, a dump that could not be read, a dump with no classes in it and a filter that matched nothing each read differently, and the retained ranking, the thread table and the GC log table say so when they have nothing to show. Every one of them used to open on a blank grid that looked like a broken view.
- 1.2.2published 2026-09-03
The trial notices now say what the trial did. A trial that is about to end, or has just ended, opens with the number of searches that found something while Pro was on; a typed query counts once, not once per keystroke, and with nothing counted the notice starts on its own words. The one-time review ask waits for five value moments now instead of three, so it comes after real use.
- 1.2.1published 2026-09-03
A Pro trial that is about to end says so once, with a link to pricing, and a trial that has ended says so once. Licensed users now get the thank-you and the Supporter line in the footer, and the family link stays visible. Pro gate messages and the listing now say what is true: each Lens plugin has its own free 30-day trial.
- 1.2.0published 2026-09-03
.hprof.gz files open. The plugin inflates the archive into its own work directory, then indexes the result the way it indexes a plain dump. The copy goes when the tab closes, and the startup sweep from 1.1.2 catches it if the IDE dies first. A cut-off or damaged archive is reported by name. Opening is free, as before.
- 1.1.2published 2026-09-03
Work directories left behind by an IDE that died mid-analysis are cleaned up. Each dump's work directory now carries its owner's process id, and on startup the plugin removes the ones whose owner is gone, plus unmarked ones older than a day. Nothing in use is touched.
- 1.1.1published 2026-09-02
Three fixes. A saved theme comes back on open only while the license is active; without one the tables open in the default look. An empty dump no longer counts toward the one-time review ask. The histogram filter and the retained tab keep the selected row when it is still shown.
- 1.1.0published 2026-09-02
Themes: pick a look for the whole tab from the toolbar. Eight strands shared across the Lens family (default, hacker, cyberpunk, goblincore, neon, nosferatu, halloween, blue lagoon) restyle the class histogram, the retained table, thread dumps and GC log pauses: instance counts and byte figures take the number tint, class and thread names the text tint, object ids and the heap before and after figure the structure tint, with row striping and the selection color from the strand. Thread states and the daemon flag keep the platform's own look, and the default look is unchanged. Any strand tastes free for the open window, and keeping one set is Pro.
jsonl lens for vs code
- 0.5.20published 2026-10-17
export (Pro) now refuses a hard link of the open file as a destination, with the sentence "Export destination is the source file under another name (a hard link, or the same path in another case)". the file's own path and a symbolic link to it were refused before; a hard link was not, and a write through one empties the file being read. in the CSV shape, a cell that opens with an equals sign, a plus, a minus or an at sign and is not a plain number goes out behind an apostrophe, so =HYPERLINK(...) in a record opens as the text it is, while -1 and +1 234 keep their sign; the quoting of commas, quotes and line breaks has not changed.
- 0.5.19published 2026-10-17
a double-clicked .jsonl, .ndjson, .ldjson or .jsonlines file opens as text, and from this version one over 5 MB, or gzipped (the text editor shows a gzipped file as binary), is offered to the viewer: one message asks "Open events.jsonl in JSONL Lens?" with the buttons "Open", "Always for .jsonl" and "Not now". "Open" shows it in the viewer and closes the text tab, "Always" also makes JSONL Lens the editor for that ending in your user settings, and the question comes once per ending on this machine, never for an ending you already gave an editor. a Parquet, Avro or Arrow file, a SQLite database, a ZIP archive (an Excel .xlsx workbook is one) or a gzipped file without a .gz name, opened in JSONL Lens, is now refused in one line, Not a JSON Lines file: "sales.parquet" is a Parquet file., where the grid showed its bytes as rows of unparseable records. a read that trips on bytes it cannot place now says "part of it is damaged, or laid out in a way this viewer cannot follow", with the reader's own message in the tooltip.
- 0.5.18published 2026-10-14
a search that fails, because the file could not be read for example, now says why in the search bar, where it stayed on "Searching..." for good. a webview the editor reloads (a tab hidden and shown again) hears the file as it was, with its count, instead of being indexed a second time, which doubled the count. a read that fails after the file opened (a page of rows, a detail) now says why in the status line too, where the grid waited on it for good.
- 0.5.17published 2026-10-13
the viewer now opens .ldjson and .jsonlines files, plain or gzipped, as it opens .jsonl and .ndjson ones, and the "Open in JSONL Lens" button shows on them too. the store description is shorter, so the VS Code Marketplace shows it whole instead of cutting it off mid-sentence; the details it left out are in the README.
- 0.5.16published 2026-10-09
a .jsonl or .ndjson file open in the text editor now shows an "Open in JSONL Lens" button at the top right; the text editor stays the default. the trial opens with a notice, "Lens Pro is on for 30 days on this machine", and the first filter query, export or full-file stats run during it gets a line such as "That filter query was Pro. Your trial runs 27 more days. Search stays free." the trial notices now begin with what the trial did ("This trial: 3 filter queries, 1 export.") and end, like the Lens Pro prompt, with the price, "Lens Pro: $4.90 a month or $49 a year personal, $9.90 a month or $99 a year business.", and two buttons, "Buy (personal)" and "Business pricing", that open the checkout. an export or full-file stats run turned down for Pro says so in the grid with the same price line. you may see one request for a marketplace review during a trial, and "Write a review" now sits in the license menu. the README now says how to install it in Cursor, Windsurf and VSCodium, from Open VSX.
- 0.5.15published 2026-10-09
the Enter license key box now says where the key is: in the Polar customer portal, which the Access purchase button in the receipt mail opens. the receipt itself carries the invoice, not the key. the hint in the box is new and shows how long a real key is. after a key activates, the message adds that the portal lists this machine under Activations, and that the Validated At line there fills at the first check, about a week later on a subscription.
- 0.5.14published 2026-10-08
the editor now knows the .jsonl and .ndjson endings. during the trial the (Pro) labels stay in view, a shade lighter, so you can see which features the trial unlocks; a key hides them as before. a whole-file filter that needs Pro now says so in the filter bar, and the table stays as it was. the trial reminders come one per sitting, and the last-day one appears once. a key checked, or a grace period begun, while the computer's clock ran ahead now counts from the real time once the clock is set right. an ended subscription no longer stays Pro. the README says the file is never loaded whole into memory, and its family list names Log Lens for VS Code.
- 0.5.12published 2026-10-02
the grid is at full brightness again while Pro is on: a style rule meant for the (Pro) labels also matched the page, so trial and Pro users saw everything dimmed to 75 percent. nothing else changes.
- 0.5.11published 2026-09-30
Lens Pro is a subscription now: $4.90 a month or $49 a year personal, $9.90 a month or $99 a year business, one key for the three extensions, and Pro stays on in every build while the subscription runs. the key is checked with Polar about once a week instead of once a month, so a subscription that ends turns Pro off at the next check after its last paid day, about a week at most. the "Personal" and "Business" choices under "Get Lens Pro", the Pro dialogs and the README carry the new terms.
- 0.5.10published 2026-09-23
the one-time review prompt now has a third button, "Feedback", between "Write a review" and "No thanks", and so does the thank-you a buyer with a key sees once. "Feedback" opens a feature request form on GitHub in your browser, with the extension and its version filled in, and nothing is sent until you post it.
- 0.5.9published 2026-09-19
the review ask now opens the reviews tab on Open VSX rather than the extension page, so the box to write in is there when the page loads. a buyer with a key sees one ask of its own, once: "Thank you for buying Lens Pro. A short review on the VS Code Marketplace helps other people find JSONL Lens." the free-tier wording, which read as a pitch to someone who had already paid, no longer reaches a buyer. the second button on both asks reads No thanks, since neither ask comes back. the license menu has a third item, Manage license and receipts, which opens the Polar customer portal at polar.sh/twilight-ventures/portal, where receipts, invoices, your key and the machines it runs on sit under the purchase email.
- 0.5.8published 2026-09-19
a stored key is now checked with Polar about once a month. a key that was refunded, revoked or put on more machines than it allows stops working within a month of that; it used to keep working until you removed it by hand. when the server cannot be reached the key stays on for a grace period of 45 days, and the check runs again at every start and once a day until it gets through. the pro dialog reads "Entering a key makes one network call to activate it, then one check about once a month." the key record on this machine is signed with a secret from the editor's secret storage, so a copy from another machine, or a record edited by hand, reads as no license. a key from an earlier build is kept and checked at the first start. the trial start also lives in .twilightventures-lens.json in your home folder, and the earlier of the two copies wins, so a new profile or a reinstall does not get a second 30-day trial; a clock set back by more than an hour reads as a spent trial. a trial that ends while a JSONL Lens tab is open takes the pro labels and a standing filter view with it at that moment, not at the next reload. records read as they did.
- 0.5.7published 2026-09-17
the Pro trial now runs 30 days on each machine. the status bar counts it down from "Pro trial, 30 days left", and the two notices while the trial runs keep their places, one inside the last seven days and one on the last day. records read as they did; the grid, find and the schema tab are untouched.
- 0.5.6published 2026-09-17
the trial now says when it is running out. the first notice is due inside the last seven days and shows when a JSONL Lens tab is in front, so the count in it is the days left, not always seven. five days out it reads "JSONL Lens Pro trial ends in 5 days. Pro features stay on until then; the free tier stays after. Pro adds whole-file filters, export, exact stats and themes.", and a second notice comes on the last day, "JSONL Lens Pro trial ends today." with the same two sentences behind it. no network call is made for either; the count comes from the trial start already stored on the machine. each one shows once on a machine, and at most one of them shows in a session. neither shows once a key is entered, and neither shows in the same sitting as the review prompt. both carry one button, Get Lens Pro, which opens the same checkout the status bar item does. the notice after the trial has ended is unchanged, and reading records is untouched, the JSON Lines grid included.
- 0.5.5published 2026-09-14
the activation row a pasted key makes in the Polar portal now ends with the extension name, so the two Lens extensions on one machine read as two rows you can tell apart when you release one.
a .jsonl.gz or .ndjson.gz opens in the viewer. the file is unpacked once to a temp file, the progress bar shows the unpacking over the compressed size, and then the viewer runs on the plain bytes as it does for any other file. the status line says the unpacked size beside the compressed one, and the temp file goes when the tab closes, also when the tab closes while the unpacking is still running. the two names are back in Open With and in both Open in JSONL Lens menus; they were taken out in 0.5.1 because nothing read them yet. an export cannot be saved over the compressed source. a plain file renamed to .gz gets a sentence saying so, and so does a temp disk without the room to unpack. free, like the rest of the viewer.
- 0.5.4published 2026-09-11
nothing in the viewer changed. the listing and the README now name the guides and the family overview at twilightventures.dev and the support address, support@twilightventures.dev. a bug report asks for the version and the rough size of the file. the family section names Parquet Lens for VS Code with its Avro and TFRecord files, and the homepage link of the extension points at its page on the site.
- 0.5.3published 2026-09-11
"Matches only", a button beside the match arrows, pages the grid through the records the search hit and nothing else. the row numbers stay the file's, so a hit on record 4,812 still says 4,812, and the counter adds "matches only" while the button is down. a new search while it is down narrows to the new hits; a search that finds nothing lets the whole file back in; under a whole-file filter the button narrows the filtered view. free, like the rest of find.
go to row: a number box left of the search box, Ctrl+G puts the cursor in it. type a record number, press Enter, and the grid scrolls to that record and selects it. under a filter or matches only the number is still the file's record number, and when that record is not in the view the grid lands on the next one that is.
the license check now pins the Polar API version it was built against, so pasting a key works the same after Polar moves its default on October 1.
- 0.5.2published 2026-09-09
duskhollow, abyss, obsidian and moonlit garden join the eight looks under "JSONL Lens: Pick theme". each is tuned for light and dark editors and has its own line in the picker, "indigo dusk and lamp amber: the universe itself, a rose-lit stripe" for duskhollow and "black glass: silver text, magma numbers, a cold blue for structure, the darkest stripe of the set" for obsidian. trying one is free: the pick tints the JSONL Lens tabs open in the window and is not saved, so a new tab and the next start open in the default look; keeping a theme is pro. the default look never changes.
the review ask opens the store the editor installed from, under the id that store holds: jsonl-lens-viewer on the VS Code Marketplace, jsonl-lens on Open VSX. VS Code and VS Code Insiders get the review page on the Marketplace, and the ask reads "If JSONL Lens is useful to you, a short review on the VS Code Marketplace helps us decide what to work on next." any other editor with an extension gallery, VSCodium among them, gets the extension page on Open VSX, and the ask reads "If JSONL Lens is useful to you, a short review on Open VSX helps us decide what to work on next." before this release every host was sent to the Marketplace page under jsonl-lens-viewer.
- 0.5.1published 2026-09-09
the grid reaches the end of a big file. the table behind the grid was as tall as every record it stood for, 23 px each, and Chromium stops a table at its layout limit divided by the display scale: about 33.5 million px at 100%, 22.4 million at 150%, 16.8 million at 200%. so the scrollbar ran out at record 1,458,888 on a 100% display, at 972,592 on a 150% one and at 729,444 on a 200% one: the records below could not be scrolled to, and a search hit among them could not be jumped to. the table now stays under the limit at every scale, 20,000,000 px up to about 160% and less above that, and the scrollbar position is mapped to a record through the ratio between the two heights, so a 5,000,000-record file scrolls to its last record and a hit at the end lands on it; a file that fits under the cap draws exactly as before. the two spacer rows that stand in for the records not drawn take their height through the style object now, which the webview's content policy allows where it dropped the inline attribute the grid wrote before, so the grid scrolls the whole file instead of the rows it had drawn. the Open in JSONL Lens entry in the explorer and tab menus no longer appears on .jsonl.gz and .ndjson.gz files, which the viewer cannot open; .jsonl and .ndjson keep it. the listing text changed as well: the opening paragraph says pro is on from the first open, a 14-day trial on each machine with no key to enter, and quotes the status bar line "Pro trial, 14 days left"; the marketplace description carries the same clause; a paragraph under the free list states what the viewer does with a file; and the pro section names the two buttons on every pro dialog, Enter license key and Get Pro, and says that one Lens Pro key covers both JSONL Lens and Parquet Lens for VS Code, each extension activating it on its own.
- 0.5.0published 2026-09-09
asks for a review once. the ask waits for five uses on this machine, counted per file: a file indexed with records in it and the first search on it with hits count once each, and every export that wrote something counts. it then offers Write a review, which opens the review page on the marketplace, or Later, and neither answer brings it back. nothing is given for a review. the marketplace rules forbid that. the ask stays quiet through the last three days of the trial and on the day the "trial has ended" notice shows. the counts live in the editor state and no network call is added.
parquet lens for vs code
- 0.6.21published 2026-10-17
"Copy rows as CSV" (free) now puts an apostrophe in front of a cell whose first character is =, +, - or @ when the cell is not itself a number, so =SUM(A1) arrives as text while a signed number arrives as the number. the CSV export (Pro) writes its cells the same way; commas, quotes and line breaks are quoted as before. a hard link of the open file is refused as a destination with the words "Export destination is the source file under another name (a hard link, or the same path in another case)", where the refusal read "Export destination is the source file".
- 0.6.20published 2026-10-17
a big row group without a page index, as pandas and pyarrow write a table under 1,048,576 rows unless asked otherwise, now pages in every column: each screen of rows decodes only the Parquet pages that hold it, where the first screen of such a file with lists, maps or structs decoded their whole chunk and could run the editor's extension host out of memory. when even those pages would come to more than 256 MB, the grid now says so with the file's own figures, such as "This file keeps 1,048,576 rows in one 662.8 MB row group without a page index; Parquet Lens cannot page through it yet. The schema tab still reads its footer.", and the editor stays up. a list column whose version 1 pages begin inside a row now shows its own values on every page, where rows further down showed other rows' lists or failed with "parquet struct parsing error". a Parquet file cut down to its first bytes, or whose footer length reads 0, now says it "starts like a Parquet file but does not end like one", the footer missing or cut short, where it showed the reader's own words, such as "Offset is outside the bounds of the DataView". a page that will not decode now says "These rows could not be read: the part of the file that holds them is damaged, or the file changed on disk after it opened." in the status line, where it said "parquet unsupported page type: undefined". a gzipped TFRecord file cut short is now told as a copy that stopped early; it used to open with the records before the cut and no word that any were missing. a gzipped file named like a Parquet, Avro, Arrow or Feather file is told it is gzip-compressed, with the step to gunzip it; it used to be called a copy that stopped early.
- 0.6.19published 2026-10-14
a Parquet file written as one big row group, such as the 1,048,576 rows pyarrow puts in one by default, now pages at once: a page decodes only its own rows, where it decoded the whole group each time, and search, filters, stats and export decode the group once instead of once per few thousand rows. an Arrow or Feather file over 2 GiB now opens, and a smaller one is no longer read whole into memory: record batches are read as you scroll to them. an open file is read through one reader for paging, search, filters, stats and export, so a gzipped TFRecord file is inflated once, and one that inflates to more than 1 GiB now says so when it opens. a search that fails, because the file could not be read for example, now says why in the search bar, where it stayed on "Searching..." for good. a read that fails after the file opened (a page of rows, a detail) now says why in the status line too, where the grid waited on it for good.
- 0.6.18published 2026-10-13
gzipped TFRecord files ending in .tfrecords.gz or .tfrec.gz now open in the viewer, as .tfrecord.gz files do. the store description is shorter, so the VS Code Marketplace shows it whole instead of cutting it off mid-sentence; the details it left out are in the README.
- 0.6.17published 2026-10-09
the trial opens with a notice, "Lens Pro is on for 30 days on this machine", and the first filter query, export or exact stats run during it gets a line such as "That filter query was Pro. Your trial runs 27 more days. Search reads every row for free." the trial notices now begin with what the trial did ("This trial: 3 filter queries, 1 export.") and end, like the Lens Pro prompt, with the price, "Lens Pro: $4.90 a month or $49 a year personal, $9.90 a month or $99 a year business.", and two buttons, "Buy (personal)" and "Business pricing", that open the checkout. an export or exact stats run turned down for Pro says so in the grid with the same price line. you may see one request for a marketplace review during a trial, and "Write a review" now sits in the license menu. the README now says how to install it in Cursor, Windsurf and VSCodium, from Open VSX.
- 0.6.16published 2026-10-09
the Enter license key box now says where the key is: in the Polar customer portal, which the Access purchase button in the receipt mail opens. the receipt itself carries the invoice, not the key. the hint in the box is new and shows how long a real key is. after a key activates, the message adds that the portal lists this machine under Activations, and that the Validated At line there fills at the first check, about a week later on a subscription.
- 0.6.15published 2026-10-08
a top-level column with a dot in its name, such as a.b in a file that also has a struct a with a field b, now shows its own min, max and null count, where it showed the struct field's. during the trial the (Pro) labels stay in view, a shade lighter, so you can see which features the trial unlocks; a key hides them as before. a whole-file filter that needs Pro now says so in the filter bar, and the table stays as it was. the trial reminders come one per sitting, and the last-day one appears once. a key checked, or a grace period begun, while the computer's clock ran ahead now counts from the real time once the clock is set right. an ended subscription no longer stays Pro. the editor now knows the Parquet, Avro, TFRecord, Arrow and Feather endings. the README's family list names Log Lens for VS Code.
- 0.6.13published 2026-10-02
the grid is at full brightness again while Pro is on: a style rule meant for the (Pro) labels also matched the page, so trial and Pro users saw everything dimmed to 75 percent. nothing else changes.
- 0.6.12published 2026-09-30
Lens Pro is a subscription now: $4.90 a month or $49 a year personal, $9.90 a month or $99 a year business, one key for the three extensions, and Pro stays on in every build while the subscription runs. the key is checked with Polar about once a week instead of once a month, so a subscription that ends turns Pro off at the next check after its last paid day, about a week at most. the "Personal" and "Business" choices under "Get Lens Pro", the Pro dialogs and the README carry the new terms.
- 0.6.11published 2026-09-23
the one-time review prompt now has a third button, "Feedback", between "Write a review" and "No thanks", and so does the thank-you a buyer with a key sees once. "Feedback" opens a feature request form on GitHub in your browser, with the extension and its version filled in, and nothing is sent until you post it.
- 0.6.10published 2026-09-19
the review ask now opens the reviews tab on Open VSX rather than the extension page, so the box to write in is there when the page loads. a buyer with a key sees one ask of its own, once: "Thank you for buying Lens Pro. A short review on the VS Code Marketplace helps other people find Parquet Lens." the free-tier wording, which read as a pitch to someone who had already paid, no longer reaches a buyer. the second button on both asks reads No thanks, since neither ask comes back. the license menu has a third item, Manage license and receipts, which opens the Polar customer portal at polar.sh/twilight-ventures/portal, where receipts, invoices, your key and the machines it runs on sit under the purchase email.
- 0.6.9published 2026-09-19
a stored key is now checked with Polar about once a month. a key that was refunded, revoked or put on more machines than it allows stops working within a month of that; it used to keep working until you removed it by hand. when the server cannot be reached the key stays on for a grace period of 45 days, and the check runs again at every start and once a day until it gets through. the pro dialog reads "Entering a key makes one network call to activate it, then one check about once a month." the key record on this machine is signed with a secret from the editor's secret storage, so a copy from another machine, or a record edited by hand, reads as no license. a key from an earlier build is kept and checked at the first start. the trial start also lives in .twilightventures-lens.json in your home folder, and the earlier of the two copies wins, so a new profile or a reinstall does not get a second 30-day trial; a clock set back by more than an hour reads as a spent trial. a trial that ends while a Parquet Lens tab is open takes the pro labels and a standing filter view with it at that moment, not at the next reload. no dataset reads differently; the parquet footer is still read first.
- 0.6.8published 2026-09-17
the Pro trial now runs 30 days on each machine. the status bar counts it down from "Pro trial, 30 days left", and the two notices while the trial runs keep their places, one inside the last seven days and one on the last day. no dataset reads differently; the parquet footer is still read first, so a file opens before any row decodes.
- 0.6.7published 2026-09-17
Parquet Lens now says when the trial is running out. two notices come while the trial runs, and the third, the one after it has ended, is unchanged. each shows once on a machine, and a session shows at most one of them; neither shows once a key is entered, or in the same sitting as the notice that asks for a review. the first becomes due with seven days or fewer left and shows at the next Parquet Lens tab in front, counting the days left rather than seven every time. three days out it reads "Parquet Lens Pro trial ends in 3 days. Pro features stay on until then; the free tier stays after. Pro adds whole-file filters, export, exact stats and themes.", and the second comes on the last day, "Parquet Lens Pro trial ends today." with the same two sentences behind it. each carries one button, Get Lens Pro, which opens the same checkout the status bar item does. no dataset reads differently for any of this; row groups and pages are untouched. nothing here makes a network call, because the count comes from the trial start already stored on the machine.
- 0.6.6published 2026-09-14
the activation row a pasted key makes in the Polar portal now names the extension after the machine digest, so the two Lens extensions on one machine read as two rows you can tell apart when you release one. the viewer itself did not change. the README and the store description now name the two calls a key makes, one to activate when you paste it and one to release when you remove it, and nothing else; the open-time line now names the measured file and times the footer read; the pricing line says what a key covers after its year of updates.
- 0.6.5published 2026-09-13
a parquet page header that states a size no page can have is refused before any memory is set aside for it. the reader used to take the header's word and reserve that much first, so a damaged or crafted file could ask the editor for 2 GB on its first page and fail with a memory error, or with nothing at all. now a page that claims more than its codec can unpack from the bytes it has, or more than the 512 MB the reader takes in one page, stops with a sentence that names the codec, and the tab shows that sentence. the rule stands in front of snappy, gzip, zstd, lz4 and lz4_raw alike. uncompressed pages are read as they are. the test files are one page each, with the header rewritten to claim 128 MB.
- 0.6.4published 2026-09-11
nothing in the viewer changed. the listing and the README now name the guides and the family overview at twilightventures.dev and the support address, support@twilightventures.dev. a bug report asks for the version and the rough size of the file. the homepage link of the extension points at its page on the site.
- 0.6.3published 2026-09-11
the search row gains "Matches only". press it and the grid holds the rows the search hit, in file order, each with its file row number; press it again for every row. applying or clearing a filter ends it, and a search with no hits brings every row back on its own. searching again while it is down keeps the grid on the new hits.
go to row is the small box beside the search box: Ctrl+G, type 6901, Enter, and row 6,901 is selected, centred. the number is the one the # column shows, so under a filter or matches only it is still the file's row number; when the view does not hold that row the cursor goes to the first row after it. a 12,000 row file with 19 row groups was the test file, and the jump does not decode the rows in between.
fixed: clearing a whole-file filter left the grid the size of the filter's matches, so a file of 12,000 rows showed six after Clear until the tab was reopened. the row count comes back with the clear.
under the hood, the license check now names the Polar API version it speaks, 2026-04, so the October 1 change of default on the Polar side does not reach a pasted key.
- 0.6.2published 2026-09-09
duskhollow, abyss, obsidian and moonlit garden join the eight looks under "Parquet Lens: Pick theme"; the grid is the one JSONL Lens draws, so 0.5.2 there carries the same four. each is tuned for light and dark editors and has its own line in the picker, "deep sea: cyan text, bioluminescent numbers, violet blobs on near-black water" for abyss and "moon-green text, lavender numbers, bark amber blobs; the quiet one" for moonlit garden. a pick without Lens Pro tints the Parquet Lens tabs open in the window and is not saved: a new tab and the next start open in the default look. keeping a theme is pro, and the default look never changes.
the review ask opens the store the editor installed from. on VS Code and VS Code Insiders that is the review page on the VS Code Marketplace, and the ask says so: "If Parquet Lens is useful to you, a short review on the VS Code Marketplace helps us decide what to work on next." any other editor with an extension gallery, VSCodium among them, gets the extension page on Open VSX: "If Parquet Lens is useful to you, a short review on Open VSX helps us decide what to work on next." the extension is parquet-lens-viewer on both stores, so only the page and the words change with the host.
- 0.6.1published 2026-09-09
the grid reaches the end of a big file; the grid is the one JSONL Lens draws, so 0.5.1 there carries the same fix. the table behind the grid was as tall as every row it stood for, 23 px each, and Chromium stops a table at its layout limit divided by the display scale: about 33.5 million px at 100%, 22.4 million at 150%, 16.8 million at 200%. so the scrollbar ran out at row 1,458,888 on a 100% display, at 972,592 on a 150% one and at 729,444 on a 200% one: the rows below could not be scrolled to, and a search hit among them could not be jumped to. the table now stays under the limit at every scale, 20,000,000 px up to about 160% and less above that, and the scrollbar position is mapped to a row through the ratio between the two heights, so a 5,000,000-row file scrolls to its last row and a hit at the end lands on it; a file that fits under the cap draws exactly as before. the two spacer rows that stand in for the rows not drawn take their height through the style object now, which the webview's content policy allows where it dropped the inline attribute the grid wrote before, so the grid scrolls the whole file instead of the rows it had drawn. the trial-ended notice and the status bar tooltip now name the whole-file filter with export, exact stats and themes; 0.6.0 made the filter pro and the notice had not caught up. the listing text changed as well: the opening paragraph carries the trial clause JSONL Lens 0.5.1 carries, word for word, and quotes the status bar line "Pro trial, 14 days left"; the marketplace description is shorter and carries the same clause; a paragraph under the free list states what the viewer does with a file; and the pro section quotes the notice, names the two buttons on every pro dialog, Enter license key and Get Pro, and says that one Lens Pro key covers both extensions, each activating it on its own.
- 0.6.0published 2026-09-09
adds whole-file filter queries to pro. the Filter box above the grid takes an expression such as country == "US" && amount > 100, every row in the file is tested against it on a reader of its own, and the grid becomes the rows that match, each keeping its row number from the file. a value compares as its column's type: int64 exactly, a decimal at its own scale, a timestamp or a date against ISO-8601 text or a bare date, a string as text, and a clause whose types do not agree is false rather than an error. a column the file does not have is named at its place in the expression instead of matching nothing. search runs inside the filtered rows and export can take them. the grammar is the one JSONL Lens and the JetBrains plugins read, so an expression written for one works in the others. this build also asks for a review once, the same ask JSONL Lens 0.5.0 carries. the ask waits for five uses on this machine, counted per file: a file opened with rows in it and the first search on it with hits count once each, and every export that wrote something counts. it then offers Write a review, which opens the review page on the marketplace, or Later, and neither answer brings it back. nothing is given for a review. the marketplace rules forbid that. the ask stays quiet through the last three days of the trial and on the day the "trial has ended" notice shows. the counts live in the editor state and no network call is added.
- 0.5.5published 2026-09-08
two of the 0.5.4 sentences pointed at the wrong fix. a parquet file with its footer missing, which is what a download that stopped early leaves behind, was called a file of another format that had been renamed; it now reads "sales.parquet starts like a Parquet file but does not end like one: the footer that closes every Parquet file is missing or cut short", and the advice is to copy it again. a file named .tfrecord that is not one was told its checksums did not match and to restore it from a copy; the reader's own line, "Not a TFRecord file: record 1 length checksum mismatch", is the headline now. a feather v1 file keeps its re-save note as written, and an empty file says it is empty instead of offering to try again.
log lens for vs code
- 0.2.15published 2026-10-17
a CSV export (Pro) now writes a leading apostrophe into any field that starts with =, +, - or @, or with a tab or a carriage return, and is not a plain number: the message, the level, the time or a named field alike. =cmd|x is written as text; a field that is only -1 stays the number -1. the export also refuses a hard link of the log as its destination, with the sentence "Export destination is the source file under another name (a hard link, or the same path in another case)"; the log's own path and a symbolic link to it were refused before, and a write through a hard link would have emptied the log while it was being read.
- 0.2.14published 2026-10-17
a UTF-8 log with a few damaged spots now opens as UTF-8 while its well-formed letters past ASCII outnumber the bad sequences eight to one; one stray byte used to send the whole file to the double-byte vote, which read a Polish log as Korean (EUC-KR) and turned its ą, ę and ł into other characters. a .log, .out or .err file over 5 MB, app.log.3 and the other numbered rotations included, or any gzipped one, that a double click opened as text now draws one question, "Open service.log in Log Lens?", with "Open", an "Always for" button that names the ending (.log, .out or .err) and "Not now": "Always" makes Log Lens the editor for that ending in your user settings, .log bringing its numbered rotations along, the question is asked once per ending on this machine, and never for an ending that already has an editor. a file of another format opened in Log Lens, a Parquet, Avro or Arrow file, a SQLite database, a ZIP archive such as an .xlsx workbook, or gzip under a name without .gz, is refused in one line, Not a log file: "app.db" is a SQLite database., where the grid showed its bytes as lines of noise. the line "part of it is damaged, or laid out in a way this viewer cannot follow" now covers a log the reader cannot place, its own message in the tooltip.
- 0.2.13published 2026-10-14
a search that fails, because the file could not be read for example, now says why in the search bar, where it stayed on "Searching..." for good. a webview the editor reloads (a tab hidden and shown again) hears the file as it was, with its count, instead of being indexed a second time, which doubled the count. a read that fails after the file opened (a page of rows, a detail) now says why in the status line too, where the grid waited on it for good.
- 0.2.12published 2026-10-13
the level pass read the first 8 KB of each line, and a JSON line whose level field came later, such as a logstash-logback-encoder ERROR with a long message ahead of it, got no level in its row and no place in the ERROR count. the detail pane parsed the whole line and said ERROR. the pass and follow mode now read such a line on to its level field; plain lines are read as before. the store description is shorter, so the VS Code Marketplace shows it whole instead of cutting it off mid-sentence; the details it left out are in the README. the README also no longer lists Latin-1 and Windows-1252 among the encodings read wrong, since a Western European log in either is recognized as Windows-1252.
- 0.2.10published 2026-10-09
a .log, .out or .err file open in the text editor now shows an "Open in Log Lens" button at the top right; the text editor stays the default. the trial opens with a notice, "Lens Pro is on for 30 days on this machine", and the first filter query, export or log statistics run during it gets a line such as "That filter query was Pro. Your trial runs 27 more days. Search stays free." the trial notices now begin with what the trial did ("This trial: 3 filter queries, 1 export.") and end, like the Lens Pro prompt, with the price, "Lens Pro: $4.90 a month or $49 a year personal, $9.90 a month or $99 a year business.", and two buttons, "Buy (personal)" and "Business pricing", that open the checkout. an export or statistics run turned down for Pro says so in the grid with the same price line. you may see one request for a marketplace review during a trial, and "Write a review" now sits in the license menu. the README now says how to install it in Cursor, Windsurf and VSCodium, from Open VSX.
- 0.2.9published 2026-10-09
the Enter license key box now says where the key is: in the Polar customer portal, which the Access purchase button in the receipt mail opens. the receipt itself carries the invoice, not the key. the hint in the box is new and shows how long a real key is. after a key activates, the message adds that the portal lists this machine under Activations, and that the Validated At line there fills at the first check, about a week later on a subscription.
- 0.2.8published 2026-10-08
a log saved in an older Windows encoding, French, Turkish or Cyrillic text for example, is now recognized when it opens, where some were read as UTF-8 with broken letters. such a log is decoded into a copy before the first rows show, and follow now works on it: the new lines are decoded as they arrive. the viewer now opens .out and .err files, plain or gzipped. during the trial the (Pro) labels stay in view, a shade lighter, so you can see which features the trial unlocks; a key hides them as before. a whole-file filter that needs Pro now says so in the filter bar, and the table stays as it was. the trial reminders come one per sitting, and the last-day one appears once. a key checked, or a grace period begun, while the computer's clock ran ahead now counts from the real time once the clock is set right. an ended subscription no longer stays Pro. the editor now knows the endings: .log, the rotated .log.N files, .out and .err, plain or gzipped. the description and README now say the log is never loaded whole.
- 0.2.6published 2026-10-02
the grid is at full brightness again while Pro is on: a style rule meant for the (Pro) labels also matched the page, so trial and Pro users saw everything dimmed to 75 percent. nothing else changes.
- 0.2.5published 2026-09-30
Lens Pro is a subscription now: $4.90 a month or $49 a year personal, $9.90 a month or $99 a year business, one key for the three extensions, and Pro stays on in every build while the subscription runs. the key is checked with Polar about once a week instead of once a month, so a subscription that ends turns Pro off at the next check after its last paid day, about a week at most. the "Personal" and "Business" choices under "Get Lens Pro", the Pro dialogs and the README carry the new terms.
- 0.2.4published 2026-09-23
the one-time review prompt now has a third button, "Feedback", between "Write a review" and "No thanks", and so does the thank-you a buyer with a key sees once. "Feedback" opens a feature request form on GitHub in your browser, with the extension and its version filled in, and nothing is sent until you post it.
- 0.2.3published 2026-09-21
the example in the filter box is now written the way a query has to be written to work on any log: `$level == "ERROR" && $message contains "timeout"`. every line the filter sees carries `$level`, `$time` and `$message`, whatever shape the file is in; the bare names `level` and `message` belong to a JSON or logfmt line that happens to use those keys, so the old example typed into a plain log returned nothing at all. the README says which names are always there and which come from the line itself.
- 0.2.2published 2026-09-19
the review ask now opens the reviews tab on Open VSX rather than the extension page, so the box to write in is there when the page loads. a buyer with a key sees one ask of its own, once: "Thank you for buying Lens Pro. A short review on the VS Code Marketplace helps other people find Log Lens." the free-tier wording, which read as a pitch to someone who had already paid, no longer reaches a buyer. the second button on both asks reads No thanks, since neither ask comes back.
the license menu has a third item, Manage license and receipts. it opens the Polar customer portal at polar.sh/twilight-ventures/portal, where receipts, invoices, your key and the machines it runs on sit under the purchase email.
- 0.2.1published 2026-09-19
a stored key is now checked with Polar about once a month. a key that was refunded, revoked or put on more machines than it allows stops working within a month of that; it used to keep working until you removed it by hand. when the server cannot be reached the key stays on for a grace period of 45 days, and the check runs again at every start and once a day until it gets through. the pro dialog reads "Entering a key makes one network call to activate it, then one check about once a month." the key record on this machine is signed with a secret from the editor's secret storage, so a copy from another machine, or a record edited by hand, reads as no license. a key from an earlier build is kept and checked at the first start. the trial start also lives in .twilightventures-lens.json in your home folder, and the earlier of the two copies wins, so a new profile or a reinstall does not get a second 30-day trial; a clock set back by more than an hour reads as a spent trial.
a trial that ends while a Log Lens tab is open takes the pro labels and a standing filter query with it at that moment, not at the next reload. with follow on, the end of the file is still read twice a second and the kept levels still pick the lines, but a new line is no longer tested against a query the trial does not cover. logs read as they did.
- 0.2.0published 2026-09-19
follow mode. switch it on and the end of the file is read twice a second: new lines are indexed and classified as they land, the level counts and the chips move with them, and the grid stays on the last line. a line that has no newline yet waits for one instead of showing up half written, and a file that was cut back, or replaced by a shorter file, stops follow with a sentence saying so. the levels you kept and a pro filter query keep picking, so a filtered follow shows what passes; a .log.gz and a log in a legacy encoding are refused, since each is read from a copy that does not grow. the command is Log Lens: Follow the end of the file, in the palette while a log is in front.
- 0.1.2published 2026-09-17
the Pro trial now runs 30 days on each machine. the status bar counts it down from "Pro trial, 30 days left", and the two notices while the trial runs keep their places, one inside the last seven days and one on the last day. logs read as they did, encodings included.
- 0.1.0published 2026-09-17
first release.
a .log file of any size opens as a grid: lines are indexed by byte offset in one pass, with the progress shown, and read as you scroll, so the file is never loaded into memory.
ERROR, WARN, INFO, DEBUG and TRACE are read from each line and counted over the whole file; a chip per level narrows the grid to that level.
JSON lines and logfmt are recognized from a sample of the file, and a line's level, time and message are read from its keys; any other log reads as plain text, each line its own message, with a time when one sits at the front of the line.
ANSI escape codes are stripped from the grid and painted as colors in the line detail.
a .log.gz is unpacked once to a temp file that goes when the tab closes; the numbered rotations of a set, app.log.1 up to a nine-digit suffix, and their .gz twins open like any log.
find in file takes a substring or a regular expression, with a case toggle, next and previous, and matches only to page through the hits; go to row jumps to a line number.
the line detail shows the selected line whole, a JSON line pretty-printed, an ANSI line in its colors.
the Statistics tab: the format, the line count, the size and the level counts over the whole file.
pro is on from the first open as a 14-day trial on each machine: whole-file filter queries, export to log, jsonl or csv, log statistics and twelve grid themes.
a key from Polar replaces the trial at any time, and one Lens Pro key covers JSONL Lens and Parquet Lens for VS Code as well.
the free viewer makes no network calls.
lens file, log, & attachment viewer for confluence and rovo
- 2.19.0published 2026-10-17
Once a trial has ended, the macro now says so. The screen reads "The Lens File Viewer trial on this site ended on 14 November 2026." Under it, the attachments stay on the page and open in the macro again once a site admin subscribes on the Manage apps page. The no-license screen now lists the admin's action, start the trial or check Manage apps, before the reload. The trial line of the last week ends "After that the macro stops opening files until a site admin subscribes on the Manage apps page." and links that page ahead of the Marketplace listing; the evaluation line adds that sites up to 10 users keep the app free. The trial line and the review line come off the page before the ended-trial screen draws.
A "Matches only" export now writes every match: the search runs again without its cap (100,000 rows in a workbook or a Parquet file, 10,000 elsewhere) under the export's own "Cancel", and the line reads "12,000 rows written to orders.csv.csv." where 2.18.0 wrote 10,000 and stopped.
- 2.17.0published 2026-10-16
One of our test files, a 1.3 KB Parquet whose footer has one byte flipped so a column chunk no longer matches the schema, opened in 2.16.0 with that column missing and no warning. Now the macro refuses it at open as damaged, and so does the Lens Page Attachment Reader when a Rovo Chat question sends it to that file.
The memory sentence was wrong for some broken files too: on a 1.3 KB Parquet file with a few bytes flipped, 2.16.0 said the page had run out of memory. Such a file is called damaged now.
A workbook from the same set, its zip directory claiming four gigabytes of compressed data for a sheet in a 2.7 KB file, is refused at once; 2.16.0 spent over a minute asking the file for those bytes, and the agent gave no answer.
- 2.16.0published 2026-10-15
On a site with Rovo, the Lens Page Attachment Reader appears in Rovo Chat. Its three starters are "Summarize the spreadsheet attached to this page", "Find the error lines in the log attached to this page" and "What columns are in the CSV attached to this page?". Each question reads one file on the open page: the one you name, or the only one Lens File Viewer can read; where several are readable, the agent names them and asks which, or takes the one your question points to. A CSV, JSONL, log or text file is read in its first 4 MB and the answer says so. Confluence serves each file as the person asking, so a page they cannot view is refused with nothing read; the app has no egress. Without an active license the agent answers in the license screen's words.
In the macro, the panel border, the rule under each grid row and the input and button edges now clear 3 to 1 in the light look and in the dark look, and the dimmed count on a level chip clears 4.5 to 1, the WCAG 2.1 AA contrast bars.
- 2.15.0published 2026-10-14
Hungarian Excel groups an amount's digits with a no-break space, and the old Find looked for a plain one, so 45 600 typed with a space never found the row that showed it. It does now, in a CSV saved in UTF-8 or Windows-1250, in a log with Windows-1250 lines, and in a workbook (57 912,00 Ft). A search for "ERROR pipeline" on a colored log reads the text the grid shows and finds the line whose color codes sit between the two words. Under a level filter the cap of ten thousand hits counts the lines the filter keeps, not every hit in the file, so an ERROR line behind ten thousand INFO lines is found.
The export puts an apostrophe before a cell starting with =, +, -, @, a tab or a carriage return, unless it is a plain number: Excel opens =HYPERLINK(...) and +36 1 234 5678 as text, while -5 and -2 000,00 stay numbers. A one-column table with an empty cell writes that row as two quote marks, so the file reopens whole. A .gz attachment followed by zero padding opens, as gzip opens it.
- 2.14.0published 2026-10-10
A workbook date typed as the grid shows it is found; a band log searched right
A date typed as it appears in the workbook grid, 2023. 10. 02., is found. On a UTF-8 log that holds a Windows-1250 band, a search for s counted 97 where the lines show 87, because the second byte of an accented letter was taken for a letter of its own; the count now matches the lines.
- 2.13.0published 2026-10-09
Find covers a loading log; Windows-1250 lines anywhere; export decimals
A search typed while a large log is still loading finds every line, the last ones too. On our 30 MB test log with Windows-1250 lines, counting the errors and warnings takes 0.9 s instead of 1.6 s. A colored HIBA or FIGYELMEZTETÉS line counts as an error or a warning. Windows-1250 lines anywhere in a UTF-8 log read as written, and one longer than 64 KB shows in full. A currency or unit amount exports with its decimals in a decimal-comma locale: 158 750,00 Ft goes out as 158750,00.
- 2.12.0published 2026-10-09
Find across accents and capitals; Excel dates and amounts in your locale
Searching a file for ügyfél now finds Ügyfél too, and ugyfel without accents finds both. Excel dates and amounts show in your Confluence locale, so a Hungarian reader sees 2023. 10. 02. and 158 750,00 Ft as Excel there shows them. HIBA and FIGYELMEZTETÉS count as errors and warnings. Log exports for decimal-comma locales use semicolons and the byte order mark. Windows-1250 lines inside a UTF-8 log read as written, the code page told from the letters on the line. A 30 MB log shows its first screen after the first 4 MB are read.
- 2.11.0published 2026-10-07
A tab or pipe separated file now exports in its own separator and downloads as a .tsv or .txt file. One cell written with a comma, such as 3,4 in a tab file, no longer makes the viewer read the whole file as using the decimal comma; the vote now takes a clear majority of the file's numbers. An amount with a currency sign or a unit beside it counts as one number whether a plain or a no-break space sets it off, so a semicolon CSV of such amounts no longer splits at the decimal comma and opens in its columns. Encoding detection now reads Spanish and French text as Western European rather than Central European, and Czech text as Central European rather than Turkish.
- 2.10.0published 2026-10-07
Export CSV writes semicolons and decimal commas for a reader whose Atlassian language uses the decimal comma (Hungarian, German, Polish and French among them), on a workbook, a Parquet file or a JSON Lines file, so their Excel opens the file in columns. For the same readers a workbook amount shown in parentheses goes out with a minus sign and a date goes out year first; other readers get the export as before. A CSV attachment written with semicolons and decimal commas now opens in columns too. CSV and log attachments saved in an older encoding, such as Hungarian, Polish and German Excel exports, Turkish logs, and Korean or simplified Chinese service logs, open as readable text; the viewer names the encoding it detected, and the encoding menu reads the file again in another one if the guess is wrong. A UTF-8 file with a few damaged bytes stays readable as UTF-8.
- 2.9.0published 2026-10-01
In the last week of a site's evaluation, the macro shows one notice at the top with the days left, and on the final day a second one that reads "The Lens File Viewer trial for this site ends today." Each notice appears once in a browser. Once you have used the viewer in that browser, the notice also gives a count of the different files you have opened and the different searches you have run since this version (each count stops at two hundred); those counts, with the attachment ids and search text behind them, are kept in the browser and sent nowhere. The notice carries a "See the app on the Marketplace" link and a "Dismiss" button. A site on a paid subscription, or without a license, never sees it. In a tab where the notice has shown, the macro does not also ask for a review.
- 2.8.0published 2026-10-01
The macro now checks the site's license for the app before it opens a file, exports a CSV or serves rows, a schema view or a search; when that license is inactive, or the site states none, the macro shows a notice with the "Manage apps" and Marketplace links and reads nothing. Excel column headers show the column letter beside the header text. In the macro configuration dialog an author can set the tab and the search a pinned file opens on; the dialog starts on the pinned file and says when that file is no longer on the page. After the first open, the tab and search a reader last used on a file come back in the same browser, until the author changes the preset. A file whose download ends early shows the part that arrived, and a byte range the viewer cannot place in the file is reported as a read error. The page column of the attachment list has its width back. On a site with a paid subscription, the review line thanks the team and asks for a review.
- 2.7.0published 2026-09-30
The libraries the app ships with move to their patched releases: undici, fast-uri, brace-expansion and markdown-it. Nothing else changes: the same attachments open the same way, and the macro configuration and the search are as they were.
- 2.5.0approved 2026-09-28
The macro opens CSV, Excel, JSONL, Parquet, log and text attachments as paged tables on the page. Log files carry level chips that combine: with ERROR and WARN on, the status reads ERROR + WARN only, and a second click drops a chip. The arrow beside ERROR jumps to the next ERROR line, and the Go to row box takes a file line number. Export CSV writes the open table as one download, with a progress line and Cancel; a log exports as level, timestamp and message columns. Gzipped JSONL, CSV and logs open in place, and a gzip cut short is refused rather than shown as part of a file. A Strand picker in the toolbar recolors the values, the stripes and the selection, twelve strands, the pick kept in your browser, and the macro configuration has a height choice of 560, 800 or 1000 px. The license state of the site reads as one line in the viewer. After the fifth file, the macro asks once for a review. Byte-range reads as the viewing user, no egress, no copy of your data anywhere.
lens file, log, & attachment viewer for jira and rovo
- 2.21.0published 2026-10-16
One of our test files, a 1.3 KB Parquet whose footer has one byte flipped so a column chunk no longer matches the schema, opened in 2.20.0 with that column missing and no warning. Now the panel refuses it at open as damaged, and so does the Lens Attachment Reader when a Rovo Chat question sends it to that file.
The memory sentence was wrong for some broken files too: on a 1.3 KB Parquet file with a few bytes flipped, 2.20.0 said the panel had run out of memory. Such a file is called damaged now.
A workbook from the same set, its zip directory claiming four gigabytes of compressed data for a sheet in a 2.7 KB file, is refused at once; 2.20.0 spent over a minute asking the file for those bytes, and the agent gave no answer.
- 2.20.0published 2026-10-15
On a site with Rovo, the Lens Attachment Reader appears in Rovo Chat with three starters: "Summarize the attached spreadsheet", "Find the error lines in the attached log" and "What columns are in the attached CSV?". Each question reads one file: the one you name, or with no name the only attachment Lens File Viewer can read, the others named beside it. Where several are readable, the agent names the ones it could read and asks which, or takes the one your question points to.
A CSV, JSONL, log or text file is read in its first 4 MB and the answer says so. Jira serves each file as the person asking, so a work item they cannot view is refused with nothing read; the app has no egress. Without an active license the agent answers in the license screen's words. The panel border, the row rule, the input and button edges and the dimmed chip count now clear the WCAG 2.1 AA contrast bars in the light and the dark look.
- 2.19.0published 2026-10-14
Mixed-encoding logs read whole; Find as the grid shows; a failed read says why
A log whose first lines an older module wrote in Windows-1250 and whose later lines are UTF-8 now reads both as written: the status line names the Windows-1250 lines, and the level tally and Find read the UTF-8 lines as they show. PowerShell logs saved in UTF-16, and a CSV Excel saved as Unicode Text, open as written, with the mark Excel needs on their export. A read that fails after a file opened (an expired download) says why in the status line, and a Find that cannot read the file stops its counter instead of showing Searching for good.
Find meets what the grid shows. An amount typed with a space finds the 45 600 a Hungarian Excel grouped with a no-break space, in a CSV, a log or a workbook. A cell holding a quote, Dell 27" monitor, is found as shown, and a JSON Lines value written with an escape (C:\temp, \u00dc) is found as its text. An export started before a level chip, Matches only or a search changed the rows on view stops with nothing written, never a mixed file.
- 2.18.0published 2026-10-10
Find waits for a loading file; a band letter read whole; a date as shown
Find now waits for a CSV or JSON Lines attachment to finish loading. The lit rows are then the hits, and the count covers the whole file rather than the part already read. On a .csv.gz or .jsonl.gz attachment, a search typed during decompression runs when the file opens instead of being dropped.
On a UTF-8 log with a Windows-1250 band, Find read one byte of an accented letter through the page, so Váci út 12 was listed for st and the count of s ran past the lines. The letter is whole to Find now. In a workbook under a Hungarian locale, a date typed the way the grid shows it, 2023. 10. 02., is now found; the search used to see only 10/2/2023.
- 2.17.0published 2026-10-09
Colored HIBA counts as an error; Windows-1250 lines anywhere; export decimals
HIBA and FIGYELMEZTETÉS still count as errors and warnings when the log wraps them in terminal color codes. A Windows-1250 band that starts after the first 64 KB of a UTF-8 log now reads as written too. In a Jira language that writes the decimal comma, currency and unit amounts export with their decimals: 158750,00 instead of 158750.
- 2.16.0published 2026-10-09
Searching a CSV, log or JSON Lines attachment for ügyfél now finds Ügyfél too, and ugyfel without accents finds both, in Excel sheets as well. Excel dates and amounts in the built-in formats show the way your Jira language writes them, so a Hungarian reader sees 2023. 10. 02. and 158 750,00 Ft as Excel in Hungarian shows them. HIBA and FIGYELMEZTETÉS count as errors and warnings. A log export puts a Hungarian timestamp in its own column, and under a decimal-comma language it uses semicolons and the byte order mark. Windows-1250 lines inside the first 64 KB of a UTF-8 log read as written, the code page told from the letters on each line. A 30 MB log shows its first screen after the first 4 MB are read, and a search typed before the rest has loaded still covers the whole file.
- 2.15.0published 2026-10-08
Attachments saved with decimal commas, the European number format, now open and export the way they were written. A semicolon CSV with decimal commas opens with its amounts lined up, including currency and unit amounts, and exports with the same semicolons. Tab and pipe files keep their own separator on export, as .tsv or .txt. Workbook, Parquet and JSON Lines exports use the decimal comma too when your Jira language does, with a minus sign for negatives and year-month-day dates. Semicolon exports and exports of code page files start with a byte order mark, so a spreadsheet shows the right letters. Six smaller fixes: a log search under a level filter finds the line the filter shows even when hidden lines match first; a CSV search leaves the header row out of its count; a .gz file that ends in zero padding opens; a one-column export keeps its empty cells; a Czech log in Windows-1250 opens as Central European, not Turkish; and the trial notice says "ends today" on the date the panel shows.
- 2.14.0published 2026-10-07
Search on a colored log with a blank line, and on any log searched while the level pass was still running, lit the line after the match and found nothing past it. The scan now cuts each record at its own offset, so a hit lands on its own line and the rest of the file stays searchable. CSV and log attachments saved in one of these older encodings now open as readable text: Hungarian and Polish files in Windows-1250, ISO-8859-2 or CP852, German and French files in Windows-1252, Turkish files in Windows-1254 or ISO-8859-9, Korean files in EUC-KR and simplified Chinese files in GB18030. For those files the panel names the encoding it read. A UTF-8 file with a few damaged bytes still reads as UTF-8.
- 2.13.0published 2026-10-01
Searching a log that carries color codes now reads the file in blocks rather than one line at a time, so a search over a large colored log answers sooner. Nothing else moves: the attachments open as before, with the level chips and the Export CSV button as they were.
- 2.12.0published 2026-09-30
The libraries the app ships with move to their patched releases: undici, fast-uri and brace-expansion. Nothing else changes: the panel lists the same attachments, and the viewer and the search are as they were.
- 2.11.0published 2026-09-25
Search on a spreadsheet or Parquet attachment, and on a log while a level filter is on, now reports the true number of matches instead of the number of rows.
- 2.10.0published 2026-09-21
Search on a log that carries ANSI color codes now reads each line the way the panel displays it, with the codes stripped before the query meets it. A query that spans a colored word now finds the line a reader is looking at. A plain log keeps the search it had. Nothing else changed.
- 2.9.0published 2026-09-19
On a site with an active license that is not a trial, the review ask now opens with a thank-you. Its link to the Marketplace reviews page is the one it always had, a trial keeps the wording it had, the ask still comes once in a browser, and either answer ends it. Nothing else changed.
- 2.8.0published 2026-09-19
The panel now reads the site license before it does anything. When the license is inactive, or when a production site has no license the app can read, the panel shows one screen with the reason and two links (Manage apps on your site, and the app on the Marketplace). It does not fetch the attachment list, open a file, search or export while that screen is up. An active license of any kind, free, trial or paid, opens the app as before, and the license is read again each time an attachment opens or an export starts, so a lapse takes effect at the next open without a reload.
- 2.7.0published 2026-09-19
The panel now says when the trial for this site is about to end. A week before the end, and again on its last day, one line sits at the top of the panel. It gives the days left and what you have done with the app so far (the files you opened and the searches you ran), a link to the app on the Marketplace, and a Dismiss. Each line shows once in a browser. Nothing else in the panel moves: the file opens where it did, and search, Matches only and Go to row work as before.
- 2.6.0published 2026-09-17
Matches only and Go to row now work on gzipped attachments. We found both of them live on the toolbar over a .gz file and doing nothing at all, because the wrapper that inflates the bytes never passed either request on to the view inside it. A gzipped CSV, TSV, JSONL or log now narrows to the hits of the last search the way the plain file does. A record typed into Go to row lands on the nearest row at or after it, or on the last row when the number is past the end. Export CSV follows the same view, so a narrowed gz attachment writes the hits alone.
The Schema tab on CSV, TSV, JSONL and log attachments still sits on its loading line, because those formats send no schema.
- 2.5.0published 2026-09-16
Fix: the Matches only button now narrows every view, logs, CSV, JSONL, XLSX and Parquet, to the search hits. In 2.4.0 it did nothing once a search had hits. Go to row now answers in the CSV, JSONL, XLSX and Parquet views as well as logs, and Export CSV now writes the rows on screen, the hits alone when narrowed. The panel also asks once, after five file renders, for a review on the Marketplace.
- 2.4.0published 2026-09-14
Fix: the attachment list no longer draws the type and size of a file over each other. Each of those two columns keeps its own width and the file name takes the rest of the row, trimmed with an ellipsis when it is long. Nothing else changed since 2.3.0.
- 2.3.0published 2026-09-14
New in this version: a Strand picker in the toolbar. Pick one of the twelve strands. The values, the stripes and the selection take that strand's colors, and the pick stays in your browser, so the next file opens the same way. From 2.2.0: Export CSV writes the whole open file as one download (the open sheet of a workbook; a log as level, timestamp and message columns), with a progress line and Cancel. Level chips on a log combine: with ERROR and WARN on, the status reads ERROR + WARN only. A second click drops a chip. The arrow beside ERROR jumps to the next ERROR line, and the Go to row box takes a file line number. Once five files have rendered, the panel asks for a review. Write a review opens the listing; No thanks is kept in your browser. A damaged or missing file gets a sentence that says why and what to do next, and a gzip cut short is refused. Unchanged: one read scope (read:jira-work) and no egress, with no copy of your data kept.
- 2.2.0published 2026-09-14
Export CSV writes the open table as one download, with a progress line and Cancel. It covers the open file, the open sheet of a workbook, or a log as level, timestamp and message columns. Level chips on a log now combine: with ERROR and WARN on, the status reads ERROR + WARN only, and a second click drops a chip. The arrow beside ERROR jumps to the next ERROR line, and the Go to row box takes a file line number. More log shapes are recognized: color codes are stripped first, JSON level keys, logfmt pairs, numeric levels and the logcat prefix are read, and FATAL counts as ERROR. An evaluation site sees its end date. After the fifth file the panel renders, it asks once for a review, and No thanks is kept in your browser. Every dead end now reads as a plain sentence with the next step, and a gzip cut short is refused rather than shown as part of a file. The posture is unchanged: one read scope, byte-range reads as the viewing user, no egress, nothing stored outside your site.
- 2.1.0approved 2026-09-14
First release. It reads CSV, Excel XLSX, JSONL, Parquet, plain text and logs, and it shows them as paged tables on the issue. Log lines are scanned for severity so you can filter to a level with one click. A gzip wrapped log or CSV inflates in place. Reads happen as small byte ranges with the viewer permissions, so a big file opens fast and stays private. There are no vendor servers and nothing is stored.