Install
Works with Drupal: ^11.2Using Composer to manage Drupal site dependencies
Alternative installation files
Release notes
Pages carry a map's address instead of the map, the admin area is regrouped, tiles can be deleted and refetched, and readers without JavaScript get every place card.
What changed
Maps load from their own address. A page used to print the whole map into its HTML: the drawing, the payload and every card. Now it prints an empty box at the map's size, with the address of the map's frame endpoint, and the skin fetches the map as soon as the page loads.
On one site a venue page went from about 1,475 KB to 17 KB.
The address names the map, not the page, so pages naming the same places share one cached answer. It is purged by the map's own cache tags.
The box reserves the map's height, so nothing shifts when the map mounts.
Readers without JavaScript get the drawing as an image, from /maper/frame/{token}/drawing, with the place cards under it.
Themes that override maper-frame.html.twig must update it. The template's variables changed: it carries endpoint, session_token, width, height, below and fallback. The payload variable is gone.
Seven admin tabs:
Overview;
Providers, with each provider's settings as a secondary tab;
Map types and Map styles, each with an "Add" action;
Tile cache: Held, Fill, Refetch and Fetching. It is shown only while the active provider is fetched from;
Preview, which compares providers on one place, in any map type and map style;
Settings, now only what readers see.
The Console and Headless tabs are gone. The reference headless consumer, js/maper-headless.js, stays, documented in the README.
Fetching tab: the contact, cached live fetch, how long a CDN keeps a map, and the gate's budgets moved here from Settings.
Tile cache actions:
Redraw maps, from the tiles held (drush maper:redraw, formerly maper:purge).
Delete tiles: all, or a zoom range, counted first (drush maper:purge --from --to, a dry run unless --confirm).
Refetch: tiles older than N days, with a dry run, a go and the same budgets as a fill (drush maper:refetch --days, a dry run unless --confirm). Nothing refetches on its own.
Without JavaScript, the map lists every place card under it, and each pointer links to its card. Before, the cards were hidden.
Themes no longer restyle the map pointer or the card's close button through global button rules.
The clouds over missing tiles leave when their fade ends. Before, they lingered for minutes.
Estimated tile sizes cover every zoom from 4 to 14, measured over land. The estimate for zoom 4 was 5× too low.
Providers state their terms in their plugin declaration. The maper.providers registry config is gone.
Maper: Protomaps reads archives only from private://maper/archives.
Eight map styles ship: Light, Pearl, Dark, Ink, Antique, Blueprint, Terracotta and Neon. Styles and map types can be duplicated.
CI checks phpstan at level 6 against a baseline, and lints the Vue skin. stylelint and cspell pass.
Comments, documentation and interface text use US spelling ("color", "license"). Code names, such as the payload key colour, are unchanged.
Upgrading
Alphas carry no upgrade path. Uninstall maper and its submodules, update, and install again. Settings, map types and map styles are reset. Held tiles stay in private://maper/, so nothing is fetched twice. If your config sync directory holds maper.providers.yml, delete it.
Known gaps, planned before beta
The frozen API, written down, with everything else marked internal.
A clean-install test matrix, accessibility measured, and a proof on a second site.
Credits
Map data © OpenStreetMap contributors (ODbL). Tiles from OpenFreeMap or Protomaps.