You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
Lukas is testing a subscribed option for useOnyx, that could conditionally stop receiving updates when a screen is out of focus. This would eliminate the need for hacky workarounds to stabilize value references inside components.
The idea is being discussed internally and we are looking other alternatives that could have the same impact without adding this option to Onyx.
It's an old discussion that keep coming back again (https://expensify.slack.com/archives/C08CZDJFJ77/p1784653930477519), so we are investigating the true benefits we could have by adopting the usage of a sync Onyx.get function in handlers/actions instead of making components subscribe to heavy data just to pass to these handlers.
Working in a draft proposal and performing tests at the moment.
Lukas was testing a subscribed option for useOnyx, that could conditionally stop receiving updates when a screen is out of focus. This would eliminate the need for hacky workarounds to stabilize value references inside components.
We decided to drop the idea in favor of React Navigation 8, details here.
It's an old discussion that keep coming back again (https://expensify.slack.com/archives/C08CZDJFJ77/p1784653930477519), so we are investigating the true benefits we could have by adopting the usage of a sync Onyx.get function in handlers/actions instead of making components subscribe to heavy data just to pass to these handlers.
Working in a draft proposal and performing tests at the moment.
It's an old discussion that keep coming back again (https://expensify.slack.com/archives/C08CZDJFJ77/p1784653930477519), so we are investigating the true benefits we could have by adopting the usage of a sync Onyx.get function in handlers/actions instead of making components subscribe to heavy data just to pass to these handlers.
Working in a draft proposal and performing tests at the moment.
Working in a second draft proposal with active reviews from @mountiny and @roryabraham. Proposal almost ready to be posted but we are checking some final details.
Activity
[-]Onyx Improvements[/-][+][Tracking] Onyx Improvements[/+]74 remaining items
fabioh8010 commentedon Jul 31, 2026
Updates:
DataError: Failed to write blobs (InvalidBlob)storage error #87871.Bump Queue status
too many SQL variableserror react-native-onyx#804fabioh8010 commentedon Aug 7, 2026
Updates:
DataError: Failed to write blobs (InvalidBlob)storage error #87871.Bump Queue status
fabioh8010 commentedon Aug 17, 2026
Updates:
nullstorage error #87867 waiting payment cc @JulesssssNitroSQLiteError: [NativeNitroSQLiteException][SqlExecutionError] disk I/O errorstorage error #87869 and [Onyx] InvestigateDataError: Failed to write blobs (InvalidBlob)storage error #87871 waiting for bumps to land and perform final log checks.Bump Queue status
fabioh8010 commentedon Aug 24, 2026
Updates:
NitroSQLiteError: [NativeNitroSQLiteException][SqlExecutionError] disk I/O errorstorage error #87869 and [Onyx] InvestigateDataError: Failed to write blobs (InvalidBlob)storage error #87871 waiting for bumps to land and perform final log checks.OnyxCacheto speed upOnyx.init()#98553 @WojtekBomanBump Queue status
elirangoshen commentedon Aug 24, 2026
I just posted findings from logs about this issue #87869 (comment)
fabioh8010 commentedon Sep 7, 2026
Updates:
UnknownError: Attempt to generate key in database without an in-progress transactionstorage error #100046: Onyx PR merged and Bump PR ready to review.ConstraintError: Key already exists in the object storestorage error #100047: Draft PR created, waiting for confirmation to proceed with solution.NitroSQLiteError: [NativeNitroSQLiteException][SqlExecutionError] disk I/O errorstorage error #87869 and [Onyx] InvestigateDataError: Failed to write blobs (InvalidBlob)storage error #87871 waiting for bumps to land and perform final log checks.OnyxCacheto speed upOnyx.init()#98553 @WojtekBomanuseOnyxStatein place.Bump Queue status
fabioh8010 commentedon Sep 18, 2026
Updates:
UnknownError: Attempt to generate key in database without an in-progress transactionstorage error #100046: All done, waiting for payment ✅useOnyxStatein place.Bump Queue status
fabioh8010 commentedon Sep 28, 2026
Updates:
useOnyxStatein place.Bump Queue status
fabioh8010 commentedon Oct 5, 2026
Updates:
UnknownError: Internal error., leaving the web app unusable #102272: First Onyx PR merged. Second one coming. @sosek108useOnyxStatein place.Bump Queue status
UnknownError: Internal error.react-native-onyx#853fabioh8010 commentedon Oct 12, 2026
Updates:
UnknownError: Internal error., leaving the web app unusable #102272: First Onyx PR merged. Second one on review. @sosek108useOnyxState.Bump Queue status
UnknownError: Internal error.react-native-onyx#853