2026.1
2026.1
New featureLuciadRIA
WFSFeatureStore now supports WFS-T, including feature insertion, updating, removal, and locking.
See Edit WFS data with WFS-T for more information.
New featureLuciadRIA
GMLCodec now supports encoding features.
Use encode(cursor) to produce a gml:FeatureCollection document.
New featureLuciadRIA
.pmtiles file read over HTTP
range requests, with no tile server).
See Visualize Mapbox Vector Tiles for more
information.
New featureLuciadRIA
You can now limit the total number of points used by all point cloud layers on a map with the new
RIAMap.performanceHints.maxPointCount property.
LuciadRIA distributes this point budget automatically and continuously across the point cloud layers visible on
the map.
See Tuning performance and visual quality of point clouds.
New featureLuciadRIA
LuciadRIA can now decode and visualize Gaussian splats. Gaussian splatting is a novel scene-representation and 3D rendering technique that uses a large amount of tiny 3D Gaussian primitives ("splats") to create photorealistic views of real-world scenes.

LuciadRIA can consume Gaussian splats as OGC 3D Tiles with glTF payloads that make use of the
KHR_gaussian_splatting or KHR_gaussian_splatting_compression_spz_2 extension of the glTF specification.
You can visualize a Gaussian splatting dataset by constructing a TileSet3DLayer with an OGC3DTilesModel.
Also see TileSet3DLayer.gaussianSplatsStyle, which allows you to customize the styling of the Gaussian splats, using expressions for example,
and to tweak other performance-related settings.
LuciadRIA depends on the libraries tinyply and spz for parsing
ply and spz files respectively.
See Visualize Gaussian splats for more information.
New featureDefense Symbology
RIA-5998
New featureDefense Symbology
We have added full support for the military standard 'APP-6 NATO Joint Military Symbology, Edition E Version 2, October 2025'.
The symbols of the Cyberspace symbol set, which we added previous release have been upgraded from APP-6E E Version 1 to APP-6E Version 2.
You can visualize the APP-6E symbols using the Military Symbology samples, located in samples/symbology within the release directory.

New featureDefense Symbology
- Decoding NVG XML content
- Decoding NVG XML streaming content, of both full sync and partial updates
- Visualization of NVG Features
- Editing of NVG Features, of both shapes and properties
- Creation of NVG Features
- Encoding of NVG XML content
ImprovementLuciadRIA
RIA-6190
identifiers() filter with other conditions using
and(), or() and not().
WFS 1.x does not support this.
ImprovementLuciadRIA
RIA-6046
Bounds.focusPoint is now documented as the center of the bounds. For geodetic bounds, its
longitude is now normalized to the [-180, 180] range. Previously, bounds crossing the date line could return a
longitude above 180.
ImprovementLuciadRIA
RIA-5869, RIA-6187
ImprovementLuciadRIA
ImprovementLuciadRIA
ImprovementLuciadRIA
RIA-6036
OrientedBox.getCorners()
and OrientedBox.getCornerPoints() now return a fixed-size tuple of eight
corners, typed as OrientedBoxCorners<Vector3> and
OrientedBoxCorners<Point>, instead of an
Vector3[]
and a Point[]. An oriented box always has exactly eight corners, so callers can
now destructure or index all of them without checking for
undefined.
Existing code keeps working: a tuple is still an array, so it can be iterated, mapped and passed wherever an array of corners was expected.
ImprovementLuciadRIA
Undoable.undo()
and Undoable.redo() can now be
asynchronous. An undoable often updates a model, and such an update can take a request to a server, for
example on a WFS-T store. Returning a promise is optional: an Undoable that applies
its change synchronously returns nothing, as before.
Existing Undoable implementations keep working unchanged.
As a result, UndoManager.undo() and
UndoManager.redo()
now return Promise<void> instead of void. If every
Undoable
in your UndoManager is synchronous, that promise
never rejects, and you can keep calling both methods and ignore what they return. As soon as one of them
can be asynchronous, await it inside a try/catch block, so that you find out whether the operation was
applied and can report a failed model update to your user.
See the Adding undo/redo support to your application guide for details.
ImprovementLuciadRIA
RIA-5971, RIA-5838
ImprovementLuciadRIA
WFSCapabilities.operations now also includes Transaction,
LockFeature and GetFeatureWithLock
when advertised by the WFS server.
The operation names exposed through WFSCapabilities.operations
are now also available as the public WFSOperationName enum.
ImprovementLuciadRIA
WFSFeatureStore
now implements get(id),
so you can retrieve a single feature from the WFS service by id.
ImprovementLuciadRIA
WFSCapabilities
and
WFSCapabilitiesOperation
now expose ows:Constraint values through a new
constraints
property, at the service and operation level respectively.
ImprovementLuciadRIA
RIA-5959
getMapPostRoot, getFeatureInfoPostRoot and
maxRequestURLSize on a WMSTileSetModel and
WMSImageModel. If the request URL to perform a GetMap or GetFeatureInfo is larger than
maxRequestURLSize and the POST roots for these requests are defined, LuciadRIA will use
HTTP POST instead of HTTP GET requests to retrieve the data. In that case, all request parameters are
application/x-www-form-urlencoded in the body of the request.
ImprovementLuciadRIA
RIA-5138
ImprovementLuciadRIA
RIA-5942
ImprovementLuciadRIA
RIAMap.maxMemoryUsageHint (property and constructor option) has been deprecated in favor of
RIAMap.performanceHints.maxMemoryUsage.
ImprovementDefense Symbology
RIA-6200
It is now possible to configure the APP-6A and APP-6B "Antitank Ditch" symbols to be painted using
the "Under Construction" stroke pattern. To paint these symbols using the "Under Construction" stroke pattern,
set the typeOfEquipment modifier to "U" or "Under Construction".
ImprovementDefense Symbology
RIA-6205
displayName was added to HierarchicalSymbology, to get an easier
human-readable name for use in labels of your UI components.
ImprovementDefense Symbology
RIA-6197
ImprovementDefense Symbology
RIA-6185
ImprovementDefense Symbology
RIA-6176
ImprovementDefense Symbology
RIA-6195
ImprovementDefense Symbology
RIA-6192
ImprovementDefense Symbology
LCD-14839, LCD-14848
uniqueDesignation and additionalInformation modifier labels are now rendered with a surrounding text box.
ImprovementDefense Symbology
RIA-6116
- Guarded Unit
- Controlling Headquarters
- Purpose
- Special Headquarters
- SIGINT Mobility Indicator
- Target Designator
- Target Number Extension
- Unlisted Point Information
ImprovementDefense Symbology
RIA-6201
It is now possible to configure the APP-6A and APP-6B "Biological and Chemical Attack, Release Event" symbols
to be painted using the "Chemical" icon. To paint these symbols using the "Chemical" icon,
set the typeOfEquipment modifier to "C" or "Chemical".
ImprovementDefense Symbology
LCD-14827
hostile (ENY) modifier has been improved for the Direction of Movement symbols.
ImprovementPanoramic
RIA-6172
ImprovementPanoramic
Bug fixLuciadRIA
RIA-6204
TileSet3DLayer.transformation would not be applied correctly
to tilesets containing Gaussian splats.
Bug fixLuciadRIA
RIA-6203
WFSFeatureStore created from capabilities used only the first
WGS 84 bounding box defined for the feature type.
It now uses the union for all of them.
Bug fixLuciadRIA
Geodesy.distance with LineType.CONSTANT_BEARING now includes the
north-south part of the distance for points whose latitudes differ by less than 1e-8 degree (about a millimeter).
Bug fixLuciadRIA
Geodesy.interpolate with LineType.SHORTEST_DISTANCE is now accurate for
points on either side of the date line. Previously the result could be meters off the geodesic for points a
kilometer apart, and centimeters off for points 100 kilometers apart. This also affected other computations on
geodesic lines that cross the date line, such as their bounds.
Bug fixLuciadRIA
RIA-6182
Bug fixLuciadRIA
RIA-6102
Bug fixLuciadRIA
RIA-6180
Bug fixLuciadRIA
RIA-6056
Style
element is encountered without an Identifier. If such a style is selected when you
create a WMTSTileSetModel, which can happen if you don't explicitly configure a style,
"default" will be used as the value of the STYLE request parameter.
Bug fixLuciadRIA
RIA-5444
FeatureLayer.workingSet before the layer was added to a map threw an error when the
layer was added, leaving the layer without features. The operation is now applied once the layer is on the map.
Bug fixLuciadRIA
RIA-6113
Bug fixLuciadRIA
RIA-6110
CurveArcInterpretation.CONTINUITY could choose the wrong
direction for an ArcByCenterPoint, including arcs between other arcs,
single-arc curves, all-arc rings, degenerate or near-duplicate polyline points, and lon/lat data,
which used planar instead of geodesic directions. This could cause an arc to take the long path
around the circle instead of the intended continuous path.
Bug fixLuciadRIA
RIA-6088
FeatureLayer could throw an unexpected error when a query was
interrupted, or a new query was triggered, while the results of a previous query were still being processed.
Bug fixLuciadRIA
Bug fixLuciadRIA
GeoCanvas.drawPanorama) was clipped
incorrectly while layer clipping was active (through a SwipeController, for example) and
the map's displayScale was not 1. The panorama ignored the clip and kept painting across
the whole map.
Bug fixLuciadRIA
RIA-6073
Map.pickAt and
Map.pickClosestObject) ignored the swipe sides of a
SwipeController when the map's displayScale was not 1.
Layers on one side of the swipe line stayed pickable across the whole map, while layers on the other side
could not be picked at all.
Bug fixLuciadRIA
Bug fixLuciadRIA
RIA-6071
Bug fixLuciadRIA
RIA-6069
Bug fixLuciadRIA
RIA-6048
TileSet3DLayer could report no or
another object.
Bug fixLuciadRIA
RIA-6058
Bug fixLuciadRIA
RIA-2913
Bug fixLuciadRIA
Bug fixLuciadRIA
Bug fixLuciadRIA
RIA-5278
whenReady()) after model
updates, before pending clustering work had completed.
Bug fixLuciadRIA
RIA-5408

Bug fixLuciadRIA

Bug fixDefense Symbology
RIA-6209
Fixed incorrect rendering of a number of APP-6A and APP-6B icons.
APP-6A:
- Hostile or Insurgent Infantry (2.X.3.1.15): now uses the Infantry icon, where it used to have the Motorised Infantry icon.
APP-6A and APP-6B:
- Hail (3.X.7.3): now uses the correct icon.
- Ice Pellets (3.X.7.4): now use the correct color.
- Ice Crystals (3.X.7.5): now use the correct color.
- Freezing Fog (3.X.9.2.1): now use the correct color.
APP-6B:
- Multi-Functional Earth Mover (1.X.3.2.2.3.2.1): now has a circular frame instead of a rectangular one when in the Friendly affiliation.
Bug fixDefense Symbology
RIA-6208
Bug fixDefense Symbology
RIA-5443
Bug fixDefense Symbology
LCD-14886
The APP-6E Cyberspace symbols now display the headquarters staff, feint/dummy and
task force indicators when their hqTaskForceDummy modifier is set.
Previously these indicators were missing.
In addition, the hqTaskForceDummy modifier now only offers the indicators that the
APP-6E standard allows for the following symbol sets:
- Land Equipment (
15): the headquarters and task force indicators are disabled. - Land Installation (
20): the task force indicator is disabled. - Dismounted Individual (
27): the headquarters and task force indicators are disabled. - Activities (
40): the feint/dummy and task force indicators are disabled. - Cyberspace - Non Unit (
64): the feint/dummy indicator is now enabled. Previously none of the indicators were available for this symbol set.
Bug fixDefense Symbology
RIA-6174
<root>/license/luciadria_development.txt
and
<root>/license/luciadria_deployment.txt, even though it configures its
license through setLicenseText or loadLicenseFromUrl.
Bug fixDefense Symbology
LCD-14828
hostile (ENY) modifier label is now shown for Axis of Advance symbols in APP-6E.
Bug fixDefense Symbology
LCD-14826
The APP-6E mined area symbols now display the feint/dummy indicator when their
hqTaskForceDummy modifier is set to one of the
Feint/Dummy values. Previously the indicator was missing, so a
decoy area was indistinguishable from a real one.
The change affects the following APP-6E symbols:
- Minefield - Dynamic Depiction
- Mined Area
- Mined Area, Fenced
Upgrade considerationLuciadRIA
RIA-6052
WFSQueryOptions.filter now only accepts an OGCCondition,
such as the id filter returned by identifiers().
Passing property() or literal() to
WFSFeatureStore.query(), spatialQuery() or
queryWithLock() now results in a compile-time error.
Upgrade considerationLuciadRIA
RIA-6051
OGCCondition, a predicate that evaluates to true or false, and
OGCExpression, which evaluates to a value such as a string or number, are now distinct types.
The FilterFactory functions type their arguments and results accordingly,
so passing an expression where a condition is expected, or the other way around, is now a compile-time error.
For example, and(property("a"), ...) no longer compiles.
These calls already failed at runtime.
func() returns OGCCondition & OGCExpression, so you can
use a function both as a condition and as an operand.
OGCFilterEncoder.encode() now only accepts an OGCCondition.
Upgrade considerationLuciadRIA
Store is now an abstract class instead of an interface, and its
spatialQuery, get, add,
put and remove operations are no longer optional:
Store and FeatureModel always declare them, so checks such as
typeof store.add === "function" no longer work. Use the new
isOperationSupported(operation) method instead to find out which operations can
actually be called; calling an unsupported one throws a ProgrammingError.
query is always supported.
Adapt a custom store by extending Store and implementing
query. Override the operations the store supports
(spatialQuery, get, add,
put and remove)
and report them from isOperationSupported.
Store now provides the event system itself: it always has an
on method and a store reports its changes with the new
emitStoreChangedEvent method. on only accepts
"StoreChanged", and its callback receives "add",
"update" or "remove" instead of any
string. Another event throws a ProgrammingError. Due to
these changes, a custom store has to extend Store instead of implementing it,
and a store that overrides on must narrow its callback.
Upgrade considerationLuciadRIA
Several map effect properties were renamed or re-expressed. The old names are deprecated but keep working (they are mapped onto the new ones), so existing code keeps rendering the same result.
The FogEffect now expresses fog in metric units instead of the previous unitless values:
densityis deprecated in favor ofvisibility: the distance in meters at which the fog fully obscures the scene near the ground. Note that visibility works inversely to density, a higher visibility means thinner fog.heightFalloffis deprecated in favor ofhalvingHeight: the altitude in meters over which the fog thins by half. Uniform fog, previouslyheightFalloff: 0, is now expressed ashalvingHeight: null.
If you are unsure which values to use, start from the defaults (a visibility of 80000 m
and a halvingHeight of 4000 m) and adjust from there. See the fog effect documentation
for more guidance on choosing metric values.
Other effect properties were renamed only, without a change in meaning:
DepthOfFieldEffect:scalebecomesblurStrength,focalDepthbecomesfocusDistance,focusRangebecomesblurStartDistance, andnoFocusRangebecomesfullBlurDistance.LightScatteringAtmosphere:affectsTerrainbecomesaerialPerspective.
LightScatteringAtmosphere also gained a new mieAnisotropy property,
controlling how tightly the Mie haze clusters around the sun.
Upgrade considerationLuciadRIA
RIA-6019
Store.get()
and FeatureModel.get() no longer require
asynchronous implementations to reject their promises when no feature with the given id exists.
Custom asynchronous Store implementations should instead resolve with
undefined
and reserve rejection for actual failures, such as network or parsing errors.
Callers that relied on a rejected promise to detect a missing feature must now handle a promise resolving with
undefined
instead.
Upgrade considerationLuciadRIA
RIA-5994
Upgrade considerationLuciadRIA
RIA-4563
Touch and mouse input on labels no longer prevents the map from panning, zooming, or picking. The HTML label layer is now transparent to input by default, so a click or touch on label text falls through to the map. Previously, a finger resting on a label blocked the map from receiving touch events.
Interactive label content keeps working: native elements (<a href>,
<button>, <input>, <select>,
<textarea>, <label> and
contenteditable
elements) receive input automatically. To make custom content interactive,
add the lcd-label-interactive CSS class to it. If you previously attached a handler to the
whole label element rather than to an inner control, add that class to the element that should be clickable.
See How to add interactive content to
labels.
Upgrade considerationLuciadRIA
RIA-5919
FeatureLayerConstructorOptions.incrementalRendering constructor option was
removed.
The option is no longer wired to any rendering behavior in GPU maps, so setting it had no effect.
Existing applications can safely remove this property from FeatureLayer construction options.
Upgrade considerationDefense Symbology
The hostile text modifier now accepts only two values:
ENY (the default) and null.
You can use the modifier to disable the ENY indicator: setting it
to null removes the annotation from both the icon label and the stroke
decoration of tactical graphics. Previously, symbols with a hostile affiliation were always
annotated with ENY, regardless of the modifier value.
The change affects all supported military symbology standards.
Upgrade considerationDefense Symbology
MilitarySymbologyCreateController and NVGCreateController
previously selected a feature automatically after creating it. This automatic selection has been removed.
To enable it again, see
NVG creation.
Upgrade considerationDefense Symbology
A number of control measure Line symbols in APP-6D and MIL-STD 2525D no longer display the generic
PL ("phase line") label. Previously these symbols were labeled twice:
once with PL followed by the first
uniqueDesignation modifier, and once with the abbreviation specific to
the symbol followed by the second uniqueDesignation modifier. They are
now labeled only with their own abbreviation, followed by the
first uniqueDesignation modifier.
The change affects the following symbols. All of them belong to symbol set
25 (Control Measure); the symbol code is given for each symbol.
- APP-6D
- Light Line:
110200 - Final Coordination Line:
140700 - Limit Of Advance:
140900 - Line Of Departure:
141100 - Line Of Contact:
140200 - Probable Line Of Deployment:
141200 - Bridgehead Line (BL):
141400 - Holding Line:
141500 - Release Line:
141600
- Light Line:
- MIL-STD-2525D
- Light Line:
110200 - Final Coordination Line:
140700 - Limit Of Advance:
140900 - Line Of Departure / Line Of Contact:
141100 - Line Of Contact:
140200 - Probable Line Of Deployment:
141200 - Bridgehead Line (BL):
141400 - Holding Line (HL):
141500 - Release Line:
141600
- Light Line: