November 2026

Editing and selection enhancements

Support for dynamic choice form inputs

This release adds support for dynamic choice inputs in a feature layer’s form template used within Editor. A DynamicChoiceInput lets users select a field value from a list of choices generated by an Arcade expression, rather than a fixed list. Use a dynamic choice input when the available options depend on the feature being edited, values entered in other fields, or data queried from another layer or table. This input type is supported in both single and batch edit modes.

Selection map components

The new Selection Toolbar and Selection List components provide a coordinated workflow for managing feature selections. They share a view’s selectionManager by default and also support custom selection managers.

The Selection Toolbar provides tools for selecting features and graphics on a Map or Scene. You can add features to an existing selection, replace the current selection, remove features from a selection, or clear the selection.

The following video demonstrates how a selection initiated by the Selection Toolbar on the map updates selected rows in the Feature Table. The Feature Table has its syncViewSelection property enabled, allowing the table and Selection Toolbar to modify the same selection.

The Selection List displays selected features in a hierarchical list organized by group layer, layer, and feature. It supports browsing, filtering, expanding and collapsing items, zooming to selected features, and removing individual features or groups of features from the selection.

2D Label Callouts and Formatting Tags

We added support for two highly requested labeling features: callouts and formatting tags.

Callout labels can be used to highlight and point to features in the map without obscuring map data or details. Callout labels are implemented through the CIMTextSymbol and its associated callout properties.

2D Labels with callouts

Text formatting tags can be used to create mixed-format labels by applying different formatting to portions of a label. Use the tags to apply different colors, fonts, or emphasis to individual parts of the label. They can be used almost anywhere labels appear on the map and are supported for 2D FeatureLayers and MapImageLayers that support Arcade.

Labels with formatting tags

Improved AI components and better accuracy and reliability for agents

The latest version of AI components significantly increased the accuracy and reliability of data exploration and agent responses, improved interoperability between custom agents and agents provided by the JS Maps SDK, and introduced a new agent type. Check out the full list of improvements below.

More accuracy in agent responses

Updated models. The underlying large-language models used by AI components have been upgraded to the GPT-6 family of models. These models are more capable, accurate, and reliable, resulting in improved agent responses and better overall performance. See the ChatModelTier for more details. Keep in mind that model updates can introduce unpredictable behavior in agents. While agents provided by the JS Maps SDK have improved, you should still review and test any custom agents you wrote upon upgrading, as model updates may necessitate changes to your prompts or agent logic.

Agent updates. The Navigation, Data Exploration, and Help agents were refactored to skill agents. Combined with the GPT-6 family of models, these changes result in more accurate, better-qualified, reliable, and transparent answers.

Shared resources

Agents and their tools can now share resources to a common workspace so tools in other agents can use them as input in their own workflows. For example, a custom agent may generate a polygon, add it as a shared resource, so it can later be used by the Data Exploration agent in a spatial query or filter.

AI components shared resources

Prior to v5.2, the Data Exploration agent could not answer questions that involved data generated by other agents. As long as custom agents add outputs as shared resources, the Data Exploration agent, and any other agent, can now use them in their workflows.

Skill agents

The new SkillAgent class lets you build custom agents with reusable skills and tools that load on demand. Skill agents allow you to define agent logic using natural language in markdown files, making it easier to create and maintain complex agent behaviors without having to maintain complex graph code.

While you can write custom tools for skill agents, you can also add tools already used by JS Maps SDK agents to you skills. All you have to do is list them by name in your skill file to make them available for use within your agent’s workflow. See the documentation for this list of tools for more details.

Enterprise support

At ArcGIS Enterprise 12.2, you will be able to build agentic web applications for exploring data in web maps from your Enterprise portal. The organization must enable the use of AI agents and provide credentials for an ArcGIS Online organization where the AI models are provided.

Other improvements

Human-in-the-loop improvements. Single- and multiple-selection prompts can now include an Other option for entering a custom response alongside predefined choices. Approval middleware also handles multiple approval steps more reliably when an agent resumes.

More control over agent routing. You may want to have full control of agent orchestration and routing. To do this, create a custom agent that acts as a parent agent to one or more subagents, and set the ID of your parent agent to alwaysUseAgentId to bypass the default orchestration logic.

Simplified API organization. Agent utilities now support class constructors with both npm and CDN imports. Prompt, signal, and state helpers have dedicated modules under the orchestrator API, making related APIs easier to find.

Component improvements. We made several UX and developer experience enhancements to the arcgis-assistant component, including improving the developer experience for progressively disclosing components as part of agent responses.

AI components slottable UI

A custom agent that calculates a route includes the arcgis-directions component as part of its response to the user. Components like this can be progressively disclosed to complement a custom agent’s response.

Viewshed and Shadow Cast support for Gaussian Splat layers

Gaussian Splat layers now support Viewshed and Shadow Cast analysis, expanding the range of 3D analysis workflows available for Gaussian Splat layers. Analysis results reflect the underlying Gaussian Splat representation. As a result, surface noise or reconstruction artifacts that are subtle in the visualization may become more apparent and analysis boundaries may appear less sharply defined than in comparable results generated from integrated mesh layers.

Time Bar component

The new Time Bar component replaces the TimeSlider widget and component, providing a highly configurable interface for exploring and animating time-aware data. You can choose any combination of playback buttons, a time extent label, and a settings button, with or without a Time Bar Slider. This supports layouts ranging from a single play button to a full time navigation component. The Time Bar Slider adds interactive date or range selection with customizable date labels, ticks, and popover content.

Different configurations of the Time Bar component

