ZST Viewer
Open .zst compressed files directly in VS Code — no terminal needed.
Features
Opening modes
When you click any .zst file, a quick pick appears with two options:
| Option |
When to use |
| Smooth scroll |
Large files, quick inspection, any size |
| Decompress & open |
Need Rainbow CSV, language servers, all extensions active |
Files larger than ~2 GB compressed automatically open in smooth scroll mode without asking.
In decompress mode, the file is written to a system temp folder and auto-deleted when you close the tab.
Streams and renders the file page by page using a sliding 3-page window. Memory stays flat regardless of file size — only the visible pages are kept in the DOM and in the renderer process. The extension process keeps all decoded pages for search.
Syntax highlighting
| Extension |
Rendering |
.ndjson.zst, .jsonl.zst, .json.zst |
highlight.js JSON with color |
.csv.zst, .tsv.zst |
Rainbow column coloring (8-color cycle, quoted-field aware) |
.txt.zst, .log.zst, everything else |
Plaintext |
Line numbers are shown in a sticky gutter that stays pinned when scrolling horizontally, exactly like a real editor.
Tab switching is instant — the viewer context is kept alive in the background (retainContextWhenHidden).
Search — ⌘F
Full-file search across all decoded pages.
- Searches every page the extension has decoded so far
- Results show a "partial" badge while still streaming; re-trigger after "fully loaded" for complete results
↵ / ⇧↵ navigates forward/backward through matches, jumping pages as needed
- Current match highlighted in orange, all others in yellow
- Match case (
Aa) and regex (.*) toggles
Go to line — ⌃G
Opens a floating input bar at the top center. Type a line number and press ↵.
- Scrolls the target line to the center of the viewport
- Flashes a yellow highlight on the target line for visual confirmation
- Shows an error if the line number is out of range or not yet decoded
Go to page — ⌃P
Same floating bar, jumps directly to a page number (1-indexed).
- Shows an error if the page is out of range
Edit mode — ⌘E
Toggle between read-only and edit mode from the status bar button or ⌘E.
- Switches the page body to
contenteditable raw text
- Dirty pages show a yellow left-border indicator
- Edits sync immediately to the extension's in-memory page store (so search reflects edits)
Tab inserts 2 spaces
- Save with
⌘S — recompresses all pages back to the original .zst file at level 3, atomically (writes to a temp file then renames)
Note: only pages that have been decoded into memory are available for editing. Scroll through the whole file before saving if you need to edit sections near the end of a large file.
| Item |
Shortcut |
| Cut |
⌘X (edit mode only) |
| Copy |
⌘C |
| Paste |
⌘V (edit mode only) |
| Find |
⌘F |
| Go to line… |
⌃G |
| Go to page… |
⌃P |
Status bar
The status bar at the bottom shows the current page, total pages, and streaming state. Shortcuts are listed on the right.
Requirements
zstd must be installed and on your system PATH. The extension looks for it at /opt/homebrew/bin/zstd first (Apple Silicon Homebrew), then falls back to which zstd.
brew install zstd # macOS
apt install zstd # Ubuntu/Debian
Known limitations
- Edit mode only covers pages decoded into memory. For large files, you need to scroll through the file before saving to ensure all pages are decoded.
- Search only covers decoded pages while streaming; re-trigger after "fully loaded" for complete results.
- The decompress & open mode uses zstd level 3 compression when saving in edit mode, regardless of the original compression level.