Plasma 5.20 is now in beta, which gives us one month of intense testing, bugfixing and polishing.

During this time we need as many hands on deck as possible to help with finding regressions, triaging incoming reports and generally being on top of as much as possible.

In order to make this process more accessible, more systematic and hopefully more fun we are going to run an official "Plasma Beta Review Day"


Any user of plasma able to install the latest beta or run a live ISO with our beta on it who want to help.


Thursday the 24th September; midday to midnight CEST, with people welcome to turn up and drop out whenever.


Join us in the webconferencing channel: The webserver we used for Akademy. There will be a room available.
You can join with a camera and a microphone or just in the classic text chat.

What will this consistent of?

  • Introductions to bugzilla for people who want support filing or triaging their first bugs
  • Being assigned short buglists to validate, de-duplicate, for those more experienced
  • Going through a defined list of all the new areas of Plasma to check for regressions
  • Devs being online so we can get debug info for issues you have so we can identify and fix things in real time

What should I prepare?

Ideally get yourself set up with a beta of the latest Plasma. Follow the links for: for an image running either master or Plasma 5.19.90

I hope to see you all soon!

About QtQuick and RHI

QtQuick, in one word, is amazing.

QtQuick, in slightly more words, is a scene graph implementation. At a developer level we create abstract "Items" which might be some text or a rectangle etc or a picture. This in turn gets transformed into a tree of nodes with geometry, "materials" and transforms. In turn this gets translated into a big long stream of OpenGL instructions which we send to the graphic card.

Qt6 will see this officially change to sit on top of the "Render Hardware Interface" stack, that instead of always producing OpenGL, will support Vulkan, Metal and Direct3D natively. The super clever part about it is that custom shaders (low level fast drawing) are also abstracted; meaning we will write some GLSL and generate the relevant shader for each API without having to duplicate the work.

This blog series gives a lot more detail:

Plasma code primarily interacts with Items and occasionally nodes, slightly above the level being abstracted.

Current State

Qt 5.15 ships with a tech preview of RHI and the Vulkan interface. I spent some time to set it up and explore what we need to do to get our side fully working. With some packages installed, a few plasma code fixes and some env vars set, I have a fully working Vulkan plasmashell.


Unsurprisingly it looks the same, so a screenshot is very unexciting. I enabled the Mesa overlay as some sort of proof.
The reason it shows 2fps is because plasmashell only updates when something has changed; in this case the textcursor blinking every 500ms.

Despite it being a preview it is in a damn good state! Things are usable, and really quite snappy, especially notification popups.

What needs work

Some things need work on our side, in particular:

  • All of our custom shaders need porting to the updated shader language.
  • Taskbar thumbnails use low level GL code that needs one extra layer of implementation.
  • Use of QtQuickWidget in systemsettings.

It means some elements are invisible or don't render with the full graphical effects, or in the last case, crash.

But in the whole scheme of things, everything is in a very encouraging state

What about KWin?

Whilst QtQuick is the cornerstone of plasmashell, systemsettings and so many applications, for historical reasons KWin made use of OpenGL before it was a mainstream part of Qt. Therefore this setup is mostly unrelated to KWin. Fortunately there's no reason these two have to be in sync.

Wrap up

This isn't usable for end users, and given it's only a tech preview upstream, this is not something we can ever expect to officially support within Plasma 5.

But we can start doing the prep work, also the current state is so promising I think we can deliver a native Vulkan experience to users on the first day of Plasma 6.


21 September, 2020

I’m happy to announce KTechLab release version 0.50.0. KTechLab is an IDE for microcontrollers and electronics. In this new release every user-visible functionality is the same as in previous releases, however, the codebase of KTechLab has been updated, so now it is a KF5/Qt5 application and it does not depend anymore on KDELibs4Support libraries.

This release should compile and run on systems where KDELibs4Support libraries are not available.

In its current state KTechLab’s codebase is ready for fixes and enhancements, as it only depends on modern libraries like KDE Frameworks 5 (KF5) and Qt5. As a side note, KF6 and Qt6 have been announced, and the first release of Qt6 has been scheduled to the end of 2020.

The release tarball of version 0.50.0 can be downloaded from KDE servers. Its checksums are:

