October 4th, 2024

Show HN: One – A new React framework unifying web, native and local-first

One is a new React framework for web and native applications, featuring universal routing and a partnership with Zero to enhance data management and performance, created by former Uniswap and Takeout developers.

Read original articleLink Icon
ExcitementSkepticismNostalgia
Show HN: One – A new React framework unifying web, native and local-first

One is a new React framework designed for both web and native applications, built on Vite. It aims to simplify the development process with universal, typed routing that works seamlessly across static, server, and client pages. The framework also addresses data management challenges, particularly in web applications, where small bundle sizes and limited storage are concerns. One partners with Zero to provide an efficient, ejectable data solution that enhances performance and usability, allowing for instant mutations and offline functionality. This collaboration aims to eliminate common issues such as flickers and configuration hassles, making the development experience smoother. The creators of One, who have backgrounds at Uniswap and Takeout, emphasize their commitment to improving cross-platform development.

- One is a new React framework for web and native applications.

- It features universal, typed routing for static, server, and client pages.

- The framework partners with Zero to enhance data management.

- One aims to improve performance and usability in web applications.

- The creators have experience from Uniswap and Takeout.

AI: What people are saying
The introduction of the new React framework "One" generates a mix of excitement and skepticism among developers.
  • Many developers express enthusiasm for the potential of "One" to simplify cross-platform development and improve performance.
  • Concerns arise regarding the stability and maturity of the framework, with some questioning its readiness for production use.
  • Discussions about the integration with Zero highlight the need for clarity on its local-first capabilities and data management.
  • Several comments reflect nostalgia for past frameworks like Rails and Meteor, indicating a desire for a return to simpler development paradigms.
  • Critiques focus on the complexity of modern web development and the layering of frameworks, with calls for more straightforward solutions.
Link Icon 60 comments
By @pyromaker - 6 months
I'm definitely getting too old. Back when I was just learning Backbonejs, I gulped up every single framework that came out, tried them all, every language, every variation, server side, client side, mobile, hybrid.

In the end, after all that journey, I settled into Laravel Backend and Vue3. Every app I create now is just a copy-and-paste of what I've done before. The tech stack disappears into the background and I try to actually build the features that I want to build.

I'm definitely old because I see this great work called "one" and I look at the video and I get immediatey turned off by so many "new things". It's me - definitely me. It's maybe for a different generation of devs.

By @josephg - 6 months
Wonderful work, but this doesn’t look like local first software to me. It looks like server first software with live updates and caching.

Don’t get me wrong, that’s super cool - but if you’re going to claim it’s local first software, I want to see the principles of local first software at play. And I don’t think Zero delivers that - at least as I understand it from its website.

Like, “the network is optional” and “the long now” and “you (the user) retains ultimate control”. It just looks like an excellent server sync system with client side caching. What if the data I need isn’t in the cache? What happens when I edit things offline then come online later? What happens if the company shuts down and the server gets turned off permanently? Will the app still work?

Local first software can handle these cases too.

[1] https://www.inkandswitch.com/local-first/

By @monocularvision - 6 months
As a native iOS mobile developer, I was curious so I got into the TestFlight and downloaded the demo app. Thoughts:

* Overall, not bad. Using React Native is far better than trying to mimic platform UI in the web, which is always terrible. * When tapping on an item on the “Feed”, the transition is made to the details _and then_ the navigation bar has a sudden title transition. This is weird. * The button in the upper left to switch between light and dark mode is nice but it should default to the system setting. It did not for me. * The Notifications tab content isn’t scrollable at all on my phone. Seems like a bug. * If you tap on an item in Notifications you navigate deeper in, but when you hit back you are back on the Feed tab.

Coming from native app development, it has the normal uncanny valley feeling that React Native gives off but for normal users they may not notice it as much.

By @davedx - 6 months
Just want to say as a fellow dev who loved the glory days of Rails and then later Meteor (I actually launched a production app on HN that used Meteor!), best of luck! I'm not really in the market for a universal app framework like this but will definitely keep it in mind for future work.
By @nickreese - 6 months
We were an early adopter and sponsor of Tamagui. Impressive tech but massively unstable even on minor version bumps. We even had a core team member working on the project and the breakage was every version. Lost more than 6 months of time relying on it. Ultimately we killed the project because of the decision to go with Tamagui. Just an FYI for those considering this. Abstractions on unstable abstractions is a good way to hate your project.
By @stragio - 6 months
Good to see this on HN, I’d love to share my journey with Takeout!

