Local and networked UIs in Julia

November 27, 2019 — November 27, 2019

computers are awful

UIs and networks for Julia.

1 Browser UIs

UIs in the browser via the Escher/Interact ecosystem Interact.jl is a UI/widget framework that is reasonably front-end agnostic. A web-app-style interface that can deploy to IDE, web server, or desktop electron via Bink.jl. How much tedious javascript management is required I do not know, but at least javascript UI development is well-documented.

If you really wanted to have lots of control and a proper web framework, you could use a full web framework like Genie.jl.

2 Reactive programming

Reactive programming is for managing state asynchronously, which turns out to be practical for UIs. Reactive.jl is widely used to manage signals in UI toolkits. It has a competitor Signals.jl, whose creator describes the differences:

Signals.jl, while offering the same functionality as Reactive, is different on some key factors

  • Dynamic: Signals are not typed, you can push an integer then float64 and then a string and it blends nicely with Julia’s Multiple Dispatch
  • Push-Pull: you can either push a value into a Signal and propagate changes along the Signal graph, or you can set a value without any propagation and only pull the necessary changes from any other signal.
  • Syntax: Syntax is somewhat simplified, square brackets to set or query a value, round brackets to pull or push a value (see documentation for more examples)

The last point is, IMO, a minus, but the second one is a plus for the engineering-type applications that I need to care about.

3 Traditional UI toolkits

Invoke someone else’s toolkit and have them worry about which pixel goes where. QML.jl plugs into Qt5. Gtk.jl plugs into GTK.

4 Immediate mode

I can plug into classic C++ immediate mode Dear Imgui via CImGui.jl.