GeospatialPDFLayer

The new GeospatialPDFLayer displays georeferenced PDFs as raster imagery, using spatial metadata embedded in each document to position its content on the map. Add a PDF as a basemap, overlay it on another basemap, or display it as standalone map content. Client-side reprojection supports PDFs created in different spatial references without requiring preprocessing. This makes it easier to bring scanned historic maps, incident and emergency response maps, operational documents, and other established map products into web applications. Use these documents alongside live GIS data to compare historical and current conditions, add operational context, and support field and emergency response workflows.

SketchLayer

The new SketchLayer is similar to a GraphicsLayer, but adds support for saving sketch graphics in a web map. Create graphics with the Sketch component or in code, then add them to the layer’s graphics collection.

  • Save and share: Save the WebMap to persist sketches. Users can share the map and continue working with the sketches in Map Viewer.
  • One graphics collection: Add, remove, and iterate over point, polyline, polygon, multipoint, and text graphics in a single collection, rather than working with geometry-specific sublayers.
  • MapNotesLayer replacement: SketchLayer replaces the deprecated MapNotesLayer and handles the geometry-specific feature collections required by the web map format when saving.
  • Load existing sketches: To load existing web map sketches as SketchLayer instead of MapNotesLayer, enable the sketch-layer-enabled flag before loading SDK modules, as described in the SketchLayer documentation.

ParquetLayer: expanded data support, charts, and refresh

Updates to ParquetLayer include:

  • Expanded data support: Supports date-only and time-only fields, as well as M- and Z-aware geometries. The hasM and hasZ properties indicate whether feature geometries contain measure (M) and elevation (Z) values.
  • Charts: Use the charts property to visualize data directly in a ParquetLayer with various chart types.
  • Data refresh: Configure the layer to refresh on a recurring interval or on demand to display the latest data.
  • Portal items: Save a ParquetLayer as a portal item to share and reuse it across applications, or update an existing item with the latest layer configuration and data.

AI-assisted development

New guide for AI-assisted development

The new AI-assisted development guide explains how to use AI coding assistants when building applications with the ArcGIS Maps SDK for JavaScript. It covers how to provide assistants with relevant SDK context, use documentation and code examples to guide code generation, and review AI-generated code for accuracy.

Markdown for agents

Markdown versions of reference, guide, tutorial, release notes, and sample code pages are now available to copy or view. These versions are cleaner, smaller, and more structured, making the content easier for people and AI to process, reducing token usage, and helping agents work more effectively.

Check each page for the “Copy as Markdown” and “View Markdown” dropdown. When you view the page as markdown, the trailing / in the URL is replaced with .md.

Symbology updates

Halos on CIMPointSymbol

CIMPointSymbol now supports halos, which are rendered around point symbols to emphasize their presence or to visually separate them from competing background information. Use the haloSize and haloSymbol properties to define a halo. The haloSize sets the size of the halo, while haloSymbol is a CIMPolygonSymbol that defines its appearance.

CIMSymbol halo

CIMSymbol Circular Sector geometric effect

CIMSymbol now supports a new geometric effect called CIMGeometricEffectCircularSector. This effect allows for the creation of dynamic sectors from point symbols, which can be used to represent directional data or to create pie chart-like visualizations on the map. The Circular Sector effect can be customized with properties such as startAngle, endAngle, and radius, and can be used with primitive overrides to create dynamic visualizations based on feature attributes.

CIMSymbol Circular Sector geometric effect

CIM animations along a line

CIM animations along a line are no longer in beta. This release improves support for animating a single marker along a line, such as an airplane following a flight path. It also includes fixes for rendering issues at tile boundaries and improvements to continuous animation behavior for smoother, more consistent movement along lines. CIM animations are only supported in 2D maps.

World sizing and new patterns for 3D lines

LineSymbol3D now supports world-sized line widths. When worldSized is enabled, line sizes are interpreted in meters instead of screen units, allowing line symbols to maintain consistent real-world dimensions. PathSymbol3DLayer dimensions are inherently world-sized and this property does not affect them.

A new LineTemplatePattern3D pattern type provides precise control over dashed line symbology. Define custom dash and gap sequences with a dashTemplate array to create road markings and other line patterns with exact spacing requirements.

Annotation and Dimension layers

Updates to AnnotationFeatureLayer and DimensionFeatureLayer include:

  • Portal items: Save these layers as new portal items or update existing items to preserve and share layer changes across applications and sessions.
  • Linear dimensions: DimensionFeatureLayer displays horizontal and vertical distances between points and honors the display units defined in dimension styles.
  • Callouts and stacked text: AnnotationFeatureLayer supports callouts that visually connect annotation text to its associated feature, as well as stacked text that spans multiple lines. See 2D Label Callouts and Formatting Tags for more information about callouts.
  • Feature Table: The Feature Table supports viewing Annotation and Dimension layers. Editing these layer types is not yet supported, but is planned for a future release.

Utility Network Trace Analysis enhancements

Trace Analysis component

The Utility Network Trace Analysis component now supports custom feature actions and control over action bar visibility when selecting trace locations and viewing result features. Configure these behaviors with the actions and hideActionBar properties, and handle action execution with the arcgisTriggerAction event. You can also configure the size of aggregated geometry result graphics with aggregatedGeometryResultsSize.

New subcomponents

New Utility Network Trace Analysis subcomponents allow you to customize trace inputs and results. Use these components to tailor the trace workflow and result presentation to your application:

Custom Trace component built with subcomponentsUtility Network Trace Analysis component (default)
Customized Trace Analysis componentDefault Trace Analysis component

