tilegroxy Docs
The archives are dated releases. Check the Overture documentation for the current one and update the date in each URL.

Configuration

  • YAML

  • JSON

server:
  production: false
  cors:
    enabled: true
    wildcardorigin: true (1)
  tilejson:
    enabled: true (2)
client:
  maxlength: 52428800 (3)
cache:
  name: memory
  maxsize: 10000
  ttl: 86400
layers:
  - id: overture_base
    provider:
      name: pmtiles
      url: https://overturemaps-extras-us-west-2.s3.us-west-2.amazonaws.com/tiles/2026-08-19.0/base.pmtiles (4)
  - id: overture_transportation
    provider:
      name: pmtiles
      url: https://overturemaps-extras-us-west-2.s3.us-west-2.amazonaws.com/tiles/2026-08-19.0/transportation.pmtiles
  - id: overture_buildings
    provider:
      name: pmtiles
      url: https://overturemaps-extras-us-west-2.s3.us-west-2.amazonaws.com/tiles/2026-08-19.0/buildings.pmtiles
  - id: overture_basemap
    provider:
      name: compositemvt (5)
      providers:
        - name: fallback (6)
          primary:
            name: ref (7)
            layer: overture_base
          secondary:
            name: static
            image: embedded:empty.mvt (8)
        - name: fallback
          primary:
            name: ref
            layer: overture_transportation
          secondary:
            name: static
            image: embedded:empty.mvt
        - name: fallback
          primary:
            name: ref
            layer: overture_buildings
          secondary:
            name: static
            image: embedded:empty.mvt
1 Any website can use these tiles, which suits public data. See CORS to restrict it.
2 Serves a TileJSON document for each layer, such as /tiles/overture_basemap.json. MapLibre can be pointed straight at it. See TileJSON.
3 Dense tiles, such as buildings in a city center, decompress to more than the 10 MiB default. This raises the limit to 50 MiB. Don’t raise it further than you need, as it bounds how much memory a single tile can take.
4 Zoom range, bounds, and vector_layers come from the archive’s header and metadata, so the layer doesn’t need to declare them. See PMTiles.
5 Merges the layers inside each child’s tile into one tile without changing them. See Composite MVT.
6 A theme with no tile at a location returns an error. Without the fallback, one empty theme would fail the whole composite tile.
7 Reuses the theme layers defined above rather than repeating their URLs. Each theme is cached individually as well as the combined tile.
8 A built-in, valid vector tile with no layers in it.
{
  "server": {
    "production": false,
    "cors": {
      "enabled": true,
      "wildcardorigin": true (1)
    },
    "tilejson": { (2)
      "enabled": true
    }
  },
  "client": {
    "maxlength": 52428800 (3)
  },
  "cache": {
    "name": "memory",
    "maxsize": 10000,
    "ttl": 86400
  },
  "layers": [
    {
      "id": "overture_base",
      "provider": {
        "name": "pmtiles",
        "url": "https://overturemaps-extras-us-west-2.s3.us-west-2.amazonaws.com/tiles/2026-08-19.0/base.pmtiles" (4)
      }
    },
    {
      "id": "overture_transportation",
      "provider": {
        "name": "pmtiles",
        "url": "https://overturemaps-extras-us-west-2.s3.us-west-2.amazonaws.com/tiles/2026-08-19.0/transportation.pmtiles"
      }
    },
    {
      "id": "overture_buildings",
      "provider": {
        "name": "pmtiles",
        "url": "https://overturemaps-extras-us-west-2.s3.us-west-2.amazonaws.com/tiles/2026-08-19.0/buildings.pmtiles"
      }
    },
    {
      "id": "overture_basemap",
      "provider": {
        "name": "compositemvt", (5)
        "providers": [
          {
            "name": "fallback", (6)
            "primary": {
              "name": "ref", (7)
              "layer": "overture_base"
            },
            "secondary": {
              "name": "static",
              "image": "embedded:empty.mvt" (8)
            }
          },
          {
            "name": "fallback",
            "primary": {
              "name": "ref",
              "layer": "overture_transportation"
            },
            "secondary": {
              "name": "static",
              "image": "embedded:empty.mvt"
            }
          },
          {
            "name": "fallback",
            "primary": {
              "name": "ref",
              "layer": "overture_buildings"
            },
            "secondary": {
              "name": "static",
              "image": "embedded:empty.mvt"
            }
          }
        ]
      }
    }
  ]
}
1 Any website can use these tiles, which suits public data. See CORS to restrict it.
2 Serves a TileJSON document for each layer, such as /tiles/overture_basemap.json. MapLibre can be pointed straight at it. See TileJSON.
3 Dense tiles, such as buildings in a city center, decompress to more than the 10 MiB default. This raises the limit to 50 MiB. Don’t raise it further than you need, as it bounds how much memory a single tile can take.
4 Zoom range, bounds, and vector_layers come from the archive’s header and metadata, so the layer doesn’t need to declare them. See PMTiles.
5 Merges the layers inside each child’s tile into one tile without changing them. See Composite MVT.
6 A theme with no tile at a location returns an error. Without the fallback, one empty theme would fail the whole composite tile.
7 Reuses the theme layers defined above rather than repeating their URLs. Each theme is cached individually as well as the combined tile.
8 A built-in, valid vector tile with no layers in it.

Try it

tilegroxy serve -c vector-basemap.yml

Open http://127.0.0.1:8080/preview/overture_basemap for the layer preview, or point MapLibre at http://127.0.0.1:8080/tiles/overture_basemap.json. The preview is only available while server.production is false.

To add more themes, such as places or divisions, add another pmtiles layer and another fallback entry under the composite.