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-charts-provider-simple

v2.4.2

Published

Simple Signal K chart provider for local MBTiles with web and download management

Readme

Signal K Charts Provider Simple

A lightweight Signal K server plugin for managing local nautical charts, written in strict TypeScript. Supports MBTiles, S-57 ENC, BSB raster, and world basemaps with automatic conversion via Docker- or Podman-managed containers.

Features

  • Local Chart Management: MBTiles (raster and vector), with folder organization and enable/disable toggles
  • Download Manager: Built-in download queue with progress tracking and ZIP extraction
  • Chart Catalog: Browse and download charts from chartcatalogs.github.io with automatic update notifications
  • NOAA Charts: Draw a coverage region on a map from NOAA band-4 chart footprints; the plugin bundles the overlapping band-3/4/5 ENCs and converts them into a single vector MBTiles named after your chart set
  • S-57 ENC Conversion: Convert IENC/ENC charts to vector MBTiles with full S-52 symbology in Freeboard-SK
  • BSB Raster Conversion: Convert BSB/KAP raster charts and Pilot Charts to raster MBTiles
  • World Basemaps: GSHHG and OSM coastline basemaps for offline use
  • Custom Upload: Upload your own ZIP files containing S-57 ENC or BSB charts for conversion
  • Modern Web UI: Material Design 3 interface with drag-and-drop
  • Dual API Support: Compatible with Signal K v1 and v2 API

Installation

From Signal K Appstore

  1. Open your Signal K server admin interface
  2. Navigate to Appstore
  3. Search for "Charts Provider Simple"
  4. Click Install

Manual Installation

cd ~/.signalk
npm install signalk-charts-provider-simple

Configuration

  1. Navigate to Server → Plugin Config → Charts Provider Simple
  2. Set your chart directory path (defaults to ~/.signalk/charts-simple)
  3. (Optional) Pick a CPU budget for chart conversion — see CPU budget below
  4. Enable the plugin
  5. Restart Signal K server (first-time install only — later config changes hot-apply on Save without a full restart)

CPU budget for chart conversion

Chart conversion (S-57 ENC, BSB raster, basemaps) is the only CPU-heavy thing this plugin does. The CPU budget dropdown lets you decide how greedy that work is allowed to be:

| Setting | What happens during a conversion | When to pick it | |---|---|---| | single-core | One job at a time, one thread; each ogr2ogr runs sequentially | Multi-tenant Pi (Signal K + Grafana + Node-RED + …) where keeping the rest of the box responsive matters more than conversion speed | | half (default) | cpus/2 concurrent jobs, each tippecanoe gets cpus / max-jobs threads (typically ~2), ogr2ogr parallelizes to the same per-job ceiling | Balanced — leaves half the box for everything else. Matches the behaviour of plugin versions before 1.10 | | all | One full-throttle job using every core in both the GDAL export and tippecanoe stages; multi-bundle uploads queue serially | Dedicated chart-prep box, or when you just want a NOAA bundle to finish as fast as possible |

The setting hot-applies — change it in the plugin config and Signal K will restart the plugin automatically; no server restart needed. In-flight conversions keep their already-spawned threads; the next conversion picks up the new budget.

Usage

Web Interface

Access the plugin's web interface through your Signal K server:

http://[your-server]:3000/plugins/signalk-charts-provider-simple/

The interface provides five tabs:

  1. Manage Charts:

    • View all charts with metadata (name, bounds, zoom levels, size)
    • Enable/disable, organize into folders, upload, delete, rename
    • S-57 charts shown with ENC badge
    • Converting charts shown with progress indicator
  2. Download from URL:

    • Download charts directly from any URL
    • Supports .mbtiles and .zip archives
    • Download queue with progress tracking
  3. Convert:

    • Upload ZIP files containing S-57 ENC (.000) or BSB raster (.kap) charts
    • Drag-and-drop or click to select files
    • Configurable zoom levels for S-57 conversion
    • Live conversion progress with log viewer
  4. Chart Catalog:

    • Dynamic catalog from chartcatalogs.github.io
    • One-click download for MBTiles charts (NOAA)
    • Download & convert for S-57 ENC, BSB raster, Pilot Charts, and basemaps
    • Automatic update notifications (Signal K delta + tab badge)
    • Category filtering (MBTiles / RNC / IENC / General)
  5. NOAA Charts:

    • Build a named chart set of NOAA ENC coverage by clicking band-4 footprints on a map (Leaflet + OpenSeaMap)
    • Each band-4 selection automatically pulls in the overlapping band-3 and band-5 ENCs
    • Footprint data from NOAA's official chart locator
    • Download & convert produces one .mbtiles per chart set, with live progress and a log
    • Out-of-date detection when NOAA publishes new editions or your selection changes
    • Container runtime (signalk-container) required, same as other conversions
    • US waters only — NOAA is the only source of freely-downloadable ENC charts

