KDE Frameworks 5.88.0

Saturday, 13 November 2021

KDE today announces the release of KDE Frameworks 5.88.0.

KDE Frameworks are 83 addon libraries to Qt which provide a wide variety of commonly needed functionality in mature, peer reviewed and well tested libraries with friendly licensing terms. For an introduction see the KDE Frameworks release announcement.

This release is part of a series of planned monthly releases making improvements available to developers in a quick and predictable manner.

New in this version


  • Add Android CI


  • Add GATT Client functionality
  • Generate pkgconfig file

Breeze Icons

  • Bug 404810 add flatpak packages mimetype icon
  • Bug 444452 Custom folder icons
  • Use reference to a QString to avoid copying, fixing a warning
  • BUG: 395569 places icon use ColorScheme colors (bug 395569 places icon use ColorScheme colors)
  • Add RTL logout icons
  • Missing color scheme usage at some icons
  • BUG: 174203 add mail-download-now and mail-download-later icon (bug 174203 add mail-download-now and mail-download-later icon)
  • BUG: 436931 update anacondainstaller icon to respect fedora logo (bug 436931 update anacondainstaller icon to respect fedora logo)
  • Fix the dark install directory for installing colored icons (bug 444095)
  • Install colored icons sizes into breeze-dark them as well (bug 444095)
  • Make some of the 22 px places icons actually be 22 again
  • Add Kongress icon fix grid alignment
  • Fix color of 16px im-user-offline icon (bug 443658)
  • Optimize places 16 and 22px icons
  • BreezeIcon additional app icons most are for math apps
  • BreezeIcons add task-process icons for kalendar app task view
  • Add Joplin icon
  • Add syncthing icon
  • Move all of /preferences to icons, remove it from icons_dark
  • Fix scalable test to check breeze for breeze-dark
  • Make breeze-dark inherit from breeze

Extra CMake Modules

  • Fix Wayland_DATADIR when cross-compiling
  • [android] Extend NDK workaround to version 22
  • msvc: Fix __cplusplus value
  • Fix ECM on systems without PyQt5 on Python 2
  • ECMFindQMLModule: Use QT_HOST_BINS to find qmlplugindump
  • FindQtWaylandScanner: Use QT_HOST_BINS to find qtwaylandscanner
  • ecm_add_test: add -DQT_FORCE_ASSERTS to compile flags by default

