> For the complete documentation index, see [llms.txt](https://docs.mapsindoors.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.mapsindoors.com/other/changelog/web-sdk/v3.md).

# V3

### \[3.12.1] - 2020-10-06[​](https://docs.mapsindoors.com/changelogs/web/#3121---2020-10-06) <a href="#id-3121---2020-10-06" id="id-3121---2020-10-06"></a>

#### Fixed[​](https://docs.mapsindoors.com/changelogs/web/#fixed-52) <a href="#fixed-52" id="fixed-52"></a>

* The search algorithm in MICommon has been updated so a partial match on the start of a word would be ranked higher.

### \[3.12.0] - 2020-08-18[​](https://docs.mapsindoors.com/changelogs/web/#3120---2020-08-18) <a href="#id-3120---2020-08-18" id="id-3120---2020-08-18"></a>

#### Added[​](https://docs.mapsindoors.com/changelogs/web/#added-26) <a href="#added-26" id="added-26"></a>

* Locations for Venues, Buildings, and Floors is now included in the results from LocationsService.getLocations().
* getFieldForKey on Locations objects for getting data for custom property with key, disregarding casing of key.

#### Fixed[​](https://docs.mapsindoors.com/changelogs/web/#fixed-53) <a href="#fixed-53" id="fixed-53"></a>

* Filtering locations using categories in LocationsService.getLocations().
* Filtering locations using venue or building had no effect in LocationsService.getLocations().
* Sometimes querying using the take parameter would return fewer results than expected.

### \[3.11.0] - 2020-07-27[​](https://docs.mapsindoors.com/changelogs/web/#3110---2020-07-27) <a href="#id-3110---2020-07-27" id="id-3110---2020-07-27"></a>

#### Added[​](https://docs.mapsindoors.com/changelogs/web/#added-27) <a href="#added-27" id="added-27"></a>

* Added support for [OpenID Connect](https://openid.net/connect/) authentication flow.

#### Fixed[​](https://docs.mapsindoors.com/changelogs/web/#fixed-54) <a href="#fixed-54" id="fixed-54"></a>

* Fixed issue where the SDK would throw an error if locations were requested before data had been loaded.

### \[3.10.0] - 2020-06-11[​](https://docs.mapsindoors.com/changelogs/web/#3100---2020-06-11) <a href="#id-3100---2020-06-11" id="id-3100---2020-06-11"></a>

#### Added[​](https://docs.mapsindoors.com/changelogs/web/#added-28) <a href="#added-28" id="added-28"></a>

* Added option to DirectionsRenderer to control if the map's viewport will be fitted to the bounds of the rendered route.

### \[3.9.0] - 2020-05-02[​](https://docs.mapsindoors.com/changelogs/web/#390---2020-05-02) <a href="#id-390---2020-05-02" id="id-390---2020-05-02"></a>

#### Added[​](https://docs.mapsindoors.com/changelogs/web/#added-29) <a href="#added-29" id="added-29"></a>

* This release is build on MICommon

### \[3.8.1] - 2020-04-01[​](https://docs.mapsindoors.com/changelogs/web/#381---2020-04-01) <a href="#id-381---2020-04-01" id="id-381---2020-04-01"></a>

#### Fixed[​](https://docs.mapsindoors.com/changelogs/web/#fixed-55) <a href="#fixed-55" id="fixed-55"></a>

* Inaccessible localStorage in the browser will no longer crash the SDK.

### \[3.8.0] - 2020-03-02[​](https://docs.mapsindoors.com/changelogs/web/#380---2020-03-02) <a href="#id-380---2020-03-02" id="id-380---2020-03-02"></a>

#### Changed[​](https://docs.mapsindoors.com/changelogs/web/#changed-10) <a href="#changed-10" id="changed-10"></a>

* Added externalId property on location properties object. roomId is now deprecated.

### \[3.7.1] - 2020-02-06[​](https://docs.mapsindoors.com/changelogs/web/#371---2020-02-06) <a href="#id-371---2020-02-06" id="id-371---2020-02-06"></a>

#### Fixed[​](https://docs.mapsindoors.com/changelogs/web/#fixed-56) <a href="#fixed-56" id="fixed-56"></a>

* PositionControl no longer regards saved position permission as invoked by clicking on the position control.

### \[3.7.0] - 2020-01-31[​](https://docs.mapsindoors.com/changelogs/web/#370---2020-01-31) <a href="#id-370---2020-01-31" id="id-370---2020-01-31"></a>

#### Added[​](https://docs.mapsindoors.com/changelogs/web/#added-30) <a href="#added-30" id="added-30"></a>

* PositionControl to show device position on the map.

#### Fixed[​](https://docs.mapsindoors.com/changelogs/web/#fixed-57) <a href="#fixed-57" id="fixed-57"></a>

* Error response body is now relayed correctly.

### \[3.6.0] - 2020-01-02[​](https://docs.mapsindoors.com/changelogs/web/#360---2020-01-02) <a href="#id-360---2020-01-02" id="id-360---2020-01-02"></a>

#### Changed[​](https://docs.mapsindoors.com/changelogs/web/#changed-11) <a href="#changed-11" id="changed-11"></a>

* ShareService.directionsToPhone now requires country code to be provided seperately.

### \[3.5.1] - 2019-12-19[​](https://docs.mapsindoors.com/changelogs/web/#351---2019-12-19) <a href="#id-351---2019-12-19" id="id-351---2019-12-19"></a>

#### Changed[​](https://docs.mapsindoors.com/changelogs/web/#changed-12) <a href="#changed-12" id="changed-12"></a>

* Changed the locations service to utilize the new backend apis new url structure.

#### Fixed[​](https://docs.mapsindoors.com/changelogs/web/#fixed-58) <a href="#fixed-58" id="fixed-58"></a>

* Fixed a bug where VenuesService.getBuildings calls for solutions/venues with no buildings caused rejection.

### \[3.5.0] - 2019-12-17[​](https://docs.mapsindoors.com/changelogs/web/#350---2019-12-17) <a href="#id-350---2019-12-17" id="id-350---2019-12-17"></a>

#### Added[​](https://docs.mapsindoors.com/changelogs/web/#added-31) <a href="#added-31" id="added-31"></a>

* Share service with function to send route directions via text message to phone.

#### Fixed[​](https://docs.mapsindoors.com/changelogs/web/#fixed-59) <a href="#fixed-59" id="fixed-59"></a>

* Fixed a bug where user roles were not passed along to distance matrix call.
* Fixed bug where getBuilding returned undefined until the map had been moved.

### \[3.4.1] - 2019-10-30[​](https://docs.mapsindoors.com/changelogs/web/#341---2019-10-30) <a href="#id-341---2019-10-30" id="id-341---2019-10-30"></a>

#### Added[​](https://docs.mapsindoors.com/changelogs/web/#added-32) <a href="#added-32" id="added-32"></a>

* Client side caching. Most request are now beeing cached in the browser.
* Added support for separate visibility control of label and icon

#### Fixed[​](https://docs.mapsindoors.com/changelogs/web/#fixed-60) <a href="#fixed-60" id="fixed-60"></a>

* The DirectionsService will now return a route object with the status "ZERO\_RESULTS" if no route could be calculated. Before it unintentional threw an error.
* Fixed a bug where the imageURL property on locations sometimes would be named imageurl.

### \[3.4.0] - 2019-08-28[​](https://docs.mapsindoors.com/changelogs/web/#340---2019-08-28) <a href="#id-340---2019-08-28" id="id-340---2019-08-28"></a>

#### Changed[​](https://docs.mapsindoors.com/changelogs/web/#changed-13) <a href="#changed-13" id="changed-13"></a>

* Floor calculation when building comes into focus according to agreed upon strategy, including respecting default floor of a building.
* The filter method now respects the fitView boolean also when clearing filter.

#### Fixed[​](https://docs.mapsindoors.com/changelogs/web/#fixed-61) <a href="#fixed-61" id="fixed-61"></a>

* Make sure selected/highlighted floor is always visible (no need to scroll) when focusing building.

### \[3.3.2] - 2019-08-15[​](https://docs.mapsindoors.com/changelogs/web/#332---2019-08-15) <a href="#id-332---2019-08-15" id="id-332---2019-08-15"></a>

#### Fixed[​](https://docs.mapsindoors.com/changelogs/web/#fixed-62) <a href="#fixed-62" id="fixed-62"></a>

* App config cache is now based on solution to avoid misconfiguration when switching solution.

### \[3.3.1] - 2019-07-31[​](https://docs.mapsindoors.com/changelogs/web/#331---2019-07-31) <a href="#id-331---2019-07-31" id="id-331---2019-07-31"></a>

#### Fixed[​](https://docs.mapsindoors.com/changelogs/web/#fixed-63) <a href="#fixed-63" id="fixed-63"></a>

* No longer assume that location `imageURL` always is received in lowercase from the backend.

### \[3.3.0] - 2019-07-15[​](https://docs.mapsindoors.com/changelogs/web/#330---2019-07-15) <a href="#id-330---2019-07-15" id="id-330---2019-07-15"></a>

#### Added[​](https://docs.mapsindoors.com/changelogs/web/#added-33) <a href="#added-33" id="added-33"></a>

* `SolutionsService.getUserRoles()` gets a list of user roles that can be used for filtering the directions result. This prevents routes from going through restriced areas.

#### Changed[​](https://docs.mapsindoors.com/changelogs/web/#changed-14) <a href="#changed-14" id="changed-14"></a>

* userRoles parameter added to DirectionsService.getRoute() for filtering the directions result. The userRoles paramter takes a array of user role ids.
* Directions to a venue can now make directions via a parking lot when driving or bicycling.

### \[3.2.3] - 2019-06-27[​](https://docs.mapsindoors.com/changelogs/web/#323---2019-06-27) <a href="#id-323---2019-06-27" id="id-323---2019-06-27"></a>

#### Fixed[​](https://docs.mapsindoors.com/changelogs/web/#fixed-64) <a href="#fixed-64" id="fixed-64"></a>

* Fixed a bug in `mapsindoors.DirectionsRenderer`. When `setRoute(null)` was called to remove the route from map it would throw an error.
* Fixed the "Cannot read property 'toJSON()' of null" error caused by looking for buildings in view before the map has a bounding box.

### \[3.2.2] - 2019-06-24[​](https://docs.mapsindoors.com/changelogs/web/#322---2019-06-24) <a href="#id-322---2019-06-24" id="id-322---2019-06-24"></a>

#### Changed[​](https://docs.mapsindoors.com/changelogs/web/#changed-15) <a href="#changed-15" id="changed-15"></a>

* Fixed build toolchain to prevent IE11 crash.

### \[3.2.1] - 2019-05-24[​](https://docs.mapsindoors.com/changelogs/web/#321---2019-05-24) <a href="#id-321---2019-05-24" id="id-321---2019-05-24"></a>

#### Added[​](https://docs.mapsindoors.com/changelogs/web/#added-34) <a href="#added-34" id="added-34"></a>

* Added the ability to change the api key at runtime via `mapsindoors.MapsIndoors.setApiKey(key);`
* Added the functions to get and set the language at runtime:
  * `mapsindoors.MapsIndoors.setLanguage(language);`
  * `mapsindoors.MapsIndoors.getLanguage();`

#### Changed[​](https://docs.mapsindoors.com/changelogs/web/#changed-16) <a href="#changed-16" id="changed-16"></a>

* The SDK now selects the fastest backend server based on a latency test.
* A list of known backends is stored in localStorage for the SDK to choose from. The list of known backends are updated automatically as part of the latency test.

### \[3.1.1] - 2019-03-14[​](https://docs.mapsindoors.com/changelogs/web/#311---2019-03-14) <a href="#id-311---2019-03-14" id="id-311---2019-03-14"></a>

#### Fixed[​](https://docs.mapsindoors.com/changelogs/web/#fixed-65) <a href="#fixed-65" id="fixed-65"></a>

* Fixed a crash caused by setting mapStyle via the MapsIndoors constructor.

### \[3.1.0] - 2019-03-13[​](https://docs.mapsindoors.com/changelogs/web/#310---2019-03-13) <a href="#id-310---2019-03-13" id="id-310---2019-03-13"></a>

#### Changed[​](https://docs.mapsindoors.com/changelogs/web/#changed-17) <a href="#changed-17" id="changed-17"></a>

* It's now posible to set a displayRule for a list of location ids or types. `myMapsIndoors.setDisplayRule(["abc", "cde", "fgh"], { visible: false });`

#### Added[​](https://docs.mapsindoors.com/changelogs/web/#added-35) <a href="#added-35" id="added-35"></a>

* Added the functions setMapStyle, getMapStyle and getMapStyles to MapsIndoors.
  * setMapStyle() set a new indoor map style.
  * getMapStyle() get the current style of the indoors map.
  * getMapStyles() get a list of availeble indoor map styles.

### \[3.0.5] - 2019-02-27[​](https://docs.mapsindoors.com/changelogs/web/#305---2019-02-27) <a href="#id-305---2019-02-27" id="id-305---2019-02-27"></a>

#### Fixed[​](https://docs.mapsindoors.com/changelogs/web/#fixed-66) <a href="#fixed-66" id="fixed-66"></a>

* Optimized map performance by reducing the amount POIs

### \[3.0.2] - 2019-02-19[​](https://docs.mapsindoors.com/changelogs/web/#302---2019-02-19) <a href="#id-302---2019-02-19" id="id-302---2019-02-19"></a>

#### Fixed[​](https://docs.mapsindoors.com/changelogs/web/#fixed-67) <a href="#fixed-67" id="fixed-67"></a>

* Support for IE 11

### \[3.0.0] - 2018-10-23[​](https://docs.mapsindoors.com/changelogs/web/#300---2018-10-23) <a href="#id-300---2018-10-23" id="id-300---2018-10-23"></a>

#### Changed[​](https://docs.mapsindoors.com/changelogs/web/#changed-18) <a href="#changed-18" id="changed-18"></a>

* Script must now be loaded with apikey parameter instead of solutionId, e.g. `https://app.mapsindoors.com/mapsindoors/js/sdk/mapsindoors-3.0.0-rc0.js?apikey=57e4e4992e74800ef8b69718`
* All services are now shared instances, so they cannot be newed. E.g. you must rewrite `let directionsService = new mapsindoors.DirectionsService();` to `let miDirectionsService = mapsindoors.DirectionsService;`
* Location click events for a MapsIndoors instance are now subscribable with the event name `click` instead of `location_click`, e.g. `google.maps.event.addListener(myMapsIndoors, 'click', (poi) => { console.log(poi.id); });`
* `DirectionService.route()` has been renamed to `DirectionService.getRoute()`.
* `DirectionRenderer.setDirections()` has been renamed to `DirectionRenderer.setRoute()`.
* `DirectionService.getRoute()` request parameter `travelMode` has been renamed to `mode`.
* `DirectionRenderer.setDirections()` now only accepts a single route instead of a route result, e.g. `DirectionRenderer.setRoute(myRouteResult.routes[0])`.
* To highlight locations on a map through a `MapsIndoors` instance, instead of providing a query object to `MapsIndoors.find()`, you must now pass a list of `locationId`'s to `MapsIndoors.filter()`.

#### Removed[​](https://docs.mapsindoors.com/changelogs/web/#removed-1) <a href="#removed-1" id="removed-1"></a>

* Removed `MapsIndoors.find()`, use `MapsIndoors.filter()` instead
* Removed `MapsIndoors.locate()`, use `MapsIndoors.filter()` instead

#### Added[​](https://docs.mapsindoors.com/changelogs/web/#added-36) <a href="#added-36" id="added-36"></a>

* Icons for single Locations can now be updated independantly, by referencing the location id. E.g. `myMapsIndoors.setDisplayRule('some-location-id', { icon: { url: 'https://icon.url' } });`

#### Fixed[​](https://docs.mapsindoors.com/changelogs/web/#fixed-68) <a href="#fixed-68" id="fixed-68"></a>

* Fixed a rendering bug that was causing MapsIndoors' map markers to occasionally disappear
