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
apiKeystringAPI key, used against the v1 host (basemaps-api.arcgis.com)
tokenstringOAuth / 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
languagestringLocale for basemap labels
worldviewstringWorldview to render disputed boundaries for
itemIdstringLoad a custom style from a portal item instead of a named style
useSessionbooleanfalseBack style requests with a basemap style session
sessionDurationnumberSession 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.