# Current, Maintained interactive Julia gui system? (mid 2024)

**URL:** <https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318>\
**Category:** General Usage\
**Tags:** gui, interact\
**Created:** [August 17, 2024, 8:42pm UTC](https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318 "2024-08-17T20:42:39Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![dlakelan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlakelan/32/8491_2.png) [@dlakelan](https://discourse.julialang.org/u/dlakelan)\
**Post date:** [August 17, 2024, 8:42pm UTC](https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318/1 "2024-08-17T20:42:40Z")

</div>

I am working with a collaborator on a statistical model. Part of the process at the moment is to find an initial condition for optimization or sampling. The model is complicated but there are a number of plots that we can make which make it clear how well we’re fitting certain aspects of the model.

I created a gui with Interact.jl which let you adjust parameters and then see the updated plots interactively, but immediately hit the problem that more recent versions of Jupyterlab don’t show the sliders… Last version of Jupyterlab that worked was released like May 2023.

I asked on Discourse if there was any resolution how to deal with this [Slider does not show after upgrade Jupyter - #4 by dlakelan](https://discourse.julialang.org/t/slider-does-not-show-after-upgrade-jupyter/112059/4)

but got no response, which makes me think maybe Interact.jl etc are abandoned? There have been no releases for almost 2 years:

![image](https://global.discourse-cdn.com/julialang/original/3X/7/3/73da97cb829e35c60ec6a3d3fbee10927f14ea5d.png)

So what is the status of Interact.jl and/or what other interactive systems are in active development for Julia?

I’m aware of GenieBuilder, but I use VSCodium to avoid microsoft telemetry etc and the plugin in that ecosystem is way out of date… 0.4.12 from 12 months ago is the lastest available.

I’m not sure if that’s an oversight or because the Genie people don’t want to support codium for a relatively small group of codium users in a relatively small ecosystem of Julia programmers in the first place.

Anyway, any thoughts on interactive guis as of mid 2024 would be appreciated.

---

<div class="post-metadata">

**Author:** ![non-Jedi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/non-jedi/32/3645_2.png) [@non-Jedi](https://discourse.julialang.org/u/non-Jedi)\
**Post date:** [August 17, 2024, 11:57pm UTC](https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318/2 "2024-08-17T23:57:17Z")

</div>

I know almost nothing about Interact nor any of its alternatives, but I happen to remember seeing a discourse post earlier this year recommending Bonito.jl as a full Interact replacement:

> [@Status of WebIO](https://discourse.julialang.org/t/status-of-webio/108478/2):
>
> We’ve been planning to establish [Bonito](https://github.com/SimonDanisch/Bonito.jl) (formerly JSServe) as an Interact/WebIO replacement… There has been a bit of a discussion about it on discourse and GitHub… Nobody has had time to tackle it though, but Bonito should have everything in place to replace interact!

---

<div class="post-metadata">

**Author:** ![dlakelan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlakelan/32/8491_2.png) [@dlakelan](https://discourse.julialang.org/u/dlakelan)\
**Post date:** [August 18, 2024, 1:02am UTC](https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318/3 "2024-08-18T01:02:50Z")

</div>

Great will take a look. Does it have a similar simple entry level like

```julia
@interact for I = 1:.01:2

#dostuff
end

```

?

In any case I will take a look and report back what I found.

---

<div class="post-metadata">

**Author:** ![dlakelan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlakelan/32/8491_2.png) [@dlakelan](https://discourse.julialang.org/u/dlakelan)\
**Post date:** [August 18, 2024, 5:23am UTC](https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318/4 "2024-08-18T05:23:25Z")

</div>

Wow, no, Bonito seems cool, but is very definitely a library for web devs at some level. Like, the abstraction is an HTML document… with DIVs and CSS and WebSocketConnections and evaljs functions to force some javascript to run on the browser.

This seems like it’s extremely nice for someone who’s a web dev who wants to do stuff from Julia, but not really ideal for someone who’s a physicist or a demographer who wants to create sliders to investigate the effect of input variables on the output of a simulator or point cloud transform or something.

Although I’m sure I could learn enough about it to make a nice GUI with a couple tens of hours of reading examples and editing them, what I really want is a quick and dirty thing where I can make something in 5 minutes more like the

```julia
@interact for a = 1:0.1:2, b = 0:5:100
#..do some stuff
end

```

That is, I don’t care how it looks or how its laid out, I just want to manipulate some sliders and show a graph changing so that my collaborator can by-hand find some good starting points for an optimizer run.

Even an hour making the GUI is wasted time here because he could just type numbers in by hand for less than an hour and find a decent starting point.

Similarly, for teaching students about say math or physics, having them build a GUI for 2 hours is 2 hours they’re not learning math or physics and are probably frustrated, but if in 5 mins they can have sliders and checkboxes and then investigate the different options and see how the simulator behaves then they’re spending their time on the right component… the understanding and exploration of their topic of interest.

However, my guess is someone with sufficient web dev ability could build an `@interact` type macro on top of Bonita.jl pretty easily. I wonder if someone’s working on such a thing.

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [August 18, 2024, 6:06am UTC](https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318/5 "2024-08-18T06:06:39Z")

</div>

> [@dlakelan](#):
>
> I just want to manipulate some sliders and show a graph changing

> **[SliderGrid | Makie](https://docs.makie.org/stable/reference/blocks/slidergrid#SliderGrid)**
>
> Create impressive data visualizations with Makie, the plotting ecosystem for the Julia language. Build aesthetic plots with beautiful customizable themes, control every last detail of publication quality vector graphics, assemble complex layouts and...

---

<div class="post-metadata">

**Author:** ![johnh](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/johnh/32/3615_2.png) [@johnh](https://discourse.julialang.org/u/johnh)\
**Post date:** [August 18, 2024, 8:16am UTC](https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318/6 "2024-08-18T08:16:42Z")

</div>

If you want sliders you could use a Pluto notebook

> **[Interactivity](https://featured.plutojl.org/basic/plutoui.jl)**
>
> Slider, buttons, dropdowns, and more using PlutoUI.jl!

---

<div class="post-metadata">

**Author:** ![cormullion](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cormullion/32/49131_2.png) [@cormullion](https://discourse.julialang.org/u/cormullion)\
**Post date:** [August 18, 2024, 9:51am UTC](https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318/7 "2024-08-18T09:51:25Z")

</div>

> [@A new Julia GUI Engine has appeared! Mousetrap.jl is now available](https://discourse.julialang.org/t/a-new-julia-gui-engine-has-appeared-mousetrap-jl-is-now-available/103004):
>
> Available here: [https://github.com/Clemapfel/mousetrap.jl](https://github.com/Clemapfel/mousetrap.jl)Features Designed specifically for Julia Choose from 40+ pre-made Widgets, or create your own widgets from scratch Fully abstracted, OpenGL-based rendering engine [Hand-written 10-chapter manual](https://clemens-cords.com/mousetrap/) and [verbose doc strings](https://clemens-cords.com/mousetrap/02_library/classes/) for every symbol Available for Linux, Windows, and Mac Licensed lGPL-3.0, meaning it can be used in closed-source, for-profit projects Background So far, when wanting to create a GUI for Julia, options were limited to [wrap…](https://github.com/JuliaGraphics/Gtk.jl)

not sure what the current status is 🤔

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [August 18, 2024, 12:43pm UTC](https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318/8 "2024-08-18T12:43:01Z")

</div>

Bonito.jl is part of the underlying engine for WGLMakie.jl:

> **[WGLMakie | Makie](https://docs.makie.org/v0.21/explanations/backends/wglmakie)**
>
> Create impressive data visualizations with Makie, the plotting ecosystem for the Julia language. Build aesthetic plots with beautiful customizable themes, control every last detail of publication quality vector graphics, assemble complex layouts and...

You could do something like this with PlutoUI.jl:

> **[Interactivity](https://featured.plutojl.org/basic/plutoui.jl)**
>
> Slider, buttons, dropdowns, and more using PlutoUI.jl!

The technology on the horizon is doing this all with webassembly in the browser:

> **[Lorenz model · WebAssemblyCompiler](https://tshort.github.io/WebAssemblyCompiler.jl/stable/examples/lorenz/?p1=15&p2=1)**
>
> Documentation for WebAssemblyCompiler.

I guess the old thing that makes this difficult to answer directly might be Jupyter. I have not tried to do interactive sliders in Jupyter for years…

---

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [August 18, 2024, 12:45pm UTC](https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318/9 "2024-08-18T12:45:46Z")

</div>

Any particular reason for not using Pluto?

---

<div class="post-metadata">

**Author:** ![dlakelan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlakelan/32/8491_2.png) [@dlakelan](https://discourse.julialang.org/u/dlakelan)\
**Post date:** [August 18, 2024, 2:03pm UTC](https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318/10 "2024-08-18T14:03:01Z")

</div>

Thanks all, the Makie and webgl and compiling to webassembly stuff all seems really interesting I’ll remember to look in on that through time.

For now I think Pluto is probably the way to go.

---

<div class="post-metadata">

**Author:** ![dlakelan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlakelan/32/8491_2.png) [@dlakelan](https://discourse.julialang.org/u/dlakelan)\
**Post date:** [August 19, 2024, 3:44am UTC](https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318/11 "2024-08-19T03:44:37Z")

</div>

So I did in fact go with Pluto.jl and was able to convert my Jupyter notebook by copying and pasting most of the code. The UI was the part that required adjustment, but it was relatively easy after reading some examples. It helped that I tried out Pluto back in 2020 when it first came out and had seen some JuliaCon videos at some point.

Here’s a screenshot using simulated data, the game is “adjust the sliders until the points are a cloud around y=0 for all x and all colors (age groups)”

 ![image](https://global.discourse-cdn.com/julialang/original/3X/c/7/c7bc600397831f9490be486806aba4ebbd9a8e1f.jpeg)

From this starting point then, we can start optimization and expect it to come to a reasonable and meaningful optimum without being stuck in some strange corner of parameter space (where for example the point cloud looks like a V around 0 instead of a flat blob but any adjustment to any parameter makes the fit worse so the optimizer is stuck).

Thanks again ! and thanks to @fonsp and friends for all the great work on Pluto.

---

<div class="post-metadata">

**Author:** ![JamesNZ](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jamesnz/32/35361_2.png) [@JamesNZ](https://discourse.julialang.org/u/JamesNZ)\
**Post date:** [August 19, 2024, 5:48pm UTC](https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318/12 "2024-08-19T17:48:06Z")

</div>

Pluto is probably a better fit for what you’re doing, but another option would be [CImGui.jl](https://gnimuc.github.io/CImGui.jl/stable/) (disclaimer: I’m one of the maintainers).

---

<div class="post-metadata">

**Author:** ![Ramos20](https://avatars.discourse-cdn.com/v4/letter/r/ecccb3/32.png) [@Ramos20](https://discourse.julialang.org/u/Ramos20)\
**Post date:** [August 19, 2024, 7:09pm UTC](https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318/13 "2024-08-19T19:09:31Z")

</div>

> [@dlakelan](#):
>
> Thanks all, the Makie and webgl and compiling to webassembly stuff all seems really interesting I’ll remember to look in on that through time.
> 
> For now I think Pluto is probably the way to go.

I agree In my opinion Pluto is not the way to go. [🕶](https://cekmekoyescortvip.com)

---

<div class="post-metadata">

**Author:** ![fonsp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fonsp/32/222349_2.png) [@fonsp](https://discourse.julialang.org/u/fonsp)\
**Post date:** [August 25, 2024, 9:35am UTC](https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318/14 "2024-08-25T09:35:09Z")

</div>

This GUI looks really cool! Your screenshot inspired me to make a new feature to PlutoUI! [New macro `@bindname` to display variable name before bond by fonsp · Pull Request #305 · JuliaPluto/PlutoUI.jl · GitHub](https://github.com/JuliaPluto/PlutoUI.jl/pull/305)

---

<div class="post-metadata">

**Author:** ![aplavin](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/aplavin/32/222056_2.png) [@aplavin](https://discourse.julialang.org/u/aplavin)\
**Post date:** [August 25, 2024, 1:33pm UTC](https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318/15 "2024-08-25T13:33:21Z")

</div>

For a UI to edit arbitrary objects in Pluto, simple or complex, check out PlutoTables.jl and [examples in its docs](https://aplavin.github.io/PlutoTables.jl/examples/notebook.html).  
Easy to specify parts to edit, and assign widgets to each:  
 ![image](https://global.discourse-cdn.com/julialang/original/3X/e/3/e3eb7157a71c0c07854762b17a7ae1df588e7c2a.png)

Btw, you can use almost the same syntax to optimize parameter values with AccessibleOptimization.jl – just provide intervals instead of PlutoUI widgets.

---

<div class="post-metadata">

**Author:** ![dlakelan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlakelan/32/8491_2.png) [@dlakelan](https://discourse.julialang.org/u/dlakelan)\
**Post date:** [August 25, 2024, 2:47pm UTC](https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318/16 "2024-08-25T14:47:11Z")

</div>

> [@fonsp](#):
>
> inspired me to make a new feature to PlutoUI!

Wow, love it. Now if only there were a way to get the value printed to a few sig figs on the right of the slider. Sometimes you want to see numerically where a behavioral transition occurs or where an otherwise special value is.

---

<div class="post-metadata">

**Author:** ![disberd](https://avatars.discourse-cdn.com/v4/letter/d/8edcca/32.png) [@disberd](https://discourse.julialang.org/u/disberd)\
**Post date:** [August 25, 2024, 3:20pm UTC](https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318/17 "2024-08-25T15:20:03Z")

</div>

I don’t think you can specifically control the number of significant digits displayed, but if you call the Slider with `show_value = true` as kwarg (and have floating point values) they do show with full precision:  
 ![image](https://global.discourse-cdn.com/julialang/original/3X/7/e/7e7259cef0241d2f6b0d188eed912678fd2315da.png)

---

<div class="post-metadata">

**Author:** ![dlakelan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlakelan/32/8491_2.png) [@dlakelan](https://discourse.julialang.org/u/dlakelan)\
**Post date:** [August 25, 2024, 5:45pm UTC](https://discourse.julialang.org/t/current-maintained-interactive-julia-gui-system-mid-2024/118318/18 "2024-08-25T17:45:18Z")

</div>

Oh cool, good to know, and I love step = rand() 😂
