I'm new at programming in Julia and I need to create a GUI. I've been looking for information and I can't find anything useful. I tried to search information in the Julia official web page, but it seems to be down. I wonder if any of you guys knows where I can find information about it.
This is quite a generic question, but I'll try and layout the environment so that you can make an informed decision based on your needs. You might want to check out this article on 6 Julia Frameworks to Create Desktop GUI’s 🖥 and Web Apps.
- If you are developing your code within an [Jupyter/IJulia] notebook, and need very simple interaction, such as a slider to change some input values, the Interact package is the easiest thing to get started with.
To develop full-fledged web UIs, take a look at Escher. Inspired by the Elm, it provides a functional library of UI components. Interactive web UIs are created in 100% Julia. There is no differentiation in code between the client and server sides. The framework handles all of that.- Another web framework worth looking at is Genie, which is based on the traditional MVC design pattern. It also includes an ORM.
- Stipple is a reactive UI library for building interactive data applications in pure Julia. It uses Genie.jl (on the server-side) and Vue.js (on the client).
- Dash ties modern UI elements like dropdowns, sliders, and graphs directly to your analytical Julia code.
- All the above solutions are for creating web user interfaces, accessed via a browser. If you want to create cross-platform desktop apps, but want to work with web technologies (i.e. HTML/CSS/Javascript), use Blink. This is a Julia wrapper around the Electron. You could potentially write a Dash or Stipple application, and wrap it in Blink.jl to create a desktop app.
- To create desktop UI applications using the Gtk library, use the Gtk.jl package in Julia. If you are familiar with the Gtk API, it is easy to get started. Note however that there are some significant known issues running GTK.jl on Windows.
- If your UI framework of choice is QT, a Julia binding is available via QML.jl
- If you are happy painting the buffer yourself and just want a window to render the pixels on the screen, then there is nothing simpler than MiniFB. Note however that this does not give you a widget library -- you are responsible for drawing each and every pixel yourself.
- ClmGui.jl is a Julia wrapper around the immediate mode GUI toolkit known as Dear ImGui
- And last, but not the least, the venerable Tk framework has a wrapper in Julia. The UI's created using TK are sometimes considered ugly compared with modern aesthetics, but sometimes this is the quickest way to get a window up.
[Edited Jan 2022]
QML.jl https://github.com/barche/QML.jl
The QML.jl package enables using the QML markup language from the Qt library to build graphical user interfaces for Julia programs. The package follows the recommended Qt practices and promotes separation between the GUI code and application logic. All user-facing code is pure Julia and QML, no C++ knowledge is required to use the package.
There is a new package called Genie. It is a web framework comparable with Django in python. You can create web ui using Genie. Until now (Aug. 2017), the package is functional with some nice demos, the documentation is not quite complete though.
Consider mousetrap.jl
A GUI engine I made myself and released in Summer 2023.
- Designed and made specifically for Julia
- Works on Linux, Windows, & Mac
- Includes 40+ Widgets and a fully abstracted OpenGL-based rendering engine
- Extensive Documentation, including a 10-chapter manual and doc strings for every exported symbol
- Licensed lGPL3-0, meaning it can be used in closed-source, commercial projects
Mousetrap was made specifically for Julia, as opposed to just making a wrapper around an existing library in another language. If the latter sounds more attractive to you, consider checking out GTK4.jl instead, which also released in 2023.
© 2022 - 2024 — McMap. All rights reserved.
Gtk.jl
,Tk.jl
,Escher.jl
are some options. – Bantling