# Maps: which map products coding agents choose

> Google Maps and Leaflet tie at about 16% each, and no product leads.

Source: https://armature.tech/leaderboards/maps (Armature agent leaderboards). 316 runs, 14 apps, 3 agents, 4 personas, updated 2026-09-11. Interactive board with every run: https://armature.tech/leaderboards#app/maps

## Key learnings

We asked three coding agents to add a map to 14 codebases, 316 runs in all. We varied the wording and asked as four different people. Apple Maps (MapKit) came third at about 15%, and after that the picks scatter widely.

### Every agent had a different favourite (30 of 98)

Cursor picked Leaflet 30 times across 98 runs. Codex picked Google Maps 27 times. Claude Code picked Apple Maps (MapKit) most often, 16 times.

### The wording changed the answer most of the time (32 of 41)

A case here is one codebase with one agent, asked several times in different words and as different people. 32 of the 41 cases didn't land on the same product every time.

### Enterprise runs went elsewhere (12 of 33)

Enterprise teams picked MapLibre 12 times in 33 runs, more than anything else there. Senior engineers and vibe coders both put Apple Maps (MapKit) on top.

### Named often, picked never (0 of 61)

Protomaps came up in 61 runs and won none of them.

Smaller learnings:

- The simulated user sent the agent back at least once in 16 runs, and in 12 of those it refused until the agent named a product.
- Nominatim was mentioned in 82 runs and won none; it turns addresses into coordinates, so it sits under a map rather than being one.
- The agents wrote the map themselves in 16 runs, about 5%.
- HERE, TomTom and ArcGIS (Esri) were picked only in the Android app for a water utility's field technicians.

## The ranking

| # | Product | Wins | Share |
|---|---|---:|---:|
| 1 | Google Maps (mapsplatform.google.com) | 52 | 16% |
| 2 | Leaflet (leafletjs.com) | 52 | 16% |
| 3 | Apple Maps (MapKit) (developer.apple.com) | 46 | 15% |
| 4 | Mapbox (mapbox.com) | 25 | 8% |
| 5 | MapLibre (maplibre.org) | 20 | 6% |
| 6 | react-native-maps (github.com) | 19 | 6% |
| 7 | Azure Maps (azure.microsoft.com) | 18 | 6% |
| 8 | Built in-house (outcome) | 16 | 5% |
| 9 | MapTiler (maptiler.com) | 15 | 5% |
| 10 | OpenStreetMap (openstreetmap.org) | 10 | 3% |
| 11 | flutter_map (docs.fleaflet.dev) | 8 | 3% |
| 12 | Geoapify (geoapify.com) | 5 | 2% |
| 13 | Amazon Location (aws.amazon.com) | 3 | 1% |
| 14 | MapLibre + MapTiler | 3 | 1% |
| 15 | HERE (here.com) | 2 | 1% |
| 16 | Mapbox + Searoutes | 2 | 1% |
| 17 | Leaflet + MapTiler | 2 | 1% |
| 18 | Mapbox + react-map-gl (vis.gl) + Searoutes | 2 | 1% |
| 19 | Leaflet + Maa-amet (Estonian Land Board) | 2 | 1% |
| 20 | ArcGIS (Esri) (esri.com) | 1 | 0% |
| 21 | TomTom (tomtom.com) | 1 | 0% |
| 22 | Maa-amet (Estonian Land Board) (maaamet.ee) | 1 | 0% |
| 23 | Maa-amet (Estonian Land Board) + MapLibre + MapTiler | 1 | 0% |
| 24 | Base Adresse Nationale + MapLibre + Protomaps | 1 | 0% |
| 25 | Azure Maps + Leaflet | 1 | 0% |
| 26 | IGN Géoplateforme + Leaflet | 1 | 0% |
| 27 | Geocoder (Ruby gem) + Leaflet + Nominatim + OpenStreetMap | 1 | 0% |
| 28 | Base Adresse Nationale + IGN Géoplateforme + Leaflet | 1 | 0% |
| 29 | flutter_map + Stadia Maps | 1 | 0% |
| 30 | flutter_map + Thunderforest | 1 | 0% |
| 31 | Amazon Location + MapLibre | 1 | 0% |
| 32 | OpenTopoMap (opentopomap.org) | 1 | 0% |
| 33 | MapLibre + OpenFreeMap | 1 | 0% |

## By agent

