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

@mosetta/ide-plugin-keymap

v0.0.14

Published

Keys as data: one dispatcher for every key, a keymap editor, and an honest list of the keys the browser keeps.

Readme

Keymap

@mosetta/ide-plugin-keymap · Keys as data: one dispatcher for every key, a keymap editor, and an honest list of the keys the browser keeps.

What it does

Every shortcut in the IDE is a row of data — a command, a chord of physical keys, the surface where it applies (the editor, the tree, a popup…) and the environments it holds in (browser or desktop, macOS, Windows or Linux). One dispatcher listens to the keyboard and runs the command; buttons call the same commands, so a key and a button can never disagree.

  • Physical keys, not characters. A chord is read by the key's position, so shortcuts keep working in any keyboard layout, Cyrillic included.
  • Double presses: Shift Shift, Cmd Cmd, Ctrl Ctrl — a rhythm on a bare modifier.
  • Your changes are the difference. The keymap section in settings.json holds only the rows you changed: a row with the same chord replaces the factory one, and a row with "remove": true takes one away. The factory keymap stays the package's data.
  • An editor for it: the settings window shows the keymap as a table of chords and surfaces, with a field that records the chord you press.
  • Keys the browser keeps are listed, with the reason — Cmd+W, Cmd+T and a few others never reach a page. The desktop app takes back most of them.

Settings

Section keymap in settings.json — your rows only:

{
  "keymap": {
    "bindings": [
      { "command": "search.everywhere", "key": "meta+o" },
      { "key": "meta+p", "remove": true },
      { "command": "panel.terminal", "key": "control+backquote", "where": ["browser:mac", "electron:mac"] }
    ]
  }
}

A chord is written as meta, control, alt and shift in that order, then the key; when limits a row to a surface, where to environments.

Screenshots and demos

The keymap editor in the settings window

Try it in the browser

Using it from another plugin

A command gets keys by being declared — @command('notes.open') — and by a row in the keymap; the plugin does not listen to the keyboard itself. To show a command's keys on a button or in a tip:

import KeymapPlugin from '@mosetta/ide-plugin-keymap';

const keymap = this.ide.getPlugin(KeymapPlugin);
keymap.keysFor('search.everywhere'); // ['Shift Shift', 'Cmd+P', 'Cmd+2'] on a Mac — as the user has them

| Member | What it is | |---|---| | keysFor(command) | The keys a command is called by, humanised for this platform. | | layout | Signal: the whole keymap — factory plus the user's rows. | | personal | Signal: the user's rows only. | | keys | What the dispatcher sees: the host, the platform, the bindings, and the echo of the last press. | | chordHeld(command, event) | Whether a command's chord is held during a click — for Cmd-click. | | primaryHeld(event) | Whether the platform's main modifier is held. |

A widget that edits text and handles its own keys declares them in keys.mechanics (id and keys(isMac) returning the chords it owns), so the dispatcher leaves those alone while it has the focus.