Recent changes
Changes in 0.3
Not yet released
RTK and RTCM
satpulse.tomlhas a new[ntrip]table and[[ntrip.mountpoint]]table array, which makesatpulsedact as an Ntrip caster serving RTCM correction data from the receiver. Authentication is supported in conjunction with a new[[user]]table array. (#126)satpulse.tomlhas a new[stream.pull]table, which makessatpulsedact as an Ntrip client, pulling correction data from an Ntrip caster and feeding it to the receiver. A plain TCP correction source can also be used. (#221)satpulse.tomlhas a new[[stream.push]]table array, which makessatpulsedact as an Ntrip server, pushing receiver packet streams to a remote Ntrip caster. RTCM is the default payload, and NMEA or UBX can be selected explicitly. (#238)satpulse.tomlhas newmsm7to4options on Ntrip mountpoints and push entries, which makesatpulsedconvert RTCM MSM7 packets to MSM4 before forwarding them, while leaving non-MSM7 packets unchanged. (#126, #238, #288)- The
[gps]table insatpulse.tomlhas a newrtcmPreferMSM7key, which letssatpulsedchoose whether receiver RTCM output should prefer MSM7 or MSM4 whenrtcmOutputis enabled and both are supported. (#288) - The device-independent GPS model now includes correction reports for RTCM correction data received by the system; these are exposed in the JSONL event log. Reports can come from correction data pulled from a network source, or from receiver-reported correction status when the receiver is configured to emit it. (#237)
- The web dashboard has an RTCM card showing correction-report data, including per-message counts and receiver-reported usage when available. (#237)
- Prometheus metrics now expose correction-report data. (#237)
u-blox protocol-specific support
- The existing
--saveoption forsatpulsetool gps, previously used with high-level configuration, now also works with message files. New u-blox-specific message types use this so the same tag can make either a RAM-only change or a persistent change. (#272) - The u-blox Gen 9 message file adds a broad set of tags for enabling messages. These use a new higher-level message type that works in conjunction with a new
--portoption forsatpulsetool gps, which determines which port (i2c,uart1,uart2,usb, orspi) the tag enables messages on, and also supports the new--savebehavior. (#270) satpulsetool gpshas a new--show-portoption that reports the active receiver port, such asUSBorUART1, and the serial speed for UART ports. This helps choose the--portvalue for port-dependent message-file entries. (#271)- u-blox
UBX-RXM-CORmessages are translated into the device-independent correction report, and the u-blox Gen 9 message file includes a tag to enable them. (#237) satpulsedwarns when u-bloxUBX-MON-COMMSreports transmit-buffer overflow, and the u-blox Gen 9 message file includes a tag to enable it. (#273)satpulsedlogs u-bloxUBX-INF-*messages emitted by the receiver. (#273)
NTP support
- SatPulse now supports the NTP SHM protocol in addition to the chrony refclock SOCK protocol for sending time information to an NTP server.
satpulse.tomlhas a new[ntp.shm]table for configuring this. (#300)
GPS high-level configuration
satpulsetool gpshas a new--fixed-pos-llhoption for configuring fixed antenna position with latitude, longitude, and WGS84 ellipsoid height, instead of requiring ECEF coordinates. (#146)satpulsetool gps --show-receivernow prints aSupports:line listing the receiver configuration features that SatPulse can use. (#203)satpulsetool gpsnow warns if a specified configuration option could not be applied because it is not supported by the receiver. (#203)
RINEX observation conversion
satpulsetoolhas a newconvobscommand, which converts raw GNSS observation data from u-blox UBX-RXM-RAWX, Unicore OBSVM, or RTCM MSM7 into RINEX observation files for PPP post-processing. It can decimate observations and set RINEX header metadata from command-line options or a TOML header file.convobsalso supports a new JSON Lines observation format that follows RINEX semantics to enable convenient processing with modern tooling such asjq; it reads and writes this format, and can also read existing RINEX files, so it can convert freely between raw packets, RINEX, and the JSON Lines format. (#296)
Other satpulsetool improvements
satpulsetoolhas a newpackcommand, which reads a JSONL packet log and writes selected packets as a packet byte stream corresponding to the original packet contents. It can filter by packettagandmsg, and can preserve inter-packet timing for FIFO-based replay. (#247)satpulsetoolhas a newscancommand, which reads a raw GPS packet byte stream and writes a JSONL packet log that can be decoded withsatpulsetool annotate. (#246)
Miscellaneous
- GPS message files are now installed by packages under
/usr/share/satpulse/gpsmsg, and bymake installunder/usr/local/share/satpulse/gpsmsg. The files are organized by vendor directory. (#233) - The
satpulse@.servicehas been improved so that if a USB GNSS receiver is unplugged, itssatpulse@...service stops, and when the receiver is plugged back in, its service is automatically restarted, provided it was enabled. To take advantage of this after installing the new unit file, previously enabled instances need to be reenabled, for example withsystemctl reenable satpulse@ttyS0. (#172) - The packaged
satpulse@.serviceunit now runs with improved systemd security hardening. (#254)
Changes in 0.2
Released 2026-05-07
Position and velocity
- The device-independent GPS model now includes events for geodetic/ECEF position and geodetic/ECEF velocity; these are exposed in the JSONL event log. (#220)
- The HTTP monitoring interface has a
/positionJSON endpoint. - The web dashboard shows position and velocity information.
- Prometheus metrics include GNSS position and velocity data.
satpulse.tomlhas a newlog.trackoption, which makessatpulsedwrite a JSONL track log with one trackpoint per navigation epoch; the includedtrack2gpx.pyscript converts this log to GPX 1.1.
Solution quality
- The device-independent GPS model now includes an event emitted at the end of each navigation epoch, with solution-quality data that applies to the navigation solution as a whole, including fix dimensionality, correction type, accuracy, DOP, correction age, and satellite/signal information; this is exposed in the JSONL event log. (#217)
- The web dashboard shows richer GNSS solution-quality information.
- Prometheus metrics include richer GNSS solution-quality data.
GPS high-level configuration
- SatPulse now has high-level configuration support for Unicore receivers. (#139)
- u-blox high-level configuration support now includes the ZED-X20P. (#205)
- The
[gps]table insatpulse.tomlandsatpulsetool gpshave expandedvendorhandling, which restricts which packet formats are recognized and which configuration protocols are probed. (#202) satpulsetool gpshas a new--min-elevoption, which configures the receiver elevation mask. (#140)- The
[gps]table insatpulse.tomlhas a newminElevationkey, which makessatpulsedconfigure the receiver elevation mask. (#140) satpulsetool gpshas a new--rtcm-base-idoption, which configures the RTCM reference station ID used in receiver-generated RTCM messages. (#106)- The
[gps]table insatpulse.tomlhas a newrtcmBaseIDkey, which makessatpulsedconfigure the RTCM reference station ID used in receiver-generated RTCM messages. (#106) satpulsetool gpshas a new--show-receiveroption, which explicitly enables the default behavior of detecting the GPS receiver and showing receiver information.
Message files
- Message files are a new TOML-based way to send named receiver-specific command sequences. They work both as the main configuration mechanism for receivers without high-level configuration support, and as a way to use receiver-specific features that are outside SatPulseās high-level GPS model.
satpulsetool gpshas new--msg-file,--tagand--show-tagsoptions for selecting message files, sending tagged command sequences, and listing available tags.- Message files support multiple command/message forms, shared includes, deterministic tag selection, delays and wait limits, and request/response matching for supported protocols. (#200, #235, #249)
Support for more GNSS protocols
- SatPulse now supports a broad range of GNSS receiver protocols beyond u-blox and Unicore. This support does not include the high-level, device-independent configuration interface, but it does include packet decoding, translation into device-independent GPS events, and protocol-specific message-file types with request/response correlation. (#196, #214)
- For supported receivers using these protocols, SatPulse includes message files that provide wide-ranging configuration coverage. The message tags follow device-independent naming conventions where possible, while message enablement remains protocol-specific.
- The Allystar binary protocol is supported, with message files for Allystar TAU1201 and TAU951M-P200 receivers.
- The CASIC binary protocol is supported, with message files for Zhongke ATGM332D/ATGM336H receivers and the AT632-6T-30 timing receiver.
- The Quectel PQTM NMEA-based protocol is supported, with a message file for the Quectel LG290P.
- The Airoha PAIR NMEA-based protocol is supported, with a message file for the Quectel LC29H (which uses a combination of the PQTM and PAIR protocols).
- The NovAtel OEM6/7 binary and ASCII protocol is supported in the variants used by ByNav and SinoGNSS/ComNav, with message files for ByNav M2 and SinoGNSS/ComNav K901/K902.
- The Techtotop/Taidou SDBP protocol is supported, with a message file for the Techtotop/Taidou T303-5D receiver.
NTP support without a PHC
satpulsedcan provide serial timing samples to chrony or ntpd-rs without a PHC, letting the NTP server use them to number the PPS edges from a PPS refclock. This enables a complete GNSS-based NTP server to be built using SatPulse without any specialized hardware. (#77)
PHC and PTP support
satpulsedhas a new PHC synchronization architecture with reset, converging and tracking modes. Prometheus metrics include the current synchronization mode. (#177, #190, #186, #187, #193)satpulse.tomlhas a new[sync]table, which letssatpulsedsynchronization parameters be configured separately for reset, converging and tracking modes. (#179, #224)satpulsetoolhas a newsyncsimcommand, which simulates synchronizing a PHC to a GPS receiver using the same synchronization code assatpulsed. It can be used to tune synchronization parameters and evaluate behavior under faults. (#173)- The
[ptp]table insatpulse.tomlhas newoffsetScaledLogVarianceandallanDeviationkeys, which letsatpulsedreport clock stability to a PTP grandmaster. (#189)
Other satpulsetool improvements
satpulsetool gpshas a new-f/--config-fileoption, which reads the serial device path and speed from asatpulse.toml-compatible[serial]table.satpulsetool gpshas a new--packet-logoption, which writes GPS packet traffic to a JSONL packet log.satpulsetool gpshas a new--captureoption, which can be used with--packet-logto run in a packet-capture-only mode.satpulsetool decodedecodes a single GPS packet from hex or ASCII data and prints decoded JSON.satpulsetool annotatereads a JSONL packet log and adds decoded packet fields, such as headers, payloads and configuration data.satpulsetool replayreads a JSONL packet log, runs incoming packets through the GPS protocol processing pipeline, and emits device-independent GPS events as JSONL.satpulsetool ntripfetches data from an Ntrip caster mountpoint and writes a JSONL packet log by default, or raw bytes with--bin.
Miscellaneous
satpulsetoolcan now be built for Windows using thewin-build.ps1script. It supports thegps,decode,annotate,replayandntripsubcommands.satpulsednow uses distinct exit statuses for usage errors, permission errors and configuration-file errors, so systemd can avoid restarting the daemon for failures that require user action. (#171)
0.1 was released on 2026-01-23.