Chrome extension that overlays your self-hosted dreeve routes on:
https://gpx.studio/*https://studio.wanderstories.space/*https://www.openstreetmap.org/edit(OpenStreetMap iD editor)
- dreeve v5.3.0 or newer (release notes)
- Support for earlier dreeve versions (including
/api/heatmap/routes.jsonand/api/fragment/data/heatmap/routes) has been dropped
Routes are loaded from dreeve’s cache-based internal fragment API:
/api/internal/fragment/data/heatmap/routes
- Lets the user configure a custom heatmap routes endpoint URL
- Fetches route data from your dreeve heatmap API
- Draws route polylines on the page map
- Clicking a route opens a popup with activity details and links
- Toggles overlay on/off from the extension popup
- Lets the user configure route color, opacity, and width
- Supports filtering by high-level categories (
Ride,Walk,Water,Winter) - Automatically excludes virtual activities (
VirtualRide,VirtualRun) - Supports the map engines / editors used by target sites:
gpx.studio(MapLibre GL JS)studio.wanderstories.space(Mapbox GL JS)- OpenStreetMap iD editor (Background → Overlays toggle + SVG route layer)
Expected endpoint format (array of activities with coordinates as [lat, lng]):
[
{
"id": "activity-123",
"coordinates": [
[-19.37, 146.64],
[-19.38, 146.65]
]
}
]- Open
chrome://extensions - Enable Developer mode
- Click Load unpacked
- Select this repository folder
Optional tooling for formatting and linting (does not affect the unpacked extension):
npm install
npm run format # Prettier write
npm run lint # ESLint
npm run check # format check + lintRequires Node.js 20+.
- Open either supported site
- Open the extension popup
- Enter your endpoint, for example:
http://localhost:8000/api/internal/fragment/data/heatmap/routes
- Click Save
- Click Enable to draw routes
- Click Disable to remove routes
- Open the iD editor: https://www.openstreetmap.org/edit (example with map:
https://www.openstreetmap.org/edit#map=16/48.82523/-125.13630) - Open the extension popup, set your endpoint, click Save, then Enable
- Press B (Background settings) and scroll to Overlays
- Toggle Dreeve Routes on/off in the overlays list
- Click Disable in the extension popup to unload route data and remove the overlay entry
Style/filter examples:
- Color:
#00bcd4 - Opacity:
0.2 - Width:
3 - Sport filter: check one or more categories (for example
Rideincludes road, gravel, MTB, e-bike)
- The extension uses a background service worker to fetch endpoints and avoid page-level CORS limitations.
- Endpoint and toggle state are stored with
chrome.storage.sync. - Extension permissions include broad
http://*/*andhttps://*/*host access so users can point to any self-hosted endpoint URL. - On OSM,
/editembeds iD in an/idiframe; the extension hooks that iframe and messages it from the popup. - gpx.studio and Wanderstories behavior is unchanged from previous versions; iD support is additive.
- If overlay does not appear, click extension Reload in
chrome://extensions, then refresh the target site tab. - On iD, reload the
/editpage after installing or updating the extension so the editor boot hook can run. - If the endpoint is unreachable from your browser network, the popup will show a fetch error.
- If the endpoint returns HTML instead of JSON, confirm you are on dreeve v5.3.0+ and using
/api/internal/fragment/data/heatmap/routes. - For self-signed HTTPS certificates, make sure Chrome already trusts the endpoint in a normal tab.
- Route payloads are cached in the service worker (memory +
chrome.storage.session) for about 20 minutes, with HTTPETag/If-None-Matchwhen the server supports it. - Re-enabling or saving while the overlay is on may reuse the cache; a fresh Enable after Disable still force-refreshes from the network.
- Style-only changes (color, opacity, width) update the map without re-fetching geometry.