| CARVIEW |
gpsd — a GPS service daemon

News
Installation & Building
Downloads
Support
Documentation
FAQ
Screenshots
Recipes
Other GPSDs
Hardware
For GPS Vendors
Wish List
Hall of Shame
Troubleshooting Guide
Hacker's Guide
References
Application Compatibility History
Future

Donate here to support continuing development.
About gpsd
gpsd is a service daemon that monitors one or more
GPSes or AIS receivers attached to a host computer through serial or
USB ports, making all data on the location/course/velocity of the
sensors available to be queried on TCP port 2947 of the host
computer.
With gpsd, multiple location-aware client applications
can share access to supported sensors without contention or loss of
data. Also, gpsd responds to queries with a format that
is substantially easier to parse than the NMEA 0183 emitted by most
GPSes. The gpsd distribution includes a linkable C
service library, a C++ wrapper class, and a Python module that
developers of gpsd-aware applications can use to
encapsulate all communication with gpsd. Third-party
client bindings for Java and Perl also exist.
Besides gpsd itself, the project provides auxiliary
tools for diagnostic monitoring and profiling of receivers and feeding
location-aware applications GPS/AIS logs for diagnostic purposes.
GPSD is everywhere in mobile embedded systems. It underlies the map service on Android phones. It's ubiquitous in drones, robot submarines, and driverless cars. It's increasingly common in recent generations of manned aircraft, marine navigation systems, and military vehicles.
Applications that
presently use gpsd include
Kismet,
GpsDrive,
gpeGPS,
roadmap,
roadnav,
navit,
viking,
tangogps,
foxtrot,
obdgpslogger,
geohist,
LiveGPS,
geoclue,
qlandkartegt,
gpredict,
OpenCPN,
gpsd-navigator,
gpsd-ais-viewer,
and firefox/mozilla.
In addition, the Android smartphone operating system (from version
4.0 onwards and possibly earlier; we don't know for sure when the
change happened) uses GPSD to monitor the phone's on-board GPS, so
every location-aware Android app is indirectly a GPSD client.
GPSD is also extremely widely deployed in mobile embedded systems: it's a basic building block for navigation used by UAVs, robot submarines, and driverless cars as well as more conventional applications like marine navigation and military IFF systems.
Under Linux, gpsd normally runs with zero
configuration. Binary packages for this program install hotplug
scripts that do the right thing when a USB device goes active,
launching gpsd if needed and telling gpsd
which device to read data from. Then, gpsd deduces a
baud rate and GPS/AIS type by looking at the data stream.
gpsd is high-quality, carefully-audited code; see
our notes on reliability engineering. In
January 2010, the GPSD project won
the first Good Code Grant from the Alliance for Code Excellence.
Statistics about the code volume, commit history, and contributors associated with this project are available at OpenHUB
Our development platforms are open-source Unixes — Linux, and
the *BSD family. Presently Linux, OpenBSD and NetBSD are directly
supported. The code is also extremely widely deployed on Android
phones. We'll support proprietary Unixes if it's not too much work (and
it usually isn't). Apple's OS X is supported in a limited fashion. Some
older OS X drivers are buggy and prevent gpsd from being
able to read from some USB-serial devices. No, we don't support Windows
— get a better operating system.
If you represent a GPS manufacturer interested in qualifying your device for use with Linux and other open-source operating systems, we are your contact point. We'll need (1) on-line access to interface documentation, (2) a few (as in, no more than three) eval units, and (3) an engineering contact at your firm. For more, see our page welcoming vendor cooperation.
See the FAQ for information on how to report bugs.
If you appreciate GPSD, and especially if you make money from it, please leave a remittance at Patreon.
News
- NEWS
- The project's News file. Changes by revision.
- TODO
- The project's TODO list
This web page was last updated on Tue Dec 30 01:39:42 2025. Note: because of the way this website is maintained, these files reflect the state of the repository tip (development version) rather than the latest released version.
Installation & Building
- README
- Project README file.
- INSTALL
- Installation instructions for people running distributions with binary package systems. The GPSD project does not release any binary packages.
- BUILD
- Instructions for building gpsd from source.
Repository, Downloads and Packages
- Repository
- Repository and project administration lives here.
- Releases
- Where to get release tarballs
If you are using a Debian-based distribution (including Ubuntu) you
can probably install gpsd through your regular package
manager or by typing "sudo apt-get install gpsd" at the command
line.
Support
Real Time
Some of the developers hang out regularly on IRC at channel #gpsd at irc.freenode.net, and at channel #gpsd at irc.libera.chat.
Mailing Lists
There are four project mailing lists:
- gpsd-announce is for release announcements and project news.
- gpsd-users
is for questions and technical support on
gpsd, including support for application builders usinggpsdas a component. - gpsd-dev
is for
gpsddevelopers. - gpsd-commit-watch
sends automatic broadcast notifications of commits to the
gpsdrepository. - There are searchable archives of the old GPSD mailing lists from Berlios at MARC: gpsd-users gpsd-dev and gpsd-commit-watch.
Issue Tracker
The gpsd project tracks issues on our issue tracker. Please read the section on Bug reporting before posting on the issue tracker.
SUPPORT information
More information on gpsd SUPPORT is available on the gpsd SUPPORT page.
Documentation
The following manual pages describe the code. Note: because of the way this website is maintained, these files will describe the state and features of the repository tip (development version) rather than the latest stable version.
- gpsd.8
- The
gpsddaemon. - gps.1
- Overview of
gpsdclient and helper programs. - cgps.1
- A command line ncurses client for
gpsd. - gegps.1
gegpsfeeds your location to Google Earth for live location tracking.- gps2udp.1
- Feed the take from
gpsdto one or more aggregation sites via UDP. - gpscsv.1
- The
gpscsvtool for reading gpsd JSON sentences and converting them in CSV files. - gpsctl.1
- The
gpsctltool for tweaking GPS settings. - gpscat.1
- The
gpscattool dumps output from a serial device. Optionally, it can packetize the data. - gpsdebuginfo.1
- A shell script to dump debugging information. For you convenience gpsdebuginfo is available for direct download.
- gpsdecode.1
- The
gpsdecodepacket decoder. - gpsfake.1
- The
gpsfaketest harness simulating a GPS. - gpslogntp.1
- A program to log "Sats Used" and "TDOP" for use with *ntpviz*. Fomerly part of *NTPSec* and named *ntploggps*.
- gpsmon.1
- The
gpsmonreal-time packet monitor and diagnostic tool. (This replaces thesirfmontool in older versions.) - gpspipe.1
- A simple client that
captures GPS output and/or
gpsdreports and sends it to standard output. - gpsplot.1
- The
gpsplotprogram for dynamically plotting scatterplots and stripcharts ofgpsddata. - gpsprof.1
- The
gpsprofprogram for statically plotting spatial scatter of fixes, satellite skyview, fix latency, and other plots. - gpsrinex.1
- The
gpsrinexprogram for outputting raw measurements into a RINEX 3 file. - gpssubframe.1
- The
gpssubframetool for reading gpsd JSON subframe sentences and decoding them. - lcdgps.1
- A
gpsdclient to display on a 4x20 LCD screen, usinglcdproc. - ntpshmmon.1
- Monitor the NTP shared-memory segments created by GPSD.
- ubxtool.1
- Configure and ommunicate with u-blox GPS from the command line.
- xgps.1
- An X11 client for
gpsd. - zerk.1
- An all purpose GREIS fitting. A command line tool for JAVAD GPS.
- libgps.3
- An interface library that manages communication with the daemon.
- libgpsmm.3
- C++ class wrapper for the libgps C binding.
- libQgpsmm.3
- Qt wrapper for the libgps C binding.
- gpsd_json.5
- The JSON
request/response protocol of the
gpsddaemon. - gpsdctl.8
- Tool for sending commands to
gpsdover its control socket. - gpsinit.8
- Initialize kernel modules for use with
gpsddaemon. - ppscheck.8
- Tool to check a serial port for PPS.
Also, see the FAQ.
We have a list of compatible GPSses with some technical information. We also have a list of NMEA sentences.
There is a Hacker's Guide to the project philosophy, design, and code internals. You should read this if you want to contribute code.
We maintain a GPS Hall of Shame that describes particularly egregious vendor blunders.
White Papers
- GPSD
- An in-depth essay on the architecture and practices of GPSD, published in The Architecture of Open Source, Volume 2.
- GPSD Client Example Code
- A line by line code walk-through of a simple
gpsdclient written in C, and another in Python. With a focus on common mistakes. - GPSD Client HOWTO
- A programmer's guide to interfacing with
gpsdfrom client applications. Explains the theory, points at working example source code, warns you what the edge cases and gotchas are. - GPSD Numbers Matter
- A wandering discourse on the numerology of
gpsd. - ESR's Guide to Hacking With GPS
- If you are new to GPS technology and don't quite understand what
gpsdis about, you might find this interesting. - Why GPSes suck, and what to do about it
- The designer of
gpsd2.0 rants in an at least semi-humorous way about everything that's wrong with GPS standards and vendors. - GPSD-NG: A Case Study in Application Protocol Evolution
- History and evolution of the GPSD-NG protocol, illuminating some larger trends in application protocol design.
- Moving to GPSD-NG: a Guide for Client Developers
- A practical explanation of GPSD-NG, and how to move to it as painlessly as possible.
- Towards A Better GPS Protocol
- An analysis of what's wrong with NMEA 0183, and a simple way to fix it.
- Where's the Latency? Performance analysis of GPSes and GPSD
- An analysis of latency in the GPS/GPSD system. Has implications for the
design of
gpsdand vendor claims about binary protocols. - Notes on Writing a GPSD Driver
- A guide for the perplexed by the author of the Jupiter-T driver.
- A Tour of the GPSD Internals
- A walk through the code of GPSD. Written in 2007 and out of date in spots, but still quite useful for anyone interested in modifying the code.
- GPSD and Code Excellence
- An essay written for the "The Alliance for Code Excellence" on how GPSD drives out bad code.
- Scenes from the Life of a System Architect
- The GPSD lead describes some work in progress on the core code of GPSD. A slice of what doing software architecture is like in the real world, where history can weigh nearly as much as today's requirements list.
- GPSD 3.0 finally ships. It's been a long epic.
- What a long strange trip it's been. GPSD 3.0 ships, five years of effort pays off, and I think out loud about protocol transitions and ubiquity and what it's like to be an infrastructure gnome.
- GPSD Time Service HOWTO
- Step-by-step instructions on setting up a Stratum 1 time server using GPSD and either ntpd or chrony. Documents the black art of tuning offsets for remote time servers.
- PPP HOWTO
- A guide to using
gpsdandgpsrinexto determine your position to the cm level. - Introduction to Time Service
- All about time service, reference clocks, strata, chimers, and other mysteries. Written as a companion to GPSD Time Service HOWTO for time-service novices.
- ubxtool examples
- Examples for performing common
ubxtooltasks.
Recipes and related resources
gpsd also works with some bluetooth
GPS receivers. Warning: there are serious problems with the
firmware in at least one family of Bluetooth implementations shipped
by Holux that may result in gpsd bricking your GPS. See this
bug warning for a description
of the problem.
The GPSDproxy project is a small program which reads GPS data from a running gpsd process and forwards it to a remote server via an UDP connection. GPSDproxy is intended to be run on GPS enabled mobile devices.
You can read detailed instructions on Synchronizing ntpd to a Garmin GPS 18 LVC via gpsd. This may be a useful tutorial even if your actual device isn't a Garmin 18; many of the setup steps and caveats will be the same.
Diego Berge has written a prototype Qt-based client, basically
xgps with a Qt look and feel.
Egil Möller has written agpsd, a gpsd replication and logging daemon with support for KML.
You can find Debian-unstable packages here.
gpsd is carried in the OpenBSD ports tree.
OpenStreetMap is a wiki aiming to build a freely available, world-wide streetmap.
Freedesktop.org is hosting a project called geoclue
that aims to provide a location service layer for all D-Bus-using
applications. It can use gpsd as a source for location
info.
Other GPSDs
There used to be three Linux-based forks of gpsd in the
wild, but this GPSD project reabsorbed one and the other two are now
defunct for unrelated reasons. You can read a brief history of the gpsd project if
you are curious.
There was a project called gps3d that ships a gpsd
with similar goals to ours, but which appears to be an independent
development. There haven't been any releases since early 2002. Their
website is archived at
the Internet Archive.
There is a gpsd-like hack hosted under Microsoft
Windows. It provides gpsd service from data in netstumbler under
win32. This way programs such as JiGLE can still get GPS data from
netstumbler. This program is not genetically related to
gpsd.
gpsfeed+ is a program that simulates the output of a GPS in motion, and can be used for testing GPS-aware applications.
We aren't Green Parrot Software Development, nor are we the Greenville Public School District nor the Greater Peoria Sanitary District, nor even the Greater Portland Soccer District, nor the Green Party of San Diego, nor do we have anything to do with the General Product Safety Directive, the Guiding Principles of Sustainable Design, nor the Glatt Plagiarism Self-Detection Program.