This package exposes several modules to work with GPUs in a stateless and type-safe way. Currently, it uses OpenGL as backend hardware technology but others will be added later on, such as Vulkan.

The initial unstable version is 0.1. Consider everything in that version as part of an experiment, even though the library should be free of bugs. If you find any, please report an issue. If you think something could be enhanced, feel free to fill in an issue as well.

One very important point is the fact that luminance has nothing to do with 3D engines or scene development kits. Don’t expect to find materials, lights or mesh loaders. It’s just a graphics framework initiated to fix the design choices of OpenGL. It won’t change in any other way.

luminance is a small yet powerful graphics API. It was designed so that people can quickly get their feet wet and start having fun with graphics in Haskell. The main idea is to unleash the graphical and visual properties of GPUs in a stateless and type-safe way.

This library doesn’t expose any architectural patterns or designs. It’s up to you to design your program as you want and following your own plans.


  • Relaxed lower bound of linear to accept linear-1.19.*. That changes should enable lumimance to be included into stackage.
  • Changed internal representation of Region.


Minor changes

  • Added texture arrays:
    • Texture1DArray
    • Texture2DArray
    • CubemapArray


Minor changes

  • Added several Uniform instances for linear.

Patch changes

  • Fixed the indexed render.
  • Fixed the vertex attributes being ignored.


Major changes

  • Changed the interface of texels transfer and filling. We dropped the Foldable instance and now require a Data.Vector.Storable.Vector for performance purposes.

Minor changes

  • Added MirrorRepeat constructor to Wrap.

Patch changes

  • Fixed prerequisites in README.


  • Fixed the sizeOf implementation of a :. b.
  • Added nubDirect, which can be used to turn direct geometry into indirect geometry.


Non-breaking changes

  • Added .gitignore.

Breaking changes

  • V2, V3 and V4 replaced by vec2, vec3 and vec4.
  • V is not anymore luminance’s. We use linear’s one, because it already has all the instances we need and is more generic. The interface is then impacted.


  • Added Core.Tuple into the export liste of Luminance for easier uses in client code space.

  • Fixed Geometry haddock documentation.

  • Fixed haddock escaping issues.


  • Added CubeFace in the interface.

  • Enhanced Texture documentation.


  • All textures can now be used in shaders.
  • Added support for more OpenGL textures – though, framebuffers are not impacted yet.
    • Texture1D
    • Texture2D
    • Texture3D
    • Cubemap
  • Changed the texture interface with type families so that we can add more in an easier way!


Breaking changes

  • Automatically insert GLSL pragmas in shaders.

Non-breaking changes

  • Added documentation for RenderCmd.
  • Added stdRenderCmd_.
  • Added shaderProgramBatch_.

  • Fixed a typo in the Graphics.Luminance documentation.


  • Added a tutoral in Graphics.Luminance.


  • Initial revision. Do not consider this revision as a stable release. It’s experimental. The first stable release will be 1.0.