parquet lens for vs code
Open VSXVisual Studio Marketplacefree viewer, Pro by subscription
Install from Open VSXInstall from the Visual Studio Marketplacefree to read; the Pro trial runs 30 days on each machine
The map is read before the tunnel. Take it into VS Code: the footer of a 101 MB Parquet file of 5,000,000 rows came off in 8.1 ms in our engine timing, and a row is decoded only when you scroll to it.
This is the VS Code edition of Parquet Lens. It opens Parquet, Avro, TFRecord, Arrow IPC and Feather v2 files as a table, and it reads the metadata before anything else. In our engine timing, the footer read on a 101 MB Parquet file of 5,000,000 rows took 8.1 ms; the rows decode as you scroll to them. A search reads the whole file without holding up the grid. Viewing is free for every format. Pro is a subscription for whole-file filter queries, export to CSV or JSONL, exact stats and grid themes, and it runs as a 30-day trial on each machine before a key is needed.
- opens
- .parquet, .pq, .parq, .avro, .tfrecord, .tfrecords, .tfrec, .tfrecord.gz, .tfrecords.gz, .tfrec.gz, .arrow, .arrows, .ipc, .feather and .ftr, and nothing else; a .csv or .json file is never touched
- runs on
- VS Code 1.90 and every later release, with no upper bound; the Open VSX build serves VSCodium and the other editors that use that gallery
- stores
- Open VSX and the Visual Studio Marketplace
- newest version
- 0.6.21, published 2026-10-17 on both stores
- pro
- one subscription from Polar, one key for the three extensions; a 30-day trial on each machine first

free
- Metadata-first open: schema, row count and row groups appear before any data decodes, whatever the file size
- Exact types: int64 and decimals at full precision, timestamps with their unit and timezone, nested lists, structs and maps as JSON
- Whole-file search: match navigation, a case toggle and matches only, which pages through the hit rows alone
- Go to row: Ctrl+G, the row number, Enter
- Schema view: logical and physical types, nullability, codecs, encodings, and the footer's per-column null counts and min/max
- Row detail: pretty-printed values with one-click copy; copy the visible rows as CSV
- Parquet, Arrow and Feather: the snappy, gzip, zstd, lz4 and lz4_raw codecs; lz4- and zstd-compressed Feather batches; Arrow IPC file and stream with dictionary-encoded columns and legacy v4 framing
- Avro containers: the row count from the block headers, so the last row of a big file is one jump away; null, deflate, snappy and zstandard codecs; nested records, arrays and maps as readable cells, logical types decoded to their values
- TFRecord: tf.Example and tf.SequenceExample records, gzip or zlib compressed too, both checksums of every record verified at open; each feature key a column, image bytes shown with their type and size
- Private by construction: no account, no telemetry; the free viewer makes no network calls
pro
- Filter queries:
country == "US" && amount > 100, tested against every row with the column's own type; the grid becomes the matching rows, search runs inside them, and export can take them - Export: all rows, the filter matches or the search matches, to CSV or JSONL, with a cancellable progress bar, never over the source file
- Exact stats: the schema view's full scan reads every row instead of the footer statistics
- Themes: twelve looks for the grid, each tuned for light and dark editors; trying one is free for the window, keeping it is Pro
price, as the store shows it
$4.90 a month or $49 a year personal, $9.90 a month or $99 a year business: one key for all three extensions, and Pro stays on in every build while the subscription runs. a personal key activates on up to 3 machines, a business key on 10, all three extensions on each (each extension on each machine is one activation: 9 on the personal key, 30 on the business key); release a machine from the Polar customer portal. when the subscription ends, Polar revokes the key and Pro turns off at the extension's next check, about once a week; the free viewer stays.
one Lens Pro key covers Parquet Lens, JSONL Lens and Log Lens for VS Code, but the three do not pass the key between them. paste it into each one you use, each paste being one activation call of its own, and Remove license key in that extension can release it again.
Keys come from Polar, a personal key or a business key. Pasting one makes a single activation call, a license check runs about once a week after that, and Release and remove makes a single release call. While Polar cannot be reached, the check is tried again at every start and once a day; the trial makes no call at all. Get Pro and the review button open a store page in your browser.

what's new
- 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.
more
Pricing, invoices and licensing questions go to sales@twilightventures.dev; anything else about the product to support@twilightventures.dev.