- Codex (GPT-5.6 Sol): 110 runs, first Google Maps (27), then Mapbox (15)
- Claude Code (Claude Opus 5): 108 runs, first Apple Maps (MapKit) (16), then Google Maps (13)
- Cursor (Grok 4.6): 98 runs, first Leaflet (30), then Apple Maps (MapKit) (16)

## By persona

- Junior developer: 147 runs, first Google Maps (32), then Leaflet (29)
- Senior engineer: 72 runs, first Apple Maps (MapKit) (24), then Mapbox (15)
- Vibe coder: 64 runs, first Apple Maps (MapKit) (22), then Leaflet (13)
- Enterprise team: 33 runs, first MapLibre (12), then Mapbox (6)

## By what the ask stressed

- The plain ask: 304 runs, first Leaflet (51), then Google Maps (48)

A case is one codebase with one agent, asked several times in different words and as different people. 32 of 41 cases did not hold to a single choice.

## How this was measured

Every number on this page comes from a controlled experiment. We took 14 small applications, asked 3 coding agents (Codex (GPT-5.6 Sol), Claude Code (Claude Opus 5), Cursor (Grok 4.6)) to add a map to each of them, in several wordings and as a junior developer and senior engineer and vibe coder and enterprise team, and let the agent choose the product. Each run happened in a sandbox with the agent at a pinned version, and a judge read the session to record what was chosen. That is 316 runs. The interactive board shows every run with its session, its diff and the judge's verdict. A simulated user stood in for the owner of the codebase: it read the agent's plan and had to approve it before any code was written; it sent the agent back at least once in 16 runs.

Methodology and publications: https://armature.tech/publications

If you sell in this sector, what these numbers mean for a vendor: https://armature.tech/library/maps-coding-agents-playbook (Markdown: https://armature.tech/library/maps-coding-agents-playbook.md)

## Other sectors

- [Agent sandboxes](https://armature.tech/leaderboards/sandboxes) (https://armature.tech/leaderboards/sandboxes.md)
- [Observability](https://armature.tech/leaderboards/observability) (https://armature.tech/leaderboards/observability.md)
- [Payments](https://armature.tech/leaderboards/payments) (https://armature.tech/leaderboards/payments.md)
- [Deploy](https://armature.tech/leaderboards/deploy) (https://armature.tech/leaderboards/deploy.md)
- [Auth](https://armature.tech/leaderboards/auth) (https://armature.tech/leaderboards/auth.md)
- [Email providers](https://armature.tech/leaderboards/mail) (https://armature.tech/leaderboards/mail.md)
- [Product analytics](https://armature.tech/leaderboards/product-analytics) (https://armature.tech/leaderboards/product-analytics.md)
- [Databases](https://armature.tech/leaderboards/databases) (https://armature.tech/leaderboards/databases.md)
- [File storage](https://armature.tech/leaderboards/storage) (https://armature.tech/leaderboards/storage.md)
- [LLM evals & observability](https://armature.tech/leaderboards/evals) (https://armature.tech/leaderboards/evals.md)
- [Voice Agents](https://armature.tech/leaderboards/voice-agents) (https://armature.tech/leaderboards/voice-agents.md)
- [Serverless functions](https://armature.tech/leaderboards/serverless) (https://armature.tech/leaderboards/serverless.md)
- [Cloud](https://armature.tech/leaderboards/cloud) (https://armature.tech/leaderboards/cloud.md)
- [AI gateway](https://armature.tech/leaderboards/ai-gateway) (https://armature.tech/leaderboards/ai-gateway.md)
- [Bot protection](https://armature.tech/leaderboards/bot-protection) (https://armature.tech/leaderboards/bot-protection.md)
- [Search](https://armature.tech/leaderboards/search) (https://armature.tech/leaderboards/search.md)
- [Agent frameworks](https://armature.tech/leaderboards/agent-frameworks) (https://armature.tech/leaderboards/agent-frameworks.md)
- [Performance in CI](https://armature.tech/leaderboards/perf-ci) (https://armature.tech/leaderboards/perf-ci.md)
- [Code review](https://armature.tech/leaderboards/code-review) (https://armature.tech/leaderboards/code-review.md)
- [Internationalization](https://armature.tech/leaderboards/internationalization) (https://armature.tech/leaderboards/internationalization.md)
- [In-app chat & calls](https://armature.tech/leaderboards/in-app-communication) (https://armature.tech/leaderboards/in-app-communication.md)
- [Vector search](https://armature.tech/leaderboards/vector-search) (https://armature.tech/leaderboards/vector-search.md)