KDE Doxygen Tools

  • Handle uppercase directory names (bug 441560)
  • Remove whitespace in generic type definitions


  • Add Android CI
  • This framework is now LGPL-2.0-or-later


  • Correct platform specification - we can be built on Android as well


  • Dirty fields and update observers in Event and FreeBusy
  • Dirty fields and update observers in Incidence
  • Dirty updates in IncidenceBase
  • Move IncidencePrivate and IncidenceBasePrivate to headers
  • Simplify IncidenceBasePrivate constructors
  • Rename incidence classes from Foo::Private to FooPrivate
  • Copy improvements in recent changes to Event etc
  • cmake: Port to using libical’s cmake scripts


  • KPluginSelector: Make sure to check if metaData/moduleInfo is valid before accessing it
  • KPluginSelector: Allow KCMs to be loaded using X-KDE-ConfigModule keyword
  • Remove unused internal method in KPluginSelector
  • Deprecate KCModuleInfo in favor of KPluginMetaData API
  • KCMultiDialog: Use deprecation macros to wrap internal KCModuleInfo API usage
  • KCModuleLoader: Deprecate overloads using KCModuleInfo
  • KPluginSelector: Port internally deprecated KCModuleInfo usage
  • KCModuleProxy: Deprecate KService/KCModuleInfo overloads for constructor


  • New KCompletion::setSorterFunction() to allow custom sorting by providing function (bug 442717)


  • Exclude new enum-overload from python bindings build
  • Enforce KAuthorized enums being not 0
  • Create enum to to authorize common keys
  • Do not try to generate python bindings for KConfigGroup::moveValuesTo
  • Create utility method for moving entries from one group to another


  • Fix auto color scheme switching
  • [kcolorschememodel] Expose color scheme id
  • [KCommandBar] Additionally sort commands by name (bug 443731)
  • [KCommandBar] Don’t display an indent for an icon if no item has an icon (bug 443382)
  • [KCommandBar] Skip actions with empty text (bug 443732)
  • Read proper color setting on Windows (bug 443300)
  • [KCommandBar] Show information about a command in a tooltip (bug 438735)


  • Adressee: use a vector instead of a QHash with ~8 elements
  • VCard: Replace QMap with a vector of struct
  • Addressee: deprecate insertEmail() and add a new method instead
  • VCardTool::addParamter() should take by pointer
  • Deprecate parameters/setParameters() from the public API
  • Deprecate the unused Field class
  • Replace country <-> iso code mapping with the new KI18nLocaleData
  • VCardParser: less temporary allocations
  • Don’t use QTime::fromString() with format being a string
  • Don’t use QDate/QTime::fromString() with a string format arg
  • Perf: Manually parse timezone offset
  • VCardTool::createVCards(): split Adressee-related code to a separate method
  • VCardTool::createVCards(): split Adress-related code to a separate method


  • KPluginFactory: Provide more context for warning
  • Add comments describing checks made before registering plugin
  • Move utility method to read translated json values to dedicated header
  • Improve deprecation docs of KAboutData::programIconName
  • kcoreaddons_add_plugin: Avoid clash if app name and plugin namepace are the same
  • K_PLUGIN_CLASS_WITH_JSON: Use name provided by kcoreaddons_add_plugin for factory
  • Port internal readStringList usage
  • Deprecate KPluginMetaData::readStringList in favor of value overload
  • Discard KPluginMetaData::value overloads for python bindings
  • KPluginMetaData: Add overload to interpret char array as string
  • KPluginMetaData: Add overloads to read int and bool value
  • merge the util’s config.h


  • Move more Linux-specific functions under #ifdef Q_OS_LINUX
  • Add CMake option to build without X11
  • Use imported target for X11


  • GridDelegate: don’t let labels overflow (bug 444707)
  • Use a readonly property to control KCM margins
  • [configmodule] Deprecate aboutData
  • [ConfigModule] Allow creating KCMs without KAboutData
  • [ConfigModule] Deprecate ctors that take KAboutData and KPluginMetaData
  • Don’t explicitly build shared libs
  • Expose KAuthorized enum as dynamic properties to QML
  • KCM GridDelegate: Display a blue line when the delegate has active focus


  • Utilize KPluginMetaData::value overloads


  • Fix wrong testcase
  • [FFmpegExtractor] Remove FFmpeg 2.x/3.0 support, handle deprecations
  • Fix version checks in FindFFmpeg.cmake
  • [DublinCore] Also test terms namespace
  • [PopplerExtractor] directly use getters provided by poppler


  • Properly split exec line args (bug 444730)