Google Photorealistic 3D basemap

Load in self-hosted applications

The Google Photorealistic 3D basemap can now be loaded in self-hosted JavaScript Maps SDK applications. This basemap provides a 3D mesh textured with high-resolution imagery in many cities and populated regions across the globe. Variants with and without labels are available to load from the Basemap Gallery or by referencing their PortalItem IDs.

Google Photorealistic 3D basemap in a custom JavaScript Maps SDK application

Drape raster layers

Draping raster layers on the Google Photorealistic 3D basemap is now supported, enabling environmental, analytical and operational raster overlays to be visualized within realistic 3D environments. This extends existing draping workflows beyond traditional terrain surfaces. Supported layer types include MapImageLayer, ImageryLayer, WMSLayer, and BaseDynamicLayer. Tiled variants are not currently supported. See the screenshot showing a nitrogen dioxide (NO₂) emissions map in Zurich draped over the Google Photorealistic 3D basemap using the Kanton Zürich WMS Immissionen Luftqualität dataset.

Draped raster layer over the Google Photorealistic 3D basemap

Accessibility Improvements

Explore maps and charts data by keyboard

As part of our ongoing work to make mapping experiences more accessible, this release introduces a keyboard-accessible focus region for Map, Scene, and Link Chart components. It gives users another way to explore data and open feature popups without a mouse.

The new focus region provides keyboard access to data within an adjustable spatial area, allowing users to explore different parts of the view and open popups for features with a keystroke. The focus region makes map content easier to discover and provides consistent keyboard interaction across the Map, Scene, and Link Chart components.

The focus region is built into the Map, Scene, and Link Chart components and can be toggled using a keyboard shortcut while the view component is in focus. By default, the keyboard shortcut is enabled only when a popup component is slotted into the view component or popupComponentEnabled is true, and the popupDisabled property is false. The focus region styling can be customized through the new view component CSS variables.

Below is a summary of the available actions and their corresponding keyboard shortcuts or properties:

ActionKeyboard Shortcut / Property
Enable or disable focus regionUse the Shift + Alt/Opt + O keyboard shortcut while the view component is in focus, or set the focusRegionVisible property to true or false.
Resize focus regionUse the Shift + Alt/Opt + Up/Down arrow keys while the focus region is active.
Open the popup for features in the focus regionPress Enter or Spacebar while the focus region is active.
Enable or disable the Shift + Alt/Opt + O keyboard shortcutSet focusRegionShortcutEnabled to explicitly enable or disable the shortcut for custom selection handling.

More precise keyboard navigation

Map and Scene components, along with MapView and SceneView, now support more precise keyboard panning. Hold Alt while pressing an arrow key to move in smaller increments, or hold Shift to move in larger increments. Press two arrow keys simultaneously to pan diagonally. See the MapView navigation and SceneView navigation documentation for more information about keyboard navigation and shortcuts.

Improved ARIA support

Updated ARIA labels in the Popup, Features (Next), and Video Player components provide additional context and make interactive elements easier to identify, particularly for people who use assistive technologies.

Time zone support in web scenes

Time zone support is now available in web scenes, making time zone handling consistent across 2D maps and 3D scenes. Configure the time zone using the timeZone property on the Scene component or on SceneView. The default value is system, which uses the time zone of the device or browser. Set the value to unknown to display dates and times using the time zone defined by each layer, or specify an IANA time zone.

Individual slides can also store and apply their own time zones, allowing the time zone to change as you navigate through a presentation.

Date and time values in Arcade expressions, labels, renderers, forms, and visual variables now use the selected time zone. The selected time zone is also reflected in components that display dates and times, including Bookmarks, Editor, Feature, Feature Form, Features, Feature Table, Legend, Popup, and Time Bar.

The Daylight and Shadow Cast components do not yet use the web scene’s time zone. They continue to use their respective utcOffset properties for lighting and solar analysis.

Weather station observation time displayed in the selected time zone

View options for snapping, tooltips and units

The new options property configures snapping, tooltips, display units, and input units for supported components, analyses, and view models. It is available on the Map component and Scene component, as well as through MapView.options and SceneView.options. Use options.snapping and options.tooltips to configure interactions, options.displayUnits for displayed measurements, and options.inputUnits for numeric input.

See ViewOptions for the supported options and limitations.

Exploratory Analysis component

The new Exploratory Analysis component provides a container for measurement and analysis components, displaying one active tool at a time. Add supported analysis components as children to create a toolbar for switching between tools.

<arcgis-exploratory-analysis slot="top-right" show-heading>
<arcgis-distance-measurement-2d></arcgis-distance-measurement-2d>
<arcgis-area-measurement-2d></arcgis-area-measurement-2d>
<arcgis-elevation-profile></arcgis-elevation-profile>
</arcgis-exploratory-analysis>

Exploratory Analysis component in a Map

Highlight features with FeatureFilter

The highlight() method now accepts a FeatureFilter as a target in 2D MapView and the Map component. Use a FeatureFilter to highlight features that match attribute or spatial criteria, such as highlighting features within 2 miles of a moving pointer. Unlike graphics or objectIDs, which highlight the specified features, a FeatureFilter continues to highlight matching features as they become available while navigating the map.

// Highlight trees that intersect the buffer circle
areaHighlightHandle = layerView.highlight(
new FeatureFilter({
geometry: bufferGeometry,
spatialRelationship: "intersects",
}),
);

Simple math expressions in tooltips

Tooltips in sketching, editing, and visibility analyses now support simple math expressions, such as +1.5 or -25. This enhancement makes it easier to adjust the X, Y, or Z positions of features, vertices, observers, and targets with greater precision.

