FairwayMapper
| FairwayMapper | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Author: | FairwayMapper/fairwaymapper/graphs/contributors GitHub | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| License: | TBD (free of charge) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Platform: | Web | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Status: | Active | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Version: | 1.0 [1] (2026-07-10) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Languages: | English and multiple languages
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Website: | fairwaymapper.com | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Source code: | FairwayMapper/fairwaymapper GitHub | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Programming language: | JavaScript | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
FairwayMapper is a focused editor for golf courses. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
FairwayMapper is an in-browser app used to edit the OpenStreetMap, with a specific intent and focus on the parent Tag:leisure=golf_course and any commonly tagged elements held within the facility boundary.
The app aims to abstract many of the tagging norms allowing inexperienced mappers to get started mapping their favourite golf courses accurately and quickly.
How to use it
Community Chats
Technical
Frontend A single-page React application built with Vite and served as a static site. It ships as a Progressive Web App with a service-worker cache layer (Workbox) and is localized into 12 languages via react-i18next.
The 2D editor renders with MapLibre GL and uses Mapbox GL Draw extended with custom drawing modes (snapping, follow-line tracing, shape tools) to trace golf features — fairways, greens, tees, bunkers, water and lateral water hazards, roughs, holes and centre lines. Satellite/aerial imagery is used as the tracing basemap.
A separate 3D course viewer is built on Three.js. It composites OSM golf geometry with elevation data into an interactive terrain model, letting mappers visualize a course and spot what's still missing.
Backend: Server-side services run on Supabase: a PostgreSQL database, authentication, Deno-based Edge Functions, and Realtime subscriptions. Postgres holds application data only — cached course/club metadata, per-user edit drafts, a publish log, achievements and precomputed statistics — never as a substitute for OSM.
Edge Functions handle asynchronous work such as change notifications, club-identity reconciliation, scheduled maintenance jobs, and scorecard/assistant helpers.
Read traffic for golf data is served by a self-hosted, planet-wide Overpass API mirror running behind an OpenResty edge and fronted by CDN protection at api.fairwaymapper.com. The mirror powers the app and is also offered to the wider community, with free API keys for active OSM contributors.
OSM Authentication & Integration: Users sign in with their OpenStreetMap account via OAuth 2.0.
Editing affordances are gated behind that sign-in, and all writes go to the main OSM API (v0.6) under the signed-in user's account — FairwayMapper never edits on a mapper's behalf, so attribution and edit history stay entirely with the contributor.
Every changeset is tagged created_by=FairwayMapper.com and host=<origin> so edits are transparent and easy to review. The client estimates the user's remaining OSM API upload budget, runs a pre-flight check before publishing, and backs off gracefully on rate-limit responses.
Data pipeline: On the read path, golf features are queried from the Overpass mirror and assembled client-side into the 2D and 3D scenes. On the write path, edits are staged as drafts in Postgres and then published as an osmChange changeset to the OSM API under the user's account, with each publish recorded in a per-course log.
Because the Overpass mirror ingests OpenStreetMap minutely delay, the app compares a course's most recent publish time against the mirror's data timestamp and briefly gates re-editing until the mirror catches up — avoiding edits against stale data or accidental duplication.
A club-identity reconciliation step keeps app records aligned with the correct OSM element, including upgrading node-only entries to their containing course polygon via point-in-polygon matching. Separately, a periodic aggregation over the mirror produces the global golf-mapping statistics (course counts, feature and tag completeness) shown on the public stats page, and published changesets are surfaced to the community via a notification feed.
Contributions are very warmly welcomed. Currently User:HuggeK and others are contributing.
Project history
It was announced on the Community forum, FairwayMapper - introducing golfers to mapping! that the development had started, April 3 2026.
Alpha and beta
The history and flow of the Alpha phase including community feedback, response and iteration are all documented on the aforementioned community forum post.
Version 1 onward
On July 10, 2026 version 1.0 was released.
Press coverage
Further reading
See also
- Comparison of editors
- iD – default editor (online) on osm.org
- JOSM - OpenStreetMap desktop editor written in Java
- Rapid - A fork of iD sponsored by Meta