KDE GUI Addons

  • Remove unneeded lambda capture, fixing a compiler warning


  • Correct Name of last day of daylight saving time (bug 444615)
  • Fixed typo on holiday_mx_es
  • various holiday_* - assign explicit names for subregions
  • holidays/holidays.qrc - remove trailing white-space
  • Remove unneeded fstream include
  • removed shabs
  • added pakistan holidays


  • Don’t discard non-conflicting substring matches
  • Fall back to the compile-time detected iso-codes location
  • Use unique_ptr instead of managing memory manually
  • Load Qt translations even if some catalogs are missing
  • Add KCountry[Subdivision]::operator!=
  • Forward declaration needs a matching export macro on Windows
  • Extend README to cover the new features
  • Move the new country/country subdivision/timezone code into its on library
  • Add QML API for KTimeZone
  • Add QML bindings for country/country subdivision API
  • Fix offset overflows for ISO 3166-2 name lookups
  • Integrate the Unicode normalization and prefix matching from KContacts
  • Cache iso codes cache sizes
  • Implement KCountry::fromName()
  • Add timezone lookup by geo coordinate, and timezone to country mapping
  • Make use of the spatial index for countries and subdivisions
  • Generate spatial index for timezones/countries/country subdivisions
  • Implement timezone by country (subdivision) lookup
  • QGIS Python scripts for generating country/timezone lookup tables
  • Add country and country subdivision lookup and translation API


  • Add QIcon::fallbackThemeName() as fallback
  • Fix @since marker
  • Include a test for properly testing icon recoloring
  • Also highlight charged text colors (bug 442569)
  • Use KIconColors to re-color icons
  • Make icon colouring a per-icon property rather than a system (bug 442533)
  • Create a d-pointer for KIconEngine
  • [KIconDialog] Also apply edge padding vertically
  • Ensure we retrieve our dependencies on Android


  • Relicense framework from LGPL-2.0-only to LGPL-2.1-or-later


  • Remove code for loading libkdeinit5_foo.so modules


  • PasteDialog: fix data pasting in Wayland (bug 421974)
  • Find LibMount when building statically
  • kdeinit is gone, use KDE_SLAVE_DEBUG_WAIT in kioslave instead
  • [KFilePlacesModel] Specify which data roles have actually been changed
  • Deduplicate KCoreDirLister before going through them
  • Use CMake to check if copy_file_range() is available
  • file_unix: make the read/write loop the same as the copy_file_range one
  • file_unix: let copy_file_range() manage the fd’s offsets
  • file_unix: emit processed size change after each copy_file_range() call
  • file_unix: only update sizeProcessed once per iteration
  • KDiskFreeSpaceInfo: Remove redundant deprecation #if
  • Deprecate KDiskFreeSpaceInfo
  • fix KTerminalLauncherJob working with exec
  • file_unix: fix copying status report
  • file_unix: Refactor copy()
  • KMountPoint: revert to parsing /dev/disk/by-{uuid,label}/ manually (bug 442106)
  • CopyJob: handle the no-op case of symlinks on FAT partitions (bug 442310)
  • SkipDialog: adapt buttons to more use cases
  • Port to enum values for KAuthorized::authorize
  • KUrlCompletion: Disregard the trailing slash when sorting directory paths (bug 442717)
  • Deprecate Scheduler::publishSlaveOnHold as well
  • Remove the last use klauncher in slave.cpp
  • Remove cmake option KIO_FORK_SLAVES
  • KFilePropsPlugin: Allow to edit properties when setFileNameReadOnly is set (bug 441847)
  • Add easy Invent repo search
  • Add invent web search keyword
  • kcm_cookies: Embed json metadata
  • kcm_webshortcuts: Embed json metadata
  • kcmproxy: Embed json metadata
  • kcmtrash: Embed json metadata and drop X-KDE-PluginKeyword usage
  • scheduler: reorder to avoid the need for fwd-decl functions
  • [KUrlNavigator] Fix first button text for local paths
  • kuriikwsfiltereng: Fix quitting match logic if accidentally bang syntax is used (bug 437660)
  • kurifilter: Add test to check if bang syntax is preferred
  • Deprecate KAutoMount/KAutoUnmount
  • file_unix: Fix endless loop during xattr copy (bug 441446)
  • Improve “trash is full” error message (bug 442865)
  • Don’t use kdoctools on Android
  • KDesktopPropsPlugin: open “Advanced Options” dialog with show()
  • Adjust dependencies for Android


  • Fix missing titlebar on ApplicationWindow modals in Windows
  • NavigationTabButton: Set minimum width and wrap text
  • Icon: Use icon-png as the default placeholder instead of icon-x-icon (bug 444884)
  • Remove the no longer existing Units.qml file from the qrc files
  • Add missing AboutItem to to the qrc files
  • Cleanup FormLayout
  • reliably drop component pools (bug 429027)
  • [GlobalDrawerActionItem] Dim when disabled
  • Small improvement in Api doc
  • Pass properties when creating a dialog for pushDialogLayers
  • Fix context drawer being inaccessible on secondary layers in mobile mode
  • [PageRow] Fix variable shadowing
  • [ActionTextField] Doc: Reword nullable field to an empty list
  • [Breadcrumb] Fix breadcrumb position on content change
  • Improve look of FormLayout section headers
  • Fix punctuation/whitespace of runtime rate-limited deprecation warnings
  • Always allow sidebar handles in header by default
  • remove duplicated frile
  • NavigationTabBar: Support actions that have mnemonics
  • Heading: Lower all sizes
  • Fix issues with setting components on tablet


  • Take into account a possible QLocale::setDefault() override


  • Handle all cases in switch(KJob::Unit) expressions to fix a compiler warning


  • Do no longer remove -Wsuggest-override flag


  • Port to enum values for KAuthorized::authorizeAction
  • Make sure that we query KService with lowercase desktop names since it seems that KService stores everything lowercase (bug 417575)


  • Fix Windows build
  • warn when notifybypopup has pending notifications on destruction
  • Add KNotifications QML plugin
  • KWindowSystem is also not required on Android - but unlike Phonon is also needed on Windows
  • Phonon is not required for KNotifications on Windows or Android

