Since the last update two month ago KDE Itinerary gained support for managing discount program memberships and flat rate tickets, gives you more control over alternative connection searches and transfer connections, produces correct train station indoor maps even in complex cases and much more.

New Features

Passes & Programs

KDE Itinerary can now manage certain kind of passes or tickets that are not tied to a specific element in the timeline. This can be flatrate tickets or discount program cards for example. The main menu has a new “Passes & Programs” page for this.

Specifically, the following passes are supported:

  • SNCF “Carte Advantage” and Deutsche Bahn “BahnCard” discount program cards, imported from a corresponding PDF or barcode scan.
  • Anything that comes in the form of an Apple Wallet “generic” pass.
Screenshot of KDE Itinerary's new programs and passes page.
Programs and passes page in KDE Itinerary.

To make this even more useful, the ticket data extractor recognizes tickets tied to a specific discount program, and if a matching program card is found, offers to open that directly from the ticket details page. So you have everything handy when getting your ticket checked.

Screenshot of KDE Itinerary's train ticket details page offering direct access to an associated discount program card.
Train ticket details allowing direct access to a associated discount program card.

There’s of course more to do here, such as tracking the expiry dates of program memberships, and supporting more variants (sample data more than welcome).

Alternative trip options

When searching for an alternative connection because of a missed or canceled train KDE Itinerary so far always looked for an alternative for the entire remaining journey. While a useful default, that left very little control to the user. This has now been extended, you can now also search alternatives only for the next leg of a journey.

Screenshot of KDE Itinerary's alternative connection search context menu.
Alternative connection search options in the context menu.


We are unfortunately no longer able to publish updates in the Google Play store, due to KDE Itinerary being able to store health certificates. New rules by Google do not allow such a feature unless you are a government or public health entity.

The only way around that would be building a separate version just for the Play store with that feature as well as any references to it in the application metadata removed. That’s something our build and deployment pipeline doesn’t support at this point though.

KDE Itinerary in the Google Play store will be therefore be stuck at 21.12.3 for the foreseeable future, for continuing to receive updates KDE’s F-Droid repositories are recommended instead.

Infrastructure Work

There are a few larger ongoing efforts that will benefit KDE Itinerary in the medium term. There’ll likely be dedicated posts about this as things progress.

KCalendarCore Android backend

Not too long ago KCalendarCore got a plugin system to abstract different calendaring providers. A backend for the Android platform calendar for this is now being implemented.

This should allow a much more complete calendar integration in KDE Itinerary than the limited import functionality that we currently have on Android only, including benefiting from the same code we already have in the KMail plugin to add reservations to the calendar.

The current integration uses platform specific code, implementing this on top of KCalendarCore instead would simplify that code and automatically give us feature parity on all platforms.

Listing calendars, listing events for a specified time range and creating a new event are already working. Updating and deleting events remains to be done, as well as dealing with several complex recurrence exception scenarios.

Safe Jave Native Interface (JNI) API

A prerequisite for the Android backend for KCalendarCore is the compile-time checked JNI API that has been growing inside KDE Itinerary’s code for some time already with the goal of eventually being spun out into a dedicated framework (working title: KAndroidExtras).

Java Native Interface (JNI) is the way we communicate between our C++ code and the Java-based Android platform API. It is a very low-level interface that relies a lot on type-less object handles and specially mangled symbol names, all of which is only checked at runtime. In other words: very error prone and cumbersome to work with, even more so if the interface is relatively large, like it is for the complex data and query options around calendaring.

Fortunately, some of this can be hidden behind C++ macro and template magic, which then can check at compile time already whether we use objects of the correct type, and which can generate mangled symbol names automatically.

This has meanwhile advanced significantly to support the calendaring use-case, supporting overloaded methods and constructors and gaining full support for Java arrays.


There is also work going on to prepare KWeatherCore to eventually replace the home-grown weather forecast code in KDE Itinerary. This should give us more weather details, and potentially reduce the amount of online queries on Linux due to session-wide data sharing.

KWeatherCore also contains building blocks for dealing with weather alert data, something we’ll hopefully also be able to leverage longer term.

Fixes & Improvements

Travel document extractor

  • Add new extractors for UK national railway.
  • Improve extractors for Renfe, SNCF, Thalys, Via Rail, Eventbrite,,, Eurowings and Peach Aviation.
  • New train station lookup tables for UK railway and Via Rail station codes. This allows augmenting extracted data in Canada and the UK with the exact geo coordinates (and thus also correct timezones). A new Wikidata property for Via Rail station codes (P10653) has been added for this.

Indoor maps

  • Several geometry reassembly issues have been fixed that lead to corrupt displays of particularly complex and unfortunately clipped polygons. This involved fixes both in the client code as well as on the map tile server.
Screenshot of KDE Itinerary's train station map showing the underground level of Stuttgart central station.
Complex underground layout of the Stuttgart central station now display correctly.
  • More OSM element categories are supported by the element information view.

Itinerary app

  • Add integrated barcode scanner (see last post).
  • Allow to add transfers to favorite location at roundtrip destinations as well.
  • Fix invalid Aztec barcodes being generated under rare conditions.
  • Ensure we don’t overdraw the ticket barcode beyond the page size.
  • Fix editing of event reservations without any location data.
  • Replace the “Go To Today” action with “Go To Now”, which is particularly useful on jumping to the right point in the timeline during very busy days.
  • Consider all timeline elements and not just reservations for computing the weather forecast elements.
  • Fix wrong countries being displayed for addresses on Android (bug 452979).
  • Fix activating running instance on Wayland.
  • Improve time distances of automatically placed transfer elements.


Feedback and travel document samples are very much welcome, and there are plenty of other things that can be done without traveling as well. The KDE Itinerary workboard or the more specialized indoor map workboard show what’s on the todo list, and are a good place for collecting new ideas. For questions and suggestions, please feel free to join us on the KDE PIM mailing list or in the #kontact channel on Matrix.