GIMP / image editors GIMP 2.99.2 vs 2.10.x: which one do you pick?

Now that the GIMP team is back to releasing both stable and unstable updates, here is the question that a lot of people will be asking. Should they go for 2.99.2? Or should they stick to the stable 2.10 series? What can you realistically expect from this particular release of GIMP and upcoming GIMP v3.0 in general? Here is what I think you need to know to draw your own conclusion.

This article is a transcript of the video below.

Here is my obligatory disclaimer that I’m affiliated with the GIMP project, so you should take anything I say about it with a grain of salt.

GIMP 2.99.2 has been released and it actually comes with changes that are not available in the stable series which is 2.10. It also comes with a few regressions. So let’s talk about major differences.

Does it look better?

For some reason, there’s a popular opinion that GTK3, the user interface toolkit, is going to right many wrongs for GIMP in terms of user interface. This is partially true and partially false.

The new unstable series is based on a newer version of the user interface toolkit called GTK. This brings a variety of changes. The most important difference is that the unstable version of GIMP handles HiDPI displays vastly better because the support is built right into the user interface toolkit and thus there is no need to add ugly hacks. Simply put, if you have a 4K display, you should be fine now. If you have a FullHD laptop and an external HiDPI display and you use GIMP on both of them, you should be fine as well. Toolbox icons are not tiny, brush previews are not tiny and so on.

Icons size and assets preview size on HiDPI

Although, right now all I have here is a smaller HiDPI display, 2560 by 1440 pixels, and everything looks kinda huge to me, even with fractional scaling.

I also don’t really like numeric controls in GTK3. This will be evident, for example, in the updated slider widget where you get minus and plus buttons right next to the slider. It’s probably okay for simple desktop applications but it’s just horrible for cases like GIMP where these buttons occupy the space that would be otherwise used for showing more of the actual content. Users with touch displays might disagree with me though.

To give you more idea, here is the window of the Convolution Matrix filter from the unstable branch…

Convolution Matrix, GTK3

…and here it is from the stable branch based on GTK2.

Convolution Matrix, GTK2

With GTK3-based version, you simply don’t see as much of the content that you can preview on the canvas.

And if you look at the height of the sliders, it’s really not as good as what you know from the stable series on a HiDPI display. This was discussed in developers’ chat and the agreement seems to be that this can be remedied by introducing a small variation of the user interface theme.

Height of sliders

So in terms of user interface in this particular unstable release, it’s up to you to decide which one is more important to you: decent HiDPI support in terms of icons on a 4K display or the size of other widgets like sliders and spinboxes.

Does it work faster?

This is a ‘yes and no’ again. There are no changes to make, for example, filters work faster. This is mostly not on the GIMP’s side anyway, it’s up to the GEGL library which is the image processing engine.

However, the unstable series now features render caching. What it does is basically create a bitmap out of everything you see on the display: the projection of all layers, any display filters you might be using, the selection cue, if there is one, and so on.

Render caching

(Features Coffee Run poster by Hjalti Hjálmarsson, CC-BY 4.0.)

So when you zoom in on your project and you pan around, GIMP doesn’t have to rebuild all that for each new pixel that appears in the viewport. It just displays this pre-built cache. This basically means you get much snappier navigation which is essential when you work on large projects with a lot of layers.

Other than that, do not expect any major performance enhancements just yet.

Does it improve the editing workflow?

Yes, absolutely. One major change in the unstable series is the long anticipated support for multiple layers selection. If you need to move many layers to a layer group, you want this. If you need to color-tag a bunch of layers, you want this. If you want to assign a mask to multiple layers, you pray to god you’d be able to do that.

Multiple layers selection

Is this feature-complete? Not yet. Even though Jehan Pages rewrote about 90% of all code that is related to selecting items, and trust me — that’s a huge amount of work — there’s still more programming to do. A lot of features are made multiple selection aware but don’t allow changing multiple layers. So they will report they know there’s more than one layer selected, they just can’t do anything about it.

Are there any benefits for painting?

Indeed yes! Graphic tablets support in GTK3 is vastly better than what you get for software based on GTK2. One major change here is hotplugging of the devices. If you plug a graphic tablet to your computer and you already have GIMP 2.10 running, you have to save all your projects and restart GIMP for the device to become usable. And then, of course, you have to reopen your projects to resume your work.

Wacom hotplugging wiht GIMP 2.99

So once you plug e.g. a Wacom tablet into a laptop running the newly released unstable version of GIMP, the relevant devices show up in the Device Status dock immeidately, just like magic! :) So if you always have your tablet on your desk but you move around the house with just the laptop, you are going to appreciate this.

Does it improve resources management?

Not yet. There has been an important project in the pipeline for a few years now. Jehan Pages is working towards simplified management of all sorts of extensions: brushes, scripts, plugins and so on.

What the team has so far is the skeleton of a new dialog called Manage Extensions and support for a new file format called GEX, or GIMP EXtensions, that contains any kind of additional resources that can be installed.

Manage Extensions

One of the important missing bits there is an online backend to store extensions and allow searching for them from within GIMP and then installing them.

So the right answer to the question about better resources management would be ’eventually’.

Any color management improvements?

Yes, there are several major changes in this series that change how color management works.

The idea is that you can either work with images in their native color spaces (that is, taking into consideration primaries and transfer functions) or enforce sRGB which is kept for the sake of compatibility with old workflows but also because of the sheer ubiquity of sRGB. This work is not complete yet, there’s more to be done.


Now, the release notes mentions something called space invasion. I think this deserves a more verbose explanation, but for now, here is the general idea.

As you probably know, GIMP now uses a non-destructive image processing engine called GEGL but doesn’t yet expose any non-destructive features. In a non-destructive context, each modification, whether it’s cropping or a filter, is preserved as a node in a graph and can be altered at any time later. You just don’t get to see nodes or access them directly yet.

The layers dialog is a sort of familiar representation of some nodes in GIMP, and the on-canvas preview of most filters is provided by a temporary hidden node until it gets merged down into the edited layer. But that’s about it for now.

Hidden GEGL node

So, about that space invasion thing. Supposing you opened an image that is tagged with AdobeRGB color profile. Then you applied a bunch of filters to it, and some of those filters use LAB color model rather than RGB. So the data will be converted back and forth between different representations, also called pixel formats, quite a few times. But you do need your final image to still retain that AdobeRGB color space attribution.

GIMP now uses GEGL’s ability to send the information about the original color space across the whole node composition tree. Whether a filter works on RGB or LAB or HSV representation of data, it will also pass the color space information to the next node in the tree so that this information isn’t lost and GIMP can make sense of the data that the last filter in the chain generates.

GEGL graph rendered by GIMP

One of the things that apparently are on the TODO list for version 3 is fixing the magenta mess in the color selection dialog. GIMP still thinks all colors are in the sRGB color space, in fact that’s still assumed whenever you load GIMP color swatches. So whenever you dial a color that’s out of gamut, whole sections of color sliders get the magenta fill. Apparently, at least one of the active developers is willing to address that.

Magenta mess

It is highly unlikely that space invasion will end up in the stable 2.10 series. So if you do work on RGB images that have color profiles other than sRGB and you do some seriously heavy editing, version 2.99.2 might work better for you in that regard. The usual disclaimer about unstable releases still applies.

Are there more features in general?

Not many. There are some minor changes as compared to the stable 2.10 series. For example, the plugin to support HEIF and AVIF file formats has more features like selecting color subsampling/pixel format and encoder speed. But that’s as far as changes go so far. So, not much to look forward to. The plan to backport new features to the stable branch has made the stable branch a lot of fun but it also made using the unstable series considerably more boring.

Do you lose any features you know from earlier releases?

Sort of. Several old Python plugins have been moved to the gimp-data-extras package. So you can still have them, but you will also have to update the code to match API changes in the new series.

Speaking of which, all 3rd party plugins will have to be updated. So if you rely on something like BIMP or Resynthesizer in your workflow, you really should wait for their respective updates. Or take matters into your own hands, if you feel like doing so.

Does it finally support CMYK or non-destructive editing?

No, as you might have already surmised, while the image processing engine is capable of both these things, GIMP does not yet provide any user interface to that. Both features are planned for future releases and can already be worked on, but the existing team is stretched thin so you will either have to wait or begin working on that yourself.

Are there any benefits for plugin developers?

The answer is ’lots’! GIMP now relies on technology called GObject Introspection to access GIMP’s application programming interface. This made it cheap to add more languages you can write new plugins on. I’m talking about JavaScript, Lua, Vala, and the word on the street is that Rust might soon join the band. Some example code is available to study.


The other fun thing is that you can now directly access GEGL in your 3rd party plugins. In fact, there are a few such plugins written in Python already available on GitHub. Again, a great source of information for people interested in doing their own plugins.

There are more changes worth mentioning to developers and they are nicely covered in the official release notes.

What’s next?

It’s most likely that, for the rest of 2020 and at least the first half of 2021, the team will continue releasing both stable and unstable new versions of GIMP. At some point, perhaps next year, they will drop updating the 2.10 series and give their full attention to releasing version 3.0.

And in conclusion, I know for a fact that there will always be people who will be like, f— it, I’m switching to the unstable version anyway and you can’t talk me out of it. My only plea to you is that, rather than complaining on some bizarre forum no GIMP developer knows about, you would send sensible bug reports and do your best to test patches for the bugs that you discovered.

I think that pretty much covers it! :)

Artist credits: