Can be used to add interactivity to any program.
Can work within an already existing event loop, for instance to add
GUI elements to a game.
Uses the SDL2 renderer library, which makes it quite fast.
Can deal with several windows.
Bogue is themable, and does not try to look like your
desktop. Instead, it will look the same on every platform.
Graphics output is scalable (without need to recompile), and hence
easily adapts to Hi-DPI displays.
Predefined animations (slide-in, fade-in, fade-out, rotate).
Built-in audio mixer.
Programming with bogue is easy if you're used to GUIs with widgets,
layouts, callbacks, and of course it has a functional flavor. It uses
when non-blocking reactions are needed.
Widgets are the building bricks, responsible for graphic elements that
respond to events (mouse, touchscreen, keyboard, etc.).
For a more "functional" use, they can be "connected" instead of
reacting with callbacks (see examples).
boxes with decorations (round corner, border, shadow, gradient
background, image pattern)
push button (with labels or images)
rich text display (bold, italics, underline), any TTF font can be used.
image (all usual formats, including SVG)
slider (horizontal, vertical, or circular)
text input with select and copy-paste
SDL area for free drawing with the whole SDL Renderer API
widgets can be combined in various ways into layouts. For instance, a
check box followed by a text label is a common layout.
Several predefined layouts are available:
sliders (horizontal, vertical, circular). Can be used as progress bars
scrollable lists (that can easily handle a large number of elements,
like one million)
multi-column tables with sortable columns
multiple tabs with slide-in animation
various menus (menu bar, drop down menus with submenus)
drop-down select lists
automatic tooltips can be attached to any element
Layouts can be animated (slide-in, transparency, rotation). All
layouts can be automatically resized when the user resizes the
window. Timeouts are available to execute arbitrary actions after
| demo, tab1 | demo, tab2 |
Using the opam package
It's the easiest way unless you want to try out the development
opam install bogue
That's it. But, if you want to stay in sync with the latest
developement, you can directly "pin" the github repository:
opam pin add https://github.com/sanette/bogue.git
(Then update/upgrade opam). And this can easily be undone with
opam unpin https://github.com/sanette/bogue.git
Building from sources
You need a working
ocaml installation with
opam, see the ocaml doc. Then, make sure
opam install dune tsdl tsdl-image tsdl-ttf
Get the latest source
unzip it, cd into the
bogue-master dir, and then:
dune build opam install .
It's good to first have a look at Bogue's
The public API can be found
You should first try a
examples directory contains more sophisticated examples. If you
bogue package with
opam (as described above), these
examples are available via the
boguex program. For instance, run
examples 34 and 41 by:
boguex 34 41
boguex -h to have the list of all examples.
A minimal app using Bogue
>= "0.9.7" & < "0.9.9"