Skip to content

RoadMap #98

Description

@jingjing2222

RoadMap

This is a curated roadmap, not a dump of every upstream request.

We reviewed open issues from:

v1.5 - selected backward-compatible work

1. Location Doctor / readiness API

  • Add diagnoseLocation() or getLocationReadiness()
  • Read-only diagnosis for permission, provider, services, settings, cache, and Play Services state.
  • Return remediation codes. Do not change existing errors or permission prompts.
  • Source issues: community #120, #251, #303, #353, service #253, #329, #393

2. Detailed permission state API

3. Detailed Android settings resolution

  • Add requestLocationSettingsDetailed()
  • Keep existing requestLocationSettings(): Promise<LocationProviderStatus> unchanged.
  • Detailed result may distinguish satisfied, cancelled, unavailable, activityMissing, etc.
  • Source issues: community #353, #251, service #250, #329, #393

4. Cancellable current-position request

  • Add optional cancellation support, for example { signal }.
  • Existing getCurrentPosition(options) behavior must remain unchanged.
  • Source issues: community #349, #141, service #127, #227

5. Provider status watcher

  • Add watchProviderStatus() or onProviderChange()
  • This is observation only in v1.5.
  • Do not add default automatic recovery or hidden provider switching.
  • Source issues: community #303, #251, #308, service #250, #410, #418

6. Background reliability contract

  • Add docs, E2E matrix, and optional status fields such as reason or lastDeliveryAt.
  • Clarify foreground/background/killed/reboot/iOS suspend behavior.
  • Do not change foreground-service, Headless JS, storage, boot, or persistence defaults in v1.5.
  • Source issues: community #346, #314, #285, #255, #179, service #407, #404, #403, #392, #109, #102

7. iOS pause/resume lifecycle listener

  • Add a separate listener such as onLocationLifecycleChange().
  • Do not inject new event types into the existing background event stream by default in v1.5.
  • Source issues: community #282, #281, #314, service #404, #392

8. Watch observability, not Watch Manager defaults

  • Add getActiveWatches()
  • Document current native merge policy and cleanup semantics.
  • Do not change watch filtering, merge policy, or option-change restart defaults in v1.5.
  • Source issues: community #361, #112, #111, service #419, #425, #234, #233, #309

9. Location quality metadata

10. Mock / integrity metadata polish

  • Improve Modern API metadata docs/tests.
  • Consider opt-in compat metadata only if it does not weaken drop-in compatibility.
  • Do not change compat response shape by default in v1.5.
  • Source issues: community #359, #287, service #446, #411, #257

11. Recipes and verification kit

12. Install doctor and Expo opt-in plugin

13. Privacy / compliance documentation

v2.0 - selected breaking work

Existing v2 BC items

  • Remove ModernGeolocationConfiguration alias

    • It duplicates GeolocationConfiguration.
  • Remove enableHighAccuracy from the Modern API

    • accuracy is not deprecated; it is the v1.2+ replacement for enableHighAccuracy.
    • enableHighAccuracy is deprecated in the Modern API, kept only for v1 compatibility, and expected to be removed from the Modern API in v2.
    • Keep enableHighAccuracy in /compat for @react-native-community/geolocation drop-in compatibility.
  • Change last-known position API

    Before:

    getLastKnownPosition(
      options?: LocationRequestOptions
    ): Promise<GeolocationResponse | undefined>

    After:

    getLastKnownPosition(): GeolocationResponse | undefined
    
    getLastKnownPositionAsync(
      options?: LocationRequestOptions
    ): Promise<GeolocationResponse | undefined>

    Reason:

    • sync: return module cache only
    • async: may query platform/GMS cached sources
    • both: cached-only, no fresh location request

Additional selected v2 candidates

  • Replace requestLocationSettings() with a deterministic result object

  • Make Watch Manager v2 semantics the default, if v1.5 observability proves the behavior

  • Integrate lifecycle/provider events into the unified background event stream, if the unified event model is worth the BC break

  • Rework error taxonomy only with a migration guide

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions