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

bluekeys

v1.3.2

Published

A feature-rich terminal typing test inspired by Monkeytype — with themes, vim/emacs keybindings, and detailed stats

Readme

Bluekeys

Monkeytype for your terminal.

https://github.com/user-attachments/assets/8d9b45df-4393-4d3a-a882-71819f1a64b4


About

Bluekeys is a feature-rich typing speed test that runs entirely in your terminal. Born from a love of Monkeytype and a desire to never leave the command line, Bluekeys brings the same addictive typing test experience to your terminal with full keyboard-driven navigation, beautiful themes, and detailed stats.

No browser. No distractions. Just you and your words per minute.

Installation

Homebrew (macOS / Linux)

brew install anirban12d/tap/bluekeys

Quick install (macOS / Linux)

curl -fsSL https://raw.githubusercontent.com/anirban12d/bluekeys/main/scripts/install.sh | sh

This downloads a prebuilt binary — no Node.js required.

npm

npm install -g bluekeys

From a specific release

# Install a specific version
curl -fsSL https://raw.githubusercontent.com/anirban12d/bluekeys/main/scripts/install.sh | sh -s v1.1.0

Then simply run:

bluekeys

Upgrading

brew upgrade bluekeys               # if installed via Homebrew
bluekeys upgrade                    # upgrade to latest version
bluekeys upgrade v1.1.0             # install a specific version

Or re-run the install script:

curl -fsSL https://raw.githubusercontent.com/anirban12d/bluekeys/main/scripts/install.sh | sh

Uninstalling

brew uninstall bluekeys             # if installed via Homebrew
npm uninstall -g bluekeys           # if installed via npm
sudo rm /usr/local/bin/bluekeys     # if installed via curl

To also remove your config and data:

rm -rf ~/.bluekeys

Quick start with flags

bluekeys --mode time -t 60                    # 60-second timed test
bluekeys --mode words -w 100                  # 100-word test
bluekeys --mode quote                         # quote mode
bluekeys --mode code --code-language python   # type Python code snippets
bluekeys --mode cli --cli-category git        # type git commands
bluekeys --theme dracula                      # start with a specific theme
bluekeys --language french                    # test in French
bluekeys --punctuation --numbers              # enable punctuation and numbers

Features

Test modes

  • Time — 15, 30, 60, or 120 second tests
  • Words — 10, 25, 50, 100, or 200 word tests
  • Quote — type real quotes (short, medium, long, thicc)
  • Code — type real code snippets (Python, JavaScript, Go, Rust)
  • CLI — type real terminal commands (general, git, docker, npm, linux)
  • Zen — free typing, no target text
  • Custom — paste your own text

Languages

English, French, German, Spanish, Python, JavaScript — with more on the way.

15 themes

Serika Dark, Dracula, Monokai, Nord, Gruvbox, Solarized Dark, Catppuccin Mocha, Tokyo Night, Rose Pine, Carbon, Minimal, Olive, 80s After Dark, Botanical, and Serika Light. Live preview when browsing themes in settings.

Keybinding modes

Navigate menus and settings with the style you prefer:

  • Normal — arrow keys
  • Vimhjkl navigation, q to go back
  • EmacsCtrl+N/P/F/B navigation, Ctrl+G to go back

Keybinding mode only affects navigation. It never interferes with your typing test.

Learning mode

A full touch-typing curriculum built right into the terminal:

  • 25 progressive lessons across Beginner, Intermediate, and Advanced levels
  • Keyboard visualization with color-coded finger assignments — shows exactly which finger to use for each key
  • Home row first — start with J and F, build up row by row
  • Three lesson types — key drills, real-word practice, and mixed reviews
  • Star ratings — earn up to 3 stars per lesson based on accuracy (80% / 92% / 98%)
  • Persistent progress — pick up where you left off across sessions

Access from the main menu via learn.

Error heatmap

  • Per-test heatmap on the results screen showing your most mistyped words with character-level error coloring
  • Cross-session heatmap screen with 5 tabs:
    • Overview — total tests, words typed, errors, accuracy, avg/best WPM
    • Most missed words — all-time error words ranked with bar charts
    • Character mistakes — which character pairs you confuse most (e.g. h→e)
    • Accuracy trend — sparkline showing improvement over time
    • Practice suggestions — words to focus on based on your history

Access from the main menu via heatmap.

