OpenMoto: an open-source iOS motorcycle companion for navigation, garage records and experimental display projection. Testing preview; testers welcome.
Swift
0
119 commits
updated Oct 8, 2026
A native iOS motorcycle navigation and ride companion with experimental Wi-Fi display projection.
Testing phase — looking for iPhone testers and authorized display owners.
Start Testing · Implementation Status · Hardware Test Guide · Report Bug or Request Feature
RideDash brings navigation, motorcycle records, and ride expenses into one iPhone app. Its local data uses SwiftData, while an experimental interoperability layer projects navigation onto compatible Wi-Fi motorcycle displays.
Implemented capabilities include:
ridedash://route?url=... deep links.RideDash is independent and brand-neutral. Display integration is limited to navigation and infotainment. ECU, throttle, brakes, ABS, traction control, immobilizer, engine control, firmware modification, and other safety-critical vehicle commands are permanently excluded. See Safety Scope and NOTICE.
The implementation checklist records the planned first hardware beta as code-complete, with hardware validation still pending. Unsigned Simulator Debug and iPhone Release compiles have passed on Xcode 27; signing/install on a physical iPhone, display authentication, projection, controls, reconnect, and endurance behavior remain unverified in the hardware test matrix.
There are no published GitHub releases or packaged downloads (DMG/IPA). The maintainer does not currently have an Apple Developer Program account. Build from source; do not treat the current implementation as production-ready or assume compatibility with a particular display firmware. CI/CD is intentionally not used: final integration validation is manual on a physical iPhone and a display you own or are authorized to test.
| Technology | Role |
|---|---|
| Swift and SwiftUI | Native iOS application and screens |
| SwiftData | Local vehicle, fuel, maintenance, expense, and ride storage |
| MapKit and CoreLocation | Route calculation, preview, and live navigation |
| NetworkExtension and Network.framework | Wi-Fi configuration, local-network monitoring, and UDP transport |
| Security.framework | Session-key generation and RSA authentication |
| CoreGraphics and VideoToolbox | Off-screen rendering and H.264 encoding |
| UIKit and UniformTypeIdentifiers | URL/text Share Extension |
| UserNotifications | Maintenance due-date reminders |
The project uses Apple frameworks without third-party package dependencies.
Clone the default branch (main) and open the Xcode project:
git clone https://github.com/DagerottDev/RideDash.git
cd RideDash
open RideDash.xcodeproj
If you already have a checkout, open its existing RideDash.xcodeproj. No package-manager installation or environment-variable configuration is required. Optional TelemetryDeck screen analytics is off by default and disabled in Debug/Simulator; see PRIVACY.md for the public release configuration and fork setup.
In Signing & Capabilities, select your Apple Development team for both RideDash and RideDashShare. Change bundle identifiers if required by your signing account; keep the extension identifier under the app identifier.
Confirm the Hotspot Configuration capability is enabled for the RideDash target. The committed app configuration includes Local Network and Location usage descriptions and the location background mode.
Select the RideDash scheme and your physical iPhone, then use Product → Run to build, sign, and install.
Grant Location permission for routing and Local Network permission when testing the display connection. Notification permission is used for maintenance reminders.
Before connecting hardware, read the Tester Guide and Manual Hardware Test Guide.
RideDash is currently in testing, and we need testers. This is an experimental source-build preview; hardware compatibility and reliable projection are not yet established. There is no App Store or TestFlight download.
Start with Docs/TESTING.md, then submit a test result, bug, or feature request. Remove personal information from logs and screenshots before posting.
The Share Extension accepts a URL or text from another app's share sheet and forwards it to RideDash's route intake. Deep links use ridedash://route?url=<percent-encoded destination or map URL>; the hand-off still needs validation on the target device.
Keep the motorcycle stationary for initial networking and protocol tests. Follow the manual guide in order:
Diagnostics' Open UDP Route is a transport-only probe. A ready UDP connection does not prove that the display responded or authenticated; authentication and video controls are in Connection & Projection.
These are research defaults from the implemented public-reference profile, not manufacturer specifications or guaranteed firmware values:
| Setting | Default |
|---|---|
| Display host | 192.168.1.1 |
| Broadcast/control host | 192.168.1.255 |
| Control UDP port | 2000 |
| Input UDP port | 2002 |
| H.264/RTP UDP port | 5000 |
| Render viewport | 526 × 300 |
| Initial projection rate | 4 fps |
| Initial bitrate | 250 kbps |
| RTP payload type / clock | 96 / 90,000 Hz |
Host, broadcast, ports, frame rate, and bitrate are editable in Connection & Projection. Record the exact firmware, then change one parameter per test. See Protocol Notes for authentication, framing, input mappings, and packetization details.
Build and run manually in Xcode as described above. There is no CI workflow or Xcode test target in this checkout. Deterministic analytics checks are documented in CONTRIBUTING.md. The in-app Settings → Diagnostics → Run Protocol + RTP Self-Check checks K1G decoding, sequence patching, route-card generation, and RTP/FU-A packet construction without network traffic; it does not establish hardware compatibility.
| Source area | Responsibility |
|---|---|
RideDash/App/ | App entry, tab navigation, session coordination, and automatic ride recording |
RideDash/Features/ | Product screens, SwiftData models, settings, and diagnostics UI |
RideDash/NavigationCore/ | Destination resolution, location, route state, and rerouting |
RideDash/DashConnectivity/ | Wi-Fi, local-network state, and UDP channels |
RideDash/DashProtocol/ | K1G framing, authentication, and input decoding |
RideDash/ProjectionCore/ | Renderer, H.264 encoder, RTP packetizer, and streamer |
RideDashShare/ | URL/text Share Extension |
Use the existing documentation for the full validation record:
The documented next work is validation of the existing implementation:
See the Project Plan for detailed acceptance criteria and extended endurance tests.
Contributions and tester feedback are welcome through the issue forms and pull requests. See CONTRIBUTING.md. Build/run relevant changes in Xcode, run the local protocol/RTP self-check for interoperability changes, and record hardware results when applicable. Preserve the safety boundary and keep credentials, keys, and personal route history out of contributions.
For hardware failures, include the test stage, display firmware, iPhone/iOS version, protocol settings, observed state, sanitized logs, and whether the normal display recovered after stopping. Use the failure-reporting guide.
Licensed under the Apache License, Version 2.0. Preserve NOTICE, which records copyright, interoperability references, trademark acknowledgments, and the project safety scope. The safety scope describes what maintainers accept into this project; it does not add restrictions to the license.
Project support and feature discussions: RideDash issues.
OpenMotoDash/better-dash and subtlesayak/open-dash, as recorded in Protocol Notes and NOTICE.Third-party names and trademarks belong to their respective owners. RideDash is not affiliated with, endorsed by, or sponsored by those owners.
OpenMoto: an open-source iOS motorcycle companion for navigation, garage records and experimental display projection. Testing preview; testers welcome.
Swift
0
119 commits
updated Oct 8, 2026
A native iOS motorcycle navigation and ride companion with experimental Wi-Fi display projection.
Testing phase — looking for iPhone testers and authorized display owners.
Start Testing · Implementation Status · Hardware Test Guide · Report Bug or Request Feature
RideDash brings navigation, motorcycle records, and ride expenses into one iPhone app. Its local data uses SwiftData, while an experimental interoperability layer projects navigation onto compatible Wi-Fi motorcycle displays.
Implemented capabilities include:
ridedash://route?url=... deep links.RideDash is independent and brand-neutral. Display integration is limited to navigation and infotainment. ECU, throttle, brakes, ABS, traction control, immobilizer, engine control, firmware modification, and other safety-critical vehicle commands are permanently excluded. See Safety Scope and NOTICE.
The implementation checklist records the planned first hardware beta as code-complete, with hardware validation still pending. Unsigned Simulator Debug and iPhone Release compiles have passed on Xcode 27; signing/install on a physical iPhone, display authentication, projection, controls, reconnect, and endurance behavior remain unverified in the hardware test matrix.
There are no published GitHub releases or packaged downloads (DMG/IPA). The maintainer does not currently have an Apple Developer Program account. Build from source; do not treat the current implementation as production-ready or assume compatibility with a particular display firmware. CI/CD is intentionally not used: final integration validation is manual on a physical iPhone and a display you own or are authorized to test.
| Technology | Role |
|---|---|
| Swift and SwiftUI | Native iOS application and screens |
| SwiftData | Local vehicle, fuel, maintenance, expense, and ride storage |
| MapKit and CoreLocation | Route calculation, preview, and live navigation |
| NetworkExtension and Network.framework | Wi-Fi configuration, local-network monitoring, and UDP transport |
| Security.framework | Session-key generation and RSA authentication |
| CoreGraphics and VideoToolbox | Off-screen rendering and H.264 encoding |
| UIKit and UniformTypeIdentifiers | URL/text Share Extension |
| UserNotifications | Maintenance due-date reminders |
The project uses Apple frameworks without third-party package dependencies.
Clone the default branch (main) and open the Xcode project:
git clone https://github.com/DagerottDev/RideDash.git
cd RideDash
open RideDash.xcodeproj
If you already have a checkout, open its existing RideDash.xcodeproj. No package-manager installation or environment-variable configuration is required. Optional TelemetryDeck screen analytics is off by default and disabled in Debug/Simulator; see PRIVACY.md for the public release configuration and fork setup.
In Signing & Capabilities, select your Apple Development team for both RideDash and RideDashShare. Change bundle identifiers if required by your signing account; keep the extension identifier under the app identifier.
Confirm the Hotspot Configuration capability is enabled for the RideDash target. The committed app configuration includes Local Network and Location usage descriptions and the location background mode.
Select the RideDash scheme and your physical iPhone, then use Product → Run to build, sign, and install.
Grant Location permission for routing and Local Network permission when testing the display connection. Notification permission is used for maintenance reminders.
Before connecting hardware, read the Tester Guide and Manual Hardware Test Guide.
RideDash is currently in testing, and we need testers. This is an experimental source-build preview; hardware compatibility and reliable projection are not yet established. There is no App Store or TestFlight download.
Start with Docs/TESTING.md, then submit a test result, bug, or feature request. Remove personal information from logs and screenshots before posting.
The Share Extension accepts a URL or text from another app's share sheet and forwards it to RideDash's route intake. Deep links use ridedash://route?url=<percent-encoded destination or map URL>; the hand-off still needs validation on the target device.
Keep the motorcycle stationary for initial networking and protocol tests. Follow the manual guide in order:
Diagnostics' Open UDP Route is a transport-only probe. A ready UDP connection does not prove that the display responded or authenticated; authentication and video controls are in Connection & Projection.
These are research defaults from the implemented public-reference profile, not manufacturer specifications or guaranteed firmware values:
| Setting | Default |
|---|---|
| Display host | 192.168.1.1 |
| Broadcast/control host | 192.168.1.255 |
| Control UDP port | 2000 |
| Input UDP port | 2002 |
| H.264/RTP UDP port | 5000 |
| Render viewport | 526 × 300 |
| Initial projection rate | 4 fps |
| Initial bitrate | 250 kbps |
| RTP payload type / clock | 96 / 90,000 Hz |
Host, broadcast, ports, frame rate, and bitrate are editable in Connection & Projection. Record the exact firmware, then change one parameter per test. See Protocol Notes for authentication, framing, input mappings, and packetization details.
Build and run manually in Xcode as described above. There is no CI workflow or Xcode test target in this checkout. Deterministic analytics checks are documented in CONTRIBUTING.md. The in-app Settings → Diagnostics → Run Protocol + RTP Self-Check checks K1G decoding, sequence patching, route-card generation, and RTP/FU-A packet construction without network traffic; it does not establish hardware compatibility.
| Source area | Responsibility |
|---|---|
RideDash/App/ | App entry, tab navigation, session coordination, and automatic ride recording |
RideDash/Features/ | Product screens, SwiftData models, settings, and diagnostics UI |
RideDash/NavigationCore/ | Destination resolution, location, route state, and rerouting |
RideDash/DashConnectivity/ | Wi-Fi, local-network state, and UDP channels |
RideDash/DashProtocol/ | K1G framing, authentication, and input decoding |
RideDash/ProjectionCore/ | Renderer, H.264 encoder, RTP packetizer, and streamer |
RideDashShare/ | URL/text Share Extension |
Use the existing documentation for the full validation record:
The documented next work is validation of the existing implementation:
See the Project Plan for detailed acceptance criteria and extended endurance tests.
Contributions and tester feedback are welcome through the issue forms and pull requests. See CONTRIBUTING.md. Build/run relevant changes in Xcode, run the local protocol/RTP self-check for interoperability changes, and record hardware results when applicable. Preserve the safety boundary and keep credentials, keys, and personal route history out of contributions.
For hardware failures, include the test stage, display firmware, iPhone/iOS version, protocol settings, observed state, sanitized logs, and whether the normal display recovered after stopping. Use the failure-reporting guide.
Licensed under the Apache License, Version 2.0. Preserve NOTICE, which records copyright, interoperability references, trademark acknowledgments, and the project safety scope. The safety scope describes what maintainers accept into this project; it does not add restrictions to the license.
Project support and feature discussions: RideDash issues.
OpenMotoDash/better-dash and subtlesayak/open-dash, as recorded in Protocol Notes and NOTICE.Third-party names and trademarks belong to their respective owners. RideDash is not affiliated with, endorsed by, or sponsored by those owners.