npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

dsh-large-jsonl-viewer

v0.1.4

Published

Indexed, read-only JSONL and NDJSON document preview for DeepSeek Harness

Readme

Browse records by physical line, preserve the original JSON, and inspect oversized records through paged structure and text windows. Files stay in the Host filesystem; this plugin makes no model calls and adds no file contents to chat context.

✨ Features

| | | | --- | --- | | 🧭 Jump to any recordFirst/previous/next/last, physical-line jumps, random sampling and back/forward history. The initial selector exposes the first 100 indexed lines. | 🧾 Keep JSON faithfulFormatting preserves number lexemes, duplicate keys, key order and escapes. Large integers remain exact text. | | 🌲 Navigate the structureRead-only Monaco, folding, expansion depth, key navigation, current-record find, word wrap and focus mode. | 🌊 Inspect oversized recordsAbove the ordinary-record budget, switch to paged structure and bounded 64 KiB text windows. | | 🧩 Open from the file panelNative document preview for .jsonl / .ndjson, with an optional native file route for Better Sidebar 0.28.0. | 💾 Export original bytesKeep the record and its original line separator. Stream to a native save picker when available; Blob fallback is capped at 16 MiB. | | 🗂️ Working directory file treeOpen “File tree” to browse folders and files from the current session's working directory, including in fullscreen. | ↔️ Keep your placeSwitch files without losing record position, expanded folders or tree scrolling; use “Reveal current file” when needed. |

Inside Desktop

| Ordinary records | Oversized records | | --- | --- | | | | | Exact 9007199254740993, duplicate keys and navigation history. | A 32 MiB record, paged structure and the [1,2,3] byte window. |

Screenshots use generated test data. Full Desktop validation →

🚀 Installation

Requires DeepSeek Harness >=0.2.1-rc.2. rc.2 and later versions are allowed, including prereleases. See the validation report for the actual rc.2 / rc.3 Web, official Desktop and Better Sidebar coverage.

Desktop

Open Plugins → Add plugin, enter the package name, install, then choose Enable now:

dsh-large-jsonl-viewer

Open a .jsonl or .ndjson file from the file panel. If Better Sidebar is enabled, JSONL files use this viewer and other files keep their existing editor. Reopen file tabs that were already open before installation.

Web / CLI

Install into an existing Web profile, then start or restart that profile:

dsh plugin --profile web add dsh-large-jsonl-viewer
dsh web

Desktop has its own plugin installation tree. A system CLI's web profile is not necessarily the Desktop profile.

Download the archive and SHA-256 checksums from v0.1.4, or paste its fixed URL into Desktop's Add plugin dialog:

https://github.com/liaojianjin/dsh-large-jsonl-viewer/releases/download/v0.1.4/dsh-large-jsonl-viewer-0.1.4.tgz

To replace an installed version in Desktop, uninstall this plugin from its detail page, then install and enable the new version. CLI installation/removal requires restarting the corresponding profile. The repository root is a private development workspace; use the prebuilt package for installation.

⌨️ Everyday controls

| Action | Control | | --- | --- | | Working directory tree | Click File tree to show / hide it; expand folders on demand; Reveal current file scrolls to the selection | | Browse records | Physical-line input, first/last, previous/next, random | | Switch records | Alt+↑ / Alt+↓ | | Browse history | Alt+← / Alt+→ | | Inspect the current record | More → raw/formatted, folding, find, copy, export | | Inspect oversized records | Open a structure node → View bytes | | Source file changed | Choose Rebuild index before continuing |

Shortcuts respond only while the viewer is focused. Random sampling uses the indexed range. Pausing/cancelling an index affects other views of that file in the same Session; cancelling a pending line jump affects only the current view.

📊 Measured performance

Backend measurements on macOS arm64 · Apple M5 Pro · 64 GiB · Node 26.7 · local SSD. OS caches were not evicted.

