Home / Blog / Protomaps: Self-hosting map tiles has gotten cheap and easy
Tech News

Protomaps: Self-hosting map tiles has gotten cheap and easy

Self-hosting a 139GB global map archive with PMTiles on Bunny.net costs roughly $5 per month, undercutting Mapbox by up to 100x through HTTP Range requests.

By Dillip Chowdary • Nov 15, 2026 • Source: bruceroettgers.eu

Protomaps: Self-hosting map tiles has gotten cheap and easy
Illustration · Pexels

At a glance

Product
Protomaps PMTiles
World file size
139GB single archive
Bandwidth rate
$0.01 per GB to Europe and North America
Storage fee
$5 monthly for 139GB at 5x replication
Commercial rate
$5 per 1k loads on Mapbox
Download limit
10kB/s throttle after 10MB in single request

Software developer Bruce Roettgers published an implementation breakdown documenting how developers can self-host global vector map tiles for five dollars per month using the open-source Protomaps ecosystem. According to bruceroettgers.eu's report, hosting map data on commodity cloud storage avoids the steep volume cliffs of proprietary map platforms. The approach relies on PMTiles, a single-file archive format that serves geographic tiles directly over HTTP Range requests without requiring dedicated backend tile servers.

This technical breakdown analyzes tile extraction methods, cloud storage hosting economics, edge caching setup, and frontend client integration for engineering teams deploying interactive maps. It provides web developers and independent product creators with a sustainable alternative to commercial mapping platforms that charge escalating rates per impression. Readers will discover the concrete commands, storage architecture, and network configurations required to run planet-scale maps while preserving strict cost predictability.

01Daily builds and bounding box extracts

Generating map datasets begins with obtaining precompiled geographic extracts distributed through the Protomaps build service. Engineering teams seeking full global coverage can download the latest daily build archive directly from the project build repository. This single prepackaged archive contains complete planetary mapping information structured for immediate query resolution across standard geographic coordinates.

Projects that do not require global coverage can isolate target areas using the Protomaps command line interface. The command line utility allows engineers to define explicit bounding boxes or restrict compilation to selected zoom levels. Filtering geographic boundaries creates substantially smaller archive files that reduce transfer times and diminish recurring storage fees.

02Edge storage pricing and bandwidth economics

Deploying map tiles across European Union provider Bunny.net provides global storage paired with content delivery edge caching. Edge storage pricing ranges from one cent per gigabyte monthly without replication to five and a half cents per gigabyte monthly for maximum planetary distribution. Network bandwidth across Europe and North America costs one cent per gigabyte on standard tiers and half a cent on high volume routes.

Service modelStorage expenseTransfer feeLoad calculation
Mapbox APIZero hosting maintenanceTiered visitor pricing$5.00 per 1k loads
Bunny.net PMTiles$5.00 monthly for 139GB$0.01 per GB transfer$0.05 per 1k loads

Hosting the full 139 gigabyte planetary map with five-fold replication costs five dollars per month in storage. A desktop browser loading a European map and zooming into a city transfers five megabytes, costing five thousandths of a cent. At five cents per thousand visits, self-hosting can run one hundred times cheaper than Mapbox flat visitor fees.

03Storage zone streaming with rclone tooling

Advertisement

Tech Pulse Daily

Get tomorrow's pulse first

Join engineers who read Tech Pulse before stand-up. Free, weekday mornings.

Uploading planetary archives directly through web interfaces presents reliability challenges when transferring hundred-gigabyte assets. Standard web application programming interface uploads frequently experience connection timeouts after fifteen minutes of sustained transmission. Configuring storage zones with Amazon S3 compatibility enables resilient multipart chunk streaming over standard command line utilities.

  1. Zone provisioning Create an edge storage zone with Amazon S3 API compatibility enabled in the provider console.
  2. Tooling configuration Register storage access credentials and regional S3 endpoints inside the local rclone configuration file.
  3. Stream transfer Execute the copyurl command with 256 megabyte chunk sizes using an active tmux session.

Transferring archives directly from public build mirrors into cloud storage bypasses local network bandwidth bottlenecks entirely. Running rclone inside terminal multiplexers or lightweight virtual servers prevents residential connection drops from aborting large transfers. Configuring chunk sizes of 256 megabytes optimizes transfer throughput while providing continuous progress reporting across multi-hour upload operations.

04Pull zone delivery and abuse limits

Connecting an edge storage zone to a fronting pull delivery zone establishes planetary caching across edge points of presence. Network operators must configure allowed referrer security rules under general settings to prevent third-party domains from hotlinking tile assets. Restricting domain access protects site owners from unbudgeted bandwidth consumption generated by external scrapers and unauthorized web properties.

Defending pull zones against abusive downloads prevents malicious scrapers from pulling entire 139 gigabyte archives. Administrators can limit download speeds to ten kilobytes per second once single requests exceed ten megabytes under network settings. Enabling large object delivery optimizations ensures edge nodes cache segmented byte range responses while request rate caps block rapid automated scraping.

Note: Bunny.net drops the last octet of visitor IP addresses by default across its network edge. Any personal data deliberately transmitted through CDN endpoints remains subject to standard European Union data processing rules. This safeguard operates automatically across all edge points of presence without manual scripting.

05MapLibre integration and client style wiring

Displaying self-hosted vector tiles inside web browsers requires integrating client-side rendering engines such as MapLibre GL. Developers install the pmtiles package from the npm registry to register custom protocol handlers inside application code. Registering the protocol enables the client map renderer to request specific binary byte segments directly from content delivery networks.

Configuring rendering libraries involves pairing the protocol handler with custom cartographic style definitions and remote vector tile endpoints. MapLibre decodes geographic geometry and label data in real time using local client graphics hardware. Once loaded, client applications pan and zoom across geographic features without executing server queries against backend database clusters.

Frequently asked questions

How does PMTiles serve map data without a dedicated server?

PMTiles stores vector tiles inside a single file accessible via HTTP Range requests. Compatible content delivery networks cache these byte ranges directly at edge points of presence to fulfill client tile queries without custom application servers.

How much does self-hosting a global map cost on Bunny.net?

Storing the 139GB planetary map with five-continent replication costs roughly $5 monthly in storage. Outbound bandwidth costs $0.01 per gigabyte across Europe and North America, generating approximately $0.05 per thousand map visits.

How can administrators protect map storage zones from bandwidth abuse?

Administrators can restrict embedding via allowed referrers and enforce network speed limits that throttle downloads to 10kB/s after 10MB transfers. Pull zones can also set requests per second caps and monthly bandwidth thresholds.

Which frontend tools are used to display PMTiles in a web app?

Developers embed maps by installing the pmtiles npm package alongside the MapLibre GL rendering library. The package registers a custom protocol handler in MapLibre to stream binary tile ranges using standard vector style sheets.

Sources

Dillip Chowdary

Author

Dillip Chowdary

Writes Tech Bytes coverage of AI, engineering, and the tools that actually ship. Editor of Tech Pulse Daily.

Related on Tech Bytes

Advertisement

5-min tech signal

Weekday briefing for engineers who skip the noise.

No spam · Unsubscribe anytime

Advertisement

✈️ CareerPilot

Your AI job-search copilot

Match your resume against live Ashby, Greenhouse & Lever openings — fit scores, job-specific resume optimization and email alerts.

Find matching jobs →

Free Tools

Browse all tools →