Changelog
All notable, developer-facing changes to the Wemap SDK. The SDK follows semantic versioning: breaking changes only land on a major version, new features on a minor, fixes on a patch.
14.7.0
✨ New features
- Waypoints in directions.
Router.directions()accepts intermediatewaypointsbetween origin and destination, plusoptimizeWaypointsto reorder them for the shortest route (@wemap/routing). - No-build
<script>integration. Every package now ships a UMD bundle you can drop in with a<script>tag — no bundler required. Globals live under theWemapnamespace. The@wemap/mapbundle is self-contained (maplibre-gl and its worker are inlined).
🐛 Fixes
- Turn-by-turn steps no longer overwrite the street name with the motorway exit
number (
@wemap/routing).
14.6.1
🐛 Fixes
Coordinatesnow uses the WGS84 ellipsoid instead of a sphere (@wemap/geo,@wemap/map). Distances, ECEF conversions, local frames and the accuracy ring are more accurate; returned values change.GeoRef.headingnow rotates around the local vertical, in radians clockwise from north.
14.6.0
This release introduces @wemap/map — a new, dedicated package for rendering
Wemap livemaps on top of maplibre-gl — alongside a
modular package layout (@wemap/core, @wemap/geo, @wemap/map,
@wemap/positioning, @wemap/routing, @wemap/camera). You now install only the
packages you need.
✨ New features
Map rendering (@wemap/map)
- Livemap-aware map wrapper. Construct a
WemapMapaftercore.init()and your livemap's style, bounds, zoom range, pitch, bearing and indoor settings apply automatically. Override any of them — plus all maplibre options — in the constructor. The raw maplibre instance stays available asmap.maplibreas an escape hatch. - Camera and events. First-class helpers for
setCenter,setZoom,flyTo,easeTo,fitBounds, and typedon/once/offevent subscription. LatLngLikeinputs everywhere. Position inputs accept aCoordinates, a{ lat, lng, level? }object, or a[lat, lng, level?]tuple — all latitude-first. Malformed positions are validated and rejected early.whenReady()andautoResize. Await a race-free "map is ready" signal, and let the map resize itself with the container automatically.- POIs & content search. Click, highlight, select and filter livemap pinpoints; run content search; and read viewport pinpoints with a loading signal to know when results settle.
- Markers & clustering (
DomMarkerLayer). Add runtime markers with a custom element, icon, color, anchor and offset; update them in batches withsetMarkers; and opt into supercluster clustering. - Shapes (
ShapeLayer). Draw GeoJSON lines and polygons with simplestyle-spec styling, plus hover and click. - Itineraries (
ItineraryLayer). Render multilevel routes on the map. - User location (
UserLocationLayer). Show the user from a positioning stream, including a geographic accuracy ring. - Indoor & levels. Automatic building selection, pose-driven level sync, a
LevelControlfloor switcher, and level-aware custom layers. - Theming. Brand the map through design tokens set at
core.init({ theme })and a public set of CSS variables and classes for finer control.
Geocoding (@wemap/core)
- Forward and reverse geocoding via a new
GeocodingService— turn an address into coordinates and back.
Routing (@wemap/routing)
itineraryRulesoptions for finer control over computed routes.- Strict map-matching (
useStrict) to snap tightly to an itinerary, and orientation-aware matching.
Positioning (@wemap/positioning)
- Location state reporting and a more resilient background VPS scan.
🐛 Fixes
- Multilevel itineraries no longer bleed across floors.
- Indoor level filtering now applies correctly while GeoJSON sources are still loading.
- More reliable indoor routing across mixed-level graphs, with more accurate turn directions at route-leg junctions and corrected wheelchair handling for elevators and moving walkways.
- Faster indoor graph routing.
For full API details, see the package API reference and the feature guides.