Skip to main content

VectorBasemapStyle

Access Esri's professionally designed vector basemap styles through the ArcGIS Basemaps API.

Interactive Demo​

Switch between different Esri vector basemap styles with your API key

Quick Start​

import { VectorBasemapStyle } from 'esri-gl';

// Simple way — static helper
VectorBasemapStyle.applyStyle(map, 'arcgis/streets', { apiKey: 'YOUR_API_KEY' });

// Advanced way — instance API
const basemap = new VectorBasemapStyle('arcgis/streets', { apiKey: 'YOUR_API_KEY' });
map.setStyle(basemap.styleUrl);

Static Method​

VectorBasemapStyle.applyStyle(map, styleName, auth)
ParameterTypeDescription
mapMapMapLibre map instance
styleNameEsriBasemapStyleNameStyle identifier (see table below)
authVectorBasemapStyleAuthOptionsAuthentication options ({ apiKey } or { token })

Constructor​

new VectorBasemapStyle(styleName?, auth?)
ParameterTypeDescription
styleNameEsriBasemapStyleNameStyle identifier (defaults to 'arcgis/streets')
authVectorBasemapStyleAuthOptions | stringAuthentication options, or a bare API key string

An apiKey or token is required — the constructor throws An Esri API Key must be supplied to consume vector basemap styles if neither is given.

Auth options (VectorBasemapStyleAuthOptions)​

OptionTypeDefaultDescription
apiKeystring—API key, used against the v1 host (basemaps-api.arcgis.com)
tokenstring—OAuth / user token, used against the v2 host (basemapstyles-api.arcgis.com)
version'v1' | 'v2'inferredForce the API version (inferred as v2 when a token is supplied, otherwise v1)
hoststringper versionOverride the host (enterprise deployments)
format'json' | 'style''style'Value sent as f on v2 requests
languagestring—Locale for basemap labels
worldviewstring—Worldview to render disputed boundaries for
itemIdstring—Load a custom style from a portal item instead of a named style
useSessionbooleanfalseBack style requests with a basemap style session
sessionDurationnumber—Session duration in seconds

Properties​

PropertyTypeDescription
styleUrlstringFully constructed style URL for MapLibre
styleNamestringThe style identifier as supplied (see setStyle)
sessionTokenstring | undefinedToken of the active session, once startSession() has run

Methods​

MethodReturnsDescription
setStyle(styleName)voidUpdates the style identifier so styleUrl regenerates. Apply it with map.setStyle(basemap.styleUrl) — this does not touch the map itself.
update() / remove()voidNo-ops; present so VectorBasemapStyle satisfies the common service interface

Available Styles​

Style IDDescription
arcgis/streetsStandard street map
arcgis/topographicTopographic map with terrain
arcgis/navigationHigh-contrast navigation style
arcgis/streets-reliefStreets with hillshade relief
arcgis/light-grayLight gray reference map
arcgis/dark-grayDark gray reference map
arcgis/oceansBathymetric ocean mapping
arcgis/imagerySatellite imagery basemap
arcgis/streets-nightDark-themed street map

Legacy colon-format identifiers (e.g., ArcGIS:Streets) are also accepted for backwards compatibility.

Examples​

applyStyle with Options​

// With language and worldview
VectorBasemapStyle.applyStyle(map, 'arcgis/navigation', {
apiKey: 'YOUR_API_KEY',
language: 'es',
worldview: 'FRA'
});

// Token authentication
VectorBasemapStyle.applyStyle(map, 'arcgis/dark-gray', { token: 'YOUR_TOKEN' });

Dynamic Style Switching​

const styles = ['arcgis/streets', 'arcgis/imagery', 'arcgis/topographic', 'arcgis/dark-gray'];
let currentIndex = 0;

function switchStyle() {
VectorBasemapStyle.applyStyle(map, styles[currentIndex], { apiKey: 'YOUR_API_KEY' });
currentIndex = (currentIndex + 1) % styles.length;
}

Instance API​

const basemap = new VectorBasemapStyle('arcgis/streets', { apiKey: 'YOUR_API_KEY' });
map.setStyle(basemap.styleUrl);

// Change style later
basemap.setStyle('arcgis/dark-gray');
map.setStyle(basemap.styleUrl);

Session Support​

VectorBasemapStyle can optionally back style requests with an official basemap style session via @esri/arcgis-rest-basemap-sessions. Sessions let the Basemap Styles Service meter usage per map session rather than per tile request. Authentication runs on ArcGIS REST JS just like the rest of esri-gl — see the Authentication guide.

Sessions are opt-in, enabled with the useSession / sessionDuration auth options.

Session methods​

MethodReturnsDescription
startSession()Promise<BasemapStyleSession>Starts (or reuses) a basemap style session via BasemapStyleSession.start, using the instance's apiKey/token. The session is cached, so repeated calls return the same instance.
getStyleUrl()Promise<string>Returns a session-backed v2 style URL when useSession is set; otherwise resolves to the normal styleUrl.
VectorBasemapStyle.applyStyleWithSession(map, styleName, auth)Promise<void>Static helper that awaits a session-backed URL and calls map.setStyle(url). Mirrors applyStyle but starts a session first.

The active session's token is readable from the sessionToken property (see Properties).

Example​

import { VectorBasemapStyle } from 'esri-gl';

// Simplest path — start a session and apply the style in one call
await VectorBasemapStyle.applyStyleWithSession(map, 'arcgis/streets', {
apiKey: 'YOUR_API_KEY',
});

// Instance API — manage the session yourself
const basemap = new VectorBasemapStyle('arcgis/navigation', {
apiKey: 'YOUR_API_KEY',
useSession: true,
sessionDuration: 3600, // seconds
});

await basemap.startSession();
const url = await basemap.getStyleUrl(); // session-backed style URL
map.setStyle(url);

console.log(basemap.sessionToken); // inspect the active session token

startSession() requires an apiKey or token; it throws if neither is supplied.