KPackage Framework

  • Allow KCM kpackages to use metadata of C++ plugin
  • Utilize std::optional to check if we have already searched for a KPluginMetaData object
  • KPackage: Copy KPluginMetaData object when copying d-ptr


  • Deprecate unused & internal method
  • PartLoader::createPartInstanceForMimeType: Port inlined code from hack
  • Un-Overload KParts::BrowserExtension::selectionInfo signal


  • Emit deprecation warnings for central Kross::Manager class


  • Deprecate RunnerManager::allowedRunners method


  • Use KSERVICE_ENABLE_DEPRECATED_SINCE in header instead of BUILD variant
  • cmake: Remove intermediate copy targets
  • kservice.h: Silence deprecation warnings in inlined, deprecated code


  • ViMode: Dont respond to doc changes when vi mode is disabled for view
  • Expand katepart metadata (bug 444714)
  • Set metadata when creating katepart (bug 444714)
  • TextFolding::importFoldingRanges: get rid of UB (bug 444726)
  • KateFoldingTest: don’t leak ViewPrivate
  • Simplify DocumentCursor::setPosition
  • Highlight Folding Markers
  • #37 Improve the context menu for selections
  • Make the regex search fast
  • Improve Appearance > Borders Dialog
  • KateRenderer: Check for m_view being null in more places
  • Fix leaving selectionByUser state
  • Do not cancel mouse selection when using the keyboard
  • [KateIconBorder] Handle annotations context menu
  • Enable enclose selection by default for brackets
  • Dont indent the lines if line already has text + noindent
  • Improve Open/Save Advanced Dialog
  • Better General dialogue for text editing settings
  • [KateIconBorder] Add context menu


  • Correct the eglQueryWaylandBufferWL_func prototype


  • KTitleWidget: Lower all sizes
  • KSqueezedTextLabel: Fix clipped characters (bug 442595)
  • KMessageDialog: fix setButtons() being called twice
  • KMessageDialog: disconnect default buttonbox signals as we emit done() manually (bug 442332)


  • Fix the compiler warning by casting int to unsigned
  • Link privately against XCB when building statically (bug 441266)


  • Migrate “State” config entry to state config group if available
  • Allow apps to opt-in storing state data in separate file (bug 397602)
  • [ci] Remove unused kwindowsystem dep


  • Introduce VoiceInterface Type
  • Add signals to watch for interface changes
  • Fix DBus signal connection


  • cmake: use imported targets