| Fixture | Index session¹ | First record boundary | Random read/parse p95 | Host + workers peak RSS | | --- | --- | --- | --- | --- | | ~1 GiB · 100 KiB/record | 413 ms | 33 ms | 33.6 ms | 280.4 MiB | | ~10 GiB · 100 KiB/record | 3894 ms | 33 ms | 31.4 ms | 286.0 MiB |

¹ Includes index completion, closing and checkpoint commit. These are warm/uncontrolled-cache backend results, excluding browser RPC and Monaco rendering; total RSS includes the runtime, not just the plugin's incremental memory. They are not end-to-end UI latency guarantees.

32/256 MiB single-record scans and 1,000 backend record switches were also measured. Methodology, raw reports and limits →

⚙️ Configuration & limits

Defaults suit stable, uncompressed UTF-8 regular files. The source may be an object, array or scalar; blank lines still count as physical lines. Final-path symlinks, directories, devices and unknown-size sources are refused.

Override the plugin row in the profile's cordis.patch.yml using a complete configuration object:

- id: large-jsonl-viewer
  config:
    cacheDirectory: /absolute/path/to/jsonl-cache
    scanChunkMiB: 4
    recordLimitMiB: 8
    cacheLimitMiB: 512
    maxLines: 10000000
    maxFiles: 2
    maxViews: 32
    maxRecordTasks: 2
    pollMs: 2000

Scan chunks accept 1/4/8 MiB; the ordinary-record budget accepts 1–16 MiB. The default formatting budget is 16 MiB, 100,000 nodes, 128 levels and about 2 seconds; exceeding it switches to streaming mode. Streaming metadata is capped at 2,000 nodes and the parser stack at 2,048 levels. Later pages of long containers may require another scan.

  • Host cache defaults to ~/.cache/dsh-large-jsonl-viewer. It stores byte indexes, versions and fingerprints, not record contents. An unwritable directory or writer-lock conflict falls back to temporary storage; temporary indexes are removed on close. Stale crash locks are not forcibly reclaimed.
  • Inactive caches use LRU eviction. Active indexes have explicit line and concurrency limits. Dense short-line files may reach the default 10-million-line cap; this is not a promise of unrestricted 100 GB support.
  • A browser connected to a remote Host reads that Host's filesystem. Stable source files are required; version checks are not transactional snapshots.
  • File System Access saves in chunks where supported. Other carriers use a Blob download capped at 16 MiB. Clipboard copying is limited to ordinary, valid UTF-8 records.
  • Preferences and history last until the tab closes. Record text is not stored in the persistent layout.

Scope: read-only viewing. Editing, automatic tailing, compressed files, whole-file search and cross-record JSONPath are not implemented. Windows/Linux, SSH, 50/100 GB, cold-cache performance, full browser p95 and long-run browser memory remain unverified. Compatibility notes →

❓ FAQ

| Question | Answer | | --- | --- | | Better Sidebar still shows its own JSONL cards? | Open the file again from its file tree. Tabs opened before installing retain their original viewer. | | The source changed? | Old content stops displaying. Explicitly rebuild the index to continue. | | A record is too large for Monaco? | Use the paged structure and text windows. The plugin enforces its configured record budgets. | | Can it edit or send records to a model? | It is read-only and makes no model calls. It does not add file contents to chat context. |

🛠️ Development

pnpm install --frozen-lockfile
pnpm build
pnpm typecheck
pnpm test
pnpm test:integration
pnpm pack:plugin
pnpm test:packaging

Builds compile Host and Client separately, generate strict Typert protocols, and include Monaco, workers, fonts, CSS and licenses. No CDN or separate plugin server is needed. The pinned Typert analyzer needs a build-only declaration inventory; build notes explain it.

Changelog · Validation · Issues · Catalog submission

An additional scoped distribution is published through GitHub Packages Actions; the npmjs.org package and install command above retain their original identity.

📄 License & acknowledgements

MIT. The implementation adapts code from VS Code Large JSONL Viewer, reference commit 9c90a87433b82ab615094a39d0ef1c17dadbc5b7, and uses Harness APIs from reference commit 687f282e8625c6b8d11ff58211a90524be2e4317. See LICENSE and the package's third-party notices.