Supported Formats

| Format | Source | Conversion | Output | |--------|--------|-----------|--------| | MBTiles | Direct download | None needed | Raster or vector tiles | | S-57 ENC (.000) | IENC catalogs, custom upload | GDAL + tippecanoe (containerized) | Vector MBTiles with S-52 styling | | BSB Raster (.kap) | RNC catalogs, custom upload | GDAL (containerized) | Raster MBTiles (PNG) | | Pilot Charts (.kap in .tar.xz) | Pilot catalog | GDAL (containerized) | Raster MBTiles (PNG) | | GSHHG Basemap | General catalog | GDAL (containerized) | Raster MBTiles (PNG) | | OSM Basemap | General catalog | GDAL (containerized) | Raster MBTiles (PNG) |

Compatible Chart Plotters

Requirements

  • Node.js >= 22.5 — uses the built-in node:sqlite module, no native compilation needed
  • Not supported on Cerbo GX — Venus OS ships Node.js 20, which lacks the node:sqlite module. Use v1.6.x if you need Cerbo support.

Recommended for chart conversion: signalk-container plugin

Displaying charts (serving tiles from .mbtiles) needs nothing extra. The signalk-container plugin is only needed to convert charts (S-57 ENC, BSB raster, Pilot Charts, or basemaps), where this plugin delegates all container work to it. The Signal K App Store lists it as a recommended plugin on the Charts Provider Simple detail page and offers a one-click bulk install; without it the plugin still loads and serves charts — only the Convert tab is disabled.

signalk-container itself needs a Docker- or Podman-compatible runtime on the host. Both engines work the same way; pick whichever is easier:

# Debian / Ubuntu / Raspberry Pi OS
sudo apt install podman
systemctl --user enable --now podman.socket

# Fedora / RHEL
sudo dnf install podman
systemctl --user enable --now podman.socket

The plugin uses one combined image that signalk-container pulls automatically on first conversion:

  • ghcr.io/dirkwa/signalk-charts-provider-simple/charts-toolbox:1.1.0 — GDAL + tippecanoe + tile-join + helpers in a single image (multi-arch: amd64 + arm64). The plugin pins to a specific :VERSION tag rather than :latest so a published image tag is permanent for any host that pulled it; bumping the toolbox image is a co-ordinated edit of docker/charts-toolbox/VERSION and the matching constant in src/utils/container-images.ts.

Why signalk-container? It transparently handles the three deployment topologies that 1.x got wrong:

  • Bare-metal Signal K — straight bind mount of the data dir.
  • Signal K in Docker / Podman with a named volume — the helper container mounts the same named volume. (1.x couldn't do this; named-volume deployments were unable to convert.)
  • Signal K in Docker / Podman with bind-mounted data — the helper container gets the resolved host path, even when the in-container path doesn't match the host path. (1.x relied on host/container paths matching exactly; mismatches silently failed.)

Signal K running in Docker? Runtime and socket setup is handled by signalk-container — see docs/running-in-docker.md for how conversion is delegated and where to configure the host.

Conversion concurrency is configurable — see the CPU budget section. MBTiles charts (display only, no conversion) work without any container runtime, and without signalk-container.

Standalone container image (third-party use)

The same charts-toolbox image the plugin uses internally is also available for use outside Signal K — overnight NOAA region pipelines, ad-hoc shell-script automation, GitHub Actions workflows under your own account, etc.

Pull it directly from GHCR:

docker pull ghcr.io/dirkwa/signalk-charts-provider-simple/charts-toolbox:1.1.0

See docs/charts-toolbox-image.md for a quickstart, the --user / --userns=keep-id flag forms per runtime, and reproducibility notes.

Legal Notice

Chart Metadata Editing

This plugin includes a feature to edit chart metadata (chart names) in MBTiles files. This feature is intended for personal use only.

Important:

  • The Signal K community is not responsible for any illegal use of this feature
  • Modified charts are automatically marked with "USER MODIFIED - DO NOT DISTRIBUTE - PERSONAL USE ONLY" in the description field
  • Do not distribute modified charts - this may violate copyright laws
  • Use this feature responsibly and only for organizing your personal chart library

Acknowledgments

Inspired by Signal K Charts Plugin by Mikko Vesikkala.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Support

For issues and feature requests:

  • GitHub Issues: https://github.com/dirkwa/signalk-charts-provider-simple/issues