Plasma Framework

  • Deprecate KServiceTypeTrader containment action loading
  • Deprecate standardInternal*Info methods
  • Avoid creating a Theme object for every icon fetch
  • Introduce dismissOnHoverLeave property and toolTipVisibleChanged signal (bug 444142)
  • Deprecate plugin export macros in favor or K_PLUGIN_CLASS_WITH_JSON
  • PC3 SpinBox: improve visuals and behavior, remove drag to change value
  • Deprecate parentApp parameter in PluginLoader::listAppletMetaData
  • PC2 ScrollViewStyle: fix scrollbar sizing
  • PC3 TextField: Make focus frame not delayed
  • PC3 Slider: get rid of HoverFocusSvgItem
  • PC3 CheckIndicator: only show focus visuals for visualFocus
  • PC3 Slider: fix tickmark positions
  • PC3 ScrollView: remove ability to show background in onCompleted
  • PC3 private/RaisedbuttonBackground: disable shadow when disabled
  • PC3 private/ButtonBackground: reduce opacity when disabled
  • Breeze button: Use more realistic shadow
  • PC3/Breeze progressbar: update style, improve implicit sizing
  • Breeze line: removed built-in blank space, simplify
  • Breeze button: Use solid backgrounds for raised button pressed graphics
  • PC3/Breeze sliders: add solid background, handle shadow, fix pixel alignment, fix vertical groove height
  • PC3/Breeze scrollbar: update style and behavior
  • PC3/Breeze radiobutton: improve style
  • PC3 Control: use better implicit size calculation
  • Fix crash in WindowThumbnail::updatePaintNode() (bug 444015)
  • ExpandableListItem: Finally fix expanded height calculation permanently (bug 443755)
  • Properly discard window texture provider when thumbnail item shows only icon
  • Have Containment::restore also call its parent’s Applet::restore
  • Simplify code by using KPluginMetaData::value overloads
  • Prevent tooltips from being incorrectly dismissed (bug 434657)
  • Split window texture provider from window texture node (bug 439681)
  • Make tab/right move focus to default action button or expand button
  • Heading: sync with Kirigami version
  • Ensure context menu is PC2.Menu, and open it relative to the item
  • Fix context menu opening
  • Add keyboard navigation to ExpandableListItem
  • ScrollView: Do not overlay scrollbars over contents (bug 443173)
  • PC3 Button/ToolButton: use down instead of pressed for background graphics
  • PC3 TabButton: Add focus underline to label
  • PC3 TabButton: Use IconLabel, set padding from theme, show background when no tabbar
  • PC3 TabBar: improve implicit sizing, support spacing, remove pointless background, use 0 highlightResizeDuration
  • breeze: increase tab top/bottom margins
  • breeze: fix wrong element IDs for north tab margin hints
  • PC3 Slider: set implicit handle size, separate hover/focus from shadow
  • breeze: update slider style (bug 355889)
  • PC3 private/IconLabel: simplify properties, add convenience display properties
  • PC3 TextField/lineedit.svg: Add focus frame for visualFocus
  • breeze: update button style
  • breeze: update checkbox and radiobutton style (bug 355889)
  • Use onPositionChanged instead of onContainsMouseChanged in ExpandableListItem
  • Corona: save after ending edit mode
  • Heading: Lower all sizes
  • Add scroll support to calendar component in plasma frameworks
  • PC3 checkbox/radiobutton/switch: left align IconLabel
  • PC3 ToolTip: ceil label size
  • PC3 ToolTip: fix pressed/hovered undefined error
  • PC3 ToolBar: set spacing, remove pointless contentItem
  • PC3 TabButton: set spacing, remove pointless background item
  • PC3 DialogButtonBox: fix property undefined error
  • PC3 ComboBox: make text field use parent palette, modernize code
  • PC3 ComboBox: set cursor delegate to null instead of undefined
  • PC3: Use shared Icon+Label implementation
  • PC3 ComboBox: account for indicator and content size better
  • PlasmaCore Units: Fix sizeForLabels icon size
  • PC3: improve implicit sizing
  • PC3 ButtonBackground: Don’t load the background we aren’t using
  • PC3 Button: use same check for color group as ToolButton
  • PC3 button backgrounds: remove TODO for required properties


  • Decrease the preferred size for PDF417 barcodes
  • Add PDF417 barcode support


  • cmake: Use custom command instead of custom target for copy
  • Set a title for JobDialog (bug 444205)
  • Improve job window buttons (bug 444145)
  • Fix whitespace punctuation in a warning
  • email: Ensure we don’t crash when there’s no mailto preferredService (bug 443788)
  • Make sharing via Telegram work again


  • Pane: add missing Kirigami import
  • Add Pane control
  • Remove some id, this should improve the performance
  • Do not set the palette for every component (bug 406295)
  • [TextFieldContextMenu] Fix null property accesses
  • [TextFieldContextMenu] Free the action function after running it
  • Only re-compute the icon when it’s necessary
  • Don’t change MenuItem’s arrow’s color when selected (bug 443453)
  • Use KIconColors to color icons
  • Implement Spellchecking using Sonnet for TextArea


  • Implement ARM specific CPU info


  • Build examples only when BUILD_EXAMPLES is on
  • Fix applying highlighter in quick document
  • data/parsetrigrams.cpp: ensure the output is deterministic
  • Don’t crash on null textDocument if suggestions are invoked
  • Add missing qmldir
  • Implement QtQuick bindings for Sonnet