SHA256Sum: cf0fe078f8afad7f3237a4e052dd2cace185d390a02f15ebe60cccabcbe8fdfe
SHA1Sum: ff80879ae2e36aa795b469dca50a2b565f3ab52b
MD5Sum: 5efe09b276fad08d74ead245a597797d

KTechLab has a mailing list at KDE called ktechlab-devel:

On IRC, developers are mostly reachable on, on #ktechlab channel.

The source code of KTechLab is available in KDE Git, at

Instructions for building and running KTechLab are available in the README file from the source code; online version of that file is available at ; The very short instructions are: run sh and then sh

The notes from joining KDE:

KTechLab bugs at KDE bugtracker:

Hello every one in the KDE planet and beyond, this is the progress weekly report on O².

So The week surprisingly started Monday and after the initial chock and accompanying usual work day at KDAB, I decided to do a little bit of progress on  O² style mock ups...

Started with progress bars in both radius variants tan bowth sizes variants as well and bowth color testing variants.

Its ok IMO but need to test and implementation in QML to be more sure about it. specially on the white variation it looks off.

 Tuesday was....  labels and drop boxes days, show in to way to layout labels for boxes and the acompaning multiple sizes colors and radius variations.











Wednesday was  first test/mock day with a spinner/ more on that Saturday..

Tuesday was the day I started to experiment with old desktop style check and radio boxes... WIP. they dont "Pop" much and it was intentional but need to balance it with the other elements... Another one that needs to be in QML

Friday was the day I worked on sound wave notifications for assistants... seamed like a great idea on my brain, but I'm not so sure i like it, after all this time (2 days is a very long time ) :faceplam emoicon






Finally yesterday i was supposed to work on the sound wave QML implementation but I got distracted by the implementation of a spiner/progess thingy... here playing with tension creation and release. only useful if we know the progress value.

Next week i will try to create a video for all of this... probably just screen-casting my work and inserting some side comments. kinda like this but maybe more fun

Finlay already said this the other day but,  have been posting  the progress every days on Instagram, (sorry for the blurriness)  in case you are interested in dally updates

cheers and see you all tomorrow next week...



20 September, 2020

This blog post provides a step-by-step example about how the conversion of a project to REUSE compatible license statements is done in practice. For my setup, I have a readily configured kdesrc-build environment.

First, I get out the most recent source code if the project I want to convert. For this tutorial, I use KTurtle, which is a nice and small application from KDE Education with just about 200 files.

Then I obtain the latest version of licensedigger and compile it:

kdesrc-build licensedigger

First I do a dry run to get an impression about how well the licenses are detected in KTurtle. But, well, it looks really bad:

