0.40.0
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!
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
- Add recording events to NavState by @Kandarp05 in #619
- iOS: DemoCarPlayModel now has CPInterfaceController property by @bolsinga in #646
- KotlinX Serialization Migration from Moshi by @ben-burwood in #647
- Add StadiaSearch to iOS Demo App by @bolsinga in #649
- iOS: Demo Models funnel Errors through a single helper func by @bolsinga in #652
- Add serialization for Recording by @Kandarp05 in #630
- iOS Route Overview by @ianthetechie in #330
- Define wrapper of NavigationController for recording by @Kandarp05 in #653
- feat: dynamic island by @Archdoog in #663
- Separate Navigation Logic from Map Rendering in Web by @Kandarp05 in #662
- Navigation Replay in Web by @Kandarp05 in #673
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
- Initial proptest setup for step advance conditions by @ianthetechie in #656
- Fix Minor Inconsistency between Road/Street Name [ANDROID] by @ben-burwood in #665
- Fix iOS CI by @ianthetechie in #674
Full Changelog: 0.39.0...0.40.0