# Anyone crazy enough to develop a pure Julia GUI toolbox?

**URL:** https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002
**Category:** Visualization
**Tags:** package, gui
**Created:** [January 3, 2022, 9:20pm UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002 "2022-01-03T21:20:04Z")
**Posts on this page:** 20
**Page:** 7

<div class="post-metadata">

### Author: ![islent](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/islent/32/11326_2.png) [@islent](https://discourse.julialang.org/u/islent)
#### Post date: [January 18, 2022, 7:05am UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/136 "2022-01-18T07:05:25Z")

</div>

At least we can try starting with student project: “reinventing the wheel” is one way to learn fundamentals. I have a strong belief that someone will do it. 😃

---

<div class="post-metadata">

### Author: ![lobingera](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lobingera/32/211_2.png) [@lobingera](https://discourse.julialang.org/u/lobingera)
#### Post date: [January 18, 2022, 8:08am UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/137 "2022-01-18T08:08:37Z")

</div>

I have seen several examples where “reinventing the wheel” ended up in “reinventing a more complicated wheel” because it’s better to understand the fundamentals before doing it. For infrastructure like GUI toolkits there is no learning by doing.

---

<div class="post-metadata">

### Author: ![lawless-m](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lawless-m/32/30869_2.png) [@lawless-m](https://discourse.julialang.org/u/lawless-m)
#### Post date: [January 18, 2022, 11:31am UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/138 "2022-01-18T11:31:53Z")

</div>

> [@islent](#):
>
> reinventing the wheel

flat boards, spokes in compression, spokes in tension, balls in cups  
flat spring suspension, wound spring suspensions, wishbone suspension, torsion suspension, hydraulic suspension  
direct lever brakes, caliper brakes, drum brakes, disk brakes, hydraulic brakes, air brakes, electrical energy recovery brakes, torsion energy recovery brakes  
solid tyres, inflated tube tyres, tubeless tyres, airless tyres

---

<div class="post-metadata">

### Author: ![SergeantMike67](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sergeantmike67/32/25103_2.png) [@SergeantMike67](https://discourse.julialang.org/u/SergeantMike67)
#### Post date: [January 19, 2022, 7:26am UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/139 "2022-01-19T07:26:58Z")

</div>

Clearly, gui’s are something even Julia is thinking about

> **[Hiring for Scientific Application Developer (Remote)](https://jobs.juliacomputing.com/jobs/Ievy9W70_BjO/scientific-gui-and-visualization-engineer-remote?s=09)**
>
> Posted by : JuliaHub |

---

<div class="post-metadata">

### Author: ![paulmelis](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/paulmelis/32/35063_2.png) [@paulmelis](https://discourse.julialang.org/u/paulmelis)
#### Post date: [January 19, 2022, 9:30am UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/140 "2022-01-19T09:30:27Z")

</div>

> [@SergeantMike67](#):
>
> Clearly, gui’s are something even Julia is thinking about

That vacancy is curiously thin on technical requirements. “GUI” could mean anything from desktop frameworks (Qt and friends), web front-ends (React, Vue, etc), or even terminal-based GUIs. Makes quite a bit of difference in terms of required experience. Given that cloud-based is mentioned a couple of times I would expect web front-ends is the case here.

---

<div class="post-metadata">

### Author: ![yuyichao](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yuyichao/32/20_2.png) [@yuyichao](https://discourse.julialang.org/u/yuyichao)
#### Post date: [January 22, 2022, 7:46pm UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/141 "2022-01-22T19:46:05Z")

</div>

> [@caleb-allen](#):
>
> Is this what Java does with their UI toolkits?

AFAICT yes, some of them (i.e. not counting the ones that loads gtk/qt, e.g. libreoffice). And yes they do have issues with input methods. AFAICT they do implement the standard protocol, but are limited to the bad protocol on X and the worse one on wayland.

---

<div class="post-metadata">

### Author: ![Bardo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bardo/32/21601_2.png) [@Bardo](https://discourse.julialang.org/u/Bardo)
#### Post date: [January 31, 2022, 8:44am UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/142 "2022-01-31T08:44:03Z")

</div>

Alternatives (or blueprints) to reinventing the wheel for publication-ready [plotting](https://en.wikipedia.org/wiki/List_of_information_graphics_software) GUIs:

1. [LabPlot – Scientific plotting and data analysis (kde.org)](https://labplot.kde.org/)

- Support for ASCII, binary, HDF5, netCDF, FITS, ROOT, Ngspice and JSON formats with many options to control the import process
- Tree-like organization (parent-child hierarchy) of created object, navigation is done in _Project Explorer_
- Support for (i.e. embed) different open-source computer algebra systems (CAS) like Maxima, Octave, etc.

> Having mentioned custom installations of backends and Julia above, in 19.08 we allow to set the **custom path to the Julia interpreter** similarly to how it is already possible for some other backends.  
> [Cantor 19.08 – LabPlot (kde.org)](https://labplot.kde.org/2019/08/15/cantor-19-08/)

1. [Veusz – a scientific plotting package](https://veusz.github.io/)  
Reads HDF5, written in Python → add a Julia wrapper.

[[FR] Add Julia support · Issue #560 · veusz/veusz (github.com)](https://github.com/veusz/veusz/issues/560)

---

<div class="post-metadata">

### Author: ![Palli](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/palli/32/3380_2.png) [@Palli](https://discourse.julialang.org/u/Palli)
#### Post date: [May 18, 2022, 9:51am UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/143 "2022-05-18T09:51:15Z")

</div>

> [@davidanthoff](#):
>
> I just stumbled over [https://dioxuslabs.com/](https://dioxuslabs.com/) the other day. I think something along those lines for Julia would be cool, and while still very ambitious, doable in finite time.

If you mean a wrapper for it then yes, if you mean a reimplementation, the I guess yes too “in finite time”, while a bad idea.

I hadn’t heard of this project and it seems interesting supporting all platforms, almost, not just desktop, also mobile, reads “Currently, only iOS is supported through us, however you can add android”. That’s version 0.1 after “months of work” by a team (“we”).

“Dioxus Desktop is built off Tauri.” So I went and looked, also built on Rust, but not only and predictably also JS:

> Rust 76.9%  
> TypeScript 15.6%  
> JavaScript 5.0% [..]

---

<div class="post-metadata">

### Author: ![Alon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/alon/32/14452_2.png) [@Alon](https://discourse.julialang.org/u/Alon)
#### Post date: [December 17, 2022, 12:28am UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/144 "2022-12-17T00:28:05Z")

</div>

What a lot of people don’t understand is that GUI has a very important role in research and algorithm development for example.

In most cases, GUI is developed after a software has been written, to give a user friendly interface to an otherwise working command-line interface. It is **so** common to use GUIs this way that a lot of people mistakenly think that this is the “correct” way to do GUI or that it is the only way. It makes people feel warm in their belly knowing that the real program doesn’t need the graphical interface, that it could be easily ported to other operating systems or languages and so on. Which is true, but it is not the only use case and it comes with a price.

There exists a fundamentally **different paradigm** to GUI programing, one that does not try to separate the program from the GUI, which results in highly efficient iterative programing, necessary for algorithm development. Such approach could be used with _Visual Basic_ for example, but the best tool for the job in my opinion was _MathWorks GUIDE_ (that evolved into _App designer_). With those tools, you can develop your data loading, your processing, algorithms and visualizations with less typing, significantly faster trial & error iterations over your algorithm due to offloading all the overhead typing and running and re-running and opining and closing figures and changing inputs - to the GUI.  
I haven’t seen anyone teaching this programing paradigm so researchers either have to figure it out on their own or in most cases remain unaware of it completely. I have actually seen people programing GUI’s on Matlab with code!

For that reason, people who have replied above with suggestions such as _Gtk.jl_ or _PySimpleGUI_ are probably unaware of the paradigm that I described (let’s call it GUI oriented programing - GOP for lack of a better term or because I’m ignorant to the real name of it). Let me be clear:

1. If you have to **code** your GUI, it is not GOP. The whole point is to save time and effort by dragging and dropping buttons, text fields, plotting axes, etc. and applying functionality to them in the code, saving **all** the overhead.
2. If you have a GUI designer (like QT) that you can compile into code - it is not GOP, because you have to make modifications to the GUI that merge into the existing code automagically.
3. If you have to re-run the GUI every time you make changes to the code, even in non visual parts of the code, it is not GOP, because you have to make quick iterations over your algorithm, change normalizations, noise filters, data processing routines and see how the new code affects the visualization without re-compiling and re-running ( I guess in Julia’s case it could be feasible to do something similar to _Revise.jl_)

Some people unfortunately believe that GUI is slowing their research, that it creates overhead that is not necessary for their research. It just means that they don’t know how to use GUI oriented programing tools, which significantly accelerate research when used correctly.

---

<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: [December 17, 2022, 9:54am UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/145 "2022-12-17T09:54:22Z")

</div>

For those of us who haven’t seen this paradigm, could you share some video(s) of how it actually works in MathWorks or elsewhere?

I tend to use Pluto and its widgets for such purposes — when basic GUI elements are needed during working on data/algorithms. They are quite nice, and the reactive nature of Pluto helps making them feel more “interactive” than other solutions.  
No recompilation/waiting for TTFX is needed, thanks to Pluto.

---

<div class="post-metadata">

### Author: ![pitsianis](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pitsianis/32/26588_2.png) [@pitsianis](https://discourse.julialang.org/u/pitsianis)
#### Post date: [December 17, 2022, 5:02pm UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/146 "2022-12-17T17:02:06Z")

</div>

Here is a video introduction to [MathWorks’ App Designer](https://www.mathworks.com/videos/app-designer-overview-1510748719083.html)

The Related Resources on the above page would also help.

I believe `guide` (GUI development environment?) was pure java and should be very easy to replicate. Drag and drop the GUI components into a canvas, run the naked GUI to interact with them and finally link the callbacks and you are done. Even I have done it!

---

<div class="post-metadata">

### Author: ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)
#### Post date: [December 17, 2022, 6:04pm UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/147 "2022-12-17T18:04:26Z")

</div>

> [@Alon](#):
>
> I have actually seen people programing GUI’s on Matlab with code!

I have done exactly that but not for ignorance of GUIDE. I have used it and become utterly frustrated with it.

---

<div class="post-metadata">

### Author: ![Alon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/alon/32/14452_2.png) [@Alon](https://discourse.julialang.org/u/Alon)
#### Post date: [December 17, 2022, 8:48pm UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/148 "2022-12-17T20:48:42Z")

</div>

> [@aplavin](#):
>
> could you share some video(s) of how it actually works

Unfortunately I don’t know of any videos for that and I’m not much of a youtuber.

> [@pitsianis](#):
>
> I believe `guide` (GUI development environment?) was pure java

I believe so too. In fact, Yair Altman ([Technical articles - Undocumented Matlab](http://undocumentedmatlab.com/articles)) sort of “hacked” it and wrote a book about how to extend the GUI functionality by understanding the underlying Java.

> [@GunnarFarneback](#):
>
> I have used it and become utterly frustrated with it.

I’m sorry to hear, I think that using GUIDE improperly (e.g. not understanding the “handles” object) can be frustrating for sure. For example, I saw people using global variables to share information between visual elements which is just not how it is supposed to work so it leads to complications and frustration.

---

<div class="post-metadata">

### Author: ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)
#### Post date: [December 17, 2022, 11:18pm UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/149 "2022-12-17T23:18:36Z")

</div>

GUIDE is nice to layout the widgets but it’s horribly verbose when _exporting to code_.  
I’ve done dozens of figures in Matlab where I started with GUIDE and next stripped down the generated code to 10% of original size.

And yes mastering the use of `handles` is an absolute must.

---

<div class="post-metadata">

### Author: ![SergeantMike67](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sergeantmike67/32/25103_2.png) [@SergeantMike67](https://discourse.julialang.org/u/SergeantMike67)
#### Post date: [December 17, 2022, 11:38pm UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/150 "2022-12-17T23:38:17Z")

</div>

I wish I had a small portion of what you said 😁

---

<div class="post-metadata">

### Author: ![Elrod](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/elrod/32/22461_2.png) [@Elrod](https://discourse.julialang.org/u/Elrod)
#### Post date: [December 18, 2022, 1:21am UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/151 "2022-12-18T01:21:02Z")

</div>

> [@Alon](#):
>
> With those tools, you can develop your data loading, your processing, algorithms and visualizations with less typing, significantly faster trial & error iterations over your algorithm due to offloading all the overhead typing and running and re-running and opining and closing figures and changing inputs - to the GUI.

How do you offload it?  
Like, Pluto.jl automatically rerunning on updates? I do get how that could be a time saver/convenient.

Otherwise, `foo()` to rerun everything I need to rerun after a change is much easier and faster than $(sequence of 10 button presses w/ associated menu navigation).  
Obviously, I fall into the camp for which anything GUI is totally alien.

---

<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: [December 18, 2022, 2:18am UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/152 "2022-12-18T02:18:51Z")

</div>

> [@Alon](#):
>
> There exists a fundamentally **different paradigm** to GUI programing,

Even Matlab is moving towards a web technology based GUI over time as opposed to their current Java based GUI.

If you really wanted a native windowing GUI, you could take a look at [https://glade.gnome.org/](https://glade.gnome.org/) . That takes on the role of an app designer kind of approach.

When we get interactive threads with Julia 1.9, I think this would be worth exploring again

> <https://github.com/JuliaLang/julia/pull/46609>
>
> Rebased #45447 and moved to this repo.
> 
> Fixes https://github.com/JuliaLang/jul…ia/issues/17573

---

<div class="post-metadata">

### Author: ![SergeantMike67](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sergeantmike67/32/25103_2.png) [@SergeantMike67](https://discourse.julialang.org/u/SergeantMike67)
#### Post date: [December 18, 2022, 3:50am UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/153 "2022-12-18T03:50:31Z")

</div>

I’ve tried Glade and IMHO it’s awful. The documentation is the worst and the tutorials are as bad or worse.

---

<div class="post-metadata">

### Author: ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)
#### Post date: [December 18, 2022, 8:42am UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/154 "2022-12-18T08:42:10Z")

</div>

> [@SergeantMike67](#):
>
> I’ve tried Glade and IMHO it’s awful.

I agree. We need something much better. GLMakie is already pretty nice (even though not 100% native). Hopefully in 1.9 (when [https://github.com/JuliaLang/julia/pull/47184](https://github.com/JuliaLang/julia/pull/47184) is merged) the load times become much shorter, then it could be a good foundation for a native GUI designer…

---

<div class="post-metadata">

### Author: ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)
#### Post date: [December 18, 2022, 9:39am UTC](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002/155 "2022-12-18T09:39:00Z")

</div>

The best GUI designer I ever used was part of Delphi. It might be worth to look at [FireMonkey - Wikipedia](https://en.wikipedia.org/wiki/FireMonkey) to pick up some ideas…

[Previous page](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002.md?page=6)

[Next page](https://discourse.julialang.org/t/anyone-crazy-enough-to-develop-a-pure-julia-gui-toolbox/74002.md?page=8)