$ /opt/kde/build/playground/sdk/licensedigger/licensedigger --dry kturtle/
Digging recursively all files in directory: "kturtle/"
"kturtle/CMakeLists.txt" --> "UNKNOWN-LICENSE"
"kturtle/doc/CMakeLists.txt" --> "UNKNOWN-LICENSE"
"kturtle/icons/CMakeLists.txt" --> "UNKNOWN-LICENSE"
"kturtle/org.kde.kturtle.appdata.xml" --> "UNKNOWN-LICENSE"
"kturtle/spec/assert_spec.rb" --> "UNKNOWN-LICENSE"
"kturtle/spec/boolean_operator_spec.rb" --> "UNKNOWN-LICENSE"
"kturtle/spec/empty_spec.rb" --> "UNKNOWN-LICENSE"
"kturtle/spec/expression_spec.rb" --> "UNKNOWN-LICENSE"
"kturtle/spec/for_spec.rb" --> "UNKNOWN-LICENSE"
"kturtle/spec/if_else_spec.rb" --> "UNKNOWN-LICENSE"
"kturtle/spec/kill_kturtle.rb" --> "UNKNOWN-LICENSE"
"kturtle/spec/learn_spec.rb" --> "UNKNOWN-LICENSE"
"kturtle/spec/math_spec.rb" --> "UNKNOWN-LICENSE"
"kturtle/spec/number_spec.rb" --> "UNKNOWN-LICENSE"
"kturtle/spec/repeat_spec.rb" --> "UNKNOWN-LICENSE"
"kturtle/spec/scope_spec.rb" --> "UNKNOWN-LICENSE"
"kturtle/spec/spec_helper.rb" --> "UNKNOWN-LICENSE"
"kturtle/spec/start_kturtle.rb" --> "UNKNOWN-LICENSE"
"kturtle/spec/string_spec.rb" --> "UNKNOWN-LICENSE"
"kturtle/spec/variable_assignment_spec.rb" --> "UNKNOWN-LICENSE"
"kturtle/src/CMakeLists.txt" --> "UNKNOWN-LICENSE"
"kturtle/src/" --> "UNKNOWN-LICENSE"
"kturtle/src/canvas.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/canvas.h" --> "UNKNOWN-LICENSE"
"kturtle/src/colorpicker.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/colorpicker.h" --> "UNKNOWN-LICENSE"
"kturtle/src/console.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/console.h" --> "UNKNOWN-LICENSE"
"kturtle/src/directiondialog.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/directiondialog.h" --> "UNKNOWN-LICENSE"
"kturtle/src/editor.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/editor.h" --> "UNKNOWN-LICENSE"
"kturtle/src/errordialog.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/errordialog.h" --> "UNKNOWN-LICENSE"
"kturtle/src/highlighter.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/highlighter.h" --> "UNKNOWN-LICENSE"
"kturtle/src/inspector.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/inspector.h" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/definitions.rb" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/echoer.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/echoer.h" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/errormsg.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/errormsg.h" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/executer.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/executer.h" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/generate.rb" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/interpreter.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/interpreter.h" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/org.kde.kturtle.Interpreter.xml" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/parser.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/parser.h" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/token.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/token.h" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/tokenizer.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/tokenizer.h" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/translator.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/translator.h" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/treenode.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/treenode.h" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/value.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreter/value.h" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreteradaptor.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/interpreteradaptor.h" --> "UNKNOWN-LICENSE"
"kturtle/src/main.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/mainwindow.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/mainwindow.h" --> "UNKNOWN-LICENSE"
"kturtle/src/sprite.cpp" --> "UNKNOWN-LICENSE"
"kturtle/src/sprite.h" --> "UNKNOWN-LICENSE"
Undetected files: 69 (total: 69)

What we get from this output is that apparently no license header is detected. This suspiciously looks like that we find a new kind of license header texts, for which licensedigger was not trained yet. Thus, I arbitrarily open one of the failing files, let’s say “kturtle/src/sprite.h”, and have a look at the header. The stated license header itself looks quite sane and clearly translates to the SPDX identifier “GPL-2.0-or-later:

Copyright (C) 2003-2008 Cies Breijs

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.

You should have received a copy of the GNU General Public
License along with this program; if not, write to the Free
Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.

Thus, I first try adding the missing license header text to the licensedigger database (see the licensedigger file for more explanation) or the commit with which I did this, which is this commit. But well, and this is surprising, when testing the license header detection by running the unit tests with “make test”, the header still is not detected… This is surprising. It turns out that tabulators for indenting license header texts are not supported yet. This is easy to fix, which is done in a follow-up commit. But if you ever land in a similar problem, just create an issue and point me to the source file that makes headaches! (Such problems are really a rare exception though!)

Now I run licensedigger again and check if there are files remaining which not correctly detected license headers, which is the case for me and I repeat the above steps. Finally, I get to the point where all stated licenses (and we cannot convert unstated ones; recovering missing license statements is a complete different topic) are correctly detected.

Finally, I run license digger in its conversion mode. Note that you can also run licensedigger many times on an already converted codebase and nothing bad happens; I simply prefer to distinguish between dry and conversion runs.

When that is done, the last remaining steps are:

  1. Review the changes licensedigger did to your source files (I like to use the command line tool “tig” for this, but there are many options).
    1. I commit the changes to the source files to have a base-line for possible manual edits.
    2. For KTurtle I actually manually formatted the license headers after the conversion to remove the tabulators. Unfortunately, there is not tooling yet for auto-format license headers (patches welcome 😉 )
  2. I add the new LICENSES/ directory to the Git repository, which contains the canonical license texts according to the REUSE specification. Moreover, I remove the now obsolete COPYING file, because that license text now is in the LICENSES directory.
  3. Finally, I can create a merge-request on, because it is always good to let somebody else check your work.

And as soon as it is approved and merged, another repository enters the shiny new world of REUSE compatible license statements. For more background about REUSE compatible license statements and the route we are following in KDE, you might want to have a look at the licensing howto wiki page.

Last year I wrote about some enhancements made to Okular’s annotation tool and in one of those, Simone Gaiarin commented that he was working on redesigning the Annotation toolbar altogether. I was quite interested and was also thinking of ‘modernizing’ the tool — only, I had no idea how much work it would be.

The existing annotation tool works, but it had some quirks and had many advanced options which were documented pretty well in the Handbook but not obvious to an unscrupulous user. For instance, if the user would like to highlight some part of the text, she selects (single-clicks) the highlighter tool, applies it to a block of text. When another part of text is to be highlighted, you’d expect the highlighter tool to apply directly; but it didn’t ‘stick’ — tool was unselected after highlighting the first block of text. There is an easy way to make the annotation tool ‘stick’ — instead of single-click to select the tool, simply double-click, and it persists. Another instance is the ‘Strikeout’ annotation which is not displayed by default, but can be added to the tools list.

Simone, with lots of inputs, testing and reviews from David Hurka, Nate Graham and Albert Astals Cid et al., has pulled off a magnificent rewrite of Okular’s annotation toolbar. To get an idea of the amount of work went into this, see this phabricator task and this invent code review. The result of many months of hardwork is a truly modern, easy to explore-and-use annotation support. I am not aware of any other libre PDF reader with such good annotation features.

Annotation toolbar in Okular 20.08.

Starting from the left, default tools are: Highlight (brush icon), Underline (straight line) and Squiggle (wobbly line), Strike out, Insert text (Typewriter), Inline note, Popup note, Freehand drawing and Shapes (arrows, lines, rectangles etc.). The line thickness, colour, opacity and font of the tools can be customized easily from the drawer. Oh, and the selected annotation tool ‘sticks’ by default (see the ‘pin’ icon at the right end of toolbar).

When upgrading to okular-20.08 from a previous version, it will preserve the customized annotation tools created by the user and make those available under ‘Quick annotations’, and these can be quickly applied using Alt+n (Alt-1, Alt-2 etc.) short cuts. It did reset my custom shortcuts keys for navigation (I use Vim keys gg to go to the first page and G to go to the last page), which can be manually added back.

Custom tools (Quick annotations) can be applied with short cuts.

Here is the new toolbar in action.


19 September, 2020

KTechLab git master doesn’t depend anymore on deprecated Qt5/KF5 APIs. Thank you for everybody who made this possible!

Using only up-to-date APIs should help with long-term maintenance of KTechLab and probably it helps distributors of KTechLab, too.

This was a pretty huge week for KDE. Apparently people had a lot of pent-up work, because right after Akademy finished last week, the floodgates started opening! Amazing stuff has been landing left and right every day this week! Some highlights are touch support in Dolphin, user-configurable per-view sort ordering in Elisa, optional Systemd startup, tons of Okular scrolling improvements, and much, much, much more.

Oh and meet Plasma 5.20’s beautiful new wallpaper, Shell:

Big thanks to Lucas Andrade for this beautiful wallpaper!

New Features

Dolphin now has full touch support! (Steffen Hartlieb, Dolphin 20.12)

Elisa now lets you sort each view by whatever criteria you want, and defaults to sorting albums by year (Matthieu Gallien, Elisa 20.12)

Konsole now has a “focus follows mouse” feature for its split views that you can turn on to automatically focus the split view that the cursor passes over (Luc Dufresne, Konsole 20.12)

For those of you who liked Kate’s previous tab behavior–where it shows a limited number of tabs and automatically orders them according to recency of access in the sidebar–you can now use it again (Christoph Cullmann, Kate 20.12)

Spectacle now has command-line arguments to include or exclude window decorations or the cursor, overriding whatever is defined in the config file (Nazer Kalinowski, Spectacle 20.12)

Filelight now offers you an easy way to exclude a folder from further indexing (Efe Çiftci, Filelight 20.12):

Plasma now optionally uses Systemd for startup (when Systemd is available), which brings numerous benefits such as faster startup and load times, no more odd race conditions during startup causing weird bugs, better session cleanup on logout ending the possibility of logout hangs, better logging of what’s going on, the possibility of using slices and cgroups to improve responsiveness and clarity in system monitoring apps, and much more. It’s a very exciting change! This is currently optional and off by default, but it will eventually be turned on by default (only where available of course) once the remaining kinks are worked out. (David Edmundson, 5.21)

The System Settings Shortcuts page now also shows you which shortcuts have been changed from their defaults when using the “Highlight changed settings” feature (David Redondo, Plasma 5.21)

Bugfixes & Performance Improvements

When scrolling in Okular with a finger on the touchscreen or a mouse drag with the Browse tool, the view no longer “sticks” slightly for the first few pixels of movement (Kezi Olio, Okular 1.11.2)

Okular no longer crashes when trying to open malformed PDF documents with the same digital signature on multiple pages (Albert Astals Cid, Okular 1.11.2)

Middle-clicking on a tab in Kate now closes it again (Christoph Cullmann, Kate 20.08.2)

In Kate’s “Save modified documents” dialog, the Cancel button is now focused by default as it should be (Alexander Lohnau, Kate 20.12)

When annotating a document in Okular, the annotation tool’s tooltip no longer gets mistakenly painted over the document in certain circumstances (Pedro Arthur Pinheiro Rosa Duarte, Okular 20.12)

Partition Manager now correctly modifies the /etc/fstab file after you make changes (Andrius Štikonas, Partition Manager 4.2.0)

The Ctrl+d shortcut no longer unexpectedly moves selected desktop items to the trash (me: Nate Graham, Plasma 5.18.6 and 5.20)

Improved the graphics performance on Wayland (Gang Wu, Plasma 5.20)

It’s now possible to drag windows on Wayland from their empty areas, just like on X11 (Vlad Zahorodnii, Plasma 5.20)

Discover no longer crashes when you visit its Settings page immediately after launching the app (Arjen Hiemstra, Frameworks 5.75 or Plasma 5.20, whichever one you get first)

Running a VNC server inside a Plasma session no longer crashes the Plasma session (Fabian Vogt, Plasma 5.20)

On Wayland, Plasma no longer sometimes crashes when you hover the cursor over an auto-hide Panel (Andreas Haratzis, Plasma 5.20)

Open and Save dialogs can now open and save files containing double quotes in their names (Andreas Bontozoglou, Frameworks 5.75)

It’s once again possible to set custom shortcuts that use the Tab key (David Edmundson, Frameworks 5.75)

Updating icon themes installed using the Get New Icons window now works (Alexander Lohnau, Frameworks 5.75)

Saving a file with a name that begins with a colon no longer causes the file to be saved to the base level of your home folder rather than wherever it is what you actually tried to save it to (Ahmad Samir, Frameworks 5.75)

User Interface Improvements

Single-line text in Elisa’s list-style views is now vertically centered as expected (me: Nate Graham, Elisa 20.08.2)

Elisa’s playlist sidebar now turns into a collapsible drawer on mobile or with a very narrow window, which means it’s no longer ever accessible (Stef Lep, Elisa 20.12)

Okular’s recently-added smooth scrolling animated transitions now respect the global animation speed multiplier, which means that people who hate animations and have then turned off globally now don’t have to live with the animated scrolling effects in Okular any longer. We still plan to add an off switch in Okular itself for people who want to disable smooth scrolling in just Okular or are using Okular on non-Plasma platforms (me: Nate Graham, Okular 20.12)

Discover now provides feedback on Arch-based distros when there is a dependency problem preventing updates from being installed (Aleix Pol Gonzalez, Plasma 5.20)

KRunner now prioritizes apps higher than System Settings pages in the results view when there are matches for both (Harald Sitter, Plasma 5.20)

When you try to assign a shortcut on the System Settings Shortcuts page that’s already used, you’re now warned immediately rather than only when you click the “Apply” button (David Redondo, Plasma 5.20)

System Settings’ sidebar view now displays little arrows for list items which are top-level categories containing other items (me: Nate Graham, Plasma 5.20)

You can now middle-click on the Night Color applet to toggle the feature on and off (David Edmundson, Plasma 5.20)

The Battery applet now shows the brightness percentage (Eugene Popov, Plasma 5.20)