Enhanced visibility analyses

This update improves the placement and editing experience for interactive visibility analyses. New tooltips and snapping capabilities provide greater control when positioning observers and targets. Tooltips now support elevation mode selection, making it easier to adjust the vertical position of points.

These enhancements apply to both viewshed and line of sight analyses as well as to the Line Of Sight component.

Additionally, you can now specify default elevation settings when calling the ViewshedAnalysisView.place() or LineOfSightAnalysisView.place() methods.

Screen area hit targets

You can now retrieve multiple features in a 3D scene by specifying an area on the screen instead of a single point. SceneView.hitTest() and the Scene component’s hitTest() method now accept a ScreenRect or ScreenPolygon as a hitTarget and return rendered features that intersect the specified area.

Support for ScreenPolygon hit targets also extends to 2D maps. The new excludeLabels option in 2D HitTestOptions controls whether labels are included in or excluded from hit results.

Attribution enhancements

Improved contrast

The contrast of attribution text has been enhanced to improve readability and accessibility across different map backgrounds. By default, a blur has been added and the background, opacity, and text colors have been adjusted for improved contrast in both light and dark modes.

5.15.2
Attribution with light mode 5.1Attribution with light mode 5.2
Attribution with dark mode 5.1Attribution with dark mode 5.2

Auto theming

A new attributionMode value, auto, has been added to the Map, Scene, and Link Chart components. Setting attributionMode to auto synchronizes the attribution theme with the rest of the page based on the Calcite theme. The light and dark modes remain available when you want to set the attribution to a different theme from the rest of the application.

Enhanced layer searching

The new LayerSearchSource.searchMode property helps users work more effectively with full-text-indexed layers. Previously, exactMatch could be true or false, where true meant an exact match and false meant a trailing-wildcard search. Now, searchMode can be "simple", "starts-with", "full-text-starts-with", or "full-text-simple". Configure these values in LayerSearchSource or in a web map’s portal settings. The legacy behavior remains unchanged.

The table below compares these values for a feature whose portname property is “Northern Indiana Maritime District”:

exactMatchsearchModesearchMode behavior
true”simple”(portname = "Northern Indiana Maritime District")
false”starts-with”(LOWER(portname) LIKE 'North%')
true”full-text-simple”[{"onFields":["portname"],"searchTerm":"Northern Indiana Maritime District","searchType":"simple"}]
false”full-text-starts-with”[{"onFields":["portname"],"searchTerm":"North","searchType":"prefix"}]

We deprecated the LayerSearchSource.exactMatch property in favor of searchMode. If both exactMatch and searchMode are defined, searchMode takes precedence. If searchMode is not defined, the exactMatch property value will still infer the search behavior. See the Full-text indexes ArcGIS Pro documentation and the Add indexes to attribute fields ArcGIS Online documentation for more information. If the layer is not full-text indexed, the full-text-simple mode falls back to simple, and the full-text-starts-with mode falls back to starts-with.

Map Components

Legend design changes

The Legend component has been redesigned with a more compact layout that displays more items in a smaller footprint while preserving readability. Spacing has been refined across classic and ramp legend styles, including conditional spacing for single-symbol entries. The updated design also applies to the legend in Layer List (Next).

5.15.2
Legend design in 5.1Legend design in 5.2

New map components

The following map components were added in this release:

The Popup and Features (Next) components now include actions-start and actions-end slots. Use these slots to add custom Calcite actions or action groups and control their placement, order, styling, and grouping within the components.

The Popup and Features (Next) components now support displaying attachments in a carousel layout, making it easier to browse multiple attachments within the component interface. Configure this behavior through AttachmentsContent using the new “carousel” displayType, which can be persisted to the web map or web scene.

Expand component modal-disabled attribute

The modal-disabled attribute for the Expand component prevents the page-blocking modal from appearing in mobile view or drawer mode, keeping the map visible while the component is expanded. In 6.0, this behavior is planned to become the default.

defaultmodal-disabled
Expand defaultExpand modal-disabled

Feature Table updates

Support for a view’s time extent

The new viewTimeEnabled property lets the Feature Table honor the timeExtent set on the view. Previously, the table did not account for the view’s time extent. When enabled, this property sets the table’s time extent to the intersection of the view’s and layer’s timeExtent values.

Declaratively target a specific layer or table

The Feature Table component now provides layerId and tableId properties for selecting a specific layer or standalone table in an item with multiple layers or tables. When configuring the component declaratively, set an appropriate layerId or tableId along with layerItemId.

<!-- item contains multiple layers and tables - use layerId to target a specific layer -->
<arcgis-feature-table
layer-item-id="0777d381a2b249ed8c5243f7d0ca49f7"
reference-element="my-map"
layer-id="0"
></arcgis-feature-table>

Charts components

Reference element

Added support for the new referenceElement and mapLayerId properties. Along with chartIndex, these properties allow users to declaratively load and display a pre-configured chart from the web map by referencing the appropriate map layer.

<arcgis-map id="my-map" item-id="f2481ef191924872be8897179f73d55c"></arcgis-map>
<!-- configure the chart to use a layer from the map by setting the mapLayerId property -->
<arcgis-chart
map-layer-id="194f7ed3447-layer-50"
reference-element="my-map"
chart-index="0"
></arcgis-chart>

Radar chart

The new radar chart lets you visualize multiple variables across different categories in a radial layout, making multivariate data easier to compare and analyze.

The radar chart below visualizes hurricane counts across subbasins over different months. Each subbasin is represented with a different series and area colors.

