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

@gallerist/plugin-grid

v0.5.2

Published

Gallerist plugin — in-viewer contact-sheet grid (grouped, windowed); click a cell to jump.

Downloads

1,776

Readme

@gallerist/plugin-grid

Gallerist plugin — in-viewer contact-sheet grid (grouped, windowed); click a cell to jump.

The grid draws the cells (or sections) around the current item and more as you scroll toward either end (overscan: 40 cells, or 4 sections, on each side to start), so opening it costs the same at 10 items or 10k. Moving while it's open moves the selection without redrawing, and hiding it drops what it drew.

Part of Gallerist — a headless, framework-agnostic media viewer for grouped / nested galleries with image-space overlays and virtualized rendering.

Install

npm i @gallerist/plugin-grid

Usage

Tree-shakeable Gallerist plugin. Register it when you create the viewer:

import { createViewer } from '@gallerist/core'
// import the plugin's factory from this package and pass it to `plugins`
const viewer = createViewer({ items, plugins: [/* plugin() */] })

See Plugin authoring.

Full docs: the monorepo README and docs/.

License

MIT © Shafayet Ahmmed

Overview (layout: 'sections')

grid({ layout: 'sections', startOpen: true, strings: { start: 'Start tour' } })
  • layout: 'sections' draws one card per group: group.caption, group.meta.subtitle, the item count, a large first item and thumbnails of the next ones (9 items at most; the rest are counted on the last one). collection.meta.title heads the screen, beside the start button. The stage's arrows and caption hide while it shows, and moving anywhere (a cell, an index row, the keys) leaves it. Like the cells, it draws the sections near the current one and more as you scroll, so the whole collection stays reachable while only what you've scrolled to is in the document.
  • startOpen shows the grid whenever the viewer opens on its first item. Opening at any other item (a tapped photo, a deep link) goes straight there. viewer.open() resumes at the last item, so call viewer.open({ g: 0, i: 0 }) to come back to the overview.
  • strings overrides every label for translation, the start button's included (strings.start, default Start). The defaults are exported as DEFAULT_GRID_STRINGS.