Note: This website is archived. For up-to-date information about D projects and development, please visit

Rae is a GUI library

Rae is not ready yet™

Rae is moving to another place. And to another form. This version here will no longer be updated.
Basically I have ported Rae to another language. Don't get me wrong – I loved coding Rae in D. It was very very fast to get things running and working, and coding with D is pure pleasure. I was happy with even the overall performance of Rae and D in general. But the reason for me to change was a combination of many things. To put it briefly, as I started to create something that needed a bit more performance from the RTree library that I had poorly ported to D from Java (gulp), I started to see bugs and performance issues with the RTree library. Yes. Java style and D style don't mix very well, and it will give bad performance as the GC is constantly doing stuff.

My options were to get a new RTree library from some other source, such as C, or to port Rae to a language where a decent RTree library was already implemented. I'm not a person who could write such a thing myself. I searched for some C implementations, and I wasn't very happy with what I found. I looked at some C++ implementations, and they were, comfortable, fast, well tested and had very few issues.

So, I thought about it for a few weeks, and started testing the grass on the conservative side of programming. C++ with boost had some positive sides to it. I was sad that I wasn't able to do some things I loved about D, like initializing class members with a =. Or using methods as properties when calling them without parentheses. Or delegates. And I was sad to not be able to use such a beautiful library as Tango is. Tango hierarchy and documentation is really really good. Boost is ok, but not quite there yet.

I tried my best to create C++ equivalents for my coding practices in D. I found some okayish solutions to some things. But some things I just have to forget. I love the huge amount of libraries that are at my use, without creating bindings for them. I love the ability to create a cross-platform app (also possible with D), and to make universal binaries for Mac (I happen to have two PowerPC Macs which I'd really like to use still. And I'm sure others have them too, and no-ones supporting them). I hate many C++ quirks, but I think I'll just have to work around them.

I'll come back to D, or any other language with a reasonable name, when it abandons garbage collection and focuses on performance. I think D is a nice language, but in the end I'm too much performance oriented to use anything more high level than C++. I'd love something as low-level as C++, with a nicer syntax. Can anyone give me that? A precompiler of some sort, that is not too different from C++?

I guess I'm just shouting into the emptiness of the internet, but I thought it might be fair to state where this project is going. I'll keep Rae development going, and when it's ready to go open source again, I'll put it up somewhere. I'll leave this code here, until somebody wants to remove it.

NEW! Short screencapture of Rae

My commercial (small) application that uses Rae.

Please do join the project!


25th May 2011
Now builds on Windows with Tango 0.99.9. Atleast on my machine. Try the helloworld. Complain in the forums if it doesn't. Quick notes on building it

7th October 2010
The font rendering system has been changed from Pango to Freetype with a lot of help by the author of the Cactus font rendering library. The current SVN compiles with OS X and Linux (with Tango 0.99.8/GDC/DSSS bundle on Ubuntu 10.04). On Linux it looks like there's some colour issues with the new freetype system.

It would be nice, if you are working on Windows, and would like to try to find out why Rae is so slow after I changed to latest tango and a newer DMD.

General info

Rae will be a general purpose GUI library using OpenGL. It is cross-platform and already running on Linux, Mac OS X (X11/GtkD or GLFW) and Windows. It is mostly released under the X11/MIT licence. (Currently there are two blur functions which are LGPL, but I'm working on replacing those.) The external dependencies are currently LGPL, as well (such as gtkD), but I'll write more about that later.

Currently it's using the following libs/APIs:

  • OpenGL for fast drawing
  • gtkD for creating windows and getting user input.
    • Cairo for drawing vector graphics to OpenGL textures.
    • Pango for drawing unicode fonts. -> replaced with freetype now.
  • Alternatively (and especially on OS X) it is possible to use GLFW for creating a single window application.
  • Tango
  • DSSS for building

* To get the latest Rae source you can use subversion:

svn co rae_trunk

* You can post your comments and questions to the Rae forum, and I'll be happy to answer.

* Check out Testing Rae

Project History

This project was formerly known as Pihlaja. It has been renamed to Rae, and it has changed it's goal quite a lot. Rae is going to be a graphical user interface library. More information will be coming here, when I get the time.

Project Status

Development on this project seems to have stalled with changeset 166 on 2011-06-29.

Related Project

Starting Points

For a complete list of local wiki pages, see TitleIndex.