SatPulse

The goal of the SatPulse project is to provide a suite of open-source software that enables precision timing and positioning using modern GPS receivers on Linux and other general-purpose operating systems.

The initial focus of the project was on precision timing, specifically making it easy to run a time server for your local network that enables much more precise synchronization than is possible in a typical NTP-based setup.

But since the initial 0.1 release, SatPulse has been developing rapidly. With the 0.2 release and upcoming 0.3 release, SatPulse provides a broad range of capabilities related to precision timing and positioning. Unfortunately, the tutorial documentation linked to from the navigation bar on the left has fallen behind the software. The current capabilities of the in-development version of the software on the master branch are described in the man pages. To use this version, you can install from source. The changes since 0.1 are described in detail in recent changes. The blog also has many posts about how SatPulse has evolved since 0.1.

Precision timing remains the most mature part of SatPulse. A typical NTP stratum-1 server, running on, for example, a Raspberry Pi, connects the PPS (pulse-per-second) output of a GPS receiver to a GPIO or a serial port pin. SatPulse can take advantage of hardware designed for PTP (Precision Time Protocol). The key difference is that the PPS output of the GPS is connected to a PPS input pin on the ethernet controller. For more details, please read the Introduction.

In release 0.1, SatPulse required this special kind of ethernet controller. But since 0.2, this is no longer the case. In particular, since 0.2 SatPulse can supply timing information to an NTP server without any special hardware. It can also be used as an RTK base station and it provides extensive capabilities for GPS receiver configuration.

SatPulse does not itself provide an NTP or PTP implementation. Its job is to act as a source of time for NTP or PTP. It is intended to work with the PTP server provided by the LinuxPTP project, which is called ptp4l, and with the NTP server provided by the chrony project.

The Setup guide describes how to get started with a precision time server.

Recent Posts

SatPulse 0.2 released

I have released SatPulse 0.2. This is a major new release with a lot of new functionality (more than 60% of the code is new since 0.1).

SatPulse 0.2 hardware test matrix

I have set up 12 different machines for automated testing of SatPulse. I have chosen the hardware to provide coverage along multiple dimensions: CPU architec...

Desktop GUI preview

I have been working on a desktop GUI for SatPulse. Here are a couple of demo videos.

Design of SatPulse compared with GPSd

In version 0.1 SatPulse focused on a specialized use case: transferring time from a GPS to a PTP hardware clock (PHC). In version 0.2, SatPulse’s scope is mu...

Using SatPulse for timing without a PHC

Up to now, using SatPulse for timing has required some very specialized hardware. Over the last couple of days, I have implemented a feature that removes thi...

SatPulse 0.1 released and onwards to 0.2

I released version 0.1 of SatPulse today. This is the first stable release of SatPulse. The initial commit was back in December 2022, over 3 years ago.

Using the tinyGTC with PTP hardware clocks

The tinyGTC is a delightful little device released towards the end of 2025. It turns out that the tinyGTC is very useful for working with precision network t...

Time server architecture

It can be hard to understand how everything fits together with a PTP/NTP time server. This post explains how things work when using SatPulse.

Comparing GPS performance with SatPulse

I have been doing some more systematic testing on SatPulse. I have 6 different systems set up for testing. I ran SatPulse on them for 3 days, with SatPulse p...

Real-world applications of PTP

SatPulse makes it easy and inexpensive to run PTP on a network. Personally, I tinker with PTP because I find it interesting. Why be satisfied with your compu...