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

signalk-garmin-keypad-plugin

v1.0.9

Published

Signal K plugin for GNX Keypad control on NMEA 2000

Readme

signalk-garmin-keypad-plugin

Signal K server plugin that acts as a Garmin GNX Keypad on NMEA 2000, allowing control of GNX instrument displays via a web UI or REST API.

Webapp demo

Features

  • Preset selection (1-4) — short press to recall, long press to save
  • Page navigation — up/down on the active display
  • Display selection — cycle between GNX displays in the group
  • Power control — sleep/wake
  • Auto-discovery — group ID, display count, keypad fingerprint, and per-property counters are all discovered automatically from bus traffic
  • Embeddable webapp — dark-themed UI matching the physical keypad, embedded in the Signal K admin UI via Module Federation

Protocol

Sends Garmin proprietary NMEA 2000 messages:

  • PGN 61184 — single-frame button events (preset select/save, page navigation)
  • PGN 126720 — fast-packet property commands (display selection, sleep/wake)

Property commands use a per-property sequence counter and a keypad fingerprint that must match what the displays have stored. On first use, the plugin sends a command that the display rejects (NACK), discovers the correct counter and fingerprint from the rejection, then retries with corrected values.

Prerequisites

  • Signal K server with an NMEA 2000 gateway (e.g. Actisense NGT-1, Yacht Devices YDWG-02)
  • One or more Garmin GNX displays configured in a group

Note: The displays may need to have been grouped with a real Garmin GNX Keypad at least once before this plugin can control them. The group binding token and fingerprint are persisted in display NVM during initial pairing — without a prior pairing, these values may not exist for the plugin to discover. This is speculative and has not been confirmed.

Configuration

| Option | Description | Default | |---|---|---| | Source Address | NMEA 2000 source address for the keypad | 0 | | GNX Group ID | 4-byte group binding token (8 hex digits). Leave blank to auto-discover. | auto | | Display Count | Number of displays in the group. Set to 0 to auto-discover. | 0 | | Keypad Fingerprint | 2-byte keypad fingerprint (4 hex digits). Leave blank to auto-discover. | auto |

REST API

All endpoints at /plugins/signalk-garmin-keypad/:

| Method | Path | Body | |---|---|---| | GET | /state | — | | POST | /preset/select | { "index": 0-3 } | | POST | /preset/save | { "index": 0-3 } | | POST | /page | { "direction": "next" \| "previous" } | | POST | /display/cycle | { "direction": "up" \| "down" } | | POST | /power | { "action": "sleep" \| "wake" } |

Development

npm install
npm run build:plugin   # compile TypeScript
cd webapp && npm install && npm run build  # build React webapp
npm test               # run tests

Disclaimer

This project is an independent demo and is not affiliated with, endorsed by, or connected to Garmin or its subsidiaries. "Garmin" and "GNX" are trademarks of Garmin. Use at your own risk. The authors assume no liability for any damage to equipment or loss of functionality resulting from the use of this software.

License

Apache-2.0