Skip to content

v1.7.0

Choose a tag to compare

@apardee apardee released this 19 Aug 15:06

Aug 19, 2026

✨ Features

  • Support animated vector weather layers on the timeline. Point, line, and polygon layers (e.g. lightning strikes, storm cells, alerts, tropical cyclone tracks) now play and scrub alongside raster and encoded layers.
  • Extend the custom Metal rendering pipeline to every vector layer type. Circle, symbol, fill, line, and heatmap layers now render through MapsGL rather than the underlying Mapbox or MapLibre style layers.
  • Update built-in layer configurations to bring them in line with the latest JavaScript MapsGL SDK.

🐞 Bug Fixes

  • Fix the tropical cyclone layers, which were incomplete in several ways: track and forecast lines rendered nothing, every hurricane-strength storm drew the low-pressure "L" glyph, a storm's position marker and icon disappeared whenever the timeline playhead sat at the present, archive position markers and storm name labels never rendered at all, and tapping a storm produced an empty callout. Storm callouts now show name, advisory number, timestamp, category, and wind speeds, and position icons rotate as they do in the JavaScript MapsGL SDK.
  • Fix the air quality category layers (AQHI and the AQI category variants) rendering a compressed color scale. Any value at or above the last stop clamped to a mid-scale color, so the top colors were never produced — an AQHI of 12 rendered green-yellow instead of red.
  • Fix lightning-threats-polygons and hail-threats-polygons stacking in the wrong order, which drew the longest-range threat zone on top of the imminent one instead of underneath it. Also adds FillPaint.sortDirection (defaulting to .ascending) so a fill layer can declare descending sort. Their bar legends also no longer label bar values as times.

🛠 Improvements

  • Broadly optimize performance and memory across layer types to better handle the new Metal-based vector layers and expanded animation support.

  • Rename IconPaint.fixedSize to size, and move the old sprite-size multiplier to a new scale property, so each name matches what it holds and aligns with the JavaScript MapsGL SDK. IconPaint.size is now an absolute size in points and accepts a constant or a data-/zoom-driven expression, while IconPaint.scale carries the former size multiplier semantics. All affected call sites fail to compile, so no behavior changes silently. The CGSize convenience initializer that existed only to disambiguate the two fields has been removed.

    // Before
    icon.fixedSize = .constant(CGSize(width: 24, height: 24))
    icon.size = .constant(1.5)
    
    // After
    icon.size = .constant(CGSize(width: 24, height: 24))
    icon.scale = .constant(1.5)

View full changelog