signalk-charts-provider-simple
v2.4.2
Published
Simple Signal K chart provider for local MBTiles with web and download management
Maintainers
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
- Open your Signal K server admin interface
- Navigate to Appstore
- Search for "Charts Provider Simple"
- Click Install
Manual Installation
cd ~/.signalk
npm install signalk-charts-provider-simpleConfiguration
- Navigate to Server → Plugin Config → Charts Provider Simple
- Set your chart directory path (defaults to
~/.signalk/charts-simple) - (Optional) Pick a CPU budget for chart conversion — see CPU budget below
- Enable the plugin
- 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:
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
Download from URL:
- Download charts directly from any URL
- Supports
.mbtilesand.ziparchives - Download queue with progress tracking
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
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)
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
.mbtilesper 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
- Freeboard SK — full S-52 symbology for S-57 vector charts
- OpenCPN
Requirements
- Node.js >= 22.5 — uses the built-in
node:sqlitemodule, no native compilation needed - Not supported on Cerbo GX — Venus OS ships Node.js 20, which lacks the
node:sqlitemodule. 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.socketThe 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:VERSIONtag rather than:latestso a published image tag is permanent for any host that pulled it; bumping the toolbox image is a co-ordinated edit ofdocker/charts-toolbox/VERSIONand the matching constant insrc/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.0See 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
