Skip to content

Roadmap

The roadmap is anchored to a concrete acceptance matrix, not vibes. Every row below is a scenario a harness app must pass on a real device — and every row passes today, validated on both Android (Kotlin) and iOS (Swift).

#ScenarioStatus
1Native→RN typed query and RN→native typed query (bidirectional round trip).Passed
2Stream native→JS (lossless under JS-thread saturation) and JS→native (collection + cancellation reaching the JS producer’s teardown).Passed
3State: first-render sync read of a global value; observe on both sides; Unprovided on close; re-provide reset.Passed
4Runtime reload mid-stream — provider stream cancelled, no dead-callback pumping, new epoch rewires parked subscriptions, mirrors re-hydrate.Passed
5Two simultaneous instances of one feature — instance-scoped providers isolated; host recreation re-keys cleanly.Passed
6ServiceLoader discovery in a minified release build (R8 consumer rules proven, Android).Passed
7Prod-mode payload with { a: undefined } crosses safely (always-on encoding proven).Passed
8Skew simulation — extra member vs older descriptor → single structured warning + METHOD_NOT_FOUND with diff context; feature-detection path.Passed
9Kotlin consume from the main thread → fast loud failure, not an ANR.Passed
10dump() debug screen shows live bindings / streams / state / epoch — on Android and iOS.Passed

The first real-world adoption is done, not planned:

  1. Adoption & freeze. feature-actions / connectGet* / NativeEventEmitterModule are frozen — no new actions or modules.
  2. First pilot. Connect’s OTP polling moved to an otpCodes stream (highest value, smallest surface).
  3. Feature-owned contract. Connect owns connect.host (17 actions), provided natively at Scope.Feature("Lidl.Plus.Connect"); getLiteral / trackEvent consume the shared axion.host; five host actions stay on FeatureActions. Runtime-proven (isLoggedIn JS→native returned true; trackEvent fired end-to-end).
  4. SPM end-state. The Lidl Plus iOS integration is pure SPM — no CocoaPods, no C++ interop in the app target (@_implementationOnly import BridgeKit). This is the target end-state for all Lidl Plus feature integrations.

The full before/after is in Migrating Connect to BridgeKit.

TargetStatus
AndroidDone. Kotlin runtime + codegen, validated on-device.
iOSDone, at parity with Android. Swift runtime + codegen, runtime-validated with UI parity; the Lidl Plus end-state is pure SPM.
WebThe open frontier. LoopbackTransport already runs pure-JS providers in-process; a formal web transport is the remaining work.