finds.dev← search

// the find

AeroRust/nmea

★ 107 · Rust · NOASSERTION · updated Jun 2026

NMEA 0183 - for communication between marine electronics such as echo sounder, sonars, anemometer, gyrocompass, autopilot, GNSS receivers and many other types of instruments. Defined and controlled by the National Marine Electronics Association (NMEA)

A Rust parser for NMEA 0183 sentences — the protocol that GPS receivers, depth sounders, anemometers, and other marine/navigation hardware use to talk to each other. Works on no_std targets without alloc, so it's genuinely usable on embedded hardware, not just as a desktop utility. For anyone writing firmware that reads a GPS module over UART, this is the obvious starting point.

no_std + no alloc support is real and first-class, not an afterthought — you can drop this into a bare-metal Cortex-M project without modification. Uses nom for parsing, which means each sentence parser is composable and testable in isolation. unsafe-free crate with deny(unsafe_code) enforced at compile time. Feature flags per sentence type let you trim binary size on constrained targets.

Only 30 or so sentences supported out of hundreds in the NMEA 0183 spec — if you need AIS (VDM/VDO) or proprietary sentences beyond Garmin altitude, you're writing your own. The stateful Nmea struct only accepts GNSS sentences; everything else requires the lower-level parse_str() API, which is an odd split that will trip up new users. 107 stars and 62 forks after what appears to be years of development suggests a narrow user base and potentially slow maintenance. No async support — if you're reading from an async serial port, you're buffering and polling yourself.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →