Comparisons » GUI

General words on GUI

Command Line Interface, Menus / Dialog Boxes, Spreadsheet, Notebook (like mathematica), Web appli.

Many teachers prefer to use a CLI, even with their beginner students, because it forces good habits in data analysis (the user must really know what he is doing). A beginner in front of a simple GUI can click everywhere and get results anyway, even if these results are meaningless.

best practice when desinging a GUI. Also : offer two levels (or more): beginner / expert user. And choose your goal: teaching, research or demonstration.

2D graphing and charting

Archive on google groups

interface to gnuplot


ocaml bindings

older partial binding


older, based on OCaml 3.01 or 3.02. Fairly high-level binding to the plplot libraries which is quite easy to use.


Currently no API to create point labels, but this can be done with a small amount of touch-up work from the GUI (under Plot->Set Appearance->Ann. values).

Bindings to the OpenGL 3D library

OpenGL is the most cross-platform GUI-capable API and runs on virtually any modern computer, typically with performance orders of magnitude better than anything you'll get with Qt, GTK, WxWindows or any other software renderer.

Each of the 3 openGL binding resolve the problem of the GLenum parameters (that often collide between several functions) in a different way.

There's also the problem of C buffers (C arrays).



A dynamic cross-platform Ocaml binding for OpenGL and extensions.


openGL in native compiled Ocaml Graphics.cmxa



mini tutorial

Also look for "deuglification tutorial".


Interface to GTK2. more widgets in gtk2, but they can be harder to use.


Gtk+ libraries for windows

example of GUI compiling both under Windows and Unix

widgets looking like those of windows


Also have a look at


OCaml Visualization Toolkit is built around cairo-ocaml.

functional reactive GUI



Not a library, it doesn't control invert. It is a monolithic framework. Your code will no longer be composable. In particular, there is no way to compose two such frameworks, for example you cannot use it with an event driven GUI framework. To quote the manpage: "In order to process events, an application needs to call event_dispatch(). This function only returns on error, and should replace the event core of the application program." Just try telling a GUI that *also* demands you use ITS event loop that!

The only proper way to use libevent would be to spawn the dispatch loop inside a pthread, and use the hook functions to communicate with your program via channels. It isn't immediately clear this would work (libevent's single page of documentation doesn't explain if it works when spawned inside a pthread).

wrapper for the libevent library





hardware-accelerated vector graphics library, suited to write visualization software.

There is a full version (with source code) and a free version (bytecode only).