To see all the latest features and advancements, please refer to the Release Notes. To see all the added features and advancements from all versions, please refer to the Previous Versions Release Notes section.
- For better memory management,
view.destroy()now destroys all attached resources, including the map. To prevent the map from being destroyed, you can unset the map before calling
// destroy the view and all attached resources view.destroy(); // unset map from the view so that it is not destroyed // then destroy the view and all attached resources const map = view.map; view.map = null; view.destroy();
- The ActionButton and ActionToggle classes now correctly implement their
toggle. Prior to this, it was set as
goToMedia()method in the Feature widget and its corresponding viewModel has been renamed to setActiveMedia.
tablesproperty for WebMap now takes a collection of Layers instead of an array of Objects.
TimeSlider.loopproperty now has a default value of
- Service metadata for all layers and tables are now collectively fetched from
FeatureServer/layers/RESTendpoint as opposed to each layer fetching its metadata from its dedicated endpoint, e.g.
StreamLayer.maximumTrackPointswas deprecated at version 4.15 and is now removed. Use StreamLayer.purgeOptions.maxObservations instead.
- Using applyEdits to add geometries with z-values to a FeatureLayer with
hasZ: falseno longer silently drops the z-value and now throws an error.
- Performance improvements were made to Popups. Prior to this release, it was possible to access the popup feature's geometry without having to specify
outFieldson the FeatureLayer or the PopupTemplate. It was always recommended to set this, but was never required. Going forward, if needing access to the underlying feature's geometry, this property must be set. This also holds true if working with WebMaps containing popups. If a popup does not have a referenced Arcade expression that works with geometry, it is now required to access either the WebMap's layer or its PopupTemplate and set the
- Removed Dojo promises. Native Promises have been activated by default. The
"esri-native-promise"is no longer supported.
- Removed use of Dojo’s
declaremodule. This means that apps with classes that leverage the API class framework and multiple inheritance will stop working. The recommended approach is to use mixins with Accessor.
TileImageryLayeris removed and replaced by the ImageryTileLayer.
- The TimeExtent's intersection method now returns an instance of TimeExtent with
undefinedvalues for start and end properties if the two time extents do not intersect.
- The suspended property of the View is now set to
falsewhen the view container's css style
visibilityis set to
visibility:hidden). The view is hidden but it renders and updates data now.
- CIMSymbol's data property now only supports CIMSymbolReference JSON. The CIMSymbol JSON should be applied at
- API returns native
Promiseby default as of 4.15. See API Modernization for more information.
dgridstyles are no longer globally included. If using
dgridin your web application, you will need to reference the stylesheet separately.
ImageMeshColor, which was deprecated since version 4.11. Set MeshTexture on MeshMaterial.colorTexture instead.
requireUtils, which was deprecated since version 4.10. Use promiseUtils.create() instead.
ValueMeshColor, which was deprecated since version 4.11. Use MeshMaterial.color instead.
versionproperties from StreamLayer.
updateevent on Sketch widget and SketchViewModel no longer have
cancelstate. The parameter
updateevents indicates that the process got cancelled.
attachmentInfosproperty has been removed from AttachmentsContent. It is now handled via the Attachments widget and can be accessed via its viewModel.
- The Workflow.data property now returns either a CreateWorkflow or UpdateWorkflow reference.
- The Editor widget and the EditorViewModel's
activeWorkflowproperty now returns either a reference to either a CreateWorkflow or UpdateWorkflow.
- The Workflow edits are now referenced in the Edits class.
- When the propagation of an event is stopped on the View, then the propagation of any derived events are stopped. For example, when
stopPropagation()is called on an immediate-click event, click and double-click events are no longer emitted. When
stopPropagation()is called on an pointer-up event, immediate-click, click and double-click are no longer emitted. This makes implementing event handlers easier, since applications usually want to handle only one of those event types at a time.
- FeatureLayerView.queryFeatures and GeoJSONLayerView.queryFeatures results will no longer include
z-valuesin 2D MapView even if the query.returnZ is set to
- The Sketch has a new property called creationMode with a default value of
continuous. This allows you to continuously create graphics with same geometry types by default. This is different from the widget's default behavior in previous releases, where you could create a single graphic at a time.
- To select or unselect multiple vertices during a graphic update operation using the Sketch widget, we now use
Shift + Left-clickcombination instead of
Ctrl + Left-clickon vertices.
- 2D measurement widgets changed the base class from
- Removed the
getImageUrl()method from MapImageLayer. This method was deprecated since version 4.11. We recommend extending BaseDynamicLayer instead.
- Removed the
values-changeevents from Slider and HistogramRangeSlider. These events were deprecated since version 4.13. We recommend watching the values property or using the other widget events instead.
- Removed Hindi (hi) as a supported locale.
- Classes related to ArcGIS Workflow Manager have been removed. They were marked as deprecated starting with version 4.13.
- The HTML sanitizer was added to all widgets to sanitize and escape strings according to the ArcGIS Online supported HTML specification. This can cause HTML set in PopupTemplate.content or in other widgets to be removed.
StretchRendereris removed and replaced by the RasterStretchRenderer.
- The Geoprocessor class has been modernized, which required several changes:
- Removed the
- Removed the
- The submitJob() method now immediately returns with a promise that resolves a JobInfo, as soon as the job is successfully submitted to the server. Previously, the returned promise was resolved only after the request succeeded. Now you can use the waitForJobCompletion() method to get notified of job completion and optionally of job status.
- The getResultMapImageLayer() method now returns a promise, which when resolved, returns a MapImageLayer. Previously, a
- When the getResultData() method requests data from
GPRecordSetit returns a DataFile when a
urlproperty is detected.
- Removed the
- Removed the
modeproperty from the
DistanceMeasurement2Dwidgets and ViewModels. See Measurement Enhancements for more information.
- Removed the
pixelSizeYproperties from ImageServiceIdentifyParameters. Use pixelSize property instead.
- Removed the
domainFieldsproperty ImageryLayer. Use fields property instead.
- Removed the
rasterAttributeTableproperties from ImageryLayer. Use the ImageryLayer's serviceRasterInfo.attributeTable property instead.
resetmethod from Sketch and SketchViewModel. Use cancel method on respective classes.
value-changeevent from SliderViewModel.
- Removed the default tabindex on the bars of the Histogram widget. All slider widgets that implement Histogram, including HistogramRangeSlider and all smart mapping sliders, are affected by this change. To tab through histogram bars, the app developer should use barCreatedFunction to set a tabindex of
0to each bar element.
- ClassBreaksRenderer.getClassBreakInfo() was changed from a synchronous to an asynchronous function.
- UniqueValueRenderer.getUniqueValueInfo() was changed from a synchronous to an asynchronous function.
- As part of performance optimizations, incorrect polygon geometries that don't follow the expected clockwise order, no longer display. Polygon rings should be clockwise, with counterclockwise rings considered holes.
- Changed locatorTask.locationToAddress() arguments from
(location, distance, requestOptions)to now accept
(params, requestOptions). The
paramsobject has two properties:
location and locationType.
- Changed the behavior for the queries queryExtent(), queryFeatureCount(), queryFeatures() and queryObjectIds() in SceneLayerView that the required fields needs to be defined with
- Changed the behavior of color in SceneView to be consistent with MapView. If the color value of a graphic is set to
nullit will display transparent.
- Full SQL support is now provided for where clauses on the LabelClass in 3D. Old where clauses that didn't implement strict SQL syntax might break.
- Moved classes Search, SearchLayer and SearchLayerField from webscene.applicationProperties to the
webdoc.applicationPropertiesmodule, common for WebMap and WebScene.
actionsMenuEnabledproperty from Popup.
referenceDotValueproperties from DotDensityRenderer.
distanceparameter from esri/widgets/Search and esri/tasks/Locator as it is deprecated and no longer recognized by the World Geocoding Service.
locationToAddressDistanceproperties from esri/widgets/Search. These properties were deprecated at version 4.11.
materialproperty from the base class Symbol3DLayer. With this new behavior, subclasses of Symbol3DLayer implement the
noDataproperty from ImageServiceIdentifyParameters.
timeExtentproperty from TimeInfo. Use fullTimeExtent property instead.
- The PopupTemplate's
titlecan no longer be set using a wildcard, e.g.
*. Instead, set the
Popup'sdefaultPopupTemplateEnabled property to true.
NumberFormatformatter functions are no longer supported when used with a PopupTemplate's
title. Instead, set it via the FieldInfo's fieldInfoFormat.
noDataValueparameter is now nested within the
optionsparameter when using ElevationLayer.fetchTile() method.
- Use the new esri/intl module and its respective methods in places referencing the
- Using parameterized functions in a PopupTemplate's
titleare no longer supported.
- When neither
widthare set for PathSymbol3DLayer then the symbol doesn't render. This is a breaking change from previous versions when not setting
sizeused to renderer the symbol with a height and a width of 1 meter.
- The behavior of FeatureLayer.outFields has changed. It is no longer computed to include fields required for layer labeling, rendering, editing and elevation info. It now returns
nullunless it is explicitly set.
- In general, you no longer need to specify the outFields. The API automatically determines which fields to fetch. However, if you are using the fields in custom functionality, you might still need to explicitly add those using the outFields property.
- To find out which fields are available client-side, use the new availableFields property. It contains a list of attribute fields fetched for each feature including fields required for layer labeling, rendering, elevation info, and any additional fields defined with the FeatureLayer.outFields property. The availableFields is populated when the layer view is finished updating.
- Query.units property's default value is now
- Sublayer.createFeatureLayer() now returns a promise resolving to a FeatureLayer, as opposed to a FeatureLayer.
- Autocasting is no longer supported for Mesh geometry.
- Change to how texture transparency is interpreted in esri/geometry/support/MeshMaterial. Before, values below
0.1would be interpreted as fully transparent (i.e. masking), now this threshold was moved to
0.5. If the old behavior is desired, the threshold can now be explicitly changed using the alphaCutoff property.
- Moved the
selectmethod out of FeatureTemplates and into the FeatureTemplatesViewModel.
contentEnabledproperty on both the Feature widget and the FeatureViewModel.
Legendsupport from MapNotesLayer.
tokenproperty from all layer classes. The recommended approach to pass a token on a layer is to use IdentityManager.registerToken() or to use esriConfig.request.interceptors.
- Removed the
viewproperty from Feature widget and FeatureViewModel.
- The MapImageLayer.getImageUrl() method now returns
definitionExpressionproperty of AttachmentQuery class to where.
definitionExpressionproperty of RelationshipQuery class to where.
FeatureLayerSearchSourceclass to LayerSearchSource.
- As part of adding 3D drawing support, the 2D draw classes have moved:
- Several popup related classes have been moved, renamed or removed:
- ExpressionInfo class moved from
- FieldInfo class moved from
- LayerOptions class moved from
- RelatedRecordsInfo class moved from
esri/support/ContentElementto content and moved to
esri/support/ContentElement/ContentElementto Content and moved to
esri/support/ContentElement/Attachmentsto AttachmentsContent and moved to
esri/support/ContentElement/FieldsContentto FieldsContent and moved to
esri/support/ContentElement/Textto TextContent and moved to
esri/support/ContentElement/Mediato MediaContent and moved to
esri/support/ContentElement/Media/BarChartto BarChartMediaInfo and moved to
esri/support/RelatedRecordsInfo/FieldOrderto RelatedRecordsInfoFieldOrder and moved to
esri/support/FieldInfo/Formatto FieldInfoFormat and moved to
esri/support/ContentElement/Media/Chart/Seriesto ChartMediaInfoValueSeries and moved to
esri/support/ContentElement/Media/Chart/Valueto ChartMediaInfoValue and moved to
esri/support/ContentElement/Media/ColumnChartto ColumnChartMediaInfo and moved to
esri/support/ContentElement/Media/LineChartto LineChartMediaInfo and moved to
esri/support/ContentElement/Media/PieChartto PieChartMediaInfo and moved to
esri/support/ContentElement/Media/Imageto ImageMediaInfo and moved to
esri/support/ContentElement/Media/Image/Valueto ImageMediaInfoValue and moved to
- A graphic can only be in one GraphicsLayer at a time. When adding a graphic to a graphics layer, and if it is already in another graphics layer, the graphic is moved to the destination graphics layer.
- The developer and user experiences for 2D highlights have been improved in three ways:
- soft, anti-aliased edges
- decreased default opacity that is now consistent with the default settings used in 3D
- modified coverage algorithm that now highlights the transparent portions of lines and polygons
- Renamed the Esri Icon Font family from
calcite-web-iconsfor 2D MapViews.
- Removed FeatureLayer.capabilities.query.supportsAttachments from esri/layers/FeatureLayer.
- Creating a FeatureLayer from client-side features now requires a
typeproperty to be set for each field.
FieldOptionsclass has been removed and merged with the FieldConfig class.
- Removed the ability of
event.stopPropagation()to allow manual display of a Popup with the view's click event. Set the new autoOpenEnabled to
- All documentation for
IdentityManagerBasehas been merged into IdentityManager.
- Bookmark class moved from
FeatureLayer.queryFeatureAttachments()method is removed. Use FeatureLayer.queryAttachments instead.
- Functions can no longer be used in renderers and visual variables in place of fields. Use the valueExpression property instead.
- Removed esriConfig's request properties:
- Removed the
allowImageDataAccessrequestOption property from the esriRequest method. Also removed it as a property from MapImageLayer, BingMapsLayer, and OpenStreetMap options. The API automatically allows this without having to explicitly set it.
- Removed the
isMaxInclusiveproperty from ClassBreaksRenderer.
- Removed the
popupOpenOnSelectproperty from Search widget and SearchViewModel.
- Set the new
trustedServersproperty available in esriConfig's request property if needing to include credentials such as cookies and authorization headers in cross origin requests. Prior to version 4.9, this would be handled by setting corsEnabledServers
- CSS style,
esri-widget__header, was renamed to
.esri-widget__heading. For additional information on working with this style, see the Styling guide topic.
- SceneView.goTo() method now queries the target location for elevation if the target doesn't have a z-value. This means that the promise will not resolve immediately anymore, even if the
animateoption is set to
- Corrected format and layout TemplateOptions values to be consistent with documentation.
minSizeproperty from pointSizeAlgorithm.
- FeatureLayerView.queryFeatures() and CSVLayerView.queryFeatures() now resolve to a FeatureSet an array of graphics.
- SketchViewModel.update() now accepts graphic instead of geometry.
draw-startevent was renamed to create-init,
draw-cancelto create-cancel and
update-startwas renamed to update-init.
otherwise()methods were deprecated at 4.7 and have been removed as of version 4.8.
defaultSourcefrom both the Search widget and SearchViewModel. Instead, use the defaultSources property.
stateproperty was removed from the Search widget and added into the SearchViewModel.
- In 3D, during continuous camera movement, updates on FeatureLayers with large data sets may be suspended until the continuous camera movement has finished.
- CSS class,
.esri-widget-button, has been renamed to
.esri-widget--button(take note of the two dashes
Actionclass has been deprecated. You should now use either ActionButton or ActionToggle in its place.
- To access a Graphic's PopupTemplate, use the getEffectivePopupTemplate method. Prior to version 4.8, if the popupTemplate was not defined on the Graphic, it would use the
popupTemplatefrom the graphic's layer.
classificationMethodproperty from ClassBreaksRenderer.
createActionsFunctionproperty from LayerList and LayerListViewModel (use
graphicproperty from draw-complete.
styleOriginproperty from LabelSymbol3D.
then()method from all classes (use when() instead when using Promises).
itemDelimiterhave moved from AttributionViewModel to the Attribution widget.
- Altitude constraints are no longer applied in local scenes.
- SceneView.goTo and MapView.goTo always return a Promise and not a ViewAnimation anymore.
- The Search widget's
searchingproperty has been replaced with state.
relationParamproperty on Query is renamed to relationParameter.
relationParamproperty on RelationParameters is renamed to relationParameter.
- VectorTileLayer's url property type is
Stringonly now. When initializing a VectorTileLayer with style JSON object, use VectorTileLayer's style property instead.
typeproperty in all renderer, symbol, and symbol layer classes is no longer read-only.
typevalue for many renderers for consistent kebab-casing:
- UniqueValueRenderer.type was changed from
- ClassBreaksRenderer.type was changed from
- PointCloudClassBreaksRenderer.type was changed from
- PointCloudRGBRenderer.type was changed from
- PointCloudStretchRenderer.type was changed from
- PointCloudUniqueValueRenderer.type was changed from
- SimpleMarkerSymbol.type was changed from
- SimpleLineSymbol.type was changed from
- SimpleFillSymbol.type was changed from
- PictureMarkerSymbol.type was changed from
- PictureFillSymbol.type was changed from
- TextSymbol.type was changed from
- PointSymbol3D.type was changed from
- LineSymbol3D.type was changed from
- PolygonSymbol3D.type was changed from
- MeshSymbol3D.type was changed from
- LabelSymbol3D.type was changed from
- WebStyleSymbol.type was changed from
- UniqueValueRenderer.type was changed from
- ElevationLayers are always visible at the slide level when saving a scene with API 4.5 to Portal 10.5.1 (or earlier).
zoomScaleproperty in Search sources now automatically uses the set scale. Prior to this version, it would only zoom to the scale if the search result did not have an associated extent.
- The Search widget's search() method returns a Promise which, when resolved, returns a SearchResponse similar to the search-complete event.
- Both the Search widget and its corresponding viewmodel's suggest() method returns a Promise which, when resolved, returns a SuggestResponse similar to the suggest-complete event.
- Removed the
- Removed the Graphic
getEffectivePopupTemplatemethod. Instead, if the graphic's popupTemplate is not defined, it will use the graphic's layer
maxScaleproperties from ElevationLayer.
- As of version 4.4, the response for the locator.locationToAddress() method returns a proper AddressCandidate. This bug fix affects two of five AddressCandidate properties:
attributes. Note that there are no changes to the other AddressCandidate properties:
- Prior to 4.4,
locationToAddress()incorrectly returned an object that always had an empty
attributesproperty, and the
addressstring was an object. As of 4.4, the
addressproperty is a string, and the
attributesproperty will be populated.
- Specifying an exact field, e.g.
CountryCode, should now be written as
attributes.CountryCode. (Prior to this version, it was written as
- The popup sample using reverse geocoding has been updated to reflect this change.
- Prior to 4.4,
- Esri icon font styles and codes have been updated, resulting in some codes being changed or used for new icon fonts.
- ViewAnimation.stop() now rejects the ViewAnimation promise.
- 3D Symbol layer types changed name style and now use kebab-casing to be consistent with the rest of the API.
- The orientation of 3D WebStyleSymbols was updated. Now the forward-facing side of the symbol points in the direction of the y-axis (North). Setting a heading of
0on a ObjectSymbol3DLayer will make the symbol point North and setting it to
180will make the symbol point South. In comparison to the old styles, Signs and signals and Street scene changed orientation by 180 degrees and Transportation changed by 90 degrees.
- As of version 4.x, the recommended approach to pass a token on a layer is to use IdentityManager.registerToken(). Prior to this in 3.x, it was possible to pass a token to a layer either via 1) the layer's
tokenproperty, or 2) appending it to the end of the layer URL.
- The Search widget's sources property has a new
filteroption which replaces the now deprecated
- If developing custom widgets, configuration settings should be updated to reflect
"jsxFactory": "tsx",instead of
"reactNamespace": "jsxFactory",. This is discussed in the TypeScript setup guide topic.
- For the light values passed into external renderers, the balance between ambient and diffuse lighting has changed. This may result in a slightly different appearance for objects rendered with external renderers. The new light values represent colors/intensities in linear color space, and are optimized for gamma-corrected rendering with a gamma value of 2.1.
- At 4.4, the view.click event will close the popup if the clicked location doesn't intersect a feature with a popup template. You may want to disable this default behavior if opening the popup with custom content or keep it open when the view is clicked. To do so, you must call
stopPropagation()on the click event object.
sizeRendererCreator.createVisualVariable()was renamed to sizeRendererCreator.createVisualVariables() because it now returns an array of visual variables.
- The following VectorTileLayer properties are removed:
- To increase security, browsers are starting to block Geolocation API on insecure pages, meaning that the Locate button will not work from non-secure web pages (i.e., hosted on http). Google Chrome first implemented this in version 50 (April 2016) and Apple in Safari 10 (September 2016). Mozilla/Firefox is planning to do the same. At version 4.0 and 3.17 the JSAPI no longer displayed the Locate Button for non-secure web apps in the Chrome browser. As of version 4.2 and 3.19, the JSAPI no longer displays the Locate Button for non-secure web apps in any web browser. Note that localhost is considered "potentially secure" and can be used for easy testing.
- The WebMap.version property was renamed to WebMap.sourceVersion
- The WebScene.version property was renamed to WebScene.sourceVersion
- The ClosestFacilityParameters.returnPolylgonBarriers property was renamed to ClosestFacilityParameters.returnPolygonBarriers
- The FeatureLayer.createQueryParameters property was renamed to FeatureLayer.createQuery
- The Popup's dockOptions' position property now accepts a function in addition to a known string value.
- The NavigationToggle was added to the default widgets for SceneView.
- The Geoprocessor.getResultImageLayer() method was replaced by Geoprocessor.getResultMapImageLayer(). Please see its SDK documentation for signature changes.
layer-reorderevents were removed from GroupLayer, Map and its subclasses. Use the change event of
This was the first official release of the 4x API. Since the prior 4x releases were in
beta, they will not be considered here.