Local and networked UIs in Julia
November 27, 2019 — November 27, 2019
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 Blink.jl. How much tedious JavaScript management is required I do not know, but at least javascript UI development is well-documented.
If you really want 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.