• Bubble
  • Bubble
  • Line
Zenity GUI for Elixir
Andrei Clinciu Article AUthor
Andrei Clinciu
  • 2017-12-21T19:13:00Z
  • 2 min to read

So I've recently switched to using Elixir as my main development platform.
One drawback of Elixir/Erlang is that it doesn't have any GUI(General User interface).

Yes, it's easy - even required - to use cowboy + plug or Phoenix to make a browser based (HTML, CSS and JavaScript) interface that works great across all devices.
But what when you want to interact with the user directly without the extra overhead?

Well, you can make bindings to GTK+, TK or QT! Search for a library that uses those and use it.

But why not something simple?

You can use Zenity for simple interactions. It works on Linux, there is a port for Windows and one for MacOsX.

UPDATE: Zenity is cool for fast prototyping, the sad part is that it’s development has stopped.

I recommend newcomers to try yad out (https://sourceforge.net/projects/yad-dialog/ 29), it’s a Zenity fork.  You can usually find it in the package manager.

Sample Zenity module

defmodule Zenity do@zenity "/usr/bin/zenity"  def entry(text,entry_text \\\\ "") do    exec @zenity, ["--entry", "--text",text, "--entry-text",entry_text]  end  def exec(exe, args) when is_list(args) do    port = Port.open({:spawn_executable, exe}, [{:args, args} , :stream, :binary, :exit_status, :hide, :use_stdio, :stderr_to_stdout])    handle_output(port)  end  def handle_output(port, data \\\\"") do    receive do      {^port, {:data, data}} ->        handle_output(port,data)      {^port, {:exit_status, status}} ->        {data, status}    end  endend


Usage Example

Official documentation:

I have compiled a few links with official documentation and examples.
More examples:


Zenity is worthy of usage within Elixir in the creation of user oriented scripts. And it works great in prototyping new apps.
It can do many things. For more advanced experiments and real software, consider using Phoenix in the browser.

Ideas and comments

Andrei Clinciu
Andrei Clinciu

I'm a Full Stack Software Developer specializing in creating websites and applications which aid businesses to automate. Software which can help you simplify your life. Let's work together!

Building Great Software
The digital Revolution begins when you learn to automate with personalized software.

Find me on social media