ayonto  0%
digital solutions

Maps & operations · 5 min read

Self-hosted map server: when it pays off and when it doesn't

A map server of your own pays off when apps need maps offline, many devices load at the same time or several products share the same map. Then API keys, per-request costs and bans on pre-loading go away, but map builds and operations come with it. Ours is called tileco.re and has served Tactio since August 2026, and LeasePilot and BKF Manager are to get their maps from it too.

Marc

October 9, 2026 · AuthorMarc

Offline maps need a source that allows pre-loading

Tactio, our platform for tactical events, pre-loads terrain onto devices, because there's no signal in the woods. That takes a map source that allows it. OpenStreetMap's public tile servers aren't an option: they're run by volunteers, and their usage policy prohibits pre-loading entire areas and reserves the right to exclude commercial services.

You don't need a license from OpenStreetMap: the data may be copied and adapted, commercially too, as long as OpenStreetMap is credited. The obstacle is the infrastructure. The commercial map services we checked in August 2026 prohibited pre-loading, capped it per device or required an API key in every app. Google, for example, prohibits pre-fetching or bulk downloading tiles (section 3.2.3 of its terms of service).

Since then, the maps have come from our own server

Since August 7, Tactio's maps have come from our own server. Today it's called tileco.re (opens in a new tab) and covers Germany and its nine neighbors: around 12 GB of map data, as of August 2026.

Planetiler turns the OpenStreetMap data into vector tiles in the OpenMapTiles schema, TileServer GL serves them and renders raster images on demand, and a cache in front keeps whatever was requested once. Since late August, the web app and mobile apps have drawn the map themselves with MapLibre; for that, the server only delivers data.

What that brings: no API keys in the apps, no license fees, no per-request costs, and requests go to our own server instead of third-party map services. For an offline download of 10 × 10 km of forest and lakes in Brandenburg, we measured on October 8, 2026, each from zoom level 12: 0.9 MB as a vector map, around 30 MB as a raster map up to zoom level 17. So far, only the iPhone app downloads areas, still as raster up to zoom level 17 at most. Offline vector maps and area downloads on Android are still open.

The problems came after launch

The OSM Liberty map style ours builds on showed forest and meadow at a contrast of 1.03:1, practically one surface in the field. Ours has used the OpenStreetMap standard colors for them since August 7. That's when we noticed our own lines had too little contrast over forest. A dark casing around every line helped (10.3:1), not the obvious white halo (1.7:1).

In operation, the renderer for raster images holds on to memory: on August 21, the memory limit killed it, and the automatic restart covered it up. Since then, it restarts every night, in under a second. The cache is what makes it fast anyway: a tile requested before comes back in 1.1 instead of 330 milliseconds.

And one number was wrong. For raster up to zoom level 19, our docs gave 2.2 GB per 10 × 10 km, labeled as measured but calculated from an average across forest and city. Measured, it's 199 MB in the forest, because tiles there are nearly empty at high zoom levels.

A map server of your own doesn't pay off for every map

For Tactio, the decision was easy. In general, here's how we see it:

  • It pays off when maps must work offline, many devices load at once or per-request costs would grow with usage.
  • All the more when several products share the same map. Next, LeasePilot is to show locations in its fleet manager with it, and BKF Manager its training venues.
  • It doesn't pay off for a single directions map. A map server doesn't include address search or routing either; Tactio still looks up addresses via OpenStreetMap.
  • It doesn't pay off if nobody takes on operations. Map builds, updates, storage and restarts remain work; we plan a quarterly rebuild of the data.

What we take away

Pre-loading tips the scales, not price. If you need maps offline, read the map services' terms of service first. That's exactly where our decision was made.

Tiles alone don't make a map. Common styles load fonts and symbols from third-party servers out of the box, some with an API key. Both belong on your own server, and the attribution “© OpenMapTiles © OpenStreetMap contributors” belongs in the app itself, because nobody loads it in a dead zone. More about our map server is on Operations & hosting.

Sources

About the author

Marc

Founder & CEO at ayonto, responsible for development as well as operations and hosting.

In practice

  • Tactio – Multi-tenant SaaS for tactical simulation events — airsoft, paintball and MilSim with a live situation picture, our own vector maps, a scoring engine and on-site verification.

FAQ

Quick answers

Quick answers on “Self-hosted map server: when it pays off and when it doesn't”.

What does a self-hosted map server cost?

There are no license fees for OpenStreetMap data and no costs per map request. What remains is a server and working time: our map data for Germany and its nine neighbors takes up around 12 GB and sits on a server we operate anyway. On top of that come map builds, updates and operations.

May I store OpenStreetMap maps offline in my app?

The data, yes: the Open Database License allows it and requires attribution. You may not pre-load areas from OpenStreetMap's tile servers, though; their usage policy prohibits it. That takes your own server or a service that expressly allows it.

Which attribution belongs in the app?

For tiles in the OpenMapTiles schema, “© OpenMapTiles © OpenStreetMap contributors”, linked and stored in the app itself, not only in the map style from the server.

Guides

Keep reading

TassiloRicardo

Questions about your project?

Tell us what you have in mind – Tassilo and Ricardo will get back to you personally.

ayonto · Berlin-Lichtenberg