Radar chart

Additional layer support

The supported layer property for charts now includes additional feature-like layers, whether you load an existing chart from a layer item or create a new chart with the charts model. This includes ParquetLayer, GeoJSONLayer, CSVLayer and other feature-like layers.

Common Components

Value Picker

The arcgis-value-picker component replaces the arcgis-value-picker-legacy and its predecessor, the ValuePicker widget. It offers an intuitive API and finer-grained control over the user experience through subcomponents: the arcgis-value-picker- collection, combobox, label, and slider. Instead of relying on the component attribute, nest the appropriate subcomponents as shown in the example below:

<arcgis-map basemap="topo">
<arcgis-value-picker slot="bottom-left">
<arcgis-value-picker-slider></arcgis-value-picker-slider>
</arcgis-value-picker>
<arcgis-value-picker slot="bottom-right">
<arcgis-value-picker-combobox></arcgis-value-picker-combobox>
</arcgis-value-picker>
<arcgis-value-picker slot="top-right">
<arcgis-value-picker-label></arcgis-value-picker-label>
</arcgis-value-picker>
<arcgis-value-picker slot="top-left">
<arcgis-value-picker-collection></arcgis-value-picker-collection>
</arcgis-value-picker>
</arcgis-map>

Histogram Range Slider

The arcgis-slider-histogram-range replaces the HistogramRangeSlider widget and provides a more streamlined authorship experience than using separate Histogram and Slider components.

ViewModel updates and deprecations

As part of our transition from widgets to components, the existing widget ViewModel modules are being deprecated. Some will be replaced by new modules outside of the /widgets folder, while others will eventually be removed from the SDK. The following replacement modules have been introduced this release:

Deprecated ViewModelReplacementFunctionality
BasemapGalleryViewModelBasemapGalleryModelProvides logic for displaying and selecting a collection of basemaps.
FeatureViewModelFeatureModelProvides logic for resolving popup template content for a graphic.
FeaturesViewModelFeaturesModelProvides logic for managing a collection of graphics’ reactive state and behavior.
LayerListViewModelLayerListModelProvides logic for managing and customizing layer list items.
LegendViewModelLegendModelManages the reactive content displayed by legends.

The PortalBasemapsSource and LocalBasemapsSource modules have also been moved to a new location under the core/basemapGallery directory.

Deep sky background

In 3D scenes, the deep sky background now includes a visualization of the Milky Way. This adds more detail to scenes with a night sky or to globe-scale views where the deep sky background is visible.

Deep sky example

The Milky Way in the deep sky background of a 3D scene. The image was captured with a 90-degree field of view, camera tracking disabled, and an increased maximum altitude.

Light emitters and weather

Light-emitting objects now interact more realistically with weather in 3D scenes. During cloudy, rainy, snowy, and foggy conditions, emissive colors tint the atmosphere around them, while distant emitters gradually soften and fade.

Emissive materials also interact more naturally with focus areas and analysis tools.

BuildingSceneLayer reflects recent edits

BuildingSceneLayer now supports reflecting edits from its associated Feature layer before those changes are incorporated into the scene layer cache. Attribute edits are reflected in rendering, popups, and other attribute-driven workflows, ensuring that they use the latest available values. This behavior is consistent with the support already available for 3D object scene layers and helps applications stay synchronized with recent edits while scene layer caches are being updated.

Global Illumination

Global Illumination enhances lighting and depth perception in 3D scenes in the ArcGIS Maps SDK for JavaScript. It provides these two contributions to scene lighting:

  1. Ambient occlusion darkens areas where surrounding geometry blocks ambient light. It adds detail and definition to geometry and can improve depth perception, for example, by darkening streets between tall buildings.
  2. Emissive lighting brightens areas around emissive materials. This new effect is especially useful in urban nighttime scenes, where streetlights, illuminated buildings, or glowing symbols can cast light nearby. The illumination depends on the emitters’ strength and color, as well as their distance from the surfaces they illuminate.

These lighting improvements help users better understand complex 3D environments and spatial relationships, and enhance realism while requiring no additional scene authoring, making web applications both more informative and visually engaging.

Layer enhancements

Overriding timeInfo for feature-based layers

The timeInfo property makes a layer time-aware, enabling temporal filtering and animation to reveal patterns over time in data such as earthquake activity, wildfire progression, or building permit approvals.

Starting with version 5.2, you can set or override timeInfo in the constructor or at runtime for the following feature-based layers: AnnotationFeatureLayer, CSVLayer, CatalogLayer, DimensionFeatureLayer, FeatureLayer, GeoJSONLayer, OGCFeatureLayer, OrientedImageryLayer, SceneLayer, StreamLayer, and SubtypeGroupLayer.

Overriding timeInfo lets you add or customize time behavior without modifying the source service. This is particularly useful for services you do not own or cannot reconfigure. You can switch time fields at runtime to explore different temporal perspectives using the same layer and source data. Each application can use the time settings relevant to its workflow while sharing the same source data. Time configurations can also be saved in a web map or supported layer portal item to share and reuse them across applications.

Dynamic workspace layer sources

The new DynamicWorkspaceLayer source type lets you use pre-authored layer files (.lyrx) from registered workspaces with map services. It allows a layer to use an advanced renderer and cartographically enriched symbols, including symbols that are not supported by the map service’s REST API specifications. It can be used as a source for sublayers in a MapImageLayer, or as a dynamic data source for FeatureLayer. Dynamic workspace layer sources cannot currently be saved to web maps, web scenes, link charts, or portal items.

