I'm working on https://hypen.space/
It's a cross-platform UI framework for developing native mobile, desktop and web apps using Typescript, Rust, Go, Kotlin and Swift.
Currently it's aimed at "server-driven UI" where your app lives in the cloud but renders on the client, with full compilation to WASM packages coming soon. Of course, you can just embed the server/use it as a library.
Some cool things the framework does/has/lets you do:
- Renders real native components that look the same across platforms
- Out of the box routing system, tailwind support, accessibility and animations
- On the web, switch between DOM and canvas rendering with one boolean
- Embedding apps - you can embed Hypen in any app, but also embed any Hypen app into another Hypen app, letting you nest apps (i.e. the homescreen example)
- Deploy the whole app to CloudFlare just by using the adapter. Then you can have a whole desktop/mobile/web app running as a CF worker.
- You can build a mobile app feature in Hypen and update it by deploying to your backend, skipping app store reviews for bug fixes
- Build apps that share state across devices without building a whole sync layer
- Use DB as a data source - the current state can be persisted anywhere, so if you add a persistence plugin, you can use DB as a direct state source (i.e. have @db.messagess come directly from your DB)
- Make the app a normal part of your backend, use your stack, and just have a small Hypen part that emits the UI
- Let LLM's use your app - not via accessibility and screen reading, but purely exposing state and actions as tools. This is in progress as it's being built with the WASM target, but support will be soon included into the non-WASM builds too.
---
I started working on this about 6 years ago out of disappointment with the "mobile stack".
I've build a similar thing for internal use in companies multiple times over the last 10+ years, so I decided to build a public version too. And even tho it took me some time, and native/RN/Flutter got better in the meantime, I am still disappointed by all of them so I kept on building.
The original versions of it - parsers, engine, renderer - were written by hand in Kotlin, then got slowly migrated to Rust, but once LLM's got good enough the rest of it got built with AI based on my handwritten code and guidance. So it's not "vibecoded" into existence, but definitely AI re/written.