It's production ready for web and as an API server, Native still needs more love but has been in development for over a year and now works with a majority of React Native dependencies.
The Tamagui website and theme builder SPA run One in production, and we've tested porting a variety of apps to Native successfully, including the entire Uniswap UI package, which involved fixing a large number of dependencies.
There's a few things that we need to improve:
See the Status documentation for more on the general stability of the high level API surfaces.
One started as vxrn, a library we made that let Vite serve React Native. We then forked Expo Router as an experiment to see if vxrn could power it. Today, One has changed quite a bit, but retains quite a bit of similarity in the file-system router. We appreciate the work the Expo team has done to pioneer universal file system routes.
A big part of One's upsides is in its leverage of Vite, as explained in the next section. One has already diverged quite a bit from Expo Router, with render modes, loaders, a production build
and serve
pipeline, middlewares, and other quality-of-life features. One currently lacks DOM components, a feature we'd like to implement.
Pros:
exports
field and other modern module features.require
calls that are unused, whereas Metro always attempts to import require calls, even if the are behind falsy process.env
checks.Cons:
A big thanks to Dan Maier, who donated it after being unused for 7 years with under 20 downloads a week
We plan to support a limited subset, but not in the immediate future.
We think Zero makes for such a dramatic simplification of data - loading, mutating, and realtime sync - that we want to avoid much of the complexity of Server Components while retaining some of the upsides.
What we do like about RSC is that ability to avoid sending some parts of your React tree to the client to save bundle size, and potentially Server Functions. We're exploring bringing these to One carefully.
What we don't like is that by allowing mixing client and server trees so dynamically, they tend to have a "function coloring" like effect, where once you use them in one place, your whole apps routing at a fundamental level becomes "server-first." This is not good for UX - avoiding server round trips, and having to split mental models between server and client, are a big part of the reason we love Zero. We think there's ways to avoid this contaminating effect with a subset of RSC.
Edit this page on GitHub.