VectorTileLayer support for GeoJSON source

A VectorTileLayer can now consume a style that references a GeoJSON source. GeoJSON sources must satisfy the requirements described in the GeoJSONLayer overview.

Distance-aware queries

Feature layers that consume a feature service now support sorting and ranking features by distance from a specified location. This is useful for proximity-based workflows, such as identifying hotels within 10 miles of an airport and ordering them by their distance from a convention center. Use the Query.outDistance property to return distance values in the results and optionally sort features by ascending or descending distance.

Height model info no longer required for 3D layers

The JavaScript Maps SDK can now infer information about the vertical coordinate system directly from a layer’s spatial reference. 3D layers no longer need to specify a HeightModelInfo. In a future update, height model info is expected to be deprecated.

Refined rendering of occluded 3D labels and icons

The rendering of occluded labels and icons has been refined to improve readability and depth perception. Labels now retain full contrast when the view is idle, while icons in visible mode provide clearer visual cues about their relationship to surrounding 3D content.

Geometry operator export and type renames

Geometry operators now include new self-describing exports that improve autocomplete, readability, and discoverability. For example, bufferOperator.execute() is now also available as bufferExecute(), and generic option types have been renamed to operator-specific types.

The previous export and option type names are deprecated as of 5.2 and will be removed in 6.0. Updated names are available alongside the deprecated names to support migration.

The geometry-operator-renames codemod is available to help migrate existing applications to the updated geometry operator export and option type names. Refer to the codemod documentation for usage details.

import { bufferExecute } from "@arcgis/core/geometry/operators/bufferOperator";
import { withinExecute } from "@arcgis/core/geometry/operators/withinOperator";
const bufferedRoad = bufferExecute(roadPolyline, 250, { unit: "meters" });
const isInside = withinExecute(pointOfInterest, bufferedRoad);

Oriented Imagery improvements

  • When exploring 3D images in the Oriented Imagery Viewer, you can now add a frustum filter, enabling image searches to use camera frustums instead of 2D footprint polygons when searching for images.
  • You can now use depth images in OrientedImageryLayers, providing more accurate depth-aware calculations and visualization experiences.
  • The Oriented Imagery Viewer now renders 360-degree images with improved brightness.

Documentation improvements

New and updated samples

New and updated 5.2 samples highlight current features and best practices, including an Arcade Editor sample for testing expressions, calculating hydrant flow rates, and displaying results in a Feature Table.

Enhanced guide demos

The guide pages are beginning to use a more robust demo structure that offers users exciting ways to engage with the content. This includes the ability to open demos in the Sandbox, navigate to a demo’s item property page, unpack view data, and more. Many demos are placed side-by-side to better exhibit the two implementation patterns active in the SDK: web maps or scenes built with Map or Scene Viewer and code-defined maps built entirely with JavaScript. Several introduction pages also use a new navigation block with interactive chips that link to subtopic pages. Explore the visualization and charts guides to see these new demo capabilities in action.

Changes to beta features

This section highlights updates to beta features that may affect existing implementations and require code changes.

Map component beta changes

  • The promises property and fetchFeatures() method have been removed from the Popup component. Use the fetchPopupFeatures() method on the Map, Scene, or Link Chart component instead.

AI components beta changes

For custom agents built with AI components 5.1, review these 5.2 migration changes. For new features in 5.2, see the AI components and agents section.

Update the following imports to use their new module paths in 5.2.

APIs5.1 module5.2 module
sendUXSuggestion, UXSuggestionutils/index.jsorchestrator/signals.js
sendTraceMessage, TraceEventDatautils/index.jsorchestrator/signals.js
invokeTextPrompt, invokeStructuredPrompt, invokeToolPrompt, ArcgisPromptOptions, ArcgisStructuredPromptOptions, ArcgisToolPromptOptionsutils/index.jsorchestrator/models/prompts.js
getEmbeddingsutils/index.jsorchestrator/embeddings/getEmbeddings.js
ChatHistory, UiInterrupt, AgentRegistration, AgentStatus, PriorStep, AgentExecutionContext, CustomConfigurableTypeutils/index.jsorchestrator/types.js
SharedState, SharedStatePatchutils/index.jsorchestrator/state/types.js

Construction

In 5.2, use class constructors with either CDN or npm imports. The factory functions for these agent, tool, and workflow classes have been removed. Replace a factory with the corresponding class constructor:

In 5.1:

import { createFunctionAgent } from "@arcgis/ai-components/agent-utils/index.js";
const agent = await createFunctionAgent({
name: "My agent",
execute: () => "Done",
});

In 5.2:

import { FunctionAgent } from "@arcgis/ai-components/agent-utils/FunctionAgent.js";
const agent = new FunctionAgent({
name: "My agent",
execute: () => "Done",
});

For the other factory replacements, import agent classes from agent-utils/<ClassName>.js, tool classes from agent-utils/tools/<ClassName>.js, and workflow classes from agent-utils/workflows/<ClassName>.js.

The factories returned promises; class constructors return instances directly, so update any promise chains that depend on the factory result.

Schemas

If you build Zod schemas directly, no changes are needed for this migration. If you used createSchema(), update its import location and schema definition format as shown below.

In 5.1:

import { createSchema } from "@arcgis/ai-components/agent-utils/index.js";
const schema = await createSchema({
name: { type: "string", required: true },
tags: { type: "array", itemType: "string" },
// Nested object: fields are defined inside "fields".
options: {
type: "object",
fields: {
enabled: { type: "boolean", required: true },
},
},
});

In 5.2:

