

Add Overlays (Markers, Lines and Shapes) to create detailed interactive Maps. You can import/export from GPX/KML/GeoJSON.
π GitHub
π WordPress
π Demo & Help
Embed your Maps using the [Waymark] Shortcode, or link to the Map Details page.
Built to be flexible, Waymark has lots of Settings and Types provide one place to control how Overlays (Markers/Lines/Shapes) are displayed.
Marker Icons can be provided as:
– Font Icons (Ionic Icons v2/Font Awesome v4)
– Simple Text, or Emojis (i.e. ποΈ, π©, πΈ).
– Custom HTML (good ol’ <img src="https://example.com/icon.svg">, or a more complex structure). So you can pretty much create any kind of Icon you want.
For developers:
waymark- classes.type Property, i.e. {feature: { geometry: { type: 'Point', coordinates: [0, 0] } }, properties: { type: 'Alert', title: 'Bridge Removed!' }.layer.feature.properties Object.waymark_loaded_callback callback function.Note: Docker, Node.js and NPM required.
# Clone the repository
git clone https://github.com/opengis/waymark-wp.git
# Navigate to the Waymark directory
cd waymark-wp
# Install the dependencies (or pnpm/yarn install)
npm install
# Start WordPress at http://localhost:8888 and rebuild assets on change
npm run dev
The help site is a Nuxt 4 app in help/, built with @nuxt/content. Node 24.15 or newer is required.
cd help
npm ci
npm run sync-assets
npm run dev
The local preview runs at http://localhost:11003. To build the static site for GitHub Pages:
NUXT_APP_BASE_URL=/waymark-wp/ npm run generate
Styles and scripts are compiled from Less and JavaScript sources into the minified bundles enqueued by the plugin β edit the sources, not the build output:
assets/ β the plugin CSS (compiled from assets/less/) and JavaScript, served as the front and admin bundles.waymark-js/ β the bundled Waymark JS library powering the Viewer and Editor: sources in src/ and libs/, built into dist/.Waymark uses the waymark text domain, with the translation template at languages/waymark.pot.
Waymark_Lang, the JavaScript language defaults and the documentation demo config, so update all three when adding or changing a string.npm run i18n:check verifies that the PHP, JavaScript and documentation language defaults stay in parity, and that waymark_php_lang keys are both localised and read.npm run grunt rebuilds the POT and compiled assets after source changes.Three suites cover the plugin β JavaScript unit tests (Vitest), PHP integration tests (PHPUnit) and browser end-to-end tests (Playwright). The PHP and browser suites run against the disposable wp-env tests instance at http://localhost:8889; the development instance is never touched. The wp-env environment (npm run dev) must be running first.
# JavaScript unit tests (Vitest, jsdom) β Viewer, Editor and description sanitisation
npm run test:js
# PHP integration tests (PHPUnit against the WordPress test library)
npm run test:php
# Browser end-to-end tests (Playwright/Chromium) β login, Maps, Markers, responsive admin layout, front-end
npm run test:e2e
# Run all three in sequence
npm test
# One-off: prepare the tests container (after a fresh "wp-env destroy")
npm run test:php:setup
All three suites also run automatically in CI on pull requests and pushes to master.
wp-env pins PHP 8.3 to match the plugin’s declared floor. WP_ENV_PHP_VERSION and WP_ENV_CORE override the PHP and WordPress versions β useful for testing a release candidate or a newer PHP:
WP_ENV_PHP_VERSION=8.5 WP_ENV_CORE=WordPress/WordPress#trunk npm run test:php
npm run test:php:lint checks PHP syntax at the floor. CI exercises both boundaries β WordPress 6.4 with PHP 8.3, and current WordPress with PHP 8.5 β while the browser suite runs on current WordPress only.