Detailed stats

  • WPM, raw WPM, accuracy, consistency
  • Per-second WPM/raw history chart
  • Character breakdown (correct / incorrect / extra / missed)
  • Personal best tracking per mode and configuration
  • Results history saved locally

Difficulty modes

  • Normal — standard typing test
  • Expert — fail if accuracy drops below 95%
  • Master — fail on any error

Funbox modes

22 fun modifiers: mirror, upside down, rAnDoMcAsE, capitals, nospace, backwards, ddoouubblleedd, memory, read ahead, gibberish, specials, binary, hexadecimal, rot13, and more.

Other features

  • Confidence mode (no backspace / word-level backspace only)
  • Stop on error (word or letter level)
  • Freedom mode, lazy mode, blind mode, strict space
  • Configurable caret style (block, outline, underline)
  • Live WPM, accuracy, and burst display
  • Tape mode (letter or word)
  • Multiple highlight modes
  • Quick restart with Tab, Esc, or Enter
  • Repeat test with Enter on results screen
  • Personal best notifications

Configuration

Bluekeys stores its config at ~/.bluekeys/config.toml (Windows: %APPDATA%\.bluekeys\config.toml). A fully commented config file is generated on first run.

# mode: time | words | quote | code | cli | zen | custom
mode = "time"
timeLimit = 30
language = "english"

# Code snippets language (used when mode = "code")
# Available: python, javascript, go, rust
codeLanguage = "python"

# CLI commands category (used when mode = "cli")
# Available: general, git, docker, npm, linux
cliCategory = "general"

# keybindingMode: normal | vim | emacs
keybindingMode = "vim"

theme = "dracula"

All settings can also be changed from the in-app settings screen.

Data files

| File | Location | Purpose | | --------------------- | -------------- | ------------------------ | | config.toml | ~/.bluekeys/ | All settings | | pb.json | ~/.bluekeys/ | Personal bests | | results.ndjson | ~/.bluekeys/ | Full result history | | learn-progress.json | ~/.bluekeys/ | Learning mode progress |

CLI options

| Flag | Short | Description | | ------------------ | ----- | ---------------------------------------------------- | | --mode | -m | Test mode (time, words, quote, code, cli, zen, custom) | | --time | -t | Time limit in seconds | | --words | -w | Word count | | --language | -l | Language | | --difficulty | | normal, expert, master | | --theme | | Theme name | | --quote-length | | 0-3 (short to thicc) | | --code-language | | Code language (python, javascript, go, rust) | | --cli-category | | CLI category (general, git, docker, npm, linux) | | --punctuation | | Enable punctuation | | --no-punctuation | | Disable punctuation | | --numbers | | Enable numbers | | --no-numbers | | Disable numbers | | --version | -v | Show version | | --help | -h | Show help |

| Command | Description | | -------------------- | ------------------------------------- | | bluekeys | Open interactive menu | | bluekeys upgrade | Upgrade to latest version | | bluekeys version | Show version | | bluekeys help | Show help |

Building from source

git clone https://github.com/anirban12d/bluekeys.git
cd bluekeys
pnpm install
pnpm run build
node dist/cli/index.js

Building a standalone binary

Requires Bun:

pnpm build:binary
./bluekeys

Documentation

| Document | Description | | ------------------------------------ | --------------------------------------------------------------- | | Architecture | Codebase structure, engine/UI separation, directory map | | Contributing | How to set up the dev environment, make changes, and submit PRs | | Themes | How to create and submit a new theme | | Languages | How to add a new language or word list | | Quotes | How to add new quotes for quote mode | | Funbox | How to create a new funbox mode |

Contributing

Contributions are welcome! See the Contributing Guide for full details on setting up your development environment, running tests, and submitting pull requests.

  1. Fork the repo
  2. Create your branch (git checkout -b feature/my-feature)
  3. Commit your changes
  4. Push to the branch (git push origin feature/my-feature)
  5. Open a Pull Request

For specific contribution types, see:

Bug reports & feature requests

Found a bug or have an idea? Open an issue on GitHub.

Support the project

If you enjoy Bluekeys, consider supporting its development:

Credits

Bluekeys wouldn't exist without these projects:

  • Monkeytype — The original typing test that inspired this project. Bluekeys brings the Monkeytype experience to the terminal. All credit for the core concept, game modes, scoring logic, and design philosophy goes to the Monkeytype team.

  • Ink — The React-based terminal UI framework that powers Bluekeys' interface. Ink makes it possible to build rich, interactive terminal apps with React components.

License

GPL-3.0 — made by anirban12d