luminance has been having lots of activity lately. I’ve been working (hard) on making it to the 1.0 release for months now and came to a very important realization: lots of changes have been done and I’m still not ready to release it. I’ve kind of lost myself in the process.

This article is about two main topics:

If you don’t care about the changes, feel free to go read this to know how you can learn about luminance and graphics programming in general.


Lately, luminance has received a wide range of feature additions, bug fixes and design ideas. I’ve been wanting to release all those changes as part of the 1.0 release but the thing is: among all the changes, some have been around on the master branch for months without a proper release on… because the 1.0 milestone was not reached. People have been moving towards luminance more and more and some provided feedback about using luminance. Happy but indecisive about what to do, I faced a dilemma:

I have decided to go with the second option.


Just before writing this article, the last luminance version was 0.30 — just for the record, that version is eleven months old, ~200 commits behind master. The new and most recent version is thus 0.31 and crates got updated:

Lot of work has been accomplished and I received several contributions from people all around the globe, including PRs and issues. I’d like to remind that I appreciate both and you are really encouraged to contribute in any way you want to. Special thanks fly to:

About that last point, my Reddit and Twitter interactions about luminance have been very interesting because I got to test the water about how people feel about luminance, especially when compared to (not so) similar crates, such as [gfx], glium or even gl. I came to the realization, after reading people and what they would love to have as a graphics crate, that luminance can have the role of the easy crate, that is not necessarily the fastest but fast enough to be quickly productive. I cannot help it but keep thinking about a simple question: if some people can make games in Java or C# with a garbage collector or using old tech like OpenGL 2.1 (yes, some people still make pretty good games with that), why would one need a perfect zero-cost abstraction down-to-the-metal unsafe ultra-optimized crate to write something? See, I went round and squares about that topic, because I’ve already used luminance in several projects of mine (mostly demoscene purposes), and it just does the job. So, yes, luminance doesn’t have that cool, new and modern Vulkan-type API, I must confess. But it has its own API, which is very functional-based (see the History section of luminance for further details about that) and, to me, modern enough so that people don’t get frustrated with the overall design being too clunky.

So, yeah. I gave up on the idea of introducing backends in luminance. I really changed my mind several times about that topic and it’s actually when I read comments on Reddit about people getting confused about the direction of the crate that I made up my mind: luminance must remain simple. Having a system of backends that can be hot-switched, concurrent etc. is just going to make things hard for people to use it — and maintain it! It’s likely that I will introduce, however, feature-gates to allow to compile luminance on WebAssembly via WebGL, OpenGL ES or even Vulkan at some point, but the difference is that no backend will be implemented. That means that those feature-flags aren’t likely to be summable at first. But all of this will be done in future releases; stay tuned.

The current blog post brings a description of all the changes of luminance-0.31. It should be the last 0.*.* version before hitting the 1.0 release. To the question:

Why not releasing 1.0 directly?

I answer that the 1.0 milestone has a backlog with two major changes that will take time to implement and I think it would be a pity to postpone a lot of great changes that are already available because of two features that are yet to be implemented. The concept of versions is to allow releasing features in a structured way without having to wait too much. So here we are.

This post also show cases a small tutorial about how to get started with luminance. The very first steps you should have would be to have a look at the examples/ directory and try to play with all of the samples.

Disclaimer: the following section of this article is based on luminance’s changelog.

Bug fixes

Major changes

Minor changes

Patch & misc changes

Learning luminance

I also spent quite a lot of time and energy working on two ways to learn luminance:

So far, I’m writing articles and the wiki is going to be updated let’s say, every week, if I find enough spare time. You can also tell me what kind of stuff you’d like to learn and do.

The official documentation is up to date but is not as good as I expect it to be. I will be adding patches versions to 0.31 to update it.

I hope you like luminance and will make a good use of it. And of course, keep the vibes!

↑ Announcement: luminance-0.31, luminance-derive and luminance-glutin
Thu Aug 29 13:12:00 2019 UTC