v11.28.0-rc.1
Pre-releaseFeatures ✨ and improvements 🏁
- Line borders can now use a gradient along the line
The new experimentalLineLayer.lineBorderGradientcolors a line feature's border along its length. Define it with asteporinterpolateexpression overline-progress. It takes precedence overlineBorderColor, needslineBorderWidthabove zero, and requires a GeoJSON source withlineMetricsset totrue. Route lines can now give upcoming legs a different casing color than the active leg. verticalFovaccepts values down to 1 degree
The vertical field of view now spans 1 degree to 90 degrees, widened from a lower bound of 11 degrees. Narrow values align a map overlay with a highly magnified camera or video feed. Shadows can still show precision artifacts below the old limit.
Bug fixes 🐞
-
View annotations misplaced on overlapping route sections near tile boundaries
During a zoom transition, the collision test forViewAnnotationManager.viewAnnotationAvoidLayerschecked tile bounds with a larger radius than it used to place collision stamps. It found nothing to collide with and passed, so an annotation landed on an overlapping route section. The bounds check now uses the stamp cell size, so the SDK rejects the placement. -
Elevated road-markup lines could flicker against the surface beneath them
A line usingLineLayer.lineElevationReferenceset to.hdRoadMarkupsits at nearly the same depth as the fill below it. Where the line width changed direction, its geometry could protrude and flicker. The renderer now biases the line depth 0.5 m toward the camera. -
3D models with a zero alpha vertex color rendered black
The renderer read a model's vertex alpha channel for per-vertex ambient occlusion, assuming the channel was always white. Models that take their color from the style and ship a zero alpha turned black in aModelLayer. The alpha channel now applies only to level-of-detail meshes. -
Fullwidth vertical bar rotated twice in vertical text
The CJK character rotation work in 11.27.0 substituted a horizontal bar and then rotated it again. The character now renders with a single rotation. -
Applying an offline patch could fail when disk space ran short
TileStore checked its quota against the downloaded patch, then checked the full file only after applying it. The disk could be full by then, and the write failed. TileStore now estimates the patched size and evicts data beforehand. -
Offline imports could keep data older than what is already stored
When a stored entry expired, TileStore imported the package entry unconditionally, assuming downloaded data is newer. Package data can predate what is on disk. TileStore now compares expiration times and imports only newer data, so a repeat import changes nothing. -
Throttled tile downloads retried in lockstep
On an HTTP 429 response, TileStore waited exactly the server'sRetry-Afterdelay. Downloads throttled together retried together, re-spiking the rate and drawing another 429, which could starve tiles for several minutes. The delay now carries jitter, so retries spread out.
Performance improvements 🚀
-
Raster tiles upload to the GPU asynchronously
Raster layers now upload vertex buffers, index buffers, and textures through the asynchronous path other layers use. A tile draws after its upload finishes instead of holding up the render pass, which shortens frame stalls when imagery streams in. -
Critical tile loads run ahead of other TileStore work
TileStore now schedules loads marked critical priority at the front of its worker queue. Map tiles arrive sooner when a background download or offline operation is also in flight.
Dependencies
- Update MapboxCommon to
24.28.0-rc.1. - Update MapboxCoreMaps to
11.28.0-rc.1.
Dependency requirements:
- Compatible version of Xcode:
26.3