Open Source Map

An embedded map is rarely free for long: the moment your traffic grows, the per-view and per-request meter on hosted tiles, geocoding, and routing turns a small feature into a bill that tracks your own success, and the underlying map data stays something you rent rather than hold. A real deployment is also several parts, not one, since rendering, tile serving, search, and directions are separate problems with separate operational costs. The open source stack here runs on open OpenStreetMap data on infrastructure you control, so you generate your own tiles and resolve your own addresses without a quota or per-lookup charge between your users and the world the map draws.

11 mapsUpdated July 2026
Showing 1-9 of 11

Our picks

A working map is usually four jobs, so these picks cover the core roles you assemble rather than a single winner.

Browser map renderer: MapLibre GL JS MapLibre GL JS renders interactive vector tile maps in the browser on the GPU through WebGL, so panning, zooming, rotating, and tilting stay smooth even with dense data. It styles maps from a JSON style sheet, supports 3D terrain and custom layers, and ships React and Angular bindings, making it the rendering core most web maps start from.

Planet-scale tile generation: Planetiler Planetiler builds vector tilesets from OpenStreetMap and other sources on the command line, fast and memory-efficient enough to generate a map of the world in a few hours on a single machine with no intermediate database. It reads formats from OSM PBF to GeoParquet and writes MBTiles or PMTiles that TileServer GL or Martin can serve.

Geocoding and address search: Nominatim Nominatim is the geocoder behind the search box on OpenStreetMap's own site. It turns place names and addresses into coordinates and reverse-geocodes a point back into a readable address, running on your server by importing an OSM extract or the full planet into PostgreSQL and answering queries over HTTP.

Routing and directions: OSRM OSRM is a routing engine for OpenStreetMap road networks that solves route planning, travel-time matrices, nearest-road lookup, map matching of noisy GPS traces, and trip ordering. It exposes these over an HTTP API, C++ library, and Node.js wrapper, and ready-made Docker images make it quick to stand up.

Assembling a map stack that fits the job

A map is never one package here; it is a stack you assemble, and naming the job first tells you which pieces you need. A styled basemap needs a renderer and a tile source: MapLibre GL JS draws vector tiles in the browser, MapLibre Native does the same inside mobile and desktop apps, and tiles come from a generator like Planetiler or OpenMapTiles served by TileServer GL or Martin. A custom data viewer adds your own layers on top. A navigation product is a different beast again, because search and directions become their own services rather than properties of the map you see.

Two decisions shape both cost and user experience. The first is the rendering path: raster tiles are simple to cache and serve but make every style change a regeneration job, while vector tiles push styling to the client for flexible, rotatable, relabel-able maps at the cost of renderer compatibility testing. The second is that search and routing are the hard parts, not add-ons. Geocoding is a separate service with its own indexes and language handling, which is why Nominatim, Pelias, and Photon exist apart from any renderer, and OSRM handles route planning and map matching over the road network. Test real queries and routes from your own domain before assuming commercial-grade results.

Hosting and data governance deserve first-class attention. Public map traffic can create heavy bandwidth and storage costs, especially if you pre-render many zoom levels or ship offline downloads, and location queries, route requests, and map clicks can quietly reveal sensitive behavior. Favor standard tile formats such as MBTiles and PMTiles, portable style sheets, and documented data schemas, so you can change renderers, move hosting, or rebuild indexes without redrawing every layer from scratch.

Related categories

Frequently asked questions

Is an open source map a basemap, an app, or a library?+

It can be any of them, so define the job before comparing options. MapLibre GL JS and MapLibre Native are rendering libraries you embed. TileServer GL and Martin serve tiles. Planetiler and OpenMapTiles generate them. Nominatim, Pelias, and Photon handle search, and OSRM handles routing. A serious deployment usually combines several of these components rather than expecting one package to do everything well.

Should we choose vector tiles or raster tiles?+

Vector tiles win when you need client-side styling, smooth rotation, on-the-fly language changes, or selective layer visibility, which is what MapLibre GL JS and MapLibre Native render. Raster tiles are easier to serve and cache because the server sends finished images. The tradeoff is that vector stacks demand more from the client and careful renderer testing, while raster stacks make style changes slower because tiles must be regenerated or invalidated.

How do search and geocoding fit into a map stack?+

Geocoding is a separate service, not a built-in property of the visual map. It needs normalized address data, indexes, language handling, and ranking rules, and reverse geocoding differs from forward search. Nominatim indexes OpenStreetMap into PostgreSQL, Pelias runs on Elasticsearch with pluggable importers, and Photon adds search-as-you-type with typo tolerance. If users expect commercial-grade place search, test real queries, since rural addresses and local languages are common failure points.

What should we expect from routing and turn-by-turn directions?+

Routing quality depends on data, road restrictions, profiles, and update frequency, and a walking, bike, truck, and car route each need different assumptions. OSRM handles route planning, map matching of noisy GPS traces, travel-time matrices, and nearest-road lookup over OpenStreetMap data. Turn-by-turn also needs readable instructions and rerouting. If the map supports logistics, test edge cases like private roads, ferries, and time-based restrictions before trusting it.

What map data license issues should we check?+

Map software and map data are licensed separately. Most tools here build on OpenStreetMap, whose data carries share-alike and attribution terms distinct from the code's BSD, MIT, or Apache license. OpenMapTiles additionally requires visible credit for maps derived from its schema. Check attribution rules, redistribution limits, and whether derived datasets must be published, especially if you combine public data with private customer locations or sell reports.

Is offline map support realistic?+

Yes, but it changes the design. You need a packaging format, region selection, an update strategy, and storage limits, and offline routing and search require local indexes rather than cached images. MapLibre Native is built to render inside apps where offline use is common, and PMTiles or MBTiles archives package a region cleanly. Plan for partial downloads, interrupted updates, and a way to remove stale map packages.

When should we self-host map tiles instead of using a hosted provider?+

Self-host when you need predictable availability, private usage logs, custom styling, restricted layers, or control over update timing. It is less worthwhile for a light, low-traffic map background. The hidden work is keeping tiles fresh without overwhelming the renderer or cache: Planetiler can build a planet-scale tileset on one machine in hours, and Martin or TileServer GL then serve MBTiles or PMTiles to your clients.