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-first-mate

v0.1.1

Published

Send this boat's battery, tank, engine, depth and position readings to First Mate, the Bluewater Cruising app.

Readme

signalk-first-mate

Sends this boat's battery, tank, engine, depth and position readings from your Signal K server to First Mate, the Bluewater Cruising app.

🚩 In testing. Signal K upload is new and still being tried out with a few boats.

What you need

  • A Signal K server on the boat with internet access. On a Victron Cerbo GX that means Venus OS Large firmware with Signal K switched on (Settings, Venus OS Large features). A Raspberry Pi running Signal K works the same way.
  • A First Mate account with your boat set up.

Install

  1. Open your Signal K server in a browser: on a Cerbo that is http://venus.local:3000.
  2. Appstore, search First Mate, Install. Restart the server when it asks.
  3. In First Mate open Boat, then Connected apps, and make a key with only Signal K upload ticked. It starts with fm1_ and is shown once. Copy it.
  4. Back in Signal K: Server, Plugin Config, First Mate. Paste the key, tick what you want to send, Submit.

The plugin status line on that page tells you what happened: Sent 6 readings at 14:02, or what to fix.

Engines and tanks

First Mate never guesses which engine or tank a reading belongs to. Before it will store engine or tank readings you match each one once, in First Mate: Boat, Latest telemetry, Record a reading, choose the engine or tank, and save the Signal K instance (propulsion.port, tanks.fuel.main). Until then the plugin keeps sending batteries, depth and position and shows which instances still need matching. It tries the parked ones again every 15 minutes.

Batteries, depth and position need no matching.

How much it sends

Every minute by default (10 seconds to an hour in settings), and only values that changed. A value that has not changed is sent again every 10 minutes so First Mate knows the boat is still talking. First Mate allows 6,000 stored readings per boat per hour; a boat with a few batteries and tanks uses a small fraction of that.

Lost internet is fine. Batches queue on the boat (up to 12 hours at the default rate) and go when the connection is back, each with the timestamp it was observed at.

What is sent, exactly

| Group | Signal K paths | |---|---| | Batteries | electrical.batteries.<id>.stateOfCharge, .voltage, .current, .temperature | | Tanks | tanks.<type>.<id>.currentLevel, .capacity | | Engines | propulsion.<id>.runTime, .revolutions, .temperature, .oilPressure | | Depth | environment.depth.belowTransducer, .belowSurface, .belowKeel | | Position | navigation.position (off by default) |

Nothing else leaves the boat. The key goes in one request header and is never written to a log or a status line.

Publishing (Bluewater Cruising)

This package is published from v2/packages/signalk-first-mate in the First Mate repository. Publishing to npm under the keyword signalk-node-server-plugin is what makes it appear in every Signal K Appstore; there is no separate store submission.

Releasing is a version bump and nothing else. Bump version in package.json, open a pull request, and merge it. .github/workflows/publish-signalk-plugin.yml runs the tests against the merge commit and publishes, and it does nothing at all when the version has not changed. Signal K servers then show an Update button.

⛔ Do not publish by hand, and do not put a token in an .npmrc here if you try. npm silently ignores an .npmrc inside a workspace package directory — it prints npm warn config ignoring workspace config, a warning rather than an error, drops the token, and then fails with EOTP, which reads as a two-factor problem and is not one. That cost an hour on 2026-09-19 and sent the search to the 2FA settings, which is the wrong place entirely. CI authenticates with npm trusted publishing instead: GitHub mints a short-lived OIDC credential and no long-lived token exists to leak or mistype.

⚠️ There is no provenance badge on this package and there will not be. npm attests only packages built from a public source repository, and First Mate's is private.