Skip to content

0.40.0

Choose a tag to compare

@ianthetechie ianthetechie released this 19 Aug 02:50

Version 0.40.0 is here with a massive set of improvements 🚀

Highlights

Separating the visual web component and core logic

🚨 Breaking change: In addition to being able to bring your own map, we've finally separated the business logic out of the web component thanks to @Kandarp05's work. The business logic now lives in FerrostarCore, just like on other platforms. FerrostarMap now only handles rendering the MapLibre control. Here's the migration guide if you're using Ferrostar on the web.

First, your web component usage in the markup will get a lot simpler!

-      <ferrostar-map
-        id="ferrostar"
-        valhallaEndpointUrl="https://api.stadiamaps.com/route/v1"
-        styleUrl="https://tiles.stadiamaps.com/styles/outdoors.json"
-        profile="bicycle"
-      ></ferrostar-map>
+      <ferrostar-map id="ferrostar"></ferrostar-map>

This is replaced by a little bit more JavaScript, but makes a clear separation between UI and business logic rather than stuffing everything into a single web component:

         // Get a reference to the Ferrostar map component
-        const ferrostar = document.getElementById("ferrostar");
-        ferrostar.map = mapInstance;
+        const ferrostarMap = document.getElementById("ferrostar");
+        let ferrostarCore = new FerrostarCore();
+        ferrostarCore.valhallaEndpointUrl =
+          "https://api.stadiamaps.com/route/v1";
+        ferrostarCore.profile = "bicycle";
+
+        ferrostarMap.map = mapInstance;

Finally, you need to explicitly link the map to a FerrostarCore instance (e.g. when starting navigation).

-          ferrostar.locationProvider = locationProvider;
-          ferrostar.startNavigation(route, config);
+          ferrostarMap.linkWith(ferrostarCore, true);
+          ferrostarCore.locationProvider = locationProvider;
+          ferrostarCore.startNavigation(route, config);

Dynamic Island

A picture is worth a thousand words here. @Archdoog has added some excellent-looking Dynamic Island support for iOS!

Simulator Screenshot - iPhone 16 Pro Max - 2025-07-28 at 15 21 57

iOS Route Overview

The first pass of route overview in iOS has finally landed. There are still a few hiccups with the camera animation that we're working to smooth over; see #330 for discussion.

GSoC project: navigation session recording

@Kandarp05 is on the home stretch with our navigation session recording project. This release includes the full recording implementation AND the ability to replay a session, both in library form and integrated into our web demo!

As we finish out GSoC, we'll be working on some more improvements to the experience.

iOS Demo app improvements

In case you missed it, we've been slowly improving the iOS demo app with CarPlay support thanks to PRs from @bolsinga! We continue working toward a more polished "drop-in" integration with the same quality as the rest of the UI components, but this is more than enough to get you started with CarPlay.

Detailed Changelog

Enhancements

Fixes

  • iOS: Toggle the delegate when toggling the LocationProvider by @bolsinga in #644
  • Changes necessary to pass newer SwiftFormat 0.57.0 by @bolsinga in #650
  • fix: minor fixes for step advance and summary by @Archdoog in #655
  • Remove improper main actor annotation by @bolsinga in #658
  • Declare DetectorImpl as final to address swift concurrency warning by @bolsinga in #659
  • Declare function types as Sendable to address swift concurrency warning by @bolsinga in #660

Dependency updates

  • Bump github.com/pointfreeco/swift-snapshot-testing from 1.18.4 to 1.18.6 by @dependabot[bot] in #669
  • Bump uniffi from 0.29.3 to 0.29.4 in /common by @dependabot[bot] in #671
  • Bump serde_json from 1.0.140 to 1.0.142 in /common by @dependabot[bot] in #670
  • Bump rstest from 0.25.0 to 0.26.1 in /common by @dependabot[bot] in #672
  • Bump io.mockk:mockk from 1.14.4 to 1.14.5 in /android by @dependabot[bot] in #668
  • Bump @babel/runtime from 7.27.6 to 7.28.2 in /react-native in the npm_and_yarn group across 1 directory by @dependabot[bot] in #664
  • Bump androidx.test.ext:junit from 1.2.1 to 1.3.0 in /android by @dependabot[bot] in #667
  • Bump androidx-lifecycle from 2.9.1 to 2.9.2 in /android by @dependabot[bot] in #666
  • Bump proptest from 1.6.0 to 1.7.0 in /common by @dependabot[bot] in #628

Misc

Full Changelog: 0.39.0...0.40.0