Skip to content
| Marketplace
Sign in
Visual Studio Code>Data Science>JSONL-FasterViewerNew to Visual Studio Code? Get it now.
JSONL-FasterViewer

JSONL-FasterViewer

bigwhites

| (0) | Free
A high-performance local viewer and editor for JSONL and NDJSON files.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

JSONL FastViewer logo

JSONL FastViewer

A high-performance, local-first VS Code custom editor engineered for massive JSONL and NDJSON files.
Progressive byte-range indexing • Adaptive sparse memory layouts • Virtualized 60 FPS UI • Crash-safe streaming save

VS Code Node.js TypeScript License Tests Passed Local-First

English • 简体中文

Highlights • Performance • Visual Tour • Architecture • Usage • Configuration • Installation


JSONL FastViewer table view with record inspector

Highlights

  • ⚡ Engineered for Massive Datasets
    Files are never loaded whole into memory. Powered by a custom zero-copy ByteLineScanner, files up to 5 GB (43+ million rows) open within seconds via lazy byte-range reads while VS Code remains smooth and responsive.

  • 🪶 Adaptive Indexing with 814× Memory Reduction
    Uses exact Float64 line indexing (~13 B/line) for instant access on small-to-medium files, and automatically transitions to a sparse checkpoint index (~0.0156 B/line) above the 256 MiB soft watermark. On a 5 GB dataset, resident index memory drops from 534 MB to just 0.69 MB while keeping 100-row window reads under 0.84 ms.

  • 🎯 Three Synchronized Coordinated Views
    Seamlessly switch between a Virtualized Table (multi-column sorting, resizable columns, pinned row numbers), Raw JSONL (high-performance virtualized text view), and a JSON Tree Inspector (deep hierarchical object navigation). Selections, active cursors, and uncommitted edits stay synchronized across all views.

  • 🔍 Interactive, Non-Blocking Streaming Queries
    Run instant field filters, comparisons, and text searches (e.g. score > 90, status:active, name contains "Alice"). Scanning operates at > 1,000,000 rows/second, returns first matches in ~3.5 ms, responds to cancellation in < 1 ms, and enforces strict event-loop yield budgets to eliminate UI freezing.

  • ✏️ Type-Aware In-Place Cell & Record Editing
    Inline cell editing (F2), full-record JSON modification, row insertions, and row deletions with an undo/redo journal (Cmd/Ctrl+Z). Modified and inserted records display real-time status badges with immediate dirty-state tracking.

  • 🛡️ Crash-Safe Streaming Save Architecture
    Zero risk of data corruption. Edits stream into a sibling temporary file using aggregated 1 MiB write buffers, undergo byte-for-byte verification and source file identity re-validation, emit exactly 1 fsync, and commit atomically via platform-verified rename. Cancelled or interrupted saves leave the original file byte-for-byte untouched.

  • 🔒 100% Local-First & Private
    All parsing, scanning, indexing, querying, and saving execute entirely on your machine. Zero network requests, zero telemetry, zero background uploads.


Visual Tour

Virtualized Data Grid Type-Aware Inline Editing
Table View Table Editor
Smooth 60 FPS scrolling across millions of rows with auto-detected schemas and multi-column sorting. Press F2 to edit inline with automatic type parsing, validation, and real-time dirty status badges.

Performance Benchmarks

All figures below are measured on Apple M4 (macOS arm64, Node v22.21.1, 16 GB unified RAM, seed 42) using the automated benchmark harness under benchmark/. Fixtures, synthetic generators, and gate runners are checked into the repository for deterministic reproduction.

1. Scaling & Pipeline Throughput (100 MB → 5 GB)

Metric 100 MB 500 MB 1 GB 5 GB (43.1M Rows)
Physical Rows 883,214 4,313,655 8,801,722 43,088,447
Index Build Wall Time 91 ms 450 ms 1.03 s 4.60 s
Index Framing Throughput 9.7M rows/s 9.6M rows/s 8.5M rows/s 9.4M rows/s
100-Row Window Read Latency 0.033 ms 0.033 ms 0.067 ms 0.071 ms
Document Shell Open RSS 0.02 MB 1.0 MB 4.5 MB 2.4 MB
Unedited Streaming Save 404 ms (246 MB/s) 2.02 s (261 MB/s) 4.09 s (264 MB/s) Streaming
Save I/O Blocks & fsync 102 calls / 1 fsync 501 calls / 1 fsync 1,025 calls / 1 fsync 1 fsync / 1 MiB block

[!TIP] Extreme Line Density: On ultra-short line fixtures (e.g. 100 MB with millions of tiny lines), the byte scanner peaks at 16.9 Million rows/second framing speed (449 ms total build time), requiring zero string allocations and zero GC pauses.


2. Adaptive Memory Footprint: Exact vs. Sparse Index (5 GB File)

When indexing exceeds the configurable 256 MiB soft watermark, JSONL FastViewer seamlessly adopts a sparse checkpoint index on the fly without restarting or copying pages:

Dimension Exact Index (Forced) Adaptive Sparse Index (Auto) Efficiency Gain
Resident Index Memory 534.2 MiB (560.2 MB) 0.69 MiB (688 KB) 814× reduction (-99.87%)
Memory Cost per Row 13.0 bytes / row 0.0156 bytes / row 814× more compact
100-Row Window Read Latency 0.39 ms 0.84 ms Sub-millisecond interactive
Process Peak RSS Delta 568.6 MB 7.4 MB 77× lower system impact
GC Pause Time 16.0 ms 1.7 ms 9.4× fewer GC cycles

3. Real-World Edit Densities & Save Pipeline (500 MB, 4.31M Rows)

JSONL FastViewer utilizes a dedicated 1 MiB aggregated buffer writer (PhysicalLinePump + BufferedTemporaryFileWriter). Unmodified rows stream directly from raw source bytes without JSON parsing or string serialization overhead:

Edit Scenario Rows Affected Save Time Effective Speed Write Calls / GB fsync Count Progress Latency
Unedited Clean Save 0 rows (100% passthrough) 2.02 s 261.4 MB/s 1,025 1 6 ms
Sparse Edits ~43,100 rows (~1% replaced) 2.12 s 247.8 MB/s 1,025 1 7 ms
Dense Edits ~2,156,000 rows (~50% replaced) 2.89 s 135.5 MB/s 1,026 1 10 ms
Mixed Workload ~1.3M rows (10% edit + 10% del + 10% ins) 3.69 s 126.2 MB/s 1,026 1 11 ms
  • Zero Write Call Thrashing: Constant ~1 MiB write blocks (avgWriteBlockBytes = 1,048,576 B) regardless of whether you edit 1 line or 1,000,000 lines.
  • Atomic Single fsync: Commits with a single atomic fsync call, guaranteeing that interrupted saves never leave broken or truncated files.

4. Query, Filter & Schema Responsiveness

Benchmark Scenario Dataset Size Wall Time Scan Throughput Latency to First Match Cancellation Response
Full Query Scan 100 MB (883K rows) 832 ms 1,058,838 rows/s 3.46 ms 0.05 ms
Full Query Scan 500 MB (4.31M rows) 4.04 s 1,067,014 rows/s 3.54 ms 0.82 ms
Schema Fast Sample 100 MB (100 rows) 1.29 ms Instant preview 1.29 ms -
Schema Deep Sample 100 MB (1,000 rows) 3.11 ms High confidence 3.11 ms -
Schema Full Scan 100 MB (883K rows) 1.03 s 856,000 rows/s Complete coverage 0.25 ms
Wide Schema Scan 100 MB (100+ columns) 1.61 s Complex nested keys Max gap: 25.2 ms 0.41 ms
  • Zero Cache Pollution: Batch query and schema scans run in non-caching mode, preventing LRU cache thrashing and maintaining hot cache lines for active UI views.
  • Strict UI Responsiveness Budget: Event loop latency during massive 500 MB scans stays capped under 16 ms (P99: 11.7 ms), guaranteeing stutter-free typing and scrolling while scans execute in the background.

5. UI & Virtualized DOM Benchmarks (Headless Chromium DOM Gates)

Stress Scenario Scale / Workload Active DOM Nodes Rendered Rows Vertical Scroll P95 UI Heap Footprint
Million-Row Filter Hits 1,000,000 hits × 8 columns < 500 47 rows < 16 ms (60 FPS) 24.4 MB
Wide Column View 20,000 hits × 100 columns < 1,200 47 rows < 16 ms (60 FPS) 16.9 MB
Badges & Overlays 1,000,000 rows with 250 dirty badges < 600 47 rows < 16 ms (60 FPS) 9.1 MB
Rapid Keyboard Edit Loop 50 continuous F2 → Edit → Enter/Esc Clean recycle 47 rows < 5 ms latency 0 MB leak

Architecture

JSONL FastViewer follows a clean, decoupled architecture where performance-critical operations run with strict resource bounds and fail-safe transactional guarantees:

flowchart TB
  subgraph Presentation ["Webview Layer (Sandboxed Browser)"]
    VGrid["Virtualized Data Grid\n(Fixed ~47 DOM rows • 60 FPS)"]
    RawView["Virtualized Raw View\n(Line-level virtual text)"]
    Inspector["Hierarchical Inspector\n(Tree-structured JSON explorer)"]
    DOMState["Bounded View Store\n(Zero fs access • Strict budgets)"]
  end

  subgraph Protocol ["Typed Protocol Boundary"]
    IPC["JSON-RPC Typed Messages\n(Versioned • Validated DTOs • Bounded windows)"]
  end

  subgraph Host ["Extension Host (Orchestration & File I/O)"]
    Session["Session & Version Coordinator\n(Session ID + File Version Leases)"]
    Scanner["ByteLineScanner\n(Zero-string UTF-8 framing)"]
    Indexer["Adaptive LineIndex\n(Exact 13B/row ⇄ Sparse 0.015B/row)"]
    QueryEngine["Streaming Query Engine\n(Regex-free • Cancellable • Yield budgets)"]
    SaveCoordinator["Streaming Save Transaction\n(1 MiB aggregated buffer • fsync=1 • Atomic rename)"]
  end

  subgraph Storage ["Local Storage"]
    SourceFile[("Original .jsonl / .ndjson")]
    SiblingTemp[("Sibling .tmp.<nonce>")]
  end

  VGrid <--> IPC
  RawView <--> IPC
  Inspector <--> IPC
  IPC <--> Session

  Session --> Scanner
  Scanner --> Indexer
  Session --> QueryEngine
  Session --> SaveCoordinator

  SourceFile -. Byte-range reads .-> Scanner
  SaveCoordinator -. Aggregated streaming write .-> SiblingTemp
  SiblingTemp == Atomic commit on SHA validation ==> SourceFile

Core Architectural Invariants

  1. Zero Full-File Buffering: The extension host never reads an entire file into memory as a string or parsed record array. All reads occur via bounded byte-range chunks.
  2. Untrusted Webview Principle: The webview operates in an isolated environment with zero file system access. Messages are strictly validated against runtime DTO schemas.
  3. Session & Version Cancellation: Every operation is tagged with sessionId + fileVersion. When a file is modified externally or reloaded, in-flight work and outdated caches are cleanly cancelled and evicted.
  4. Crash-Safe Out-of-Place Writes: Edits are never applied in-place. If a crash, disk exhaustion, or power cut occurs during save, the original source file remains byte-for-byte intact.

Usage & Shortcuts

Opening Files

  • Default Editor: Double-click any .jsonl or .ndjson file in the VS Code Explorer.
  • Context Menu: Right-click a file and select JSONL: Open Viewer.
  • Command Palette: Run JSONL: Open Viewer (Ctrl+Shift+P / Cmd+Shift+P).

Keyboard Shortcuts

Keybinding Action Context
F2 Enter inline cell editing Table View
Enter Commit cell edit / Submit query Table Cell Editor / Query Bar
Escape Cancel editing / Dismiss dialogs Table Cell Editor / Dialogs
Cmd+Z / Ctrl+Z Undo last edit Global View
Cmd+Shift+Z / Ctrl+Y Redo edit Global View
Arrow Keys / Tab Navigate cells and rows Table View
Cmd+F / Ctrl+F Focus query and filter input Global View

Query Syntax Examples

  • Field Equality: status:active or city:"San Francisco"
  • Numeric Comparisons: score >= 90, age < 30, latency != 0
  • Substring Matching: name contains "Alice", path contains "/api/v1"
  • Compound Filters: Space-delimited clauses evaluate with implicit AND logic.

Configuration

Custom settings can be configured via VS Code Settings (Cmd+, or Ctrl+,):

Setting Type Default Description
jsonlFastViewer.editing.enabled boolean true Enable or disable in-place cell/record editing and saving.
jsonlFastViewer.performance.indexStrategy enum "auto" Indexing strategy: "auto", "exact", or "sparse". "auto" selects exact indexing and switches to sparse past watermark.
jsonlFastViewer.performance.indexBudgetBytes number 268435456 Soft index budget watermark in bytes (16 MiB to 1 GiB, default 256 MiB).
jsonlFastViewer.performance.maxQueryResults number 400000 Maximum retained query result rows (1,000 to 1,000,000).
jsonlFastViewer.benchmark.chunkSizeBytes number 4194304 I/O read chunk buffer size in bytes (default 4 MiB).
jsonlFastViewer.logging.enabled boolean false Enable diagnostic logging on the Extension Host output channel.

Installation

You can install JSONL FastViewer from a locally built VSIX package:

# 1. Clone the repository
git clone https://github.com/bigwhites/JSONL-FastViewer.git
cd JSONL-FastViewer

# 2. Install dependencies & compile
npm install
npm run package

# 3. Install the generated VSIX into VS Code
code --install-extension jsonl-fastviewer-1.0.0.vsix

Try in Extension Development Host

To run and experiment without packaging:

npm run build
code --new-window \
  --user-data-dir /tmp/jfv-profile \
  --extensions-dir /tmp/jfv-extensions \
  --extensionDevelopmentPath="$PWD"

Development & Verification

# Strict TypeScript checks
npm run check

# ESLint & layer boundary validation
npm run lint

# Code formatting checks
npm run format:check

# Run full test suite (934 unit & integration tests)
npm test

# Build production bundles
npm run build

# Integration tests in VS Code Extension Host
npm run test:integration

Benchmark Suite

# Fast feedback benchmark (10 MB)
npm run benchmark:stage6:quick

# Full multi-shape benchmark suite (100 MB / 500 MB / wide / long / bad rows)
npm run benchmark:stage6

# Scale smoke benchmarks
npm run benchmark:stage6:smoke:1gb
npm run benchmark:stage6:smoke:5gb

# Save transaction safety & failpoint gate (79 failpoints)
npm run gate:stage5-save

# Virtualized DOM & frame latency gate (Headless Chromium)
npm run gate:stage5-dom

License

Released under the MIT License.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft