Skip to content

Akademy Time is Itinerary Time

Saturday, 30 August 2025  |  Kai Uwe Broulik

Every year the KDE Community conducts a large-scale field-test of KDE Itinerary, their fantastic travel companion app, disguised as annual community conference. This year’s Akademy takes place in the capital of Germany, Berlin. I have decided to try and exclusively use KDE Itinerary (full trip planner app) and KTrip (focused on public transport) for all my travel needs from and to the venue as well as its accompanying events.

KDE Itinerary travel companion app “Select Departure Stop” page with a grayed out list of recently searched for stops. “Current Location” is highlighted in a “Determining Location…” state
WIP: Finding your way home from dinner with Itinerary

Did you know that you can import various parts of the Akademy website into Itinerary? For example, if you go to the Social Event page and “share” it with Itinerary, it will add date, time, and location of the event to your timeline. This even works with many other websites, such as hotels. Of course, it’s preferred to import the actual reservation but if you don’t have one, you can just paste the hotel website URL into Itinerary, add your check-in and check-out dates, and you’re good to go.

While I won’t be needing it for Berlin, another feature I’ve wanted for a long time is a live currency converter. Itinerary has always displayed the exchange rate when travelling to a foreign country but it didn’t let you input an arbitrary amount and convert it for you. Now on every trip that involves travel to a country using a currency other than your home country, a handy currency converter is displayed.

KDE Itinerary app displaying details of a trip to Atlanta: No compatible power plugs. An interactive unit converter from USD to EUR is pointed at.
Anything you need to know about your trip, now with an interactive currency converter

I realized that we actually didn’t download the currency conversion table anymore. In KDE Frameworks 5 KUnitConversion did that implicitly when you used it but it’s a simple value-based synchronous API and doing an unsolicited blocking network request in there was obviously quite problematic – not just because KRunner is multi-threaded. In Frameworks 6, there’s instead a dedicated update job but you have to run it yourself when needed. On a desktop, KRunner’s unit converter likely already did that which is why this probably went unnoticed but on Android, the app certainly cannot rely on that.

In my opinion, the biggest issue for using Itinerary/KTrip as daily driver to navigate a foreign city, however, was the lack of a “Current Location” option when searching for a departure stop. Sure, when I know where I’m at I can search for the stop by name but what about finding your way back to the hotel from your dinner place? I therefore wrote a prototype to add a button to the stop picker page. It uses Qt Location to get the device’s location and feeds it into a journey request. It’s still very much work in progress and definitely not merged in time for Akademy, so in the meantime you’ll have to use a custom build.

In order to test my changes on an actual Android phone, I used Craft, KDE’s meta build system and package manager. It is super easy to set up for building libraries and applications for any major platform KDE software supports. For Android, it comes with a ready-to-use Docker image containing all the necessary Qt and Android libraries. I just had to configure it to use my local git checkout where I already made some changes and was able to produce a working APK within a couple of minutes. All of that without even touching Android Studio or worrying about getting the right NDK and Gradle version and what not. Great stuff!

I am very much looking forward to seeing you all in Berlin very soon!

Going to Akademy
6 – 11 September 2025
Technische Universität Berlin, Germany