Skip to main content
drupalreleases

Use direct release data with your AI assistant.

Learn more

Maper

No security coverage Under active development

Puts you in your place.

Maper draws every map at its best zoom, plus the surrounding area. The site's own places become real, focusable pointers on a static map drawn on the server, and one control steps out from the best zoom to show what surrounds them. There is no pan and no drag. A pointer opens its place card, docked at the map's foot, so the card never hides the place it describes.

Why another map module

A slippy map lets every reader roam, and every move asks a tile server for more. Maper knows in advance what each map shows, so it knows which tiles it needs, and they are few.

  • No API key, no per-load billing, no third party drawing your maps. Maps are drawn on the server from vector tiles the site holds.
  • Each tile is fetched once. Tiles are kept in the private file system, never served to a browser, and shared by every map that covers them.
  • Restyling fetches nothing. A map style is a palette over the same held tiles: three ship (light, dark, pearl), and changing one redraws every map from what is on disk.
  • Framed on the places, not on a bounding box. A map is a fixed grid of 2×2 to 4×4 tiles, centred on the median of its places, at the closest zoom that holds them all. A stage costs at most 16 tiles, and only when a reader asks for it.
  • Polite by construction. Fetching is off until a site sets a contact (sent in the User-Agent) and switches it on. Budgets per job and per day, a pause between requests, back-off on 429/503, flood control per reader, HTTPS to one host only. A job over budget is refused whole, never truncated.

Features

  • Map types: config entities naming a grid (2 to 4 tiles each way), whether readers get the zoom slider, how far they may step out, and a style.
  • Map styles: palettes, what is drawn from which zoom, label rules per tile layer (leave a repeated word out of district names, prefer names in the site's language).
  • Three ways to place a map: the Maper map block (this page's node, or the nodes it references), the Maper locator field formatter for a point field, and the Maper map Views style, where every row is a pointer.
  • Place cards with a fixed, familiar anatomy (picture, name, kind, state, fact, actions), each slot fed by a field. Field and entity access are respected for every reader.
  • "Open with" buttons on one-place maps: Waze, Google Maps, Uber.
  • Headless. The stable surface is data: the map as a JSON payload (schema 1), and an endpoint that redraws it at another zoom for issued maps only. The Vue skin that draws it is replaceable the Drupal way (libraries-override, a copied template), and a reference consumer in plain JavaScript shows a front end doing it without Drupal.
  • Accessible: pointers are buttons with a 44 px touch target, Escape closes the card, and the map is a named figure.
  • A server-drawn fallback: without JavaScript, the map and its pointers are still there.

Tile providers (submodules)

  • Maper: OpenFreeMap: OpenMapTiles vector tiles from OpenFreeMap, fetched into the cache. Heavy users can run their own OpenFreeMap instance and point the module at it.
  • Maper: Protomaps: tiles read in place from a PMTiles extract you place in private://maper/archives/. Nothing is fetched at all.

Each map carries its provider's credit, worded and linked as the provider asks, and a link to support it.

Experimental: Maper: Nominatim

Places nodes that have no coordinates, and checks the ones that do, against a Nominatim instance, by fixed rules, writing only empty fields and only after a dry run. It ships switched off, with no instance set. The public instance is asked only after the site acknowledges its usage policy. It asks one request at a time, at most one a second, and four a minute when asking recurs. Every answer is kept, and only drush asks anything. It is outside the 1.0 stability promise.

Requirements

  • Drupal 11.2 or later, PHP 8.3 (64-bit) with zlib.
  • A private file system path.
  • Vue 3.5.43, served by the site from /libraries/vue (composer require npm-asset/vue:3.5.43 through asset-packagist). Until it is there, the skin loads that same release from jsDelivr, checked against its hash, and the status report says so. The server-drawn map needs no Vue.

Status

1.0.0-alpha1. Alphas carry no upgrade path: uninstall and reinstall between them. Held tiles are kept across reinstalls, so nothing is fetched twice. From beta1, every change comes with an update.

Credits

Map data © OpenStreetMap contributors, available under the Open Database License. Vector tiles from OpenFreeMap (OpenMapTiles schema) or Protomaps. Built and run in production on Oído en Vivo.

Ask your assistant about Maper

Check compatibility with your Drupal and PHP version, maintenance and security coverage, from current release data. How it works

Depends on

Dependencies of the latest stable release

No dependencies recorded for this project.

Required by

Tracked projects that depend on this one

No tracked projects depend on this one yet.

Activity

Tracked releases
1
Tracked since
Oct 2026
Latest release
1 hour ago
Releases (12 mo)
1 ▲ from 0
Maintenance
Active

Releases

Version Type Core PHP Release date
1.0.0-alpha1 Pre-release 11 PHP 8.3 Oct 13, 2026