What’s new
This page lists the changes that affect integrators in each stable release of @mapvx/web-components-ssr, newest first. The 0.x versions were published as @mapvx/website-component: see Migrating from 0.x.
Across every 1.x release, the <mapvx-website> tag, the names and default values of its attributes, its two events (userAction and cardSelected) and their payloads, and the initial-data format stayed the same. Changes in behavior are listed under each release.
Upgrading from 1.2.x or earlier? 1.3.0 changed how main.js must be loaded. Pages that load it with a classic <script> tag stop rendering the component.
Release channels
# Stable release (npm "latest" tag), pinned to the exact version
npm install --save-exact @mapvx/web-components-ssr@1.6.1
# Prerelease (npm "dev" tag), for testing only
npm install @mapvx/web-components-ssr@dev
# Show the current tags and every published version
npm view @mapvx/web-components-ssr dist-tags
npm view @mapvx/web-components-ssr versions| npm tag | What it points to | Use it for |
|---|---|---|
latest | The newest stable release (1.6.1). | Production, with a pinned version |
dev | Prereleases with a -dev.N suffix, such as 1.6.1-dev.1. It can point to a version older than latest. | Trying changes before a stable release |
rc | 1.0.0-rc.1, a release candidate from before 1.0.0. The tag has not moved since. | Nothing |
Pin the exact version you tested, on npm and in CDN URLs (@1.6.1, not @latest). The chunk file names that main.js loads can change from one release to the next, and jsDelivr lets browsers cache @latest for up to 7 days, so a floating version can pair an old main.js with files from a newer release.
The full list of versions is on the npm versions page . The SSR helper, @mapvx/web-components-ssr-helpers, is versioned separately; its current version is 0.1.1.
1.6.1
Released 2026-08-17.
Fixes
- The building that a hub or mall map enters is no longer listed as a place inside itself in the grid, the search results or the route origin and destination pickers. A
?destination=<building id>deep link still opens the route screen for it (Deep links). - Routes inside a building no longer remove the building’s indoor floor plan from the map while the route animates.
1.6.0
Released 2026-08-15.
Features
- The visitor’s Grid View or Map View choice now survives page reloads. It is saved in
localStorageunder the keymapvx:active-view(valuegridormap) each time the visitor toggles the view. Storage errors, for example in private browsing, are ignored.
Breaking or action required
- Behavior change: a saved choice takes precedence over the
default-to-mapattribute, which now only decides the first view for visitors who have never toggled it. The key is per origin, so it applies to every<mapvx-website>and every institution on your site. If a page must always open in the view thatdefault-to-mapsets, remove the key before the bundle loads. This also discards returning visitors’ choice. See Remembered view.
<script>
try { localStorage.removeItem('mapvx:active-view') } catch (e) {}
</script>
<script type="module" src="https://unpkg.com/@mapvx/web-components-ssr@1.6.1/dist/browser/main.js"></script>
<mapvx-website api-key="YOUR_API_KEY" institution-id="YOUR_INSTITUTION_ID" default-to-map="true"></mapvx-website>1.5.4
Released 2026-08-15.
Fixes
- Fixes a blank map on the first Map View load inside server-rendered hosts such as Next.js or Angular SSR, where the map container measured 0 px when the map was created. The map now resizes as soon as its container gets real dimensions, and the map element fills the height of the component’s map area. See The map stays blank.
1.5.3
Released 2026-08-15.
Fixes
- Removes an
Uncaught (in promise) Error: Map not createdthat versions 1.4.1 to 1.5.2 could print to your page’s console, and report to your own error tracking, when the component entered a building before the map had been created. A later attempt for the same building now also loads its floor plan correctly.
1.5.2
Released 2026-08-15.
Fixes
- The first Map View load no longer shows the outdoor base map without the building’s floor plan until the visitor navigates away and back. The home screen now waits for the floor plan before setting the floor and the camera.
1.5.1
Released 2026-08-15.
Fixes
- The accessible restroom and elevator icons added in 1.5.0 now appear. They are matched to the
restroomandEntrance Elevatorcategories.
1.5.0
Released 2026-08-14.
Features
- New icons on map markers and place profiles for the categories “Parking pay station”, “Accessible entrance”, accessible restrooms and elevators. In 1.5.0 the restroom and elevator icons fell back to the default icon; 1.5.1 fixes them.
- The bundled Angular is updated to 22.1.2.
1.4.1
Released 2026-08-14.
Fixes
- Indoor maps render again. Entering a building now loads its floor plan; before, the map kept the outdoor style or the previous building’s style, a problem present since 0.13.4. A route now waits for the floor plan to finish loading, so the floor plan change can no longer erase the route, and the place profile shows the floors of the right building.
- The category tab bar is hidden when “All” is its only entry.
1.4.0
Released 2026-08-13.
Features
- The “Start Route” button on the route screen now works. It starts a step-by-step route with a “Next step” control on the map, and a banner above the route details shows the current step’s instruction.
- The route info panel shows the floors the route passes through, for example “Level 1 → Level 3”, plus “Elevator” when every floor change is an elevator ride.
- TypeScript: the
AnimationStateenum gainsStepping = 4. It is the last member, so the existing values (NotStarted = 0toFinished = 3) keep their numbers. See Other models.
Fixes
- Floors are labeled “Level N” from the floor’s level number instead of the untranslated name from the content system (such as “Piso”). The floor selector is hidden in buildings with a single floor.
- Changing the route origin removes the previously drawn route, and a slow earlier route request can no longer draw over the current one.
1.3.0 (action required)
Released 2026-08-13.
1.3.0 was published as a minor version, but it changes how the bundle loads. Before upgrading from 1.2.x or earlier, load main.js as a module, serve the new chunk files and check CORS, as described below.
Breaking or action required
main.jsis now an ES module. Load it with<script type="module">. As a classic script (with or withoutdefer, as earlier docs showed), parsing fails (Chromium reportsSyntaxError: Unexpected token 'export'; other browsers word it differently), the element is never defined and stays empty, and no other error appears. Module scripts are deferred automatically, sodeferis no longer needed. See Unexpected token ‘export’.
<!-- 1.2.x and earlier -->
<script src="/mapvx-website/main.js" defer></script>
<!-- 1.3.0 and later -->
<script type="module" src="/mapvx-website/main.js"></script>- The package now publishes
chunk-*.jsfiles next tomain.js, andmain.jsloads them on demand by relative path. If you self-host the files, copy every.jsfile fromdist/browserplusstyles.cssinto one directory and keep the original file names,main.jsincluded: each chunk imports./main.jsby that name. Chunk names are content hashes that change whenever the chunk’s code changes (all of them changed in 1.5.0, for example), so replace the whole folder on each upgrade instead of overwriting onlymain.js. See Self-hosting and Chunk files return 404.
rm -rf public/mapvx-website
mkdir -p public/mapvx-website
cp node_modules/@mapvx/web-components-ssr/dist/browser/*.js node_modules/@mapvx/web-components-ssr/dist/browser/styles.css public/mapvx-website/- Browsers fetch module scripts in CORS mode. If
main.jsand its chunks are served from a different origin than your page (your own CDN, for example), that origin must send anAccess-Control-Allow-Originheader. unpkg and jsDelivr already do. - The bundled maps SDK now reports its own errors to
https://sentry.mapvx.app, without touching your page’swindow.onerror, and no longer contacts Countly (countly.lazarillo.app) or Rollbar (api.rollbar.com). If your Content-Security-Policy restrictsconnect-src, allowhttps://sentry.mapvx.app. See Error reporting and Allowlist policy.
Features
- The city filter is grouped by each institution’s city, so a hub or mall inside a city no longer appears as a separate city. When
institution-idnames an institution that reports a city (a hub or mall), only that city is offered; a city-level institution keeps every city. The city control is hidden when fewer than two cities remain; before 1.3.0 it showed with a single city. - Category buttons that would lead to an empty grid are hidden. A category is kept only if at least one of its places is a public place returned for your API key, within the selected city option when the city filter is on. “All” is always kept.
- TypeScript:
InstitutionandInstitutionResponsegain an optionalcityfield. See Maps SDK types. - The bundled maps SDK is updated to
@mapvx/web-js3.1.0.
Fixes
- The initial grid and search follow
institution-id: they are scoped to the city option that matches it (by institution id, then by filter id). Before, they always started on the first city in the configuration, and only the category filters followedinstitution-id. If no option matches, the first option is used. Changinginstitution-idafter load now also re-scopes the city filter and the grid; a city the visitor picked by hand is kept until the attribute changes again. Seeinstitution-id. - The map enters or leaves a building’s indoor view whenever the selected city option changes, including through an
institution-idchange. Before, only a click in the city dropdown did it.
If the city dropdown or some category buttons disappeared after upgrading, the rules above are the likely cause: see show-city-filter, show-category-filters and No category tabs, or the wrong city.
1.2.0
Released 2026-07-21.
Features
- A place with no photos now shows its logo as its image, on the grid card and on the profile. The order is: first photo, then logo, then the generic placeholder image.
1.1.1
Released 2026-07-09.
Fixes
- Fixes an empty place list after switching views. Map View shows fewer cards per page than Grid View, so it has more pages; going to a page that exists only in Map View and switching back to Grid View emptied the list. The current page is now limited to the last available page and kept in sync across both views.
1.1.0
Released 2026-07-09.
Features
- The request that loads the institution list from the MapVX API is retried up to 3 times after the first attempt, waiting 1 s, 2 s and 3 s, so a brief network error no longer leaves the institution list empty. The retry applies only to this request.
Fixes
- Changing the
institution-idattribute at runtime now waits until the institution list has loaded, frominitial-dataor from the API, instead of racing it.
1.0.1
Released 2026-07-08.
Fixes
- iOS Safari: the component no longer treats the motion and orientation permission as granted before the visitor answers the prompt, so the compass heading of the location marker now depends on the visitor’s answer. See Browser permissions.
- The bundled maps SDK is updated to
@mapvx/web-js1.4.0.
1.0.0
Released 2026-07-03.
First stable release under the name @mapvx/web-components-ssr. It keeps the tag, attributes, events and initial-data format of @mapvx/website-component 0.16.4.
Features
- TypeScript declarations ship with the package (
dist/types/public-api.d.ts), with the maps SDK’s data types included, so you do not need to install@mapvx/web-js. Import them withimport typeonly:main.jsexports no runtime API. See Types only. - The bundled maps SDK is now the public
@mapvx/web-jspackage (1.2.1). As before, it is bundled insidemain.js, so there is nothing extra to install. - The bundle is built with Angular 22 (22.0.1; 0.16.4 used Angular 20). Angular is bundled inside
main.js, so your page does not need it.
Breaking or action required
These apply when you move from 0.x; the migration guide walks through them.
- The package is renamed from
@mapvx/website-componentto@mapvx/web-components-ssr, and the helper from@mapvx/website-component-helpersto@mapvx/web-components-ssr-helpers. - Font Awesome’s base CSS now ships inside
styles.css, so the icons, map markers included, keep their styles even when a Content-Security-Policy blocks inline styles. Loadstyles.csson every page that shows the component. The component’s own styles, and a copy of the Font Awesome CSS, are still injected as<style>elements; see Nonce for injected styles. - The maps SDK’s marker wrapper class changed from
.lazarillo-markerto.mapvx-marker. Rename any CSS on your page that targets it. - The bundled maps SDK sends most of its MapVX API requests to
https://public-api.mapvx.com; 0.16.4 sent them tohttps://api.mapvx.com, which 1.x still uses for routes. If your Content-Security-Policy restrictsconnect-src, allow both hosts (Allowlist policy). package.jsondeclaresengines.nodeas^22.22.3 || >=24.15.0. It matters only at install time; see Requirements.
Migrating from @mapvx/website-component 0.x
@mapvx/website-component stopped at 0.16.4; new releases are published only as @mapvx/web-components-ssr. The <mapvx-website> tag, the attributes, the userAction and cardSelected events and the initial-data format do not change, and place ids in events and deep links stay the same.
Replace both packages
npm uninstall @mapvx/website-component @mapvx/website-component-helpers
npm install --save-exact @mapvx/web-components-ssr@1.6.1 @mapvx/web-components-ssr-helpers@0.1.1The files inside the package keep the same paths (dist/browser/main.js and dist/browser/styles.css), so only the package name changes in imports, asset globs (for example an angular.json asset entry) and copy scripts.
// Before (0.x)
import '@mapvx/website-component/dist/browser/styles.css'
import { prepareInitialData } from '@mapvx/website-component-helpers'
// After (1.x)
import '@mapvx/web-components-ssr/dist/browser/styles.css'
import { prepareInitialData } from '@mapvx/web-components-ssr-helpers'The helper keeps the same API, prepareInitialData(apiKey), which resolves to a JSON string, and the same version number, 0.1.1. The renamed helper also fixes a crash: when the API answers with an error (for example an invalid or missing API key), it now returns null for that dataset instead of throwing a SyntaxError that could crash server-side rendering. initial-data produced by the old helper still works with 1.x. See The helper package.
Load main.js as a module
From 1.3.0 on, main.js must be loaded with type="module", every chunk-*.js file must sit next to it with its original name, and a cross-origin host must send CORS headers. Details and a copy script are in 1.3.0.
<!-- Before (0.x) -->
<script src="/website-component/main.js" defer></script>
<!-- After (1.3.0 and later) -->
<script type="module" src="/website-component/main.js"></script>If you load the component from a CDN, change the package name in the URL and pin the version:
<script type="module" src="https://unpkg.com/@mapvx/web-components-ssr@1.6.1/dist/browser/main.js"></script>
<link rel="stylesheet" href="https://unpkg.com/@mapvx/web-components-ssr@1.6.1/dist/browser/styles.css" />Load styles.css on every page
In 1.x Font Awesome’s base CSS lives in styles.css, next to the color and font settings and the map styles it already carried. Make sure every page that shows the component loads it. See Package contents.
Rename marker CSS overrides
The component does not use Shadow DOM, so CSS on your page can target its markers. The marker wrapper class changed in 1.0.0:
/* 0.x */
.lazarillo-marker:has(.selected) {
z-index: 1;
}
/* 1.x */
.mapvx-marker:has(.selected) {
z-index: 1;
}Update your Content-Security-Policy
If your policy restricts connect-src, allow https://public-api.mapvx.com, which the bundled maps SDK calls from 1.0.0 on, next to https://api.mapvx.com. From 1.3.0 on, also allow https://sentry.mapvx.app, where the SDK reports its errors; you can then remove countly.lazarillo.app and api.rollbar.com, which 1.3.0 and later no longer contact. The full list is in Allowlist policy.
Check your Node.js version
package.json declares engines.node as ^22.22.3 || >=24.15.0. On Node.js versions outside that range (for example 22.x before 22.22.3, 23.x, or 24.x before 24.15.0), npm prints an EBADENGINE warning and pnpm an Unsupported engine warning (both fail only with engine-strict); Yarn 1 fails unless you pass --ignore-engines. It has no effect in browsers. npm also installs the packages listed as dependencies (the Angular 22 packages, Font Awesome, ngx-google-analytics, rxjs and tslib), even though main.js already bundles them; 0.16.4 did the same with Angular 20.