A pure Go library for parsing NMEA 0183 sentences from GPS and marine navigation devices.
go-nmea is a Go library for parsing NMEA 0183 sentences, which are standard data strings emitted by GPS receivers, AIS systems, and other marine navigation equipment. It converts raw NMEA text into structured Go types, allowing developers to extract location, speed, heading, and other sensor data for applications in tracking, logging, or real-time navigation systems.
Go developers building applications that interface with GPS devices, marine electronics, or any hardware outputting NMEA 0183 data, such as fleet tracking systems, marine instrumentation software, or IoT sensor platforms.
It offers a pure Go implementation with no external dependencies, comprehensive support for standard and proprietary sentences, and an extensible architecture for custom formats, making it a robust and maintainable choice for parsing NMEA data in Go ecosystems.
A NMEA parser library in pure Go
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Parses over 100 standard NMEA 0183 sentence types including GGA, RMC, and AIS messages, with a detailed README table referencing specifications for each.
Allows registration of custom parsers for unsupported or proprietary sentences, as shown in the custom parsing example, enabling immediate unblocking.
Uses nullable types (nmea.Int64 and nmea.Float64) to distinguish undefined values from actual zeros, preventing data misinterpretation in sentences like VTG.
Includes helpers like FormatGPS and FormatDMS for coordinate formatting, simplifying presentation of parsed navigation data.
The README table lists many NMEA sentences without links (e.g., ABK, ACA), indicating they are not implemented, forcing users to write custom parsers for missing types.
Adding support for new sentence types requires implementing and registering parsers manually, which can be error-prone and increases development overhead compared to drop-in solutions.
Only handles NMEA 2000 via proprietary sentences like PNG and PCDIN, which are workarounds and may not cover all use cases for modern marine electronics.