GLFW: A Haskell binding for GLFW

[ bsd3, graphics, library ] [ Propose Tags ]

A Haskell binding for GLFW, a window system independent toolkit for writing OpenGL programs. For more information about the C library on which this binding is based, please see Note that this binding comes with an older GLFW C version 2.7.9 due to incompatible API changes in GLFW since 3.0 (for example, the removal of texture functions). If you want to use newer GLFW C versions, install Haskell package GLFW-b instead.

[Skip to Readme]




Automatic Flags

Dynamically link with GLFW C libray if your system provides it.


Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS] 0.2, 0.3, 0.4.1, 0.4.2,,,,,,,,,
Change log Changelog.txt
Dependencies base (>=3 && <4.13), OpenGL (>=2.1 && <4) [details]
License BSD-3-Clause
Maintainer Paul H. Liu <>
Revised Revision 1 made by Bodigrim at 2022-02-26T23:20:12Z
Category Graphics
Home page
Source repo head: darcs get
Uploaded by PaulLiu at 2016-04-01T03:31:54Z
Reverse Dependencies 6 direct, 8 indirect [details]
Downloads 17481 total (18 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2016-04-01 [all 1 reports]

Readme for GLFW-

[back to package description]
This is a Haskell module for GLFW OpenGL framework
( It provides an alternative
to GLUT for OpenGL based Haskell programs.

SOE ( now 
depends on this package.

The website for this Haskell module is at Haskell Wiki site:


See separate file "Changlog.txt".


The package comes together with a (partial) source distribution 
of GLFW v2.7.9, which is compiled and installed together with
the Haskell package.

If you already have the Haskell package cabal-install, you can
simply do "cabal install GLFW", and it will download the latest
source from HackageDB, configure, compile, and install it 

Otherwise, you may follow the standard Cabal package installation 

1. To configure the module, type

       runhaskell Setup.hs configure

       runhaskell Setup.hs configure --user --prefix=DIR

   if you want to install the package to your user's directory
   instead of the system one (replace DIR with your own directory

2. To build the module, type 

       runhaskell Setup.hs build

3. To install, type 

       runhaskell Setup.hs install   

In the process it builds all GLFW C library source code. You may
use "runhaskell Setup.hs build --verbose" to see the actual 
compilation steps.

4. Optionally to build its Haddock documentation, type

       runhaskell Setup.hs haddock


For Windows users, you may have to include GHC's gcc-lib directory 
in your PATH environment, e.g., c:\ghc\ghc-7.6.3\gcc-lib, before 
configuring the GLFW module, otherwise it'll complain about missing
program for ld.

For Linux users there is an option to link to a system wide GLFW 
dynamical library instead of compilation from source. It can be
done by providing "--flags=dynamic" as an option to cabal configure

For Mac users, unfortunately interactively running GLFW programs
from GHCi would result in a crash if you use GHC 7.6.3 or older. 
The only sensible way is to compile and run the program, or use
GHC 7.8 or newer. 

Package Usage

The package is tested with GHC 7.4.2 and GHC 7.6.3 on all
three platforms (Linux, Win32/MinGW, and Mac OS X). Though it may
work with older versions of GHC or even Hugs, they are not tested.

It installs a new Haskell package called "GLFW" and the actual
module to import is "Graphics.UI.GLFW". You'll need to pass 
"-package GLFW" to GHC if you want to compile it.

GLFW itself is well documented (see GLFW website), and the
Haskell module API is documented via Haddock. 

Not all functions are fully tested, and there are still a 
few GLFW C functions missing from the Haskell module, namely 
the image loading functions. They are excluded because image
handling is a separate issue, and low level buffer manipulation
would obscure their use further. Texture loading from TGA
format is supported both from file and from memory (via a
string buffer). 

The Haskell module also provides basic text rendering while
GLFW doesn't. It comes from a free 8x16 font which is made
into a TGA texture, stored as a Haskell string in the file 
GLFW.hs (also the reason for its big size). Text rendering
is only possible with Alpha enabled. Again, see SOE.hs from
the SOE package for sample usage.

GLFW doesn't work well with GHC threads, forkIO or threadDelay. 
So avoid them if you can.

Additional Information

You may send your bug report and feature request to the package 
maintainer: Paul H. Liu <>.

Lastest GLFW development is hosted in a darcs repository. You
may obtain it by

  darcs pull

There is also a mailinglist for GLFW deveopers at

Last Updated: Thu Oct 3 PST 2013