Xilem: An Architecture for UI in Rust

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • Scout APM - Less time debugging, more time building
  • SonarQube - Static code analysis for 29 languages.
  • SaaSHub - Software Alternatives and Reviews
  • redux-rs

    An attempt at a uni-directional state flow written in Rust, heavily based in redux-js. (by jaredonline)

    From the first paragraph:

    > ... Architectures that work well in other languages generally don’t adapt well to Rust, mostly because they rely on shared mutable state and that is not idiomatic Rust, to put it mildly. ...

    The author doesn't mention Redux (the architecture), which is surprising. There are three principles[1]:

    1. The global state of your application is stored in an object tree within a single store.

    2. The only way to change the state is to emit an action, an object describing what happened.

    3. Changes are made with pure functions.

    In other words, the components of an application never mutate the state tree directly. Rather, they emit actions which re-generates the state tree without mutation.

    This style of state management is compatible with Rust's ownership model. The emphasis on pure functions means that it's not necessary for your application to hold multiple mutable references, which I'm guessing underlies the "generally don't adapt well to Rust" part of the claim.

    [1] https://redux.js.org/understanding/thinking-in-redux/three-p...

    [2] https://github.com/jaredonline/redux-rs

  • sycamore

    A reactive library for creating web apps in Rust and WebAssembly

    What are your thoughts on Sycamore?


  • Scout APM

    Less time debugging, more time building. Scout APM allows you to find and fix performance issues with no hassle. Now with error monitoring and external services monitoring, Scout is a developer's best friend when it comes to application development.

  • incr_dom

    A library for building dynamic webapps, using Js_of_ocaml.

  • bonsai

    A library for building dynamic webapps, using Js_of_ocaml

  • AudioKitUI

    User Interfaces for AudioKit

    Ok I'm not Raph but, FWIW, my 3d sculpting app is written using SwiftUI (https://sculptura.app), which is not a view around a database (in fact it was previously UIKit... SwiftUI is so much better). I recently implemented a piano-roll editor in SwiftUI: https://github.com/AudioKit/AudioKitUI/tree/main/Sources/Aud.... I have little doubt a DAW could be implemented in SwiftUI easier than with UIKit or AppKit.

  • slint

    Slint is a toolkit to efficiently develop fluid graphical user interfaces for any display: embedded devices and desktop applications. We support multiple programming languages, such as Rust, C++ or JavaScript.

    > The problem is that it requires shared mutable access to that state, which is clunky at best in Rust (it requires interior mutability).

    I don't see the problem with using interior mutability (Rc> or Arc>)

    With Slint [1], we just embrace it, and rely on interior mutability for the shared state, and that works well.

    [1] https://github.com/slint-ui/slint

  • solid-site

    Code that powers the SolidJS.com platform.

    What about various libraries that don't use a virtual DOM and have vastly better performance than React, for example https://www.solidjs.com or Svelte ?

  • SonarQube

    Static code analysis for 29 languages.. Your projects are multi-language. So is SonarQube analysis. Find Bugs, Vulnerabilities, Security Hotspots, and Code Smells so you can release quality code every time. Get started analyzing your projects today for free.

  • glicol

    (Audio) graph-oriented live coding language and music DSP library written in Rust

    Very insightful post. Although my work is mainly about audio not GUI, I still learn a lot from your idea. For my audio work, I also use declarative style and diff algorithm for updating the audio graph. But when rewriting it, I found sending messages is also very convenient:


    As I said, there is still some way to go. Will further study this post when I got more spare time.

  • rui

    Experimental Rust UI library

  • post--activation-atlas

    Using feature inversion to visualize millions of activations from an image classification network, we create an explorable activation atlas of features the network has learned which can reveal how the network typically represents some concepts.

    Okay. That said, are there any particular conclusions or implications from this approach for that use case?

    For that matter, are you next going to extend this simple exploration toward more complexity (eg. more widget types, more interactions, more layout constraints, etc.) or toward more data?

    As I've followed your efforts in this area, the power and utility of selecting the right motivating example has been coming into focus. The parallels with a startup's MVP are fairly clear, the parallels to selecting a (dissertation) research topic a bit handwavy (in part because guidelines for the latter are extraordinarily vague). So far you haven't really chosen a new motivating end-user application since suspending development of Xi. There are lots of directions you could go, from making an equivalent to Processing, to creating a game engine, or eventually restarting Xi development with an eye toward exploration and visualization of large codebases, etc. Personally I'm starting to become intrigued by the need to dig into large neural nets and the representations encoded within (related subtopics: latent spaces, feature vectors, orthogonality):


    Meanwhile, I've been casting about for a proper (Rust) motivating example app/library of my own, and the closest I've come so far is something like a HTML + CSS rendering engine, though not targeted at the Web per-se, but instead at ebooks (esp. EPUB), a much smaller set of required functionality.

    In theory a desktop ebook library + reader app with features like MathML support, advanced typography, and visualizing connections between millions of works and annotations seems like it would be a better fit with the direction you're (currently) going than any existing framework.

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts