TileServer
Self-hosted vector tile basemaps from PMTiles. No third-party tile service required.
Maps Without Dependencies
Every mapping application needs a basemap — the background layer of roads, coastlines, and place names that gives context to whatever data you’re displaying on top. Most applications use a commercial tile service: Mapbox, Google Maps, Stadia. These services are convenient but they’re dependencies. They can change pricing, rate-limit your application, deprecate styles, or go offline. Your mapping tool works until the tile service says it doesn’t.
TileServer removes that dependency. It serves vector basemap tiles from a single PMTiles file hosted on Azure Blob Storage. No tile server process, no API keys, no rate limits. The browser fetches tiles directly from cloud storage using HTTP range requests — the PMTiles format makes this possible by indexing every tile’s position in the file. The result: self-hosted basemaps that work exactly like a tile service but belong entirely to derilinx-labs.
Every mapping project in the derilinx-labs portfolio — February, Oireachtas Viz, the GeoSPARQL Endpoint’s demo map — uses TileServer for its basemap. One source of truth, consistent styling, zero external dependencies.
Your Own Wallpaper
Imagine every time you wanted to hang a picture on the wall, you had to rent wallpaper from someone else — and they could change the pattern or put the price up whenever they liked. TileServer is like buying your own wallpaper and keeping it in your cupboard. Any time you need a map background, you use yours. It always looks the same, it never costs more, and nobody else can take it away.
Cloud-Native Tile Serving
1. PMTiles
The basemap is a single PMTiles file — a cloud-optimised archive containing every vector tile for Europe, indexed so any tile can be fetched with a single HTTP range request. No tile server process needed. The file lives on Azure Blob Storage with public read access.
2. MapLibre integration
The PMTiles JavaScript library registers a custom protocol with MapLibre GL JS. When MapLibre requests a tile, the protocol handler translates the request into an HTTP range request against the PMTiles file. The browser does the fetching; no server-side code runs.
3. Map styles
Two hand-crafted styles — dark and light — define how vector tile data renders. Each style specifies 40+ layers: landcover (forest, grassland, farmland), water, parks, roads (highway to minor), buildings, boundaries, and place labels (countries, cities, towns). Colours, line widths, and label sizes are zoom-dependent.
4. Supporting assets
Fonts (Noto Sans Regular and Bold as PBF glyph ranges), sprites (map icons), and style JSON files are all hosted alongside the PMTiles file on Azure Blob Storage. Everything the map needs is self-hosted.
5. Integration module
An integration.js module provides reusable functions: createMap(), switchStyle(), toggleStyle(). Any derilinx-labs project can import the module and have a working basemap in three lines of code.
Infrastructure for Maps
February basemap
February loads dozens of geospatial datasets from open data portals and overlays them on a map. The basemap must be reliable, fast, and visually clean enough not to compete with the data layers. TileServer provides exactly that — a neutral, self-hosted background that never changes unless derilinx-labs changes it.
Oireachtas constituency maps
Oireachtas Viz may add constituency boundary visualisations. The basemap provides the geographic context — county boundaries, towns, roads — so users can orient themselves when exploring political geography.
Offline and air-gapped deployments
For clients who cannot use third-party services (government networks, secure environments), TileServer means the mapping application works without any external network calls for basemap tiles. The PMTiles file can be hosted on a local server or CDN.
Under the Bonnet
Tile format
PMTiles v3 — a single-file, cloud-native tile archive. Vector tiles in Mapbox Vector Tile (MVT) format. Protomaps source data derived from OpenStreetMap. File size: approximately 8 GB for Europe.
Hosting
Azure Blob Storage with public read access. Tiles, styles, fonts, and sprites all served from the same container. No server-side code — static file hosting only. HTTP range requests provide random access into the PMTiles archive.
Client library
MapLibre GL JS v4+ with pmtiles v3+ protocol registration. The integration.js module exports: createMap(options), switchStyle(map, styleName), toggleStyle(map), buildInlineStyle(styleName).
Styles
Two styles: dark and light. Both define 40+ layers covering: background, earth, landcover (forest, grassland, scrub, farmland, barren), landuse (park, residential, industrial, commercial, hospital, school, cemetery), water, waterway, buildings, roads (highway, major, medium, minor), boundaries (country, region), and place labels (country, city, town). Zoom-dependent sizing and opacity throughout.
Fonts
Noto Sans Regular and Bold. Served as PBF glyph range files ({fontstack}/{range}.pbf). Self-hosted on Azure alongside the tiles.
Attribution
© OpenStreetMap contributors. Displayed via MapLibre’s attribution control.