Ultra is a web framework that leans hard into your browserβs native features. Embrace the future of ES Modules, Import Maps, and Web Streams. All while supporting some of the non-standards that many normal people love for some reason (JSX and TypeScript).
Itβs driven by the following hot-takes:
- ESM is non-negotiable in {currentYear}
- SSR is non-negotiable in {currentYear}
- Bundling is an anti-pattern in {currentYear}
- Data can be requested anywhere, and is accessible on the server, always
- Lazy routing with dynamic imports trumps FS routing
- Less magic in tooling and frameworks is a good thing
- Simplify your workflow and tech stack at all costs - life is too short
- Streams are neat
π― Community
We now have a Discord. Come say HI.
π next
We are working towards the next milestone. v1.0.0 πΏ
π§ v0.8.0
Heaps of updates in v0.8.0! Because of these new features. Please ensure you are
using at least Deno v1.20.3
- Vendored dependencies! We have a script that can take your CDN deps and make them local.
- API routes! (Thanks @Industrial)
- Option to disable streaming π±. Passing the env
disableStreaming=1
will force Ultra to use a customrenderToString
equivalent - returning a fully resolved, suspense compatible, html page! (BETA) - Websocket refresh in dev mode. Ultra will restart on local changes.
- Full support for
react@18:
There were some updates to how
streams are handled in
the latest
rc
. - Tighter integration with
Deno config file.
Specifiying your
importMap
indeno.json
is required - Removal of
makefile
in favour of deno task - Legacy: We also export an Oak compatible
ultraHandler
for support inside of an pre-existing Oak project
Notes on using Deno Deploy
We aim to support Deno Deploy as a first class target for Ultra, but there are a few things to consider before deploying:
- Dynamic imports are not supported, this means using React Lazy imports will not work. If you try to deploy anything with dynamic imports, the project will fail.
- Recursive requests are not supported, if using API routes, there is a good chance any requests made in your components may fail during SSR.
NOTE: These above issues are not a limitation when deploying to a service like Fly.io, and if you require either of the above, we recommend using Fly.io with a custom dockerfile.
β¨ Wishlist
As we await the official release of React 18, here some things we are interested in for the future of JS and/or Ultra:
- Better Deno support in Vercel
- React 18 native ESM exports
- Native import maps: Browser support for import maps is still a bit sketchy. Instead of using import map polyfills, Ultra inlines your imports directly into the served ES modules.
- Dynamic import support on Deno Deploy
- Native CSS modules
Thank you for going on this journey with us.