Ultra is a web-app 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
๐ If you want to dive right in, create-ultra-app is the easiest way. Less words, more ESM.
- Total overhaul of transforms, migration to brand new @swc/wasm-web!
- Esbuild removed!
- Unfettered support for React 18!
- Tests!
- Example integration with @mdx-js/mdx!
- Improvements to API routes!
- Updated docs!
- New website!
Migration notes:
Previous v0.8.0 (and earlier) projects need to update the server import. We
removed the mod.ts
file for simplicity.
import ultra from "https://deno.land/x/ultra/server.ts";
We now have a Discord. Come say HI.
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.
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.