Release Notes
System Requirements
Mappedin JS is designed to work on a variety of devices, such as desktop & laptop computers, kiosks, smartphones and tablets. Hardware requirements such as CPU and memory will vary depending the size of the map and the display's size and resolution. A minimum of 2 GB available memory is recommended. The following requirements must also be met.
Graphics Hardware Requirements
- WebGL 2.0 Support
Supported Desktop Browsers
- Chrome 51+
- Safari 10+
- Edge 125+
- Firefox 115+
- Opera 190+
Supported Mobile Browsers
- Chrome 127+
- Safari 14.0+
- Samsung Internet 25+
- Firefox for Android 127+
- Opera Mobile 80+
v6.7.0
December 3, 2025
Features
- Added experimental support for configuring dashed paths.
- Added
Text3DViewvisibility toTFloorState. - Added more graceful handling of outdoor tile loading errors.
Fixes
- Fixed an issue where changing the opacity of a geometry would cause its texture to be lost.
- Fixed console noise about unknown
Spacekind. - Fixed duplicated connection coordinates.
- Fixed the SAS token refreshing too often.
v6.6.0
November 25, 2025
Features
- Added support for unaligned
Connections. - Added experiemntal support for getting the current rendered state of a
Label. - Added experimental smoothing options for
Path.
Fixes
- Fixed cases where
Doors were being duplicated asConnections. - Fixed cases where
Connection.nodescould throw. - Fixed cases where
Text3DViews were not being created.
v6.5.0
November 20, 2025
Features
- Added experimental options for smoothing
Pathcorners. - Added experimental masking options for
Shapes.
Fixes
- Fixed altitude not being applied to
Spaceimages. - Fixed offscreen
Markers not fading back in when they return to view. - [React] Fixed type mismatch between
@mappedin/mappedin-jsand@mappedin/react-sdk.
v6.4.0
November 14, 2025
Features
- Added option to disable individual 2D occluders.
- Added support for
Query.nearest()for enterprise locations. - Added option to control x-ray path opacity.
Fixes
- Fixed outdoor opacity not being respected in multi-floor view.
- Fixed initial camera position during map load to fit current floor correctly.
- Fixed duplicate suggestions in
Query.suggest(). - Fixed many classes and types missing from the documentation.
- Improved the appearance of footprints in multi-floor view.
- Improved outdoor layer hiding.
v6.3.1
November 6, 2025
Fixes
- Fixed an issue causing some interactions to be misaligned.
v6.3.0
November 5, 2025
Features
- Added support for detecting multiple 2D elements layered on top of each other in a click interaction.
Fixes
- Fixed the clipping plane on scaled
Models. - Fixed the outline on bevelled edges not supporting altitude changes.
- Fixed issue when changing the type of
Labelappearance values. - Fixed an issue where navigating from a point within a
Spaceto the sameSpacewould direct to the nearest entrance. - Fixed
Labelpins not recalculating on state changes.
Performance Improvements
- Improved performance of
Labels andMapView.updateState().
v6.2.0
October 27, 2025
Features
mapView.__EXPERIMENTAL__auto(mapData.getByType('annotation'));now includes annotation images.
Fixes
- Fixed an issue where getDirections fails to return directions for valid start and end points.
v6.1.2
October 23, 2025
Fixes
- Fixed an issue blocking directions from being created on some maps.
v6.1.1
October 21, 2025
Fixes
- Fixed an issue which caused zod not to be included in the dependencies.
v6.1.0
October 21, 2025
⚠️ Breaking Changes
- All remaining BlueDot types and functions have been migrated to the
@mappedin/blue-dotpackage.
// ❌ Before
import {
GeolocationPositionExtended,
TBlueDotPositionUpdateWithFloor,
TBlueDotPositionProcessor,
TBlueDotState
TBlueDotOptions,
TBlueDotPositionUpdate,
TBlueDotUpdateOptions
} from "@mappedin/mappedin-js"
// ✅ After
import {
GeolocationPositionExtended,
BlueDotPositionUpdateWithFloor
BlueDotPositionProcessor,
BlueDotState
BlueDotOptions,
BlueDotPositionUpdate,
BlueDotUpdateOptions
} from "@mappedin/blue-dot"
Features
- Added path section highlighting using
MapView.Navigation.highlightPathSection(). - Added support for handling enterprise locations on map
Objects. - Added clipping planes API to 3D models.
- Added
autooption tofloorGapwhich will automatically use theFloor's maximum height. - Added support for
publicandladdernavigation flags. - Upgraded to zod v4 and marked as an external dependency.
Fixes
- Fixed issue where
visible: falseoption wasn't working onModelinitialization. - Fixed altitude not applying accurately on geometry initialization.
- Prevented outdoor nodes from being smoothed in MVFv3 format.
- Fixed creation of
Floors with no geometry. - Added map
Objects to the search index for improved search functionality. - Improved speed of
MapData.Query.nearest()search operations. - Fixed path smoothing to respect
Objectobstructions in MVFv3. - Fixed
Modelstate position handling to avoid instanceof issues. - Fixed missing watermark positions.
Performance Improvements
- Optimized Zod partial schema creation in
MapView.updateState()for faster state management. - Improved speed of
MapView.getDirections(). - Improved speed of initial map render.
v6.0.0
September 29, 2025
This is the first official release of Mappedin JS v6 and React SDK v6. This version introduces the last breaking changes for both SDKs as the API becomes stable.
⚠️ Breaking Changes
MapView.getState()andMapView.updateState()no longer accept astringid. Instead, always pass the instance of the map element.
// ❌ Before
const space = mapView.getByType('space')[0];
const state = mapView.getState(space.id); // No longer supported
mapView.updateState(space.id, { opacity: 0.5 }); // No longer supported
// ✅ After
const space = mapView.getByType('space')[0];
const state = mapView.getState(space);
mapView.updateState(space, { opacity: 0.5 });
Features
- Added
opacityproperty toLabelAppearance. - Added
areasto themapView.on('click')event.
Fixes
- Fixed an issue with
Areas rendering on all floors in multi-floor view. - Fixed a regression causing
rank: 'always-visible'Labels andMarkers to still fall back to the pin appearance.
v6.0.0-rc.5
September 24, 2025
Features
- Added option to include outdoor map in
mapView.takeScreenshot().
Fixes
- Fixed vertical paths rotating incorrectly.
- Fixed
Labels.add()not respecting theenabledoption. - Fixed
Markers.add()not respecting theenabledoption.
Fixes
- Fixed
MapView.__EXPERIMENTAL__auto()not labellingFacades. - Fixed
Spaces not being created forFacades in MVFv3. - Fixed exported types resolving as
any. - Fixed z-fighting with overlapping
Paths in multi-destination routes. - [React] Fixed
@mappedin/mappedin-jspeer dependency.
v6.0.0-rc.4
_ September 23, 2025_
⚠️ Breaking Changes
- The
Labelappearance optioniconVisibleAtZoomLevelhas been renamediconVisible. It now accepts a boolean as well as a zoom level.
// ❌ Before
mapView.Labels.add(space, space.name, {
appearance: {
iconVisibleAtZoomLevel: Infinity, // effectively invisible
},
});
// ✅ After
mapView.Labels.add(space, space.name, {
appearance: {
iconVisible: false,
},
});
- The
MarkerlowPriorityPin.enabledoption has been removed and replaced with the placement option"hidden".
// ❌ Before
mapView.Markers.add(space, space.name, {
placement: ["center"],
lowPriorityPin: {
enabled: true,
size: 6,
color: 'red',
},
});
// ✅ After
mapView.Markers.add(space, space.name, {
placement: ["center", "hidden"],
lowPriorityPin: {
size: 6,
color: 'red',
},
});
Features
- Improved the appearance of
MapView.__EXPERIMENTAL__auto(). - Added
textPlacementas an option forLabels. - Added
enableImageCollisionsas an option forSpaces, enabling 2D elements to collide with anchored 3D images.
Fixes
- Fixed
MapView.__EXPERIMENTAL__auto()not labellingFacades. - Fixed
Spaces not being created forFacades in MVFv3. - Fixed exported types resolving as
any. - Fixed z-fighting with overlapping
Paths in multi-destination routes. - [React] Fixed
@mappedin/mappedin-jspeer dependency.
v6.0.0-rc.3
September 17, 2025
⚠️ Breaking Changes
- The
__typeproperty across MapView elements has been lower cased for consistency.
// ❌ Before
Label.__type; // 'Label'
Marker.__type; // 'Marker'
Model.__type; // 'Model'
Shape.__type; // 'Shape'
Path.__type; // 'Path'
PathSegment.__type; // 'PathSegment'
Image3DView.__type; // 'Image3D'
Text3DView.__type; // 'Text3D'
// ✅ After
Label.__type; // 'label'
Marker.__type; // 'marker'
Model.__type; // 'model'
Shape.__type; // 'shape'
Path.__type; // 'path'
PathSegment.__type; // 'path-segment'
Image3DView.__type; // 'image-3d'
Text3DView.__type; // 'text-3d'
Features
- Added
pointsgetter toEnterpriseLocationwhich returns thePointOfInterestinstances associated with the location. - Added a visual map element for
Areas which can be updated usingMapView.updateState(). - Added
MapView.getInView()to return the 2D elements that are currently in view. - Added
MapView.Labels.getAll()to return all labels in the map. - Added
MapView.Markers.getAll()to return all markers in the map.
Fixes
- Merges
MapDatalocalizations with the default language.
v6.0.0-rc.2
September 9, 2025
Fixes
- [React SDK] Fixed a critical issue causing the
useMapData()hook to infinitely fetch data.
v6.0.0-rc.1
September 9, 2025
This is the second release candidate for Mappedin JS v6 and the first release candidate for React SDK. Going forward, the versions of these SDKs will be synchronized. This version introduces significant breaking changes for both SDKs.
⚠️ Breaking Changes
- Renamed
MapView.ImagestoMapView.Image3Dand theImageclass toImage3DView.
// ❌ Before
import { Image } from "@mappedin/mappedin-js";
const img: Image = mapView.Images.add(...);
// ✅ After
import { Image3DView } from "@mappedin/mappedin-js";
const img: Image3DView = mapView.Image3D.add(...);
MapData.Query.nearest()now returns a Promise and contains a number of new parameters and options.
// ❌ Before
const nearest = mapData.Query.nearest(
point, // Origin point.
{
limit: 'same-floor', // Limit to same floor. Options: 'same-floor' | 'same-elevation'
radius: 10, // Radius of search in meters.
types: ['space', ...] // Array of types to query for.
}
);
// ✅ After
const nearest = await mapData.Query.nearest(
point, // Origin point.
mapData.getByType('space'), // Array of elements to query for
{
limit: 'same-floor', // Search limit. Options: 'same-floor' | 'same-elevation'
lineOfSight: 'auto', // Whether to ignore walls and other obstructions. Options: 'auto' | true | false
mode: 'travel-distance', // The mode to use for the search. Options: 'travel-distance' | 'absolute-distance'
maxDistance: 10, // Maximum distance to search in meters.
}
);
- The state returned from
MapView.getState()now has all properties set toreadonly.
// ❌ Before
const state = mapView.getState(space);
state.opacity = 0.5; // No error
// ✅ After
const state = mapView.getState(space);
state.opacity = 0.5; // Error
- [React SDK] The
onLoadcallback has been removed. Instead, pass arefto the component to access the instance.
// ❌ Before
<MapView onLoad={(mapView) => {}} />
<Label onLoad={(label) => {}} />
<Marker onLoad={(marker) => {}} />
<Model onLoad={(model) => {}} />
<Path onLoad={(path) => {}} />
<Shape onLoad={(shape) => {}} />
<Navigation onLoad={() => {}} />
// ✅ After
const mapViewRef = useRef();
<MapView ref={mapViewRef} />
const labelRef = useRef();
<Label ref={labelRef} />
const markerRef = useRef();
<Marker ref={markerRef} />
const modelRef = useRef();
<Model ref={modelRef} />
const pathRef = useRef();
<Path ref={pathRef} />
const shapeRef = useRef();
<Shape ref={shapeRef} />
<Navigation /> // onLoad removed, no navigation instance to return
- [React SDK] The
useEvent()hook has been renamed touseMapViewEvent().
// ❌ Before
useEvent('click', event => {
console.log(event);
});
// ✅ After
useMapViewEvent('click', event => {
console.log(event);
});
- [React SDK]
@mappedin/mappedin-jsis no longer re-exported from the React SDK. It is now listed as a peer dependency.
// ❌ Before
import Mappedin, { Label } from "@mappedin/react-sdk"
const [labels, setLabels] = useState<Mappedin.Label[]>([]);
return labels.map(label => (
<Label key={label.id} target={label.target} text={label.text} />
));
// ✅ After
import { Label } from "@mappedin/react-sdk"
import { Label as LabelJS } from "@mappedin/mappedin-js"
const [labels, setLabels] = useState<LabelJS[]>([]);
return labels.map(label => (
<Label key={label.id} target={label.target} text={label.text} />
));
Features
- Added support for beveled edges on geometry.
- Added
coverImage,defaultFloor, andoperationHoursas properties ofEnterpriseLocation. - Added
verticalOffsetas a state property forPath. - Added
MapView.getVersion()to return the version of the SDK. - [React SDK] Added
useMapDataEvent()hook. - [React SDK] Added
<MapDataProvider>component.
Fixes
- Fixed cases where interactions may become misaligned after the page is scrolled.
- Fixed cases where building footprints were not being hidden.
- Fixed
MapView.getDirections()performance regression on v6.0.0-rc.0. - Fixed an issue where Labels were not showing on some browsers under strict CSP rules.
- Fixed
hydrateMapData()failing while offline. - Fixed hand-drawn navigation being smoothed.
- Fixed an issue where excluding a one-to-many connection from directions would exclude all associated connections.
- Fixed a performance regression when calling
MapView.updateState()on geometry. - [React SDK] Fixed cleanup of MapView component and limited re-renders when props change.
- [React SDK] Fixed cases where types showed mismatch errors despite being correct.
v6.0.0-rc.0
August 7, 2025
This is the first release candidate for Mappedin JS v6. This version introduces significant breaking changes as the SDK transitions from beta to release candidate status.
⚠️ Breaking Changes
show3dMap
- The
TShow3dMapOptionskeymultiFloorView.floorHeighthas been renamed tomultiFloorView.floorGap.
// ❌ Before
const mapView = await show3dMap(el, mapData, {
multiFloorView: {
floorHeight: 10,
},
});
// ✅ After
const mapView = await show3dMap(el, mapData, {
multiFloorView: {
floorGap: 10,
},
});
- Multi-floor View is now enabled by default.
// ❌ Before
const mapView = await show3dMap(el, mapData, {
multiFloorView: {
enabled: true,
},
});
// ✅ After
const mapView = await show3dMap(el, mapData);
- 2D occlusion is now enabled by default and the option has been removed from
show3dMap().
// ❌ Before
const mapView = await show3dMap(el, mapData, {
occlusion: {
enabled: true,
},
});
// ✅ After
const mapView = await show3dMap(el, mapData);
Paths
getDirections()is now asynchronous.
// ❌ Before
const directions = mapView.getDirections(...);
// ✅ After
const directions = await mapView.getDirections(...);
- Replaced
pathOptions.nearRadius,pathOptions.farRadius,pathOptions.nearZoom, andpathOptions.farZoomwith a unifiedwidthoption.
// ❌ Before
mapView.Paths.add(path, { nearRadius: 0.5, farRadius: 1, nearZoom: 16, farZoom: 18 });
// ✅ After
mapView.Paths.add(path, { width: 1 });
Markers
- Marker
anchorproperty renamed toplacement.
// ❌ Before
mapView.Markers.add(
space,
`<div>${...}</div>`,
{
anchor: 'left',
},
);
// ✅ After
mapView.Markers.add(
space,
`<div>${...}</div>`,
{
placement: 'left',
},
);
- Marker
dynamicResizeoption is now enabled by default.
// ❌ Before
const marker = mapView.Markers.add(space, `<div>${...}</div>`, {
dynamicResize: true,
});
// ✅ After
const marker = mapView.Markers.add(space, `<div>${...}</div>`);
Labels
- Label
appearanceoptions have been flattened and simplified.
// ❌ Before
mapView.Labels.add(target, 'label', {
appearance: {
text: {
foregroundColor: 'white',
backgroundColor: 'black',
},
marker: {
foregroundColor: {
active: 'white',
inactive: 'white',
},
backgroundColor: {
active: 'black',
inactive: 'black',
},
},
},
});
// ✅ After
mapView.Labels.add(target, 'label', {
appearance: {
color: 'white',
outlineColor: 'black',
},
});
Labels.all()has been renamed toLabels.__EXPERIMENTAL__all()to clearly indicate experimental status.
// ❌ Before
mapView.Labels.all();
// ✅ After
mapView.Labels.__EXPERIMENTAL__all();
auto()methods have been renamed to__EXPERIMENTAL__auto().
// ❌ Before
mapView.auto();
// ✅ After
mapView.__EXPERIMENTAL__auto();
Events
- Click event keys are now all optional, with the exception of
coordinateandpointerEvent.
// ❌ Before
mapView.on('click', event => {
const { spaces, objects, floors } = event;
spaces.forEach(() => {});
objects.forEach(() => {});
floors.forEach(() => {});
// etc
});
// ✅ After
mapView.on('click', event => {
const { spaces, objects, floors } = event;
if (spaces) {
spaces.forEach(() => {});
}
if (objects) {
objects.forEach(() => {});
}
if (floors) {
floors.forEach(() => {});
}
// etc
});
- Hover event keys are now all optional, with the exception of
coordinate.
// ❌ Before
mapView.on('hover', event => {
const { spaces, objects, floors } = event;
spaces.forEach(() => {});
objects.forEach(() => {});
floors.forEach(() => {});
// etc
});
// ✅ After
mapView.on('hover', event => {
const { spaces, objects, floors } = event;
if (spaces) {
spaces.forEach(() => {});
}
if (objects) {
objects.forEach(() => {});
}
if (floors) {
floors.forEach(() => {});
}
// etc
});
MapLibre Overlay
- The experimental
createMapLibreOverlay()function has been removed and will be published under a separate@mappedin/maplibre-overlaypackage.
// ❌ Before
import { createMapLibreOverlay } from '@mappedin/mappedin-js';
// ✅ After
import { createMapLibreOverlay } from '@mappedin/maplibre-overlay';
Visibility
- Setting
opacity: 0no longer implicitly setsvisible: false. Use thevisibleproperty explicitly to remove an element from the scene.
// ❌ Before
mapView.updateState(space, { opacity: 0 });
mapView.getState(space).visible; // false
// ✅ After
mapView.updateState(space, { opacity: 0 });
mapView.getState(space).visible; // true
mapView.updateState(space, { visible: false });
Camera
- Camera transform values are now rounded for stability and to reduce floating-point precision errors.
// ❌ Before
transform.center.latitude; // 43.52041666666667891234
transform.center.longitude; // -79.3827777777778123456
transform.zoomLevel; // 18.123456789012345
// ✅ After
transform.center.latitude; // 43.5204167 (7 decimals)
transform.center.longitude; // -79.3827778 (7 decimals)
transform.zoomLevel; // 18.12346 (5 decimals)
new CameraTransform(camera, { precision: -1 }); // Get raw values if needed
States
- Improved the types and input validation for
getStateandupdateState. As a result, many of the types have changed.
// ❌ Before
import type {
TGetState,
TUpdateState,
TUpdateStates, // Removed
TDoorsState,
TFacadeState,
TFloorState,
TGeometryState,
TImageState,
TLabelState,
TMarkerState,
TModelState,
UpdateModelState, // Removed
TPathState,
TPathUpdateState,
TShapeState,
TShapeUpdateState,
Text3DState, // Removed
UpdatableText3DState, // Removed
TWallsState,
TWallsUpdateState,
} from '@mappedin/mappedin-js';
// ✅ After
import type {
TUpdateState,
TGetState,
TDoorsState,
TDoorsUpdateState, // Added
TFacadeState,
TFacadeUpdateState, // Added
TFloorState,
TFloorUpdateState, // Added
TGeometryState,
TGeometryUpdateState, // Added
TImageState,
TImageUpdateState, // Added
TLabelState,
TLabelUpdateState, // Added
TMarkerState,
TMarkerUpdateState, // Added
TModelState,
TModelUpdateState, // Replaces UpdateModelState
TPathState,
TPathUpdateState, // Added
TShapeState,
TShapeUpdateState, // Added
TText3DState, // Replaces Text3DState
TText3DUpdateState, // Replaces UpdatableText3DState
TWallsState,
TWallsUpdateState, // Added
} from '@mappedin/mappedin-js';
BlueDot
- The
BlueDotAPI has been removed and is now published under a separate@mappedin/blue-dotpackage.
// ❌ Before
import { show3dMap } from '@mappedin/mappedin-js';
const mapView = await show3dMap(...);
mapView.BlueDot.enable();
// ✅ After
import { show3dMap } from '@mappedin/mappedin-js';
import { BlueDot } from '@mappedin/blue-dot';
const mapView = await show3dMap(...);
new BlueDot(mapView).enable();
Features
- Added
navigationFlagsgetter toNode. - Added floor-independent BlueDot positioning.
- Upgraded MapLibre to v5.
Fixes
- Fixed
sidenot working inupdateState(). - Removed
tabindexfrom canvas and attribution. - Fixed transparency fighting for overlapping Paths.
- Fixed Path animation delays.
- Fixed outlines persisting when polygon is
visible: false. - Fixed loading MVF v3 for enterprise.
- Fixed shading only working on elevation 0.
- Fixed Mappedin attribution showing when
outdoorViewis disabled.
v6.0.1-beta.53
July 21, 2025
Features
- Adds
lineOfSightas an option toMapData.Query.nearest()to avoid returning results obstructed by walls. - Adds
disableWorkersas an option toshow3dMap(). It is highly recommended not to disable web workers unless absolutely necessary, such as an environment with strict CSP rules.
v6.0.1-beta.52
July 21, 2025
⚠️ Breaking Changes
Labels
- Label
iconSizeInterpolationhas been replaced withiconScale.
// ❌ Before
mapView.Labels.add(space, 'label', {
appearance: {
marker: {
iconSizeInterpolation: {
maxZoomLevel: 18,
minZoomLevel: 17,
maxScale: 2,
minScale: 1,
}
}
}
});
// ✅ After
mapView.Labels.add(space, 'label', {
appearance: {
marker: {
iconScale: {
on: 'zoom-level',
input: [17, 18],
output: [1, 2],
easing: 'linear' // optional
}
}
}
});
MapData
MapView.getMapData()now returns the MapData directly instead of an object containing a single key value pair.
// ❌ Before
mapView.getMapData(): {
[string]: MapData,
}
// ✅ After
mapView.getMapData(): MapData
Map Elements
- The
nameproperty across all map elements (Spaces, MapObjects, etc.) no longer falls back toexternalIdwhen empty. Previously, if a map element had no name, it would use theexternalIdas a fallback. Now, empty names remain empty strings.
// ❌ Before
space.externalId === 'id';
space.name === 'id';
mapObject.externalId === 'id';
mapObject.name === 'id';
// ✅ After
space.externalId === 'id';
space.name === '';
mapObject.externalId === 'id';
mapObject.name === '';
Features
- Improved performance and memory usage.
- Improved type inference in
MapData.Query.nearest(). - Added Facade as an option to
MapView.animateState(). - Added an
excludearray property toMapData.Query.nearest(). - Added
MapView.optionsproperty to return the initialization options passed intoshow3dMap(). - Added
subtitleproperty to Floor. - Added
'unknown'as a possible type withMapData.getById()which will return the first map element found with that id. - Added option to disable token prefetching.
- Added support for updating Path altitude.
- Added
pitchandbearingtoMapView.Camera.getFocusOnTransform().
Fixes
- Fixed Path color when animation is layered over a
visibleThroughGeometryPath. - Fixed
centerproperty falling back to[0, 0]if a center coordinate is not provided in the data. Center will now attempt to be calculated before falling back. - Fixed 2D occlusion on outdoor Floors fighting with basements and lower levels.
- Fixed behavior when setting a color to an invalid color string.
- Fixed BlueDot accuracy ring being interactive.
- Fixed Marker flickering.
- Fixed crash when updating the state of an invalid geometry.
- Fixed invalid map Objects being created.
- Fixed getDirections throwing when given an invalid start and end.
- Fixed BlueDot receiving position updates from far outside the bounds of the map.
- Fixed
insetPadding.typebeing required. - Fixed
unsafe-evalcontent security policy issues.
v6.0.1-beta.51
June 25, 2025
Features
- Added fallback language loading for
getMapData().
Fixes
- Fixed focusing on a LocationProfile.
- Fixed performance regression with outlines.
v6.0.1-beta.50
June 23, 2025
Features
- Added
MapView.tweenGroupwhich returns the TweenJS Group for controlling animations created withMapView.tween()andMapView.animateState(). - Added the
interactivestate option for Shapes.
Fixes
- Fixed
initialFloornot working in Multi-floor View. - Fixed Paths with
interactive: truenot being interactive.
v6.0.1-beta.49
June 19, 2025
Features
- Added
altitudestate to Space and MapObject. - Added
visibleandheightstate to Shape.
Fixes
- Fixed walls and MapObjects not loading in MVF v3.
- Fixed Floors with invisible geometry being detected in click events.
- Fixed EnterpriseLocation
instancesnot being translated.
v6.0.1-beta.48
June 18, 2025
Features
- Added
centerproperty to Floor. - Included Roboto font in bundle for developers with strict CSP.
Fixes
- Fixed error running Mappedin JS in Node without access to
window. - Fixed
animateState()setting all state values every frame. - Fixed
getScreenCoordinateFromCoordinate()not respecting floor altitude. - Fixed layers under geometry check running forever if nothing is found.
- Fixed
lowPriorityPinshowing foralways-visibleMarkers. - Fixed vertical paths not facing the camera.
- Fixed some Labels overlapping on map load.
v6.0.1-beta.47
June 11, 2025
Features
- Added the option to toggle the visibility of the watermark.
- Added an option to make paths visible through geometry.
- Added icon size interpolation for labels.
- Added an option to override connection weight while getting directions.
- Added
MapView.preloadFloors()to pre load specified floors before they come visible. - Added
hiddenproperty toEnterpriseLocation.
Fixes
- Fixed
BlueDotnot being visible across all floors.
v6.0.1-beta.46
June 4, 2025
⚠️ Breaking Changes
- Restored the MVF v3 support which was temporarily removed in v6.0.1-beta.45.
v6.0.1-beta.45
June 3, 2025
⚠️ Breaking Changes
- Reverted the MVF v3 support added in v6.0.1-beta.44 due to an error when importing Mappedin JS in CodeSandbox.
v6.0.1-beta.44
June 3, 2025
⚠️ Breaking Changes
- The experimental feature
MapView.DynamicFocushas been removed. Going forward, new versions of Dynamic Focus will be published under a separate package @mappedin/dynamic-focus.
// ❌ Before
import { show3dMap } from '@mappedin/mappedin-js';
const mapView = await show3dMap(...);
mapView.DynamicFocus.enable();
// ✅ After
import { show3dMap } from '@mappedin/mappedin-js';
import { DynamicFocus } from '@mappedin/dynamic-focus';
const mapView = await show3dMap(...);
const dynamicFocus = new DynamicFocus(mapView);
Features
- Added
setWorkerUrl()andMapView.Text3D.disableWorker()for handling strict CSP. - Added fields to
MapView.updateState(floor, {...})for managing visibility of geometry, footprints, 2D elements, and occlusion. - Improved
MapView.auto()to only label Spaces with names. - Added
lowPriorityPinto Markers which shows a small circle when space is limited. - Added
MapView.animateState()to transition between states. - Added options to fetch or hydrate an MVF v3.
Fixes
- Fixed a warning about SAS tokens which could be logged sporadically for enterprise maps.
- Fixed issues with the exported types for
getMapData()and the React SDK. - Fixed clicks in multi-floor view returning the coordinates on the wrong floor.
v6.0.1-beta.43
May 21, 2025
Fixes
- Fixed
Labels.all()failing to label maps with new data. - Fixed a regression with model interactivity.
- Fixed doors which have been disabled still being navigable.
- Fixed SAS token fetching for multi-building maps.
v6.0.1-beta.42
May 16, 2025
⚠️ Breaking Changes
- Facades now have their own state independent from the spaces that they're made of. Updating the opacity of a facade will no longer overwrite the opacity of its spaces.
// ❌ Before
mapView.updateState(facade, {
opacity: 0.5,
});
mapView.getState(facade).opacity; // 0.5
mapView.getState(facade.spaces[0]).opacity; // 0.5
// ✅ After
mapView.updateState(facade, {
opacity: 0.5,
});
mapView.getState(facade).opacity; // 0.5
mapView.getState(facade.spaces[0]).opacity; // unchanged
v6.0.1-beta.41
May 15, 2025
Features
- Added new properties to
TAddPathOptionsfornearZoomLevelandfarZoomLevel. - Added support for multi-floor view with enterprise maps.
- Added support for
FloorinupdateState().
Fixes
- Fixed cases where Stacked Maps would zoom into the wrong map.
- Fixed a potential error when Markers did not have an anchor strategy selected.
- Fixed 2D occlusion for Markers and Labels placed outside a floor.
- Fixed missing CSS.
- Fixed missing types for
setScreenOffsets().
v6.0.1-beta.40
May 8, 2025
Features
- Added
resizeevent which is published when the map container resizes. - Improved the behavior of focusing on a floor. The floor should now fit better within the camera frame.
- Added
icongetter toLocationProfile. - Improved Stacked Maps
autovertical distance calculation.
Fixes
- Fixed a regression in inactive Label marker size.
- Fixed the collider of the inactive Label being too large.
- Fixed
takeScreenshot()sometimes firing before the map is ready. - Fixed floors getting stuck in a partially transparent state in Dynamic Focus.
- Fixed Dynamic Focus firing every time a render occurs.
- Fixed injected CSS not loading.
- Fixed geometry outlines not working when altitude is not 0.
- Fixed Labels and Markers being misaligned after map container is resized.
v6.0.1-beta.39
April 23, 2025
⚠️ Breaking Changes
- The path arrow animation has been slowed down from 1000ms to 3000ms.
// ❌ Before
mapView.Paths.add(directions.coordinates, {
displayArrowsOnPath: true,
animateArrowsOnPath: true, // duration 1000ms
});
// ✅ After
mapView.Paths.add(directions.coordinates, {
displayArrowsOnPath: true,
animateArrowsOnPath: true, // duration 3000ms
});
Features
- Added support for rendering enterprise polygons which have been split via edge offsets.
- Added enterprise Connection names.
- Improved Label stabilization.
- Improved Model position, rotation, and scale properties for more precise control.
- Improved
MapData.Query.nearest()so that it only returns navigable nodes.
Fixes
- Fixed image flipping instability when viewed at exactly 90 or 270 degree rotation.
- Fixed cases where the previous path may not be cleared from navigation.
- Fixed cases where floors may overlap in Dynamic Focus.
- Fixed cases where the wrong name was returned from Hyperlinks.
- Fixed an issue where labels would not appear on floor change until an additional render occurred.
- Fixed an issue whereby Facades could disappear despite not being in focus.
- Fixed accessible connections in non-enterprise venues.
- Fixed Text3D drawing despite not having enough room.
v6.0.1-beta.38
April 15, 2025
⚠️ Breaking Changes
- React SDK versions are now published under the
latesttag on NPM. It is recommended to remove thebetatag frompackage.jsonand avoid using it in future installations.
// ❌ Before
{
"@mappedin/react-sdk": "beta",
}
// ✅ After
{
"@mappedin/react-sdk": "latest",
}
- The CSS styles for the SDK are now automatically loaded when
show3dMap()is called. This can be disabled by passing the flaginjectStyles: false.
// ❌ Before
import { show3dMap } from "@mappedin/mappedin-js";
import "@mappedin/mappedin-js/index.css";
const mapView = await show3dMap(...);
// ✅ After
import { show3dMap } from "@mappedin/mappedin-js";
const mapView = await show3dMap(...);
iconVisibilityThresholdhas been replaced withiconVisibleAtZoomLevelin label appearance.
// ❌ Before
mapView.updateState(label, {
appearance: {
iconVisibilityThreshold: 0.5, // icon will be visible at half way between minZoomLevel and maxZoomLevel
},
});
// ✅ After
mapView.updateState(label, {
appearance: {
iconVisibleAtZoomLevel: 16, // icon will be visible at zoom level 16 and above
},
});
Features
- Added
getScreenCoordinateFromCoordinate()to MapView. - Added touch screen controls including double tap to zoom and two finger tap to zoom out.
- Added
segmentsproperty to the Path class which gives you a portion of the path on a floor. - Added
iconOverflowoption for label appearance. - Added
interactiveflag for the watermark. - Added
getAccessToken()andgetSasToken()functions to MapData. - Added
categoriesproperty to EnterpriseLocation. - Added detached text areas loaded from enterprise data.
- Added
flipImagesToFaceCameratoTShow3dMapOptions. - Added
flipImageToFaceCameraas an option for Spaces. - Added
verticalOffsetas an option tocreateCoordinate(). - Added automatic loading of Mappedin CSS styles.
- Added
blueDotboolean to'click'event. - Added localization for the Floors and FloorStacks.
- Added
iconVisibleAtZoomLevelto label appearance.
Fixes
- Fixed
getById('connection', id)returning the wrong data. - Fixed a regression in label icon loading.
- Fixed a crash when map element width or height are 0.
- Fixed
getFocusOnTransform()triggering a'camera-change'event. - Fixed textures not being loaded from data.
- Fixed directions failing to identify a door in the instructions.
- Fixed
setFloorde-syncing DynamicFocus. - Fixed parity between
'floor-change-start'and'floor-change'. - Fixed unnecessary warnings when
layoutIdis not set. - Fixed enterprise textures not blending with the polygon color.
- Fixed edge weights in enterprise navigation.
- Fixed outlines creating diagonal lines across some polygons.
- Fixed pan bounds not scaling based on map size.
- Fixed some paths rendering at the wrong elevation.
- Fixed textures being applied to all polygons with the same style.
- Fixed cases where label density would be really low.
- Fixed images and labels z-fighting when outlines are turned off.
- Fixed label icon size updates requiring an extra render to take affect.
- Fixed labels being too jumpy during pan actions.
- Fixed connection node neighbours being excluded on the current floor.
- Fixed a crash that could occur when accessing LocationProfile properties with an old MVF.
- Fixed issues loading inline SVGs in label icons.
- Fixed path not drawing in stacked maps.
- Fixed image meshes being visible before the image has fully loaded.
v6.0.1-beta.37
March 27, 2025
Features
- Added
spacegetter toNode. - Added
Camera.interactions.enable(),Camera.interactions.disable(), andCamera.interactions.set(). - Added support for specifying enterprise map perspectives via the
viewId. - Added
screenOffsetstoshow3dMap()to set the initial camera padding. - Added support for nodes with
preventSmoothingflag. - Added
shortNamegetter toFloorStack. - Added
dynamic-focus-changeevent. - Added
extragetter toConnection. - Added
websitegetter toLocationProfile. - Added
setMapToDepartureoption toNavigation.draw() - Added support for enterprise map textures.
- Improved rendering of enterprise maps.
Fixes
- Fixed how Stacked Maps
"auto"distance between floors handlesincludedFloors. - Fixed connections with less than 2 nodes appearing in navigation.
- Fixed floors disappearing in Stacked Maps after
Navigation.draw(). - Fixed rendering defect of geometry
topColoron some devices. - Fixed map data details should fallback to
LocationProfile. - Fixed pan bounds breaking in Stacked Maps.
- Fixed
minZoomcalculation from pan bounds. - Fixed floor state modification during Stacked Maps.
- Fixed
screenOffsetsnot being respected. - Fixed
focusOn()when floor is shifted below altitude 0. - Fixed extra
FloorStacks being rendered at the same time. - Fixed
connectiongetter onLocationProfile. - Fixed connections not relevant to the path being included.
v6.0.1-beta.36
March 18, 2025
Fixes
- Fixed cases where enterprise maps were not choosing the shortest route.
- Fixed cases where outdoor multi-polygon building footprints were not being hidden.
v6.0.1-beta.35
March 17, 2025
Fixes
- Fixed cases where directions included unnecessary instructions.
- Fixed rendering artifacts on some devices when color is applied to geometry.
v6.0.1-beta.34
March 13, 2025
Features
- Added
lowDpiflag toTShow3dMapOptionsfor improved performance on large displays. - Added
pictureproperty toEnterpriseCategory. - Added types for
LocationProfileandLocationCategory.
Fixes
- Fixed floor footprints rendering at the wrong altitude in multi-floor view.
- Fixed cases of navigation choosing a longer route than expected.
v6.0.1-beta.33
March 7, 2025
Features
- Added
openingHoursgetter to LocationProfile. - Added support for
Camera.focusOn()andCamera.getFocusOnTransform()when the geometry is not yet rendered. - Added
verticalOffsetto Coordinate. - Added
"auto"as an option for StackedMapsdistanceBetweenFloors. - Added
colorto Model state as a shorthand to update known materials. - Added
naturalBearinggetter to MapData and automatically oriented the map to this bearing. - Added
MapView.takeScreenshot()to screenshot the 3D scene.
Fixes
- Fixed image flipping on certain initial bearings.
- Fixed
visible: falsenot working for Models. - Fixed incorrect gaps between floors in multi-floor view.
- Fixed cases where OutdoorView was disabled because a token was not provided.
- Fixed
onMVFParsednot firing inhydrate(). - Fixed camera animations not being interruptible by default.
- Fixed issues preventing draft map images from being fetched.
- Fixed incorrect click Coordinate being returned in multi-floor view.
- Fixed the
minZoomLevelcalculation on load when map is in portrait orientation.
v6.0.1-beta.32
March 3, 2025
Features
- Added
shortNameproperty to Floor. - Added MapView events for
pre-renderandpost-render. - Added
backgroundColorandbackgroundAlphato global state. - Added getters to return the selected
departureanddesinationfrom the Directions. - Added an option to
show3dMap()to enable Label and Marker occlusion. - Added
location-profileandlocation-categorymap data.
Fixes
- Fixed some 3D models not being placed at their coordinate.
v6.0.1-beta.31
February 26, 2025
Features
- Added new options to
Models.add()andupdateState()formaterialsandverticalOffset. - Added
Camera.getFocusOnTransform()to directly return the necessary camera transform to focus on a target.
Fixes
- Fixed
topColorthrowing a warning when set to'initial'. - Fixed initial polygon and shape altitude being doubled.
v6.0.1-beta.30
February 24, 2025
Fixes
- Improved performance of multi-destination directions.
- Removed the default limit on search results.
v6.0.1-beta.29
February 19, 2025
⚠️ Breaking Changes
Camera.focusOn()now accepts anIFocusable, instead of a union of map elements. This should include the same elements as before.
// ❌ Before
mapView.Camera.focusOn(target); // target is Space | MapObject | Coordinate | etc...
// ✅ After
mapView.Camera.focusOn(target); // target is IFocusable
Features
- Added
mapData.getByExternalId()to return a map element by its external ID. - Added
excludedConnectionsas an option togetDirections().
Fixes
- Fixed marker rank not being respected.
v6.0.1-beta.28
February 11, 2025
Fixes
- Reverts the lighting change from v6.0.1-beta.27.
v6.0.1-beta.27
February 11, 2025
⚠️ Breaking Changes
- Updated the default hover color from
#ff0000to#f6efff.
// ❌ Before
mapView.getGlobalState().geometry.hoverColor; // #ff0000
// ✅ After
mapView.getGlobalState().geometry.hoverColor; // #f6efff
Features
- Increased light intensity to improve contrast and appearance of 3D models.
Fixes
- Fixed a potential crash when building footprints were MultiPolygon.
v6.0.1-beta.26
February 10, 2025
Features
- Added a
.geoJSONproperty in select map data classes to access the underlying GeoJSON. - Added an
interruptibleboolean to the camera options. - Improved
updateStateandgetStateto align their properties. - Improved Labels to dynamically respond to height and visibility changes in the Space that they're attached to.
- Improved the hiding of building footprints under the map geometry.
v6.0.1-beta.25
February 4, 2025
Features
- Added support for setting opacity and height of walls with
updateState(). - Added support for Facades in
updateState(). - Added a new
Text3DAPI to MapView for labelling enterprise Spaces.
Fixes
- Fixed the rotation of the BlueDot heading to always take the shortest path.
v6.0.1-beta.24
January 29, 2025
Features
- Added
MapData.Query.nearest()to return the nearest feature to a point on the map. - Added Facade class representing the exterior geometry of a FloorStack.
Fixes
- Fixed an issue causing Labels to overlap.
v6.0.1-beta.23
January 24, 2025
Features
- Improved the collision detection of Labels. They should now be more stable and adjust their position around the anchor less often.
- Added
Areamap data type.
Fixes
- Fixed
EnterpriseLocationinstances not being translated.
v6.0.1-beta.22
January 14, 2025
Features
- Added support for loading private images via SAS token.
Fixes
- Fixed issue loading map when
languageis set ingetMapData(). - Fixed colliders that extend off viewport being non-interactive.
v6.0.1-beta.21
January 9, 2025
Fixes
- Fixed custom
baseAuthUrinot being set. - Fixed
EnterpriseLocation.instancesnot being populated.
v6.0.1-beta.20
January 8, 2025
⚠️ Breaking Changes
- Renamed
watchBrowserPositiontowatchDevicePositioninBlueDot.enable().
// ❌ Before
mapView.BlueDot.enable({
watchBrowserPosition: true,
});
// ✅ After
mapView.BlueDot.enable({
watchDevicePosition: true,
});
Features
- Expanded the possible max zoom level from 22 to 24. The default remains 22.
- Added a
languageoption togetMapData()to specify the initial map language. - Added
instancesproperty toEnterpriseLocation.
Fixes
- Fixed a type error when passing a Door to
updateState(). - Fixed an error which could be thrown when rapidly adding and removing Markers or Labels.
- Fixed an issue causing all connection types to show a stairs icon.
v6.0.1-beta.19
December 16, 2024
Features
- Added
Navigation.floorStacksgetter.
Fixes
- Fixed
Outdoor.visiblereturning incorrect values. - Fixed
Outdoor.setOpacity()failing when called directly aftershow3dMap(). - Fixed a crash which could occur when
Camera.focusOn()is passed undefined values. - Improved the error message thrown when container height and/or width are 0.
v6.0.1-beta.18
December 11, 2024
- The Mappedin Web SDK has been renamed Mappedin JS for clarity and consistency with the
@mappedin/mappedin-jspackage.
Features
- Enabled
BlueDot.update()to setheading,accuracy, orfloorOrFloorIdprior to receiving an initial position.
Fixes
- Fixed the appearance of Labels when text is on top of the pin.
v6.0.1-beta.17
November 29, 2024
⚠️ Breaking Changes
- An additional value has been added to the
interactiveoption forMarkers.add()called'pointer-events-auto'. This will enable browser pointer events with the marker, making it easier to control with CSS.
// ❌ Before
mapView.Markers.add(space, `<div/>`, {
interactive: true, // Marker will register in the SDK `'click'` and `'hover'` events. Browser pointer events are disabled.
});
// ✅ After
mapView.Markers.add(space, `<div/>`, {
interactive: true, // Marker will register in the SDK `'click'` and `'hover'` events. Browser pointer events are disabled.
});
mapView.Markers.add(space, `<div/>`, {
interactive: 'pointer-events-auto', // Marker will not register in SDK events. Browser pointer events are enabled.
});
Features
- Added
Navigation.setActivePath(),Navigation.setActivePathByDirections()andNavigation.setActivePathIndex()for multi-destination routes. - Added options for
StackedMaps.expand()andStackedMaps.collapse()and new functions to control multi-floor views. - Added a
nodesgetter for a enterprise Connections. - Added
BlueDot.follow()to attach the camera to the BlueDot. - Added a
targetgetter for Labels, Markers, and other map elements. - (React SDK) Improved handling of
MarkerandLabeloptions prop updates.
Fixes
- Fixed issue when rendering older MVFs causing Floor names to be an empty string.
- Fixed missing types in documentation.
v6.0.1-beta.16
November 26, 2024
⚠️ Breaking Changes
- Camera bearing will now always rotate clockwise from north. Previously, this rotation was counterclockwise.
// ❌ Before
mapView.Camera.set({
bearing: 90, // Camera will face west.
});
// ✅ After
mapView.Camera.set({
bearing: 90, // Camera will face east.
});
- Renamed
floortofloorOrFloorIdinBlueDot.update(). This property now accepts either a Floor object or a string floor ID.
// ❌ Before
mapView.BlueDot.update({
floor: floor,
});
// ✅ After
mapView.BlueDot.update({
floorOrFloorId: floor.id,
});
Features
- Added the option to provide an ordered list for the Marker
anchorproperty. The Marker will be placed in the first available position in this list. - Added
blue-dot-state-change,blue-dot-position-updateandblue-dot-errorevents. - Added support for custom
departure,destination, andconnectionMarkers inNavigation.draw(). - Added support for Shapes in
MapView.updateState(). - Added
environmentoption ingetMapData().
Fixes
- Fixed
Camera.focusOn()padding. - Fixed issue with flattened path
nearRadiusandfarRadius.
v6.0.1-beta.15
November 15, 2024
Fixes
- Fixed Path
nearRadiusandfarRadiusoptions not being respected. - Fixed BlueDot position updates failing when heading is
null. - Fixed Navigation
createMarkersoptions not being respected. - Fixed Marker animations only updating during camera events.
v6.0.1-beta.14
November 14, 2024
⚠️ Breaking Changes
getDirections()has been reverted to single destination only. Multi-destination directions can now be generated usinggetDirectionsMultiDestination().
// ❌ Before
const directions = mapView.getDirections(space, [destination1, destination2]);
// ✅ After
const directions = mapView.getDirectionsMultiDestination(space, [destination1, destination2]);
Features
- Added
accessibleflag to connections. - Added
BlueDot.update()method to set the BlueDot position. - Added
interactiveboolean option for paths. Interactive paths will appear in hover and click events.
Fixes
- Fixed TypeScript return types for
getDirections().
v6.0.1-beta.13
November 8, 2024
Features
- Added support for hydrating a map with language packs included.
- Added appearance states for BlueDot.
- Added Outdoor.setOpacity().
- Added support for multi-destination navigation.
- Added externalId to data objects.
- Added getDirections() to MapData.
Fixes
- Fixed a regression causing map to go out of sync on devices with high device pixel ratio.
v6.0.1-beta.12
October 30, 2024
Fixes
- Fixed issue causing multi-floor
Navigation.draw()to show duplicate markers on destination floors.
v6.0.1-beta.11
October 29, 2024
⚠️ Breaking Changes
MapView.Paths.add() has been changed. It will now return a Path directly, while previous it returned Promise<Path>. This should make it easier to remove a path before the animation completes.
// ❌ Before
const path = await mapView.Paths.add(...);
mapView.Paths.remove(path);
// ✅ After
const path = mapView.Paths.add(...);
await path.animation;
mapView.Paths.remove(path);
Features
- Added support for directions smoothing on enterprise maps.
- Added support to remove the watermark for enterprise customers.
- Enabled backend analytics.
Fixes
- Fixed
MapView.Outdoor.setStyle()not always hiding the building footprint after the style changes. - Fixed auth0 tokens always requesting enterprise map data.
- Fixed
MapView.Camera.focusOn()not respectingbearing: 0.
v6.0.1-beta.10
October 25, 2024
Features
- Added
MapView.getState(WALLS.Interior)andMapView.getState(WALLS.Exterior) - Added support for MVF language packs.
- Added support for more image types in Label icons.
- Added Connection-based instructions to directions.
Fixes
- Fixed cases of Path z-fighting.
v6.0.1-beta.9
October 18, 2024
Features
- Added
Outdoor.show()andOutdoor.hide()methods. - Added automatic zoom bounds based on map size to prevent the camera zooming out too far.
getMapData()will now render enterprise maps without any extra flags.- Added options to
Navigation.draw()to set departure and destination marker colors. - Added
FloorStacks to group floors in a single building.
Fixes
- Fixed the reversed latitude and longitude in enterprise connections.
v6.0.1-beta.8
October 11, 2024
Fixes
- Included
MapView.ImagesAPI in the documentation. - Fixed
MapData.getByType('connection')returning an empty array with enterprise maps.
v6.0.1-beta.7
October 10, 2024
⚠️ Breaking Changes
- Prefixed enterprise
Location,Category, andVenueto beEnterpriseLocation,EnterpriseCategory, andEnterpriseVenue.
// ❌ Before
const locations: Location[] = mapView.getByType('location');
const categories: Category[] = mapView.getByType('category');
const venue: Venue = mapView.getByType('venue');
// ✅ After
const locations: EnterpriseLocation[] = mapView.getByType('enterprise-location');
const categories: EnterpriseCategory[] = mapView.getByType('enterprise-category');
const venue: EnterpriseVenue = mapView.getByType('enterprise-venue');
Features
- Added Search API with
MapData.Search.query()andMapData.Search.suggest(). - Added vertical paths between floors in Stacked Maps.
v6.0.1-beta.6
October 10, 2024
Fixes
Navigation.clear()orNavigation.draw()will now cancel a previous draw in progress.- Included
Venue,Location, andCategoryin documentation.
v6.0.1-beta.5
October 9, 2024
Features
- Added image texture properties to
updateState(). - Added
MapView.enableDebug()for inspecting map elements. - Added validation for new Labels and Markers.
- Added
MapView.ImagesAPI for adding images to the map. - Added support for multi-languages and enterprise data.
- Added support for visible doors.
import { DOORS } from '@mappedin/mappedin-js';
mapView.updateState(DOORS.Interior, {
visible: true
});
mapView..updateState(DOORS.Exterior, {
visible: true
});
Fixes
- Fixed a false warning when outdoor view is disabled.
- Fixed the
Floor.namevalue in enterprise maps. - Fixed the camera panning action during zoom while in Stacked Maps.
v6.0.1-beta.4
September 19, 2024
Features
- Added ability to update opacity of individual geometries.
- Added ability to update height of individual geometries.
- Geometry outline color now updates when geometry color changes.
- Added option to set background color and opacity for map.
- Added caching for access token requests.
- Added cleanup when run in overlay mode.
- Added customization options to
BlueDot.enable(). - Added support for rendering images from the mapData.
Fixes
- Fixed the watermark collider not updating position.
- Fixed CORS errors with outdoor tiles.
- Fixed issue with
updateStatenot updating the Label icon. - Fixed issue with resizing the canvas breaking click and hover events.
v6.0.1-beta.3
September 13, 2024
Features
- (React SDK) Added
onLoadprop to most components which returns the instance.
Fixes
- (React SDK) Fixed overlapping Markers rendering in React StrictMode.
v6.0.1-beta.2
September 11, 2024
We've published an additional package @mappedin/react-sdk. This SDK exports React components and hooks in addition to all the same functionality as the @mappedin/mappedin-js package.
Features
- Added the
Space.doorsgetter which returns allDoors associated with aSpace.
Fixes
- Fixed
Camera.focusOn()not respecting the global tilting limits. - Fixed
Camera.focusOn()not respecting the pan bounds of the map.
v6.0.1-beta.1
September 5, 2024
⚠️ Breaking Changes
- The default
minZoomLevelhas been changed to 12 from its previously approximate 13.03 value. The defaultmaxZoomLevelremains 22. The documentation has been updated to show these values.
// ❌ Before
mapView.Camera.minZoomLevel; // ~13.03
// ✅ After
mapView.Camera.minZoomLevel; // 12
- Renamed
CustomGeometrytoShapes.
// ❌ Before
mapView.CustomGeometry.add(...);
// ✅ After
mapView.Shapes.add(...);
Features
- Improved
Camera.focusOn()to contain the bounding box of the space or object. Camera.focusOn()now accepts a Floor.
Fixes
- Fixed the
initialFlooroption not being respected. - Fixed Markers and Labels rendering over top of the watermark.
- Fixed issues with initial camera positioning and state.
- Fixed issues with camera projection after adjusting the min and max zoom levels.
- Fixed cursor state not updating after camera animations complete.
v6.0.1-beta.0
August 26, 2024
Mappedin JS v6 is now in beta. While many of the core features have been implemented, we’re continuing to rapidly iterate and improve the product. We welcome all customer feedback.
Features
- Added warnings when a focusOn() animation is outside of the camera boundaries.
Fixes
- Resolved issues with setting the camera state during initialization and runtime.
v6.0.1-alpha.38
August 21, 2024
Features
- Added BlueDot as an experimental option.
Fixes
- Resolved issues with ultrawide monitors with device pixel ratio >= 2.
v6.0.1-alpha.37
August 19, 2024
Features
- Added options to dynamically control routing by creating zones with path cost.
Fixes
- Fixed issue where interactive spaces would sometimes remain clickable after floor change.
v6.0.1-alpha.36
August 14, 2024
Features
- Added optional animated path arrows.
v6.0.1-alpha.35
August 12, 2024
Features
- Added an
isInView()function to the MapView, which can detect if a 3D element is within the current viewport. - Added the array of clicked floors to the
MapView.on('click')payload.
Fixes
- Fixed
shadingAndOutlines: falseto properly disable outlines. - Fixed Markers always rendering beneath Labels. Markers will now be on top.
- Fixed the watermark rendering behind 3D paths.
- Fixed cases where
Outdoor.setStyle()would not hide the outdoor geometry. - Fixed issues with updating the style of exterior walls.
- Fixed
MVFStyleandMVFStyleCollectiontypes not being exported.
v6.0.1-alpha.34
August 2, 2024
⚠️ Breaking Changes
- Previously, setting
outdoorView.tokento a falsey value would disable outdoor view. This is no longer the case. To disable outdoor view, setoutdoorView.enabled: falseinshow3dMapoptions.
// ❌ Before
show3dMap(el, mapData, {
outdoorView: {
token: '', // Outdoor view disabled.
},
});
// ✅ After
show3dMap(el, mapData, {
outdoorView: {
enabled: false,
},
});
- Removed the
updateZoomLimitsproperty ofCamera.focusOn(). Zoom levels will now be clamped between the min and max zoom of the SDK.
// ❌ Before
mapView.Camera.focusOn(space, {
updateZoomLimits: true, // Will extend min and/or max zoom level to fit the space.
});
// ✅ After
mapView.Camera.setMinZoomLevel(12); // Set the min zoom level to the desired value.
mapView.Camera.setMaxZoomLevel(22); // Set the max zoom level to the desired value.
mapView.Camera.focusOn(space);
Features
- Added a new exported function,
createMapLibreOverlay(). This can be used to add Mappedin indoor maps to Maplibre viaaddControl(). - Added new options to control the gradient shading on the sides of geometry.
- Added a new API for adding and removing 3D Models.
- Added a new API for adding and removing custom geometry.
- Added the
outdoorView.enabledflag to turn on or off the outdoor map. - Added toggle-able visibility state to geometry.
- Added a "Provide Feedback" link in the bottom right corner. This will enable Mappedin to gather feedback and improve the product.
Fixes
- Fixed an issue where
MapView.Labels.all()would prevent polygon hover color from being set. - Fixed an issue preventing label icons from loading.
- Fixed a Label rendering issue on Intel Iris GPUs.
- Fixed an issue with the request URL for MVF
viewIds. - Fixed an issue where label images would fade in and out as they repositioned.
v6.0.1-alpha.33
July 24, 2024
⚠️ Breaking Changes
Paths.add()now returns a promise, allowing the animation to be awaited.
// ❌ Before
const path = mapView.Paths.add(...);
// ✅ After
const path = await mapView.Paths.add(...);
- Style changes will now fire the
outdoor-style-loadedevent, instead of firing theoutdoor-view-loadedevent. The latter will only be fired on initial load.
// ❌ Before
mapView.on('outdoor-view-loaded', () => {
console.log('style changed or initial load');
});
// ✅ After
mapView.on('outdoor-view-loaded', () => {
console.log('initial load');
});
mapView.on('outdoor-style-loaded', () => {
console.log('style changed');
});
Features
- The Maplibre map is now exposed via
Outdoor.mapfor advanced usage. - Added support for geometry textures when provided in the map data.
- Added a light option for the Mappedin watermark.
- The map geometry can be updated during runtime by passing a new style to
Style.setFromStyleCollection. - Added
viewIdproperty togetMapDatato specify the Map View to fetch. - Improved camera controls and interactions with multi-finger touch. Multi-finger touch will no longer trigger a click event, and releasing a finger will no longer abruptly end camera movement.
Fixes
- Fixed cases where a simplified path would cut corners too sharply.
v6.0.1-alpha.32
July 17, 2024
Features
focusOnwill now accept an Annotation as the target.
Fixes
- Fixed an issue causing
hiddenLayersUnderGeometryto be ignored on some maps. - Fixed an issue where multi-floor paths could draw a straight line from start to finish, ignoring connections.
v6.0.1-alpha.31
July 15, 2024
Features
- Added a "low" option for marker and label rank.
Fixes
- Fixed an issue where
layersHiddenByGeometrywould fail if a layer name was not present in the outdoor style. - Fixed an issue where marker z-index wasn't 3D accurate. The marker nearest to the camera will now be on top.
v6.0.1-alpha.30
July 8, 2024
Fixes
- Duplicate marker and label IDs are now rejected.
- Fixed an issue preventing the outdoor-view-loaded event from firing.
- Fixed a crash which could occur when the map has no interior walls.
v6.0.1-alpha.29
July 4, 2024
Features
getMapDatanow optionally accepts anaccessTokenstring in place ofkeyandsecret.
v6.0.1-alpha.28
July 2, 2024
Fixes
- Resolves an issue where maps with multiple styles for spaces and obstructions would fail to load all geometry.
v6.0.1-alpha.27
July 2, 2024
Fixes
- Resolved an issue where iOS would darken the canvas after the user has * moved to another tab.
- Resolved an issue where applying a new outdoor style could add layers above the indoor map.
- Duplicate entity IDs in the data are now rejected.
v6.0.1-alpha.26
June 28, 2024
This update introduces a completely new SDK architecture enabling faster load times, less memory consumption, real time 2D colliders, and more. Please reach out if there are any unexpected changes after upgrading to v6.0.1-alpha.26.
⚠️ Breaking Changes
- Increased the default
iconSizeof label icons from 10 pixels to 20 pixels.
// ❌ Before
const label = mapView.Labels.add(space, space.name);
mapView.getState(label).iconSize; // 10
// ✅ After
const label = mapView.Labels.add(space, space.name);
mapView.getState(label).iconSize; // 20
- Decreased the default
iconPaddingof label icons from 4 pixels to 2 pixels.
// ❌ Before
const label = mapView.Labels.add(space, space.name);
mapView.getState(label).iconPadding; // 4
// ✅ After
const label = mapView.Labels.add(space, space.name);
mapView.getState(label).iconPadding; // 2
Camera.animatehas been renamed toCamera.animateTo.
// ❌ Before
mapView.Camera.animate({
bearing: 90,
});
// ✅ After
mapView.Camera.animateTo({
bearing: 90,
});
- The
priorityproperty for labels and markers has been renamedrankinupdateState.
// ❌ Before
mapView.Labels.updateState(label, {
priority: 'low',
});
// ✅ After
mapView.Labels.updateState(label, {
rank: 'low',
});
- The elements in the DOM have shifted. It is not recommended to rely on or modify the Mappedin elements in the DOM.
| Element | Before | After |
|---|---|---|
| Map Canvas | Top level | The map canvas is now a child of <div class="maplibre-canvas-container"> |
| Attribution | Top level | Attribution elements are now children of <div class="mappedin-control-container"> |
| Colliders | Children of <div class="mappedin__smart-collision-engine__container> | Colliders are now children of <div class="mappedin-2d-entities"> |
Features
- Colliders such as labels and markers adjust position in real time during camera events.
- Initial camera bearing, pitch, and zoomLevel can be set in the options for
show3dMap.
await show3dMap(document.getElementById('mappedin-map'), mapData, {
bearing: 45,
pitch: 45,
zoomLevel: 19,
});
Labels.allwill automatically use the icon for spaces and points of interest if one has been set in Mappedin Maker.- The color of the top of the walls can now be set independently of the rest of the wall.
await show3dMap(document.getElementById('mappedin-map'), mapData, {
wallTopColor: '#000000',
});
- The ‘click’ event returns a new property,
pointerEvent, which can be used to differentiate between mouse clicks.
mapView.on('click', async (event) => {
const [space] = event.spaces;
if (!space) return;
switch (event.pointerEvent.button) {
case 0:
const { coordinate } = event;
const label = space.name || `Clicked: Lat: ${coordinate.latitude} Lon: ${coordinate.longitude}`;
mapView.Labels.add(coordinate, label);
break;
case 2:
mapView.Camera.focusOn(space);
break;
}
});
- Outdoor layers below indoor geometry can be hidden using the
outdoorView.layersHiddenByGeometryoption forshow3dMap.
Fixes
- Fixed loading of geometry styles.
- Reduced memory consumption.
- Reduced bundle size.
v6.0.1-alpha.25
June 13, 2024
- Version bump only.
v6.0.1-alpha.24
June 12, 2024
⚠️ Breaking Changes
outdoorViewTokenandoutdoorViewStylehave been deprecated in favor ofoutdoorView.tokenandoutdoorView.styleonTShow3DMapOptions. They will be removed in a future release.
// ❌ Before
show3dMap(el, mapData, {
outdoorViewToken: '',
outdoorViewStyle: '',
});
// ✅ After
show3dMap(el, mapData, {
outdoorView: {
token: '',
style: '',
},
});
- Multi-finger touch will no longer count as a click event.
Features
- Marker position can now be updated instantly using
setPositionor over time usinganimateTo.
Fixes
- Fixed a case where some generic styles were being exported.
v6.0.1-alpha.23
May 22, 2024
Features
- Customize the outdoor style using the
outdoorViewStyleproperty ofTShow3DMapOptions. The property expects a URL to a style specification conforming to the Maplibre Style Spec.
Fixes
- The wall shading now darkens the color instead of setting it grey. Shading is now noticeable on all objects.
| Before | After |
|---|---|
- The watermark should no longer disappear at some zoom levels. As a side effect, the default sizing of the watermark has changed.
| Before | After |
|---|---|
| Sizing was based on vertical height of the screen. | Sizing is now 150px wide by default. |
v6.0.1-alpha.22
May 15, 2024
⚠️ Breaking Changes
Markers.removeAll()now has a return type ofMarker[].
// ❌ Before
mapView.Markers.removeAll(); // Returns void
// ✅ After
const markers = mapView.Markers.removeAll(); // Returns Marker[]
Features
- The type of
TCameraAnimationOptions.easingis now typeEasingCurve. The accepted values of this property remain the same.
v6.0.1-alpha.21
May 13, 2024
⚠️ Breaking Changes
- The default value of label iconFit has been changed to
"cover". Previously, the default value was"fill".
// ❌ Before
const label = mapView.Labels.add(space, space.name);
mapView.getState(label).iconFit; // 'fill'
// ✅ After
const label = mapView.Labels.add(space, space.name);
mapView.getState(label).iconFit; // 'cover'
Fixes
- Fixed an issue causing the
onMVFParsedcallback ofgetMapDatato never fire. - Fixed an issue with watermark visibility.
v6.0.1-alpha.20
May 2, 2024
⚠️ Breaking Changes
- Added support for JPEG and PNG images in Floating Label icons. In addition to this, icons are now clipped in a circle to prevent overflow. New appearance options have been added to customize the icons.
mapView.Labels.add(space, space.name, {
appearance: {
marker: {
iconSize: 20,
iconFit: 'fill',
iconPadding: 4,
icon: 'http://www.example.com/dog.jpeg',
},
},
});
The new iconFit property determines how the icon should be scaled within the circle. 'fill' is now default.
| Fill (default) | Contain | Cover |
|---|---|---|
The padding property sets the amount of space between the icon and the border. The icon may shrink based on this value.
padding: 0 | padding: 10 |
|---|---|
Features
- Added new options to customize the location of the watermark. The watermark
paddingoption now accepts an object withtop,right,bottom,leftto fine-tune it.
v6.0.1-alpha.19
April 30, 2024
Features
- It is now possible to specify the radius of the raycast for directions smoothing.
mapView.getDirections(departure, destination, {
smoothing: { radius: 3 }, // 3 metre radius
});
By default, radius is set to 1.8 metres.
Fixes
- Fixed a race condition when doing
mapView.Navigation.clear()directly after callingmapView.Navigation.draw(directions).
v6.0.1-alpha.18
April 25, 2024
Fixes
- Fixed an issue where directions may be missing distances between instructions.
v6.0.1-alpha.17
April 23, 2024
Fixes
- Resolved an issue with installing the package from NPM.
v6.0.1-alpha.16
April 23, 2024
- Version bump only.
v6.0.1-alpha.15
April 19, 2024
Fixes
- Connection weights were not being properly accounted for, causing all connection types to be prioritized equally. This has been corrected.
- Fixed
SafeAreaInsetsnot working when focusing on a single point.
v6.0.1-alpha.14
April 12, 2024
- Version bump only
v6.0.1-alpha.13
April 10, 2024
Features
- The MapView contains a new controller called
Exporter. With Exporter, the rendered map can be converted to GLTF.
const gltf = await mapView.Exporter.getCurrentSceneGLTF();
v6.0.1-alpha.12
April 2, 2024
Fixes
- The navigation path should no longer traverse through walls.
- Fixed an issue with the watermark.
v6.0.1-alpha.11
March 26, 2024
Fixes
- Resolved an issue where some maps didn't render exterior walls. In cases where the map is missing styles for exterior walls, they will default to the indoor wall style.
v6.0.1-alpha.10
March 25, 2024
- Version bump only.
v6.0.1-alpha.9
March 19, 2024
- Version bump only.
v6.0.1-alpha.8
March 18, 2024
Fixes
- Halved memory usage during map initial load.
- The outline effect no longer retains line thickness while zooming out with inertia.
- Labels render correctly now on Intel integrated GPUs.
v6.0.1-alpha.7
March 12, 2024
⚠️ Breaking Changes
- The default color of the exit connection navigation button is now blue instead of purple.
Fixes
- The
focusOnanimation no longer resets the min and max zoom levels. - If directions have less than 2 coordinates, navigation will now warn and prevent drawing the path.
- The
Coordinateclass is now data layer agnostic, making it easier to test and create directly.
v6.0.1-alpha.5
February 28, 2024
Features
- All map data objects now accurately include hyperlink metadata under the property
links.
Fixes
- The default
typefor map data objects is nowobject, instead ofunknown. This will no longer warn of unknown object kind.
v6.0.1-alpha.4
February 27, 2024
Fixes
- The polygon outline opacity is now interpolated as the camera zooms out. This improves the outline appearance at the furthest zoom level.
v6.0.1-alpha.3
February 27, 2024
We're testing a new version of Mappedin JS and we'd love to hear your feedback! Mappedin JS v6 alpha adds first class support for maps built with Mappedin Maker.
Please note that breaking changes will occur. We encourage you to contact us with any issues or feedback, and regularly check this page for detailed release notes and API changes.