import { createSchema } from "@arcgis/ai-components/agent-utils/createSchema.js";
const schema = await createSchema({
type: "object",
properties: {
name: { type: "string" },
tags: { type: "array", items: { type: "string" } },
// Nested object: use "properties" and a local "required" array.
options: {
type: "object",
properties: {
enabled: { type: "boolean" },
},
required: ["enabled"],
},
},
required: ["name"],
});

Middleware

Agent middleware configuration has changed. If you use custom agent middleware, see the API documentation for updated configuration and usage. Tool middleware is unchanged.

Map components changes

Additions

Deprecations

Charts components changes

Additions

Deprecations

Common components changes

Additions

Coding components changes

Additions

Deprecations

AI components changes

Additions

Removals

  • agent-utils/
    • BaseAgent
      • middlewares - property
      • initialize() - method
    • FunctionAgent
      • getSchemas() - method
      • initialize() - method
    • LLMAgent/
      • LLMAgent
        • getSchemas() - method
        • initialize() - method
    • WorkflowAgent
      • getSchemas() - method
      • initialize() - method
    • types/
      • SchemaPrimitiveFieldType - type declaration
      • SchemaArrayItemDefinition - type declaration
      • SchemaDefinitionData - type declaration
      • SchemaFieldData - type declaration
      • BaseAgentLike
        • getSchemas - property
    • middlewares/
      • types/
        • AgentMiddlewareHandler - type declaration
        • AfterAgentRequest - type declaration
        • LangChainMiddlewareHooks - type declaration
        • ModelLifecycleHook - type declaration
        • AgentMiddleware
          • handler - property
          • outputKey - property
        • AgentMiddlewareHooks
          • afterAgent() - method
          • beforeAgent() - method
          • wrapAgent - property
    • index/
      • createSchema() - function
      • UXSuggestion - type declaration
      • sendUXSuggestion() - function
      • createFunctionAgent() - function
      • createFunctionTool() - function
      • createLLMAgent() - function
      • createWorkflowAgent() - function
      • createConditionalWorkflow() - function
      • createLoopWorkflow() - function
      • createParallelWorkflow() - function
      • createRouterWorkflow() - function
      • createSequentialWorkflow() - function
      • createSwitchWorkflow() - function
  • components/
    • arcgis-assistant-message-read-aloud/
      • arcgis-assistant-message-read-aloud - component
  • utils/
    • index/
      • ChatHistory - type declaration
      • UiInterrupt - type declaration
      • AgentRegistration - type declaration
      • ArcgisPromptOptions - type declaration
      • ArcgisStructuredPromptOptions - type declaration
      • ArcgisToolPromptOptions - type declaration
      • TraceEventData - type declaration
      • invokeTextPrompt() - function
      • invokeStructuredPrompt() - function
      • invokeToolPrompt() - function
      • sendTraceMessage() - function
      • getEmbeddings() - function
      • cosineSimilarity() - function
      • UXSuggestion - type declaration
      • AgentStatus - type declaration
      • PriorStep - type declaration
      • AgentExecutionContext - type declaration
      • createAgentRuntimeState() - function
      • createAgentRuntimeStateWithSharedState() - function
      • sendUXSuggestion() - function
      • SharedState - type declaration
      • SharedStatePatch - type declaration

Core API changes

  • Importing JS Maps SDK modules with require() has been deprecated since version 5.0 and will no longer be supported in version 6.0. In HTML applications, use $arcgis.import() instead.
  • The __esri namespace is no longer supported for importing types and will be removed at 6.0. Use individual ESM imports to directly import types from their respective module files instead. See TypeScript import changes for more information.
  • AMD/SystemJS worker loading and custom workerPath values in WorkersConfig are deprecated since version 5.2 and will be removed at 6.0. Use ESM worker modules with workers.open() instead. See the ESM worker sample.

Additions

Deprecations

