/ultra

๐Ÿ’Ž Modern Streaming React Framework in Deno

Primary LanguageTypeScriptMIT LicenseMIT


Ultra 2.0

Zero-Legacy Deno/React Suspense SSR Framework*

Discord GitHub Workflow Status Deno module Deno compatibility

* If you want to get very meta (not facebook), Ultra can be viewed as a tiny bridge to utilise native browser features ๐ŸŒ whilst using popular front-end libraries. ๐Ÿงฐ

๐Ÿง™ Start your journey

Here's a basic Ultra project to set you on your way.

deno run -A -r https://deno.land/x/ultra/create.ts

โœจ What's new

Ultra allows you to write web-apps which massively simplify your tool chain. You write ESM, we ship ESM. Where we are going, there is no "bundling" (it feels so 2018 just saying that word).

  • Less opinionated, BYO routing, styling, data fetching, and head libraries
  • Support for much of the React ecosystem by custom server/client controls**
  • Native import maps in browser ๐Ÿค–
  • Localised import maps for production ๐Ÿ”ฅ
  • API routing
  • Overhaul of internal source code
  • Updated Deno Deploy support

** Examples include (but not limited to) react-query twind stitches react-router wouter mdx @__@

Does Ultra 'ship js'?

Yes, Ultra creates rich web applications which allow complex client-side routing, allow components to persist through route changes (media players, interactive elements, etc).

Our goal is to both write AND ship source code that works the same way on server/runtime and client. We view the browser as more than just a "target". Browser is life, and javascript is good.

Can I use TypeScript and/or JSX?

If you want.

What native browser features should we all be using more?

Unbundled ESM, service workers, universal import maps, cascading style sheets.

Ultra always has been (and always will be) powered 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 have the Discord. Come say 'sup.

๐ŸงŸ Contributions

The Ultra community welcomes outside contributions. See the Contributor Guidelines for details.

๐Ÿฆฅ Wishlist

Here some things we are interested in for the future of JS and/or Ultra:

Thank you for going on this journey with us.