Syntax Highlighting

  • ’ is a valid identifier part
  • Fix the colors of modified and saved lines
  • cmake.xml: Recognize CMake provided modules and functions/macros
  • Remove *.nix files from Bash syntax
  • Add Nix highlighting
  • debchangelog: add Jammy Jellyfish
  • update refs to improved Dockerfile highlighting
  • bash.xml: Add Exherbo script file extensions recognized as bash
  • dockerfile.xml: Use bash syntax for shell form of commands
  • Specify byproducts for ExternalProject_Add call
  • cmake.xml: Improvements to highlighting
  • Add support of YAML in Fenced Code Blocks in Markdown
  • Update GNU Assmebler syntax
  • merge loadhighlightingdata_p.hpp with highlightingdata_p.hpp and rename KSyntaxHighlighting::loadContextData() to HighlightingContextData::load()
  • add comments and inline in the header some functions
  • loading rules in 2 parts to reduce the final memory used

Security information

The released code has been GPG-signed using the following key: pub rsa2048/58D0EE648A48B3BB 2016-09-05 David Faure faure@kde.org Primary key fingerprint: 53E6 B47B 45CE A3E0 D5B7 4577 58D0 EE64 8A48 B3BB

Installing binary packages

On Linux, using packages for your favorite distribution is the recommended way to get access to KDE Frameworks. Get KDE Software on Your Linux Distro wiki page

Compiling from sources

The complete source code for KDE Frameworks 5.88.0 may be freely downloaded. Instructions on compiling and installing KDE Frameworks 5.88.0 are available from the KDE Frameworks 5.88.0 Info Page.

Building from source is possible using the basic cmake .; make; make install commands. For a single Tier 1 framework, this is often the easiest solution. People interested in contributing to frameworks or tracking progress in development of the entire set are encouraged to use kdesrc-build. Frameworks 5.88.0 requires Qt .

A detailed listing of all Frameworks and other third party Qt libraries is at inqlude.org, the curated archive of Qt libraries. A complete list with API documentation is on api.kde.org.

Get Involved

Those interested in following and contributing to the development of Frameworks can check out the git repositories and follow the discussions on the KDE Frameworks Development mailing list. Policies and the current state of the project and plans are available at the Frameworks wiki. Real-time discussions take place on the #kde-devel IRC channel on freenode.net.

Supporting KDE

KDE is a Free Software community that exists and grows only because of the help of many volunteers that donate their time and effort. KDE is always looking for new volunteers and contributions, whether it is help with coding, bug fixing or reporting, writing documentation, translations, promotion, money, etc. All contributions are gratefully appreciated and eagerly accepted. Please read through the Supporting KDE page for further information or become a KDE e.V. supporting member through our Join the Game initiative