Noora
In the recent years of the web, we've witnessed the rise of state-driven and component-based UI frameworks (e.g. React, Vue, Svelte). They shifted the way we think about building web applications and laid a foundation upon which to build reusable components and tools that took the web to the next level. However, that innovation happened in the omnipresent JavaScript ecosystem, making it hard to reuse across other runtimes and languages, which often led to teams either going all-in on JavaScript with SPAs or adding server-side additional complexity and indirection with a JavaScript runtime to have access to the same tools and components on the server. To avoid this, those other runtimes and languages had to catch up and come up with their proprietary solutions to resemble the same patterns and tools. Ruby on Rails came up with the Hotwire set of libraries, Laravel with Livewire, and Phoenix LiveView for Elixir/Phoenix. But as you can imagine, proprietary solutions mean bad interoperability and a lot of duplicated effort. So this poses the question: Can we build reusable components and tools that are not tied to a specific runtime or language?
Noora aims to answer that question. It's a runtime, language, and OS-agnostic UI compiler for the web. It's a solution that any web framework can plug into as their UI backend. It's implemented in Rust, which makes it possible to define native extensions for interpreted languages like Ruby, Python, and JavaScript. The following are the main design goals of Noora:
- Components should be atomic: Components should encapsulate markup, styles, and behavior.
- Components should be state-driven: Developers' focus while building components should be on the state and the UI, but not on how one maps to the other.
- Components should be optimally hydrated: Clients should receive only the minimal amount of JavaScript needed to make certain elements interactive when the developer explicitly asks for it (e.g. islands architecture).
There's still some more to add...