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-compass-calibrator

v0.3.2

Published

Signal K plugin that learns and publishes live magnetic heading corrections.

Readme

Signal K Compass Calibrator

Signal K plugin that learns an empirical magnetic heading correction while underway and always republishes navigation.headingMagnetic as its own Signal K source.

Status

Experimental live-learning rewrite for onboard testing.

This plugin does not perform a 3D magnetometer calibration. It learns a heading-dependent correction from the live relationship between magnetic heading, magnetic variation, COG, and SOG. Signal K source priorities decide whether downstream consumers use the raw heading source or this plugin's corrected heading.

Features

  • Always publishes navigation.headingMagnetic.
  • Uses a neutral correction by default, so output heading equals input heading until learning or manual values exist.
  • Uses Signal K preferred-source subscriptions with excludeSelf: true, so the plugin follows the user's source priorities while avoiding feedback from its own output.
  • Learning mode can be enabled or disabled without disabling publication.
  • Learns compact per-heading-sector statistics without storing raw samples forever.
  • Tracks sample count, effective sample weight, dispersion, confidence, origin, and lock state per sector.
  • Supports manual sector values, sector reset, sector lock/unlock, full table reset, and JSON import/export.
  • Smooths the table with circular harmonic fitting.

Installation

From a Signal K server environment:

npm install github:macjl/signalk-compass-calibrator

Then enable the plugin from the Signal K plugin configuration UI.

After restarting Signal K, open the app from the Admin UI Web Apps menu.

Operation

Publication is always active when the plugin is enabled. If the table is empty, the published value is neutral:

published HDG = source HDG

Enable learning only when underway in suitable conditions. The plugin rejects learning samples while inputs are missing, HDG/COG/SOG are stale or not timestamp-aligned, SOG is below the threshold, COG/HDG is unstable, or navigation.state is available and does not report motoring. Magnetic variation must be present, but it does not need to be refreshed frequently. These learning filters are exposed in the plugin configuration with conservative defaults.

When sailing, side force from the wind can create significant leeway, so the boat's heading and its course over ground may differ even when the compass is correct. This leeway is much smaller or absent when motoring, making COG a more reliable reference for learning heading correction.

The plugin works well with @meri-imperiumi/signalk-autostate, which can publish navigation.state as sailing, motoring, moored, or anchored.

Default runtime output:

navigation.headingMagnetic

Default Signal K output source:

compass-calibrator

Development

npm test

Author

Jean-Laurent Girod, @macjl

License

Apache-2.0