Skip to content

[Tracking] Onyx Improvements #80355

Open
7 of 10 issues completed
Open

Description

@fabioh8010

Summary

This issue tracks ongoing and future work to improve Onyx, following the completion and review of the original audit work.

While the audit focused on performance and scalability, current efforts are shifting toward simplifying Onyx internals. Over time, incremental optimizations and feature additions have increased internal complexity, making changes harder to reason about, test, and evolve safely. Addressing this complexity is necessary to improve correctness and maintainability, and to enable future performance work without introducing additional risk.

This issue replaces the original audit issue as the primary coordination point for Onyx improvements.

As a start point we will be focusing on the simplification of useOnyx API, namely the initWithStoredValues, allowStaleData, canBeMissing and allowDynamicKey options.

Additionally, we already have some efforts in Onyx internals to simplificate and improve its performance:

Issue OwnerCurrent Issue Owner: @fabioh8010

Activity

  1. changed the title [-]Onyx Improvements[/-] [+][Tracking] Onyx Improvements[/+] on Jan 26, 2026
  2. 74 remaining items

  3. fabioh8010 commented on Jul 31, 2026

    @fabioh8010
    ContributorAuthor

    Updates:

    Bump Queue status

    1. 3.0.91
      1. Bump PR @rinej
      2. Includes these changes:
        1. Perf/optimize get all with json aggregation react-native-onyx#805
      3. Bump PR under active review
    2. 3.0.92
      1. Bump PR @chrispader
      2. Includes these changes:
        1. feat: Split queries with many parameters into multiple queries to avoid too many SQL variables error react-native-onyx#804
    3. 3.0.93
      1. Bump PR @TMisiukiewicz
      2. Includes these changes:
        1. Memoize shallowEqual verdicts by object identity in useOnyx react-native-onyx#810
    4. 3.0.94 (end of queue)
      1. Bump PR @TMisiukiewicz
      2. Includes these changes:
        1. perf: avoid per-read emptiness scan getCollectionData react-native-onyx#812
  4. fabioh8010 commented on Aug 7, 2026

    @fabioh8010
    ContributorAuthor

    Updates:

    Bump Queue status

    1. 3.0.94 (current)
      1. Bump PR @TMisiukiewicz
      2. Includes these changes:
        1. perf: avoid per-read emptiness scan getCollectionData react-native-onyx#812
      3. Bump PR merged, waiting to hit staging
    2. 3.0.95
      1. Bump PR @fabioh8010 @elirangoshen
      2. Includes these changes:
        1. Classify "Failed to write blobs" IDB errors as INVALID_DATA (never retry) react-native-onyx#814
        2. Remove dependencies argument from useOnyx react-native-onyx#800
    3. 3.0.96
      1. Bump PR @elirangoshen
      2. Includes these changes:
        1. Fix cross-tab sync for collection-root subscribers react-native-onyx#815
    4. 3.0.97 / 3.0.98 (end of queue)
      1. Bump PR @fabioh8010 @elirangoshen
      2. Includes these changes:
        1. Classify SQLite disk-pressure errors and stop retrying them react-native-onyx#816
        2. fix: prevent Onyx.merge from clobbering concurrent Onyx.update writes react-native-onyx#817
  5. fabioh8010 commented on Aug 17, 2026

    @fabioh8010
    ContributorAuthor

    Updates:

    Bump Queue status

    1. 3.0.94 (current)
      1. Bump PR @TMisiukiewicz
      2. Includes these changes:
        1. perf: avoid per-read emptiness scan getCollectionData react-native-onyx#812
      3. Bump PR merged and hit production ✅
    2. 3.0.95
      1. Bump PR @fabioh8010 @elirangoshen
      2. Includes these changes:
        1. Classify "Failed to write blobs" IDB errors as INVALID_DATA (never retry) react-native-onyx#814
        2. Remove dependencies argument from useOnyx react-native-onyx#800
    3. 3.0.96
      1. Bump PR @elirangoshen
      2. Includes these changes:
        1. Fix cross-tab sync for collection-root subscribers react-native-onyx#815
        2. Batch collection member removals and coalesce cross-tab sync events react-native-onyx#820 (will be included in the Bump PR as a patch file)
    4. 3.0.97 / 3.0.98
      1. Bump PR @fabioh8010 @elirangoshen
      2. Includes these changes:
        1. Classify SQLite disk-pressure errors and stop retrying them react-native-onyx#816
        2. fix: prevent Onyx.merge from clobbering concurrent Onyx.update writes react-native-onyx#817
    5. 3.0.99
      1. Bump PR @LukasMod
      2. Includes these changes:
        1. fix: add getSnapshot memoizedShallowEqual to skip rerenders react-native-onyx#819
    6. 3.0.100 (end of queue)
      1. Bump PR @elirangoshen
      2. Includes these changes:
        1. Batch collection member removals and coalesce cross-tab sync events react-native-onyx#820
  6. fabioh8010 commented on Aug 24, 2026

    @fabioh8010
    ContributorAuthor

    Updates:

    Bump Queue status

    1. 3.0.96 / 3.0.97 / 3.0.98 (current)
      1. Bump PR @fabioh8010 @elirangoshen
      2. Includes these changes:
        1. Fix cross-tab sync for collection-root subscribers react-native-onyx#815
        2. Batch collection member removals and coalesce cross-tab sync events react-native-onyx#820 (will be included in the Bump PR as a patch file)
        3. Classify SQLite disk-pressure errors and stop retrying them react-native-onyx#816
        4. fix: prevent Onyx.merge from clobbering concurrent Onyx.update writes react-native-onyx#817
      3. Bump PR merged and hit staging ✅
    2. 3.0.99 / 3.0.100
      1. Bump PR @LukasMod
      2. Includes these changes:
        1. fix: add getSnapshot memoizedShallowEqual to skip rerenders react-native-onyx#819
        2. Batch collection member removals and coalesce cross-tab sync events react-native-onyx#820
      3. PR in active review
    3. 3.0.101
      1. Bump PR @WojtekBoman
      2. Includes these changes:
        1. perf: skip per-key clone when Onyx.init() hydrates the cache react-native-onyx#821
    4. 3.0.102
      1. Bump PR @elirangoshen
      2. Includes these changes:
        1. Skip keyless update entries in updateSnapshots instead of crashing react-native-onyx#818
    5. 3.0.103 / 3.0.104 / 3.0.105 / 3.0.106 / 3.0.107 (end of queue)
      1. Bump PR pending @roryabraham
      2. Includes these changes:
        1. Rename circuit-breaker state half-open to halfOpen react-native-onyx#823
        2. Import lodash.bindall instead of lodash/* react-native-onyx#822
        3. Serialize Error.cause when degrading storage react-native-onyx#824
        4. Preserve falsy merged values in DevTools actions react-native-onyx#825
        5. Guard getErrorParts against non-JSON-safe thrown values react-native-onyx#826
        6. Drop non-null assertions in OnyxSnapshotCache react-native-onyx#828
  7. elirangoshen commented on Aug 24, 2026

    @elirangoshen
    Contributor

    Updates:

    Bump Queue status

    I just posted findings from logs about this issue #87869 (comment)

  8. fabioh8010 commented on Sep 7, 2026

    @fabioh8010
    ContributorAuthor

    Updates:

    Bump Queue status

    1. 3.0.110 (end of queue)
      1. Bump PR @sosek108
      2. Includes these changes:
        1. Classify WebKit 'without an in-progress transaction' IndexedDB errors as transient react-native-onyx#832
  9. fabioh8010 commented on Sep 18, 2026

    @fabioh8010
    ContributorAuthor
  10. fabioh8010 commented on Sep 28, 2026

    @fabioh8010
    ContributorAuthor

    Updates:

    Bump Queue status

    1. 3.0.112 / 3.0.113
      1. Bump PR @chrispader
      2. Includes these changes:
        1. Add npm min-release-age cooldown for supply chain protection react-native-onyx#847
        2. feat: export persisted Onyx state through active provider react-native-onyx#848
      3. Merged, waiting to hit staging / production
    2. 3.0.114 / 3.0.115
      1. Bump PR @sosek108
      2. Includes these changes:
        1. fix(storage): degrade to memory-only when IndexedDB is unavailable react-native-onyx#845
        2. Set cache-mode: read on reusable workflow calls from low-trust triggers react-native-onyx#849
    3. 3.0.116 (end of queue)
      1. Bump PR @sosek108
      2. Includes these changes:
        1. Cancel pending merges when a key is deleted react-native-onyx#846
  11. fabioh8010 commented on Oct 5, 2026

    @fabioh8010
    ContributorAuthor

    Updates:

    Bump Queue status

    1. 3.0.114 / 3.0.115
      1. Bump PR @sosek108
      2. Onyx PRs:
        1. fix(storage): degrade to memory-only when IndexedDB is unavailable react-native-onyx#845
        2. Set cache-mode: read on reusable workflow calls from low-trust triggers react-native-onyx#849
    2. 3.0.116
      1. Bump PR @sosek108
      2. Onyx PRs:
        1. Cancel pending merges when a key is deleted react-native-onyx#846
    3. 3.0.117
      1. Bump PR @fabioh8010
      2. Onyx PRs:
        1. Flip the subscription layer onto OnyxStore (atomic swap) react-native-onyx#834
    4. 3.0.118 (end of queue)
      1. Bump PR @sosek108
      2. Onyx PRs:
        1. fix(storage): reopen the IDB connection on UnknownError: Internal error. react-native-onyx#853
  12. fabioh8010 commented on Oct 12, 2026

    @fabioh8010
    ContributorAuthor

    Updates:

    Bump Queue status

    1. 3.0.117
      1. Bump PR @fabioh8010
      2. Onyx PRs:
        1. Flip the subscription layer onto OnyxStore (atomic swap) react-native-onyx#834
    2. 3.0.118
      1. Bump PR @sosek108
      2. Onyx PRs:
        1. fix(storage): reopen the IDB connection on UnknownError: Internal error. react-native-onyx#853
    3. 3.0.119 (end of queue)
      1. Bump PR @LukasMod
      2. Onyx PRs:
        1. Add public Onyx.get - mutable react-native-onyx#850
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions