Install

Works with Drupal: ^11.2

Using Composer to manage Drupal site dependencies

Alternative installation files

Download tar.gz 359.76 KB
MD5: d2b3238eb7daeb672cf221f204de3928
SHA-1: 761d045aafb91b7fe60111fd8609a03b10e093a0
SHA-256: c38feabcfdcd952bce134d4fef7a359863120b145be84e83c0e86951ba03a36d
Download zip 477.79 KB
MD5: be7459f29b37b3a8061f787d1ca3e17a
SHA-1: 668489bd86b6aa6e5cd53f5f4dd46fb8e35a8506
SHA-256: bb6fc55eab4e74079d4c639f12e38ef53c394ca5d64ff554a6995cb2b4579224

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.

Created by: oneliner
Created on: 20 Oct 2026 at 02:52 UTC
Last updated: 20 Oct 2026 at 02:53 UTC
Bug fixes
New features

Other releases