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

@terminalgames/ink-match3

v0.1.0

Published

Terminal Match-3 swap puzzle built with Ink.

Readme

Ink Match-3

A terminal Match-3 swap puzzle built with Ink. Swap adjacent gems to line up three or more of a kind, then watch the cascades chain for bonus points. Endless mode — play for a high score.

Install

Requires Node 20+.

The unscoped name ink-match3 is published under the games org, so this package is @terminalgames/ink-match3. The command is still ink-match3.

Run without installing (easiest)

npx @terminalgames/ink-match3

Global install

If npm install -g fails with EACCES, your npm global prefix is probably system-owned (/usr/local). Either use npx above, or point npm at a user-owned directory:

mkdir -p ~/.npm-global
npm config set prefix ~/.npm-global
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
npm install -g @terminalgames/ink-match3

Then:

ink-match3

How to play

  1. Move the cursor over a gem.
  2. Press space / enter to pick it up (it highlights).
  3. Move toward an orthogonal neighbour (h j k l or arrows) to swap.

A swap is only allowed if it forms a line of 3 or more matching gems — otherwise it flashes red and reverts. Matched gems clear, the gems above fall, and fresh gems drop in from the top. If the new board makes another match, it cascades — and each link in the chain multiplies your score. When no moves remain, the board reshuffles so play never stalls.

Scoring

Each cleared gem is worth 10 points, multiplied by the cascade depth: the swap's own match scores ×1, the first cascade ×2, the next ×3, and so on. Longer lines clear more gems, so they score more. Combo shows the deepest chain you reached; Best tracks your high score for the session.

Controls

| Key | Action | | --- | --- | | h / | Move cursor left (or swap left when a gem is held) | | l / | Move cursor right (or swap right) | | k / | Move cursor up (or swap up) | | j / | Move cursor down (or swap down) | | space / enter | Pick up / drop the gem under the cursor | | p | Pause / resume | | r | Restart | | ? | Toggle help | | q | Quit |

Development

npm install
npm run build
node dist/cli.js
npm test
npm run typecheck

Game logic lives in pure TypeScript modules under src/game/ (board operations, match detection, the cascade state machine); the Ink UI is under src/ui/.

Publish

Maintainers only. Requires access to the @terminalgames npm organization:

npm login
npm publish --access public