Bug fixes and enhancements

  • BUG-000152775: Fixed an issue where MapImageLayer did not include the map scale in the export request.
  • BUG-000158371: Fixed an issue where screen readers read time slider values in milliseconds. Date accessibility is now fully supported through the new Time Bar component.
  • BUG-000169782: Fixed an issue where MapImageLayer was not rendering properly when the browser scale changed.
  • BUG-000171517: Fixed an issue where line labels were not repeated when using the textFormatting.NewLine expression.
  • BUG-000171970: Fixed an issue where VectorTileLayer labels failed to update when zoomed in past the maxzoom defined in the service definition.
  • BUG-000175278: Fixed an issue that caused rendering artifacts when highlighting features with PNG symbols at DPI 1.
  • BUG-000176065: Fixed an issue where uniqueValues failed to apply spatial geometry to null value counts.
  • BUG-000178243: Fixed an issue where diagonal lines (±45°, ±135°) disappear at certain zoom levels in polar projections.
  • BUG-000179364: Fixed an issue where the Search component within an Expand component did not display search suggestions on iOS.
  • BUG-000180196: Fixed an issue where MediaLayer media would disappear when crossing the dateline.
  • BUG-000181580: Fixed an issue in local scenes with WGS84 coordinate system using Web Mercator tiled layers, where the ground can render before an IntegratedMeshLayer or IntegratedMesh3DTilesLayer.
  • BUG-000181719: Fixed an issue that prevented the Popup from displaying when a feature had a null attribute value referenced by a unique value renderer group.
  • BUG-000183839: Fixed an issue where highlighted features remained visible after switching the highlight to an offscreen feature.
  • BUG-000184504: Fixed an issue where printing with filtered data did not print correctly.
  • BUG-000186335: Fixed an issue where layers with vertical coordinate system units in US feet failed to load in a WebScene due to a units mismatch. Affected web scenes may need to be republished.
  • BUG-000186445: Fixed an issue where OGCFeatureLayer failed to match RFC 7946 GeoJSON links when the media-profile URI used different capitalization.
  • BUG-000186824: Fixed an issue that caused the map to crash when quantization produced NaN values in feature geometries.
  • BUG-000186633: Fixed an issue where DimensionFeatureLayer was not honoring dimension style display units.
  • BUG-000186750: Fixed an issue where VectorTileLayer zoom expressions stopped updating past the maximum level of detail.
  • BUG-000187289: Fixed an issue where Search.includeDefaultSourcesDisabled did not invoke a SourcesHandler function correctly.
  • BUG-000187529: Fixed an issue where a CIMSymbol with CIMMarkerPlacementAlongLineSameSize did not work properly when returnZ = true.
  • Fixed an issue where dragEnabled was not functioning correctly within group layers in the Layer List (Next) component.
  • Fixed an issue in the Layer List (Next) component where unnamed layers were labeled “Untitled table” instead of “Untitled layer”.
  • Fixed an issue where the visibility icon in the Layer List (Next) component did not reflect a layer’s visibility after the layer was removed from a group.
  • Fixed an issue where custom HTML panel content in the Layer List (Next) component disappeared after closing and reopening a panel.
  • Fixed an issue where triggering catalog-layer actions in the Layer List (Next) component threw an exception.
  • Fixed an issue where nested group layers were duplicated after being moved to another level in the Layer List (Next) and Basemap Layer List (Next) components.
  • Fixed an issue in the Layer List (Next) component where the Legend icon was not displayed when panel content included "legend" in an array.
  • Fixed an issue in the Legend where role attributes were not being correctly applied for accessibility.
  • Fixed an issue where the card-style Legend displayed excessive whitespace below legend items in Safari.
  • Fixed an issue where the card-style Legend displayed duplicate layer titles for grouped layers in stacked layout.
  • Fixed an issue where relationship elements were not being displayed when browsing aggregate features in the Popup and Features (Next) components.
  • ENH-000166502: Added support for text Formatting Tags for 2D layers that support Arcade, allowing users to style labels differently without creating new label classes.
  • ENH-000173879: Improved ARIA support for buttons in the Popup and Features (Next) components to enhance accessibility for screen reader users.
  • ENH-000180289: Enhanced the Basemap Toggle component to provide context to assistive technologies when the activeBasemap is changed.
  • ENH-000186064: Added support for callouts for text and labels in 2D maps.
  • Enhanced the Search component by adding a new LayerSearchSource.searchMode property for when working with a Full Text Index layer.
  • Added support for messageOverrides in the Area Measurement 2D, Distance Measurement 2D, Area Measurement 3D, Direct Line Measurement 3D, and Volume Measurement components, allowing default localized strings to be overridden.
  • Enhanced the Layer List (Next) component to display VideoLayer telemetry as nested sublayers for styling and smart mapping while keeping them constrained to the parent layer.
  • Enhanced the 2D MediaLayerView to support interactively moving source points. See the MediaLayer with control points sample for more information.
  • Improved the color contrast of attachment icons in the Popup, Features (Next), and Feature (Next) components for greater visual clarity.
  • When the Popup and Features (Next) components are open in “list” initial-display-mode, the focus is automatically set back to the selected feature in the feature list after going back from viewing an individual feature.
  • Added support in ElevationProfileAnalysis and the Elevation Profile component for generating profiles from an ElevationLayer that is not added to the map’s Ground.
  • When hovering over or focusing on an attachment in the Popup and Features (Next) components, an outline is now displayed around the attachment to improve visual focus.
  • Added the unlit property to MeshMaterialMetallicRoughness to render materials without lighting effects.
  • Improved the loading spinner design in the Popup and Features (Next) components for better visibility in light and dark modes.
  • Actions are now available on each aggregate, related, or associated feature when browsing these features in the Popup and Features (Next) components.
  • Removed the fixed 1.5 meter vertical offset when viewsheds were placed interactively.
  • Updated the Map, Scene, and Link Chart components to use HTMLElement.focus() for programmatic focus management.

Charts components fixes and enhancements

Patch fixes

5.2.2 (11/10/2026)

5.2.1 (11/06/2026)

  • BUG-000175825: Fixed an issue in Editor where calculated expressions referencing related records did not re-evaluate after field updates.
  • Fixed an issue in Sketch where the settings panel was getting clipped off screen without a vertical scroll bar.
  • Fixed layout issues with Sketch in a calcite-popover and the Expand component.
  • Fixed an issue in FeatureForm where the collapsible groups required multiple clicks to expand and collapse the GroupElement.
  • Fixed an issue where BatchAttributeForm's groupDisplay property set to "sequential" mode was allowing multiple groups in the form to be expanded simultaneously.
  • Fixed an issue where barriers placed near the end of a line were ignored when running a trace with the Utility Network Trace Analysis component.
  • Various fixes to support ArcGIS Online.

Additional packages

Version 5.2 of the ArcGIS Maps SDK for JavaScript uses ArcGIS Arcade 1.39.

Version 5.2 of the ArcGIS Maps SDK for JavaScript also uses Calcite Design System version 5.2.1. In your application, we recommend using the same version or a version that satisfies ^5.2.0.

How to access the SDK

  • The API library is available on both CDN and npm, read more at Get started.
  • For supported versions, you can also download both the documentation and the API library. These downloads are typically available 3-4 weeks after release.