Zenity GUI for Elixir

Zenity GUI for Elixir

Show table of contents

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]

  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])

  def handle_output(port, data \\"") do
    receive do
      {^port, {:data, data}} ->
      {^port, {:exit_status, status}} ->
        {data, status}



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.

Subscribe to my newsletter

NOTE:You will need to confirm your e-mail address in order to fully complete the subscription process.

What are your thoughts?

All comments are moderated and must adhere to the terms of service.

You might enjoy these similar articles: