Developers

DuoDash is designed to be extended. Tweak Management lets you build application-specific tweaks on top of services DuoDash already provides, so you do not have to implement vehicle, CarPlay and dashboard integration yourself.

The Developer API is not published yet. This guide describes the architecture and the rules to design against. Every class, function and manifest shown on these pages is an illustrative placeholder, not the final DuoDash SDK — do not build against the names as written. Headers, the IPC mechanism and the registration format will be documented when they are finalised.

The guide is in four parts. Start with the core tweak you want to integrate with, or read the tweak-writing page first if you have not built against DuoDash before.

Navigation Bubble

Providing speed and navigation data to the DuoDash dashboard: the data flow, the data model, source identifiers, data lifetime and update frequency.

Voice Command

Receiving the vehicle’s physical voice-command button as a normalized event, the event types to expect, and the routing rules that keep one press from firing several tweaks.

Writing a tweak

Registration and capabilities, provider lifecycle, threading, error handling, logging, driver safety, and the checklist to work through before you release.

Open-source OBD-II

The planned open hardware and firmware platform: what is intended to be published, what you could build with it, and the safety rules for talking to a vehicle bus.

What Tweak Management is

Tweak Management is an extensibility system that lets third-party developers build application-specific tweaks on top of core services provided by DuoDash.

Rather than requiring every tweak developer to independently implement communication with the vehicle, the CarPlay environment, the dashboard UI or the steering-wheel controls, DuoDash provides a set of reusable Core Tweaks. A third-party tweak integrates with those cores instead of reimplementing them.

Through them, a third-party tweak can:

  • Display application data through DuoDash UI components.
  • Send navigation or speed-related information to the DuoDash Navigation Bubble.
  • Receive vehicle voice-command button events.
  • Implement application-specific actions based on those events.
  • Extend supported applications without modifying the DuoDash core itself.

The intention is for DuoDash to act as an integration layer:

Vehicle  ──►  DuoDash Core  ──►  Third-Party Tweak  ──►  Application

and, where applicable, the same path in reverse:

Application  ──►  Third-Party Tweak  ──►  DuoDash Core  ──►  DuoDash UI

Two extension layers

DuoDash is intended to be extended from the application layer, the vehicle-data layer, or both. Tweak Management covers the first; an open-source OBD-II dongle platform covers the second.

                    DuoDash Developer Ecosystem
                              │
             ┌────────────────┴────────────────┐
             │                                 │
             ▼                                 ▼
      Software Extensions               Vehicle Hardware
       Tweak Management                Open-Source OBD-II
             │                                 │
      Third-Party Tweaks               Firmware / Hardware
             │                                 │
             └────────────────┬────────────────┘
                              │
                              ▼
                    Custom Vehicle Features

The objective is an open platform where new vehicle integrations do not have to be implemented exclusively by SenseTechLab.

Architecture

DuoDash Core Tweaks

Core Tweaks are maintained and provided by DuoDash. They implement the functionality that normally requires direct interaction with DuoDash, CarPlay, vehicle controls or the DuoDash user interface. There are currently two: Navigation Bubble and Voice Command.

Core Tweaks provide generic capabilities rather than application-specific behaviour. Navigation Bubble does not need to understand how a particular navigation application internally obtains speed information — a third-party tweak extracts that and hands it over through the integration interface.

Third-party tweaks

Third-party tweaks are developed independently, for specific applications or use cases. One may:

  • Hook into a supported navigation application.
  • Extract navigation-related information.
  • Extract vehicle or GPS speed information exposed by the application.
  • Translate application-specific internal data into the DuoDash data format.
  • Send that information to a DuoDash Core Tweak.
  • Subscribe to events generated by DuoDash Core Tweaks.
  • Trigger actions inside the target application.

A third-party tweak is therefore an adapter between an application and DuoDash.

                 ┌───────────────────────┐
                 │        Vehicle        │
                 └───────────┬───────────┘
                             │
                             ▼
                 ┌───────────────────────┐
                 │     DuoDash Core      │
                 │                       │
                 │  Navigation Bubble    │
                 │  Voice Command        │
                 └───────────┬───────────┘
                             │
                  DuoDash Developer API
                             │
             ┌───────────────┼───────────────┐
             ▼               ▼               ▼
       App Tweak A      App Tweak B      App Tweak C
             │               │               │
             ▼               ▼               ▼
          App A            App B            App C

Design principle

DuoDash Core Tweaks should remain application-independent. Application-specific logic belongs in third-party tweaks.

For application data reaching the dashboard:

Google Maps
    │
    │ application-specific data
    ▼
Third-Party Google Maps Tweak
    │
    │ DuoDash-defined interface
    ▼
DuoDash Navigation Bubble
    │
    ▼
CarPlay Display

For vehicle input reaching an application:

Vehicle Voice Button
    │
    ▼
DuoDash
    │
    ▼
DuoDash Voice Command Core
    │
    │ voice-command event
    ▼
Third-Party Application Tweak
    │
    ▼
Target Application

This separation is what allows DuoDash to provide stable vehicle-facing functionality while third-party developers independently support different applications.

Who is responsible for what

What DuoDash provides

DuoDash is responsible for the common integration infrastructure. Depending on the Core Tweak, that includes:

  • Communication with the vehicle environment.
  • CarPlay-related integration.
  • Vehicle control event acquisition.
  • Navigation Bubble rendering.
  • Core Tweak lifecycle.
  • Normalized developer-facing interfaces.
  • Provider management.
  • Event routing.

What you provide

  • Supporting the target application.
  • Extracting application-specific information.
  • Maintaining hooks when the target application changes.
  • Translating application information into DuoDash-compatible data.
  • Implementing application actions triggered by DuoDash events.
  • Ensuring your tweak fails safely.
  • Testing supported application versions.
  • Testing supported DuoDash versions.
  • Documenting your integration.

What not to do

Third-party integrations should not:

  • Directly modify Navigation Bubble views.
  • Depend on DuoDash private implementation classes.
  • Replace DuoDash vehicle event handlers.
  • Simulate DuoDash internal state.
  • Send malformed provider data.
  • Retain control events indefinitely.
  • Assume every vehicle behaves identically.
  • Assume every CarPlay session exposes identical capabilities.
  • Assume the target application internals remain stable between releases.

Use the documented Developer API whenever a DuoDash interface is available.

API stability

Only APIs explicitly published as part of the DuoDash Developer API should be considered stable. SenseTechLab may modify internal DuoDash implementations without preserving compatibility with undocumented interfaces.

Avoid hooking directly into DuoDash unless the relevant functionality is explicitly documented as an extension point. Internal classes, selectors, ivars and notification names may change between releases.

Where possible, DuoDash will maintain backward compatibility for published developer interfaces.

A third-party tweak should declare the versions of DuoDash, or of the DuoDash Developer API, that it supports:

Minimum DuoDash API: 1.0
Maximum tested API:  1.x

Still to be defined

Before the public DuoDash Developer API is published, SenseTechLab has to settle the following. They are listed here because they are the contracts a third-party integration would depend on, and none of them should be guessed at in the meantime.

  1. Exact IPC mechanism
  2. Public header files
  3. API versioning scheme
  4. Provider registration API
  5. Provider identifier format
  6. Navigation data structures
  7. Voice event structures
  8. Threading guarantees
  9. Provider priority rules
  10. Multiple-provider arbitration
  11. Event routing rules
  12. Timeout / stale-data behaviour
  13. CarPlay session lifecycle behaviour
  14. Error codes
  15. Logging / debug interface

Questions about the developer platform, or want to be told when the API is published? Contact SenseTechLab →