I first encountered Takeout about a year ago while experimenting with cross-platform development after reading this blog post: The Different Tech Strategies for Building a Cross-Platform App (https://magnemg.eu/the-different-tech-strategies-for-buildin...)

At work, we urgently needed an iOS app to enable push notifications for our logistics app, but our frontend was web-only and built with React/Next.js. Since the codebase was already several years old with many screens, we decided to port it to Capacitor, which led us to adopt a stack with Next.js and Capacitor (https://github.com/RobSchilderr/nextjs-native-starter).

However, once we began working with Capacitor, we ran into numerous issues. Dealing with the iOS keyboard and Safari WebView was almost impossible with famous scrolling issues, and Android’s Chrome WebView also suffered from poor performance (https://github.com/ionic-team/capacitor/discussions/3899).

This experience pushed me to switch to Expo with Solito and Tamagui, and the new stack has been a game changer. The support from Nate and the Tamagui team has been outstanding. Also Expo and EAS has been working flawlessly.

Now, with One, cross platform development is entering a new phase which address the final challenges of cross-platform development. Sharing code with Expo and Tamagui used to be manageable only for those familiar with cross-platform solutions, but now it’s becoming accessible to everyone. I bet it will be easier for new folks to understand how to work with Expo and Tamagui.

Combine that with local-first, and small teams will be able to build high-performance applications across three platforms using just one simple codebase quickly.

By @cabalamat - 6 months
> Creating websites and apps is simply too complex

And the solution, of course, is a framework on top of a framework on top of JS and the DOM. OK, maybe I'm being too harsh.

By @gadr90 - 6 months
What the hell, Nate! As a long-time web developer who witnessed the divide between frontend and backend, this looks like the most transformative step forward since Next.js. What you have built here is amazing, and it's definitely something that the industry needs right now.

Me and my team have been working on a new Web Draw-first IDE that we're going to launch in a few weeks. And I just sent this thread to my engineering team demanding that they swiftly integrate One into our web draw, or they will walk the board! Just kidding. We're not really pirates. Anyway, amazing work, looking forward to using it for many projects here!!!

By @ericyd - 6 months
Having 75% of the landing page dedicated to Zero, then clicking into "read more" to learn that it isn't even released yet, feels weird. This feels more like a soft launch than a grand opening, which is fine but not what I expected based on the post. Best of luck to you and team.
By @moomoo11 - 6 months
This is cool and I’ll definitely try it out some time.

Serious question though. Who is this for?

I’ve done mobile app dev in all the popular ways - native, flutter, and react native.

Both flutter and react native bring up a ton of issues anytime the app becomes more complex than rendering a list with some detail pages.

I wrote so much custom code bridging gaps.

Swift and Kotlin make native dev so easy and straightforward.

With flutter (which I have the most experience with along with native) I had to anyway write bridge code for handling both platforms.

I think considering how easy it is to write APIs, isn’t it better to just use native for both platforms to deliver a fantastic user experience built on those APIs?

Is this another project that’s suitable for simple apps or will it actually be useful for very complex UIs and deep device integration. I mean flutter still has open issues around scroll to top breaking which I fixed with custom bridge code. It’s impossible to get issues addressed.

Like say it takes 3 days to make a complex UI. Then a week or more to write and test the bridge code. I’d rather take 6 days writing platform appropriate code and save a day or more of pain. And when that breaks fix it. Over time this adds up to a lot of saved time I think.

By @jeremy_k - 6 months
Rails mentioned!

As a long time Rails dev who has primarily worked in stacks of Rails APIs and React UIs, does One fit into this category?

I'm excited about local first, but I haven't played around with any of the existing solutions because I was hoping to get my hands dirty with Zero. Thus I come from a point of ignorance. Are there any limitations? Will Zero need adapters to different frameworks or does it hook directly into your running postgres instance so the backend doesn't matter?

By @bartozone - 6 months
I worked for Famo.us back when it was an open source framework, and I know intimately well how hard it was to create something like this. Incredibly powerful if this reaches it's full potential, and kudos to you for embarking on this path to try! I keep waiting to see if this ever comes to be.
By @mstade - 6 months
Hi Nate!

You don't know me and I don't know you, but I know of you through your work on Tamagui. Very excited to see this coming from someone with your kind of experience – we desperately need something to challenge Expo and hopefully truly bridge the native/web divide in a way that actually works, without leaky abstractions everywhere.

Very hopeful that your experience and knowledge in the space will get us there – thank you for your efforts! I will be checking this out in earnest as soon as possible. Very exciting!

By @mkarliner - 6 months
I liked meteor a lot and I built Thingstudio on top of it for making IOT ui's.

https://youtu.be/8a9rK4Xdfqs?si=k-UantDmT-HXnUlg

I'll give this a shot. Maybe I'm not too old yet. I don't turn 70 for another year

By @recursive - 6 months
I tried `npx one` to get an idea what this is about, as the description sounds too magical for me to make sense of.

It generated 200 lines of output, but in the end, didn't end up doing anything that can run. I'm not putting any effort into debugging this, but let me know if you want the output from the session somewhere.

By @stormfather - 6 months
OP most people replying to you are old and ossified and not your target audience, and there is something to be said for being polarizing (it increases your dating success!). I think this is great, and the reason people keep making new frameworks is because we all know that webdev sucks a lot more than it has to, and there really shouldn't be different solutions for all of these different platforms.
By @raybb - 6 months
I'm extremely excited for this! Especially with Zero on it's way.

I have a super basic reason and use case. I've been using spliit.app (https://github.com/spliit-app/spliit) while traveling and having very slow internet. The app is amazing with fast internet but absolutely doesn't work well with spotty connections. It often makes two entries if I tap submit twice because I think the request failed after so long and it's really slow to switch pages. The design is generally great and works well but I want to add much better offline support. Maybe it means forking it and doing CRDTs and something like One. I haven't looked at their codebase much yet but I'm hopeful some improvements can be made!

Anyways thanks for the great work with your framework and I really look forward to trying it out in the future.

By @bpfrh - 6 months
One of the main issues I had when I tried to do an app in react native was not really the UI,performance or data.

The main problem was that you where in an uncanny vally type of situation where some browser features where supported and some nodejs(?) features but never the right ones.

So you now had to write 3 different apps(web,ios,android,electron(?)) with all the problems of react/js while not having the wealth of libraries and batteries included benefit of a browser

E.g. crypto.subtle was not available, so forget anything with encryption running in react native and on the web without separate libraries.

So my question is how do you solve the problem that react native loses many of the benefits of using a webview type framework?

By @darcien - 6 months
Hi Nate and team, congrats on the launch! What an exciting time to have an Expo alternative for cross platform app!

I know the project is still in beta, but do you have some thoughts already around testing a One app? I watched the intro video but it didn't mention any.

Since the native is powered by RN, maybe unit test will be using jest? Or vitest should be used because the app bundler is already using vite? And what about testing platform specific code?

Asking this because "unified" framework like One or Expo usually only covers 80% of the development process, and the remaining 20% part like testing need custom solutions.

By @augstein - 6 months
Man this is awesome.

I‘m using a somewhat similar stack for an app in development with a monorepo consisting of a Postgres backend (Rails) + Expo (with Router) + Tamagui + Redux Toolkit. And, as one would expect, it’s been quite a struggle, to say the least.

But currently this is one of the few viable stacks imo for a small team or sole developer to serve both native mobile platforms and the web in a decent quality.

So it’s kind of cool that with One there is now a framework available that brings all those great tools together in a polished and structured way.

Can’t wait to give it a try next week. Could make things a lot smoother.

By @bbor - 6 months
Great writeup(s), thanks for sharing! My immediate reaction was “that sounds too good to be true”, which is a nice compliment I think. I have some high level questions if you find the interest:

1. Why have a React Native clone of your SPA instead of just doing a PWA? Does it provide some technical benefit (better offline local data persistence, maybe?) or is it just to get your site advertised on the App Store? Surely all the device APIs for movement, multitouch, etc. are supported on mobile browsers? This has been bothering me for a while, so perhaps too broad of a question.

2. What’s the rough timeline and funding look like for this? In my eyes this is a solution to, like, all complex web apps ever, so I was shocked to see just a few developers. I know you acknowledge some bugs in the Native implementation, but besides that, do you feel like this could be used for a data intensive Postgres-backed TS application today with minimal chances of bugs, or is it still a bit more experimental? I guess I’m looking for a bit of clarification on the intended meaning of “production ready”, since it seems so damn ambitious.

Either way, Godspeed! Your website is gorgeous, and the whole project is insanely up my alley. Plus ‘npx one’ is just slick as hell

By @henning - 6 months
Web apps are complicated because we chose to make them complicated. We started with HTTP headers being sent over a socket and added on infinite layers of shit to "abstract" things. As if hiding what is actually going on is inherently helpful.

Your framework preserves the status quo rather than simplifying it.

By @nox101 - 6 months
So I watched the video on the home page. It made almost zero sense to me. It was all very vague and seemed to be targeted at people who already knew all the product and the problems is solves without needing to be told. if that was the goal then great but maybe another video targeting a wider audience?

I got the point of rails and meteor immediately. it wasn't clear at all if this was even solving similar problems or what

By @novoreorx - 6 months
Zero seems like a promising approach for developing local-first applications. However, if I want to develop a SPA in the traditional way—using fetch or react-query to communicate with the server—will I need to configure anything special to separate Zero from One? In other words, I hope One is not tightly coupled with Zero. It should be a data-solution-agnostic framework, focusing on the UI for various needs. We really need something to fill the gap after CRA is replaced by Next.js, as Next.js does not provide a mature SPA solution (and neither does Remix).
By @gorbypark - 6 months
As a react native dev I’d love to hear some of the implementation details!

First, is this a whole new router? Is it based on expo-router, or is it sitting on top of react-navigation? Maybe all new with react-native-screens as a foundation?

As far as Vite goes, I assume this is only on the web? Metro is still be used on the native side? If true any reason why you’re not using metro on the web as well (I’m kinda partial to having all platforms as similar as possible, tooling wise)?

I suppose I should also ask how expo fits into this all…meta framework on top of expo or something “all new” on stock react native?

By @recroad - 6 months
I just started a react native/expo project and saw this. I’m wondering if this is mature enough for me to adopt, and more importantly, how easy will it be to migrate react native/expo project to this in the future. I just don’t feel this thing is stable enough as the guides themselves state, especially for iOS.

I’m also not really sure what problem this is solving. We already have the ability to create android and iOS apps based on one source code to react native. So what’s the additional benefit here?

By @catchmeifyoucan - 6 months
This looks really awesome! Can't wait to try it out. I've worked with React-Native-Web and Nativebase in the past, and it was always fragmented. I'm glad you're working on this. Zero was mentioned a lot in the demo and it seems impressive.

Love this the most:

> almost all features can be built completely client-side, with no need for new server-side APIs

Any thoughts on a desktop target for this (e.g Electron/or Webview Desktop target)?

By @pyzn - 6 months
This might be a beginner thing but to me it seems like web development is bloated. Since I haven't yet built big web applications can somebody enlighten me what the benefit is of using a framework? Why do websites need this much JS? Wouldn't lots of things work better with just HTML and php? (Although php is getting a lot of hate)
By @nox101 - 6 months
Saw this yesterday, tried to find it again today. Googled "one js" since I couldn't remember the URL

Results:

A unity library

https://onejs.com/docs/gettingstarted

A different js framework

https://onejs.dev/

By @smallerfish - 6 months
Is this a personal project, or do you have a path to turning it into a revenue generating framework that you will support commercially?
By @account42 - 6 months
Creating websites is easy: just don't try to make them into an app. Stop trying to reimplement the browser in javascript and just write plain static HTML with limited progressive enhancement where it actually makes sense.
By @thegreatpeter - 6 months
As a long time fan of Rails, Expo Router, Tamagui, I'm super excited to see One Stack. Great work :)
By @spullara - 6 months
first thing I noticed when I pasted the link into Slack is that it doesn't generate a preview
By @profsummergig - 6 months
Someone please clarify what "local-first" means in this context. Thank you.
By @xyst - 6 months
I don’t know what makes me want to try this out compared to the hundreds of frontend/cross platform solutions out there. Maybe it’s the “local first” notion.

I’ll give this a shot and subbed to the zerosync mailing list :)

By @rgbrgb - 6 months
Congrats on the launch! Stoked for another effort to do a typescript rails. That's a very different and IMO much more ambitious goal than doing a simpler next.js. RedwoodJS is the current notable effort in that realm but sadly doesn't seem to have gotten too much traction.

The local-first angle is a compelling difference too.

My wishlist as you build this out:

- email / messaging support

- background jobs / queues / workers

- postgres / support

- auth

- testing

- "one man framework" design goal... focus on how this enables a tiny team to build a company and avoid the common TS tarpits where you're thinking about the stack more than the customer problem or paying for a SaaS spiderweb that is very hard to test, monitor, reason about. For me, that tight integration is what made and continues to make rails valuable. Of course, this stuff should not be first-party / developed by you, but having an omakase set of tools for building a product company with a happy path for composing it all is really lacking in the most popular js frameworks.

Edit:

Just read the "Our Full-Stack Philosophy" section and realized you're not actually going for a rails that handles modeling all the business logic stuff. Seems more like a local-first next alternative. Still very cool and good luck, but I guess disregard most of the wishlist.

By @timr - 6 months
> We've collectively complicated the hell out of things.

Yes.

> I loved Rails, it made me as a young developer able to finally realize way more ambitious projects than I'd ever done before. I also liked the promise (not implementation) of Meteor - it felt like the clear future, I guess just a bit too early (and a bit too scope-creeped).

Meteor and Rails were fundamentally incompatible views of the world, and the root of the "complicated the hell out of things" problem is that the Meteor approach wasn't practical for the vast majority of web development projects.

Once you've decided to build everything in the front end and turn the server channel into a glorified database connection, you've created a nightmare for yourself on multiple levels. Setting aside the fact that javascript lacked (lacks?) even the basics of a practical programming language -- real packages and dependency management and the like, all of which needed to be implemented via a panoply of non-standard libraries that have been subsequently re-written every 2.5 weeks -- you're re-inventing wheels (like routing, rendering, cacheing and a request/response paradigm) that the browser does for you, for free. Maybe that's worth it in a few niche cases (say, making a web-based code editor), but for the vast majority of CRUD websites, you're just swimming upstream.

Spinning languages and libraries misses the point that the problem is fundamental to the approach. I guess what I'm saying is: lean into your first instinct. It's all too complex. Go back to the root of what makes Rails -- traditional web development, really -- good.

By @elif - 6 months
What's the process like for migrating an existing react app to one?
By @Eric_WVGG - 6 months
Zero looks sick as hell. I'll be keeping a close eye on these.
By @tsp - 6 months
Crossing my fingers that something like this pops up eventually for modern Signals-based JS frameworks like Vue, Svelte or Solid.

There is no way for me going back to React.

By @xutopia - 6 months
I love how the influence of Rails comes through here... there is definitely a flavour of convention over configuration with this framework. Nice work!
By @monssoen - 6 months
I really wonder when javascript frameworks will get over file system routing. It didn't take PHP too long to move to better solutions.
By @cebu_blue - 6 months
DJ Khaleds response to this: Anotha' one
By @bitbasher - 6 months
"One" isn't the right name. I think "Oni" would have been more fitting.
By @0x142857 - 6 months
zero looks insteresting, does it support caching everything that a user might ever need? it says it only store 100MB of cache. But for an 'offline search' feature to work aren't we supposed to cache everything?
By @lxe - 6 months
Funny I was just hacking on an Expo side project... might try this instead.
By @guilhermecgs - 6 months
Can I use it for other platforms,. Like lg tv os webos? Samsung tv?
By @itslennysfault - 6 months
I honestly can't wait for the day I wake up and everyone hates React as much as me. I'd also settle for people just forgetting it for something better.
By @android521 - 6 months
Looks good . Will give it a try this weekend
By @woggy - 6 months
Whats the release date for Zero?
By @inopinatus - 6 months
refreshing attitude, keep it up
By @icemelt8 - 6 months
is zero a paid product?
By @redbar0n - 6 months
Someone asked on the other news item about onestack.dev :

> What is the added value of using it over just Expo?

My answer:

The added value of One is crossplatform compatibility with SSR, and HMR, all using Vite as the single bundler on all platforms.

Nate baked in his vxrn.dev project to get off of Metro and forked Expo Router to do that.

Since Expo Web has a large bundle size, requires NextJS for SSR, Solito for unified filesystem routing, and 2 bundlers: Metro as a bundler on RN plus a separate bundler like Webpack for web.

With One then all of that is integrated. With Zero as the optional data sync engine.

By @zwnow - 6 months
Oh we building frameworks upon frameworks now?
By @dimgl - 6 months
This looks awesome!!!! I've wanted something like this for SO LONG.
By @itronitron - 6 months
Some criticisms of your post specifically... the linked page doesn't go into enough detail of 'One' and then the not particularly visible 'read more' link goes to a page that is talking about 'zero' and how it is still in private beta...

Then the Introduction page states "One is a React framework that aims to make full stack development as simple as possible"

But there is no mention of 'what' 'I' 'am' 'getting' 'myself 'into' 'by' 'using' 'One' ...

If I click on 'Get Started' it takes me to the 'Installation' page. :(

Dude, what the fuck, I shouldn't have to install the thing to get a description of it.