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(styleId, auth)
ParameterTypeDescription
styleIdEsriBasemapStyleNameStyle identifier
authVectorBasemapStyleAuthOptionsAuthentication options

Properties

PropertyTypeDescription
styleUrlstringFully constructed style URL for MapLibre
styleIdstringCurrent style identifier
authobjectCurrent auth configuration

Methods

MethodReturnsDescription
setStyle(styleId)voidUpdates the style identifier and regenerates styleUrl

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. Enable them with two extra fields on VectorBasemapStyleAuthOptions:

OptionTypeDescription
useSessionbooleanOpt in to backing style requests with a basemap style session (default false).
sessionDurationnumberOptional session duration in seconds (matches the sessions API unit).

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.
PropertyTypeDescription
sessionTokenstring | undefinedThe token from the active session, or undefined until startSession() runs. Useful for inspection / debugging.

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.