Comprehensive ArcGIS integration for modern web mapping applications
Secure, enterprise-grade authentication for all ArcGIS platforms
Modern OAuth2 with PKCE flow for user-facing applications. Supports both ArcGIS Online and Enterprise portals.
Static API keys for ArcGIS Location Platform and Developer accounts. Simple setup for server-side or public applications.
Username/password token generation for ArcGIS Server and older Enterprise deployments.
Server-to-server OAuth2 client credentials flow for backend applications.
sequenceDiagram
participant App as Application
participant AM as ArcGISAuthManager
participant Portal as ArcGIS Portal
participant User as User Browser
alt OAuth2/PKCE
App->>AM: Initialize with OAuth2 config
AM->>Portal: Request authorization code
Portal->>User: Show login page
User->>Portal: Enter credentials
Portal->>AM: Return authorization code
AM->>Portal: Exchange code for token (PKCE)
Portal->>AM: Return access token
AM->>App: Token ready event
else API Key
App->>AM: Initialize with API key
AM->>App: Ready immediately
else generateToken
App->>AM: Initialize with username/password
AM->>Portal: generateToken request
Portal->>AM: Return token
AM->>App: Token ready event
end
Note over AM: Auto-refresh 60s before expiry
Complete support for all major ArcGIS service types
graph LR
subgraph Services["ArcGIS Services"]
FS[Feature Service]
DMS[Dynamic Map Service]
TMS[Tiled Map Service]
VTS[Vector Tile Service]
IS[Image Service]
end
subgraph Controls["MapLibre Controls"]
FSControl[EsriFeatureServiceControl]
DMSControl[EsriDynamicMapServiceControl]
TMSControl[EsriTiledMapServiceControl]
VTSControl[EsriVectorTileServiceControl]
ISControl[EsriImageServiceControl]
end
subgraph Features["Features"]
TiledVect[Tiled Vector]
RasterTiles[Raster Tiles]
CachedTiles[Cached Tiles]
StyledVect[Styled Vector]
RenderRules[Rendering Rules]
end
FS --> FSControl --> TiledVect
DMS --> DMSControl --> RasterTiles
TMS --> TMSControl --> CachedTiles
VTS --> VTSControl --> StyledVect
IS --> ISControl --> RenderRules
| Control | Service Type | Key Features |
|---|---|---|
EsriFeatureServiceControl |
FeatureServer / MapServer | Tiled vector loading, where clauses, outFields, simplification, click-to-query |
EsriDynamicMapServiceControl |
MapServer (dynamic) | Layer definitions, time parameters, identify-on-click, legend |
EsriTiledMapServiceControl |
MapServer (tiled) | Cached tiles, legend auto-fetch, tile matrix support |
EsriVectorTileServiceControl |
VectorTileServer | Style-from-service, custom sprites, font glyphs |
EsriImageServiceControl |
ImageServer | Identify, time, rendering rules, mosaic rules |
Load portal items and automatically apply their configurations
flowchart TB
subgraph Input["Input"]
ITEM[Portal Item ID]
end
subgraph Loader["WebMapLoader"]
FETCH[Fetch Item Data]
PARSE[Parse WebMap JSON]
DISPATCH[LayerTypeDispatcher]
end
subgraph Output["Map Components"]
BASEMAP[Apply Basemap]
LAYERS[Add Layers]
EXTENT[Fit Extent]
end
subgraph LayerTypes["Supported Layers"]
FL[FeatureLayer]
MSL[MapServiceLayer]
TMSL[TiledMapServiceLayer]
ISL[ImageServiceLayer]
VTL[VectorTileLayer]
GEOJSON[GeoJSON]
end
ITEM --> FETCH --> PARSE --> DISPATCH
DISPATCH --> BASEMAP
DISPATCH --> LAYERS
DISPATCH --> EXTENT
DISPATCH --> LayerTypes
FL --> EsriFeatureServiceControl
MSL --> EsriDynamicMapServiceControl
TMSL --> EsriTiledMapServiceControl
ISL --> EsriImageServiceControl
VTL --> EsriVectorTileServiceControl
WebScene items are also supported. 3D-only layers (SceneLayer, BuildingSceneLayer, IntegratedMeshLayer) are skipped with warnings, while 2D-compatible layers are extracted and rendered.
Stream rasters directly from S3 or public HTTPS with in-browser analytics
Stream Cloud-Optimised GeoTIFFs directly from AWS S3 buckets with automatic pre-signed URL generation.
Run Python/numpy analytics on COGs directly in the browser. No server required.
flowchart LR
subgraph Sources["Data Sources"]
S3[AWS S3]
HTTPS[Public HTTPS]
end
subgraph Browser["Browser Processing"]
COGLIB[geotiff.js]
PYODIDE[Pyodide Runtime]
NUMPY[NumPy Arrays]
end
subgraph Analytics["Analytics"]
NDVI[NDVI]
EVI[EVI]
SAVI[SAVI]
NBR[NBR]
HILLSHADE[Hillshade]
CUSTOM[Custom Python]
end
subgraph Output["Output"]
COLORMAP[Apply Colormap]
MAP[Render to Map]
end
Sources --> COGLIB --> NUMPY
NUMPY --> PYODIDE --> Analytics
Analytics --> COLORMAP --> MAP
# Custom NDVI formula with numpy
import numpy as np
nir, red = bands[4], bands[3]
result = (nir - red) / (nir + red + 1e-10)
result_normalized = ((result.clip(-1, 1) + 1) / 2).astype(np.float32)
vmin_val = float(result.min())
vmax_val = float(result.max())
Visualize massive point cloud datasets in the browser
graph TB
subgraph Sources["Point Cloud Sources"]
COPC[COPC Files]
LAZ[LAZ Files]
EPT[EPT Format]
end
subgraph Storage["Storage"]
S3[AWS S3]
HTTPS[Public HTTPS]
end
subgraph Loader["Loading Pipeline"]
LAZER[maplibre-gl-lidar]
DECK[deck.gl Rendering]
end
subgraph Visualization["Visualization"]
PTSIZE[Point Size Control]
COLOR[Color Schemes]
CLASS[Classification Legend]
PICK[Point Picking]
end
Sources --> Storage --> Loader --> Visualization
Elevation, intensity, classification, RGB, and return number coloring options.
Click on points to view attributes including elevation, intensity, and classification.
Automatic LOD management for smooth performance with massive datasets.
Load and analyze GIS files entirely in the browser
flowchart TB
subgraph Input["Input Formats"]
GEOJSON[GeoJSON]
SHP[Shapefile.zip]
KML[KML/KMZ]
GPX[GPX]
CSV[CSV/TSV]
PARQUET[GeoParquet]
FGB[FlatGeoBuf]
GPKG[GeoPackage]
end
subgraph DuckDB["DuckDB WASM"]
SPATIAL[Spatial Extension]
SQL[SQL Engine]
VIEW[Virtual Tables]
end
subgraph Output["MapLibre Output"]
FILL[Fill Layers]
LINE[Line Layers]
CIRCLE[Circle Layers]
SYMBOL[Symbol Layers]
end
Input --> DuckDB --> SPATIAL --> SQL --> VIEW
VIEW --> Output
Interactive drag-and-drop control for loading GIS files.
In-browser geoprocessing tools powered by DuckDB spatial SQL.
Paginated attribute table with filtering and queries.
DuckDB WASM requires specific CORS headers: Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp. Use maplibre-arcgis serve for local development, or configure your web server appropriately.
360 panoramas and oblique imagery with spatial synchronization
graph TB
subgraph Input["Imagery Sources"]
FS[Feature Service]
IMG[Image Files]
end
subgraph Control["OrientedImageryControl"]
LOADER[Image Loader]
VIEWER[Image Viewer]
FRUSTUM[Footprint Renderer]
end
subgraph Types["Image Types"]
PAN360[360 Panorama]
OBLIQUE[Oblique]
NADIR[Nadir]
INSPECT[Inspection]
end
subgraph Features["Features"]
SYNC[Spatial Sync]
ENHANCE[Image Enhancements]
GALLERY[Image Gallery]
LOCATE[Location Tool]
end
Input --> Control
Control --> Types
Control --> Features
SYNC --> CLICK[Click Map = View Image]
SYNC --> LOCATEIMG[Click Image = See Location]
Interactive spherical image viewing with mouse pan/rotate controls.
Visualize camera positions and field-of-view on the map.
Click map to view imagery, click image to see ground location.
Brightness, contrast, and sharpness adjustments.
Define maps in YAML and deploy as static HTML
flowchart LR
subgraph Config["Configuration"]
YAML[map.yaml]
SCHEMA[Pydantic Schema]
end
subgraph CLI["Python CLI"]
INIT[maplibre-arcgis init]
VALIDATE[maplibre-arcgis validate]
BUILD[maplibre-arcgis build]
SERVE[maplibre-arcgis serve]
CONVERT[maplibre-arcgis convert]
end
subgraph Output["Output"]
HTML[Static HTML]
CDN[CDN Assets]
end
Config --> CLI
CLI --> Output
HTML --> DEPLOY[Deploy Anywhere]
| Command | Description |
|---|---|
maplibre-arcgis init |
Create a starter map.yaml with commented examples |
maplibre-arcgis validate map.yaml |
Validate config against schema, optionally ping service URLs |
maplibre-arcgis build map.yaml |
Generate self-contained HTML deployable anywhere |
maplibre-arcgis serve map.yaml |
Local dev server with hot-reload and proper CORS headers |
maplibre-arcgis convert webmap ID |
Convert existing WebMap to YAML configuration |
Learn how to integrate these features into your applications.