VPN-related notifications and network authentication dialogs now use clearer and more consistent terminology (me: Nate Graham, Plasma 5.21)

It’s now possible to configure a keyboard shortcut in Kate to paste the text that was last selected by the mouse (usually you middle-click to paste this text) (Jonathan Poelen, Frameworks 5.75)

How You Can Help

Have a look at to discover ways to be part of a project that really matters. Each contributor makes a huge difference in KDE; you are not a number or a cog in a machine! You don’t have to already be a programmer, either. I wasn’t when I got started. Try it, you’ll like it! We don’t bite!

Finally, consider making a tax-deductible donation to the KDE e.V. foundation.


18 September, 2020

Color theme? What?

The KSyntaxHighlighting framework provides support for color themes.

These color themes specify all colors (text/background/selection/…) and font style roles (italic/bold/…) that are used for the highlighting. The definition happens in some easy to understand JSON file format.

Starting with the upcoming KDE Frameworks 5.75 release, all KTextEditor framework based application will support these color themes for their embedded editors.

This includes Kate & KWrite, but naturally a lot more, like for example KDevelop, Kile and RKWard.

Beside using the themes, all these applications will allow you to create own themes based on the bundled ones. The created themes will be stored in the new JSON format of KSyntaxHighlighting and can be used as is for e.g. submission to us.

How was it before Frameworks 5.75?

Before 5.75, KTextEditor already had support for color themes (or schemes). But we just shipped a very limited amount (as KConfig based bundled configs).

We only had Breeze & Solarized (as Light and Dark), a Vim Dark and a Printing theme.

There were no real additions of new themes in the past years, thought some are sprinkled around the internet.

How will 5.75 change that?

The 5.75 KSyntaxHighlighting framework release will at least feature all themes we had before and in addition:

  • Dracula
  • ayu Dark
  • ayu Light
  • ayu Mirage
  • gruvbox Dark
  • gruvbox Light

Beside this, Vim Dark got some overhaul to be more consistent with the real Vim theme it is based on.

This means we have now already doubled the number of themes an user can choose between on a default installation.

I think this is a nice improvement. Thanks to all people that did help to make this possible!

For preview renderings of all themes we offer, visit our color themes page. This page is auto-generated and will be periodically updated with the current state of the master branch of KSyntaxHighlighting.

For people just reading this post, here an preview of ayu Mirage:

 * SPDX-FileCopyrightText: 2020 Christoph Cullmann <>
 * SPDX-License-Identifier: MIT
#include <string>
#include <QString>
// END
 * TODO: improve documentation
 * @param magicArgument some magic argument
 * @return magic return value
int main(uint64_t magicArgument)
if (magicArgument > 1) {
const std::string string = "source file: \"" __FILE__ "\"";
const QString qString(QStringLiteral("test"));
return qrand();
/* BUG: bogus integer constant inside next line */
const double g = 1.1e12 * 0b01'01'01'01 - 43a + 0x11234 * 0234ULL - 'c' * 42;
return g > 1.3f;

The future => We want more, please help out!

With the recent additions we already cover some more well known text editor color themes. But if you just search a bit around the internet or look what other text editors ship per default, we still lack a lot of well known ones.

For example even our GitLab instance provides the Monokai theme in the configuration for its web highlighting that we still lack.

Therefore, we are eager to get submissions for more MIT licensed color themes we can bundle with KSyntaxHighlighting.

All users of applications using this framework will enjoy to be able to choose between more themes with ease if you help us!

Therefore, take the chance and help us out, provide some more themes as merge request.

License must be MIT, this seems to be no problem for most themes out there, at least it seems most of the ones I stumbled over are MIT licensed.

If you need to have some template how such a submission shall look, here the requests that got merged for the ayu themes and the gruvbox themes.

We have some development issue open that tracks a bit what happend so far.

But please don’t just show there up to say “hey people, I want to have theme X”. This is not helpful ;=)

Just searching for “popular text editor color themes” or something like that already gives a good idea which themes people yearn for. We don’t need some more pointers.

What is helpful is to show up with a MIT licensed theme as a merge request, as seen above.

Hope to see more themes submitted, scratch your own itch, but please contribute the stuff back to us upstream!


17 September, 2020

We are happy to announce the release of Qt Creator 4.13.1 !