// the find
evansiroky/timezone-boundary-builder
A tool to extract data from Open Street Map (OSM) to build the boundaries of the world's timezones.
timezone-boundary-builder extracts timezone boundary polygons from OpenStreetMap and publishes them as GeoJSON and shapefiles, keyed to IANA timezone identifiers. It's the de facto source dataset for a dozen GPS-to-timezone lookup libraries across most languages. If you need to answer 'what timezone is this lat/lon in?', this is the data you're building on top of.
The three timekeeping variants (comprehensive, same-since-1970, same-since-now) are a thoughtful design — most projects only need the 1970 variant and the smaller polygon set is a real win for storage and lookup speed. The downstream library ecosystem is genuinely impressive: Go, Rust, Python, .NET, Java, browser JS all have maintained wrappers, so you can consume the data without touching the builder at all. The release cadence is tied to the IANA timezone database, which is the right dependency — you get a new build when timezone rules actually change, not on some arbitrary schedule. Including input-data.zip in releases so you can reproduce the exact build is solid practice that most data projects skip.
The script is explicitly described as 'unstable' and only verified on macOS with Node 10 — that's honest, but it means building from source is genuinely unreliable if OSM data changes unexpectedly, which it does. The entire pipeline is a single index.js file with no tests; the validation logic is baked in and skippable with a flag, which is how bugs ship. Ocean timezone handling has a longstanding quirk with the POSIX sign inversion that catches people out (Etc/GMT+4 is west, not east), and while the README documents it, the data itself doesn't protect you. Requires 8GB of heap to run, which rules out CI on anything cheap.