Author: Seshan Ravikumar

  • Introducing KRetro: a Libretro game emulator from KDE! (Alpha Release)

    A Pixel 3a with postmarketOS running KRetro on Plasma Mobile
    A Pixel 3a with postmarketOS running KRetro on Plasma Mobile

    KRetro is a libretro frontend from KDE written in Qt with Kirigami! That means when given both a libretro core, and a game cartridge/disk ROM, it plays your favourite games. It is designed to be convergent, usable across all Plasma Platforms: Desktop, Mobile and Bigscreen.

    What is Libretro?

    You may have heard of RetroArch, a popular and famously portable retro game emulator frontend with a console-style UI. One of the important innovations from RetroArch is libretro, a standard API that can adapt the many numbers of independent game console emulators to a single program. This is what allows RetroArch to support a vast number of systems without needing to build support for each bespoke emulator into the frontend itself.

    A libretro “core” is simply a .so/.dylib/.dll dynamic library file that packages an emulator (or an independent game), and can be loaded into any application that can consume it using the libretro.h C API specification.

    Through the libretro API, cores are adapted to the native Qt interface of KRetro (for example, pixels are drawn onto a QImage, audio is rendered out using Qt Multimedia, and reading keyboard events is handled by the QML engine).

    The Road to KRetro

    KRetro screenshots – Desktop game view and player view, and the mobile player view.

    KRetro’s development started in 2023 with a desire to help build more apps for Plasma Mobile (shout out to Devin for the idea and help along the way). I worked on it for a while, but unfortunately got busy with school and other things. In addition, the Qt 6 transition came and went, which left KRetro effectively abandoned.

    Thankfully, in 2024, Dexter Reed came through with an MR to port the KRetro codebase to Qt6. And finally, in 2025 with more time on my hands, I finally picked the project back up, bringing us to today!

    The name? The K-prefix naming has mostly been phased out these days in KDE for new apps… you could say it is a retro naming scheme 😉

    What KRetro Can Do Today

    As you probably guessed, this is an Alpha quality release, and while I did my best to have the experience be polished, you should expect bugs and missing features.

    The Game Library view on KRetro – a list of game ROMs

    More importantly, KRetro is not feature complete. This release is intentionally limited – I wanted to make sure the scope was not too large so meaningful progress can be made towards a release.

    As of this first alpha release, KRetro can play games from the following fixed list of consoles:

    • Nintendo Entertainment System/Famicom
    • Super Nintendo Entertainment System/Super Famicom
    • Game Boy Advance
    • Sega Master System
    • Sega Genesis/Mega Drive
    • libretro 2048 (a built-in demo game)
    A screenshot of the KRetro Controller Settings Page. A list view with each button (A,B, etc) and what it is currently bound to.
    KRetro Controller Settings Page

    KRetro also supports fully mappable controls for both keyboard and controller inputs, though only 1 port is available for now (so no multiplayer). Controller support is provided by SDL3 (and keyboard input is handled directly from the QML engine).

    Per-game save states menu in KRetro

    KRetro has a system for managing save states for each of your games, including a default save slot that automatically saves and restores your game progress when you quit and launch KRetro.

    The Road Ahead: What’s Left to Do?

    Lots! In fact, too many things to list here in detail. There are a number of big ticket items though, like enabling OpenGL/Vulkan support for cores (this will allow supporting most 3D consoles, like the N64, Wii, or Playstation), or allowing arbitrary core+rom combinations (allowing users to select any of the 200+ libretro cores they want, instead of having a fixed list of consoles as it is currently).

    There are also lots of smaller quality of life features, for example:

    • Supporting more than 1 controller
    • Improve the touch controller layout on tablets
    • A better game/ROM list with extended metadata
    • Save state screenshots
    • And many more…

    The Mobile platform also needs some more love specifically, like having transparent and customizable touch controller layouts.

    Plasma Bigscreen support is generally pretty rough (given that Bigscreen itself isn’t released yet either), there is only basic remote navigation support for selecting games, and all other parts of the UI require a mouse to reach (such as the settings page).

    KRetro has also at one point in the past run on Android (which is to say – it should be able to run on Android, but this hasn’t been tested in quite a while, and is probably broken), and iOS builds have never been attempted (however it has been run on macOS).

    Does any of these features interest you, and you want to help out? Do you have more ideas? Come and contribute on the KDE Invent page!

    Trying out KRetro

    Sonic the Hedgehog on KRetro

    Given that this is the first release, and an alpha quality release, KRetro is not packaged on any distros yet. The easiest way to experience KRetro if you are on x86_64 is to use the nightly flatpak:

    flatpak install https://cdn.kde.org/flatpak/kretro-nightly/org.kde.kretro.flatpakref

    Otherwise, you’ll need to grab the source and compile it, either the release tarball or even more bleeding edge, from the git repo.

    Download the tarball: https://download.kde.org/unstable/kretro/0.0.1/

    $ wget https://download.kde.org/unstable/kretro/0.0.1/kretro-0.0.1.tar.xz
    $ tar xvf kretro-0.0.1.tar.xz && cd kretro-0.0.1/
    
    $ mkdir build && cd build
    $ cmake .. # install required dependencies if needed
    $ make -j${nproc}
    $ ./bin/kretro # or sudo make install

    Update 2025-10-06: There is also now a kretro package on the AUR for Arch Linux users! https://aur.archlinux.org/packages/kretro

    Besides installing KRetro, you will also need some libretro cores. On the nightly flatpak, these are already bundled in for you, and you’re ready to play games! If you install KRetro manually, the recommended/tested cores are as follows:

    • Nestopia for NES
    • snes9x for SNES
    • mGBA for GBA
    • Gearsystem for SMS
    • BlastEm for Genesis/MD

    Some distros (like Arch and Alpine) already package these, so you can install them from their package managers (ex. pacman -S libretro-snes9x). Once installed, you can select them for use in the KRetro settings.

    Games are detected and matched to their respective console type by their file extension, so all you need to do is place your game ROMs in “~/Documents/Games” (or another folder of your choosing).

    Reporting Bugs and Getting Involved

    Since this is an alpha release, you’ll probably run into bugs and crashes, the best way to report those is to the KDE Bugzilla: https://bugs.kde.org/enter_bug.cgi?product=kretro

    For general discussion (especially if you want to contribute), I recommend you join the KDE Games Matrix room.

    And last but not least, if you would like to develop and hack on KRetro, you can find everything you need at: https://invent.kde.org/games/kretro

    Thank you!

    Thank you for reading this far! I hope you will try out KRetro and enjoy it, and I hope the KRetro community will grow too!

    I would like to give a special thanks to Devin Lin for his invaluable help, without him KRetro would never have gotten this far. I’d like to also give thanks to Carl Schwan for helping me along the KDE development process, his contributions to KRetro, and for being my sponsor for getting KDE developer status.

    Konqi loves playing games on KRetro!
  • My Akademy 2025 trip to Berlin

    My Akademy 2025 trip to Berlin

    This post is long winded and unfocused. If you prefer to not experience my rambling, this is your warning. If you do, enjoy!

    Pre-Akademy Akademy-ing

    Hello! I was at Akademy 2025! Along with Devin and Derek, this trip was actually part of a larger grad trip, the ending of which happened to conveniently line up with Akademy. The last time I attended Akademy was back in 2022, so I was excited to be back!

    Flying out of Hong Kong airport to Berlin onboard Turkish Airlines

    The last part of the grad trip was in Hong Kong, so naturally that’s where the journey to Akademy begins! We flew out using Turkish Airlines (a first for me), stopping over in Istanbul. I will say, the economy seats do come with a nice amenities kit:

    In any case, after a brief (and really expensive! the food was not cheap!) layover in Istanbul, we arrive in Berlin! It was night by the time we got into the hotel, so we got some snacks and then headed to bed.

    The first full day was all about getting setup, doing a bit of exploring, then heading out to the evenings main event: the welcome event!

    The Pixel 3a was my Plasma Mobile device of choice for this Akademy (I found it in a Hard Off store in Japan during the trip!), and since Derek was getting a SIM for his phone, I decided to also get one for the Pixel. This lead to a pretty entertaining sequence of pulling out a Plasma Mobile device when the employee offered to install the SIM for me.

    It all worked out, though! I mean, I ended up doing most of the work actually navigating the OS (they looked somewhat concerned when I rebooted the phone to get the SIM card recognized and the tty sped by), and they had to take a moment to look up the APN settings (probably an uncommon occurrence for them), but the SIM installed and I was connected to the Vodefone network without any drama.

    The Brandenburg Gate
    A classic Quebec moment, a Quebec government office near the Brandenburg gate. It’s not a Canadian embassy!
    Ah, the Europeans sure do love their institutions. I do, too!

    Of course, before heading back to the hotel room, we had to indulge ourselves with some local Berlin cuisine, which means currywurst. (for those not aware, it’s sausage and fries with ketchup, mayo and curry powder).

    The currywurst was actually really good, we got more the next day too.

    Back in the hotel room now, and you would think maybe we’d take a nap or otherwise rest. But nope, my hotel room instead became a place to lock in. After all, there were things that needed to be done! I for one spent the time flashing a fresh copy of postmarketOS on to my Anbernic RG35xx.

    Akademy Welcome Event

    Finally, it is time to go to the welcome event! Being in the Plasma Mobile sphere, naturally I sat with various Plasma Mobile and adjacent people. Overall a fun night, lot’s of excitement in the air with people meeting each other (some for the first time, some after years), and of course excitement for the week of Akademy to come. Also naturally, the table was full of drinks, food, and Plasma Mobile devices.

    Akademy Day 1

    Talks, talks, and more talks! That is the name of the game for the first two days of Akademy. Taking place in university lecture halls, they cover a wide variety of KDE related topics and are really interesting to listen to. There are also a lunch break, plus some coffee breaks sprinkled in.

    During the day, there are usually two talks running in parallel in the two rooms, so you need to pick one. These are the talks I attended on Day 1:

    • Keynote: Open by Design: How Governments Can Lead the Shift to Digital Sovereignty (Alexander Rosenthal)
    • Plasma: Lessons Learned and Our Path Forward in 2026 and Beyond (David Edmundson)
    • KDE Linux: Banana Growth Cycle (Harald Sitter)
    • The Role of New Languages in the Future of the Qt Ecosystem (Dr Cristián Maureira-Fredes)
    • Report of the Board, Report of the Working Groups
    • KDE Goals – One Year Recap
    • Lightning talks: What’s New with Qt Learning? (Emilia Valkonen-Damjanovic), Gently Retiring KWallet (Marco Martin), Emergency and Weather Alerts (Volker Krause), Boosting your code and simplifying your life with clazy (Alexander Lohnau)

    If any (or all) of those titles seem interesting to you, you can check out the Akademy program website for full descriptions. At some point the talks will also be edited and posted online as well.

    In the little bits of time I managed to get during the day, I did get some work done as well! A handful of improvements to KRetro (my Libretro frontend for Plasma) and some hacking on Plasma Mobile.

    After the talks finished for the day, people headed home or out to eat dinner in various groups. I went with one such group and had some really tasty vegan thai curry!

    mmm delicious

    Akademy Day 2

    Wake up! It’s a new day, more talks! You don’t want to miss it! (I might have slept in a bit)

    Day 2 is structured much the same as day 1, with the exception of the group photo! Always a fun time seeing everyone gathered together in one space.

    The talks I attended on day 2 were:

    • Handling Negative Feedback (Akseli Lahtinen)
    • Developing on Flatpak (Aleix Pol Gonzalez)
    • Getting Hired to Work on FOSS – The Do-s, Don’t-s and Pitfalls for Everyone Involved (Till Adam)
    • Next-Gen Documentation Infrastructure for KDE (Nicolas Fella)
    • Fedora KDE Plasma Desktop Edition is Real, Now What? (Neal Gompa)
    • Lightning talks: Say what now? – Communication Theory for Software Developers (Nicolas Fella), The Art of a Good Commit Message (David Edmundson), Plasma Mobile Power Management: Reliable Sleep and Wake Ups (Bhushan Shah), Funding and Growing – Kdenlive Experiences and Perspectives (Jean-Baptiste Mardelle)

    And would you look at that, the talks are done! Blink and you’ll miss ’em. Honestly it felt like they went by so fast, it’s lots of fun getting to see all the KDE community members you see online in person, and getting to hear all the cool things they are involved in.

    The rest of Akademy week?

    After the saturday and sunday full of talks, the rest of Akademy week is dedicated to various activities, notably BoFs (birds-of-a-feather). They are essentially meetings of different interests (usually of specific topics, for example there is a BoF for Plasma Keyboard). These represent a pretty important part of Akademy, all these developers and community members from around the world are in one place, and so you get the unique opportunity to have in person meetings, discussions and planning. Besides BoFs, there are also various workshops and trainings held as well. Plus, there is the day trip in the middle of the week!

    Unfortunately I could not attend the rest of Akademy due to timing with other obligations, and so it was time to finally head back home and bring the trip to a close.

    Goodbye, Akademy!

    The 3 days of Akademy were a lot of fun! It was great to meet fellow KDE community members and hear about all they had to say in the talks. I look forward to hopefully attending Akademy again next year!

  • Hello world!

    Welcome to my new blog! Yes, the long awaited revival of my weblog is here (in a limited fashion).

    It has come to the point where I have to write some blog posts for various projects and such, and so after mulling around a bit trying to figure out how to proceed (most notably failing to recompile a working rust exe of my website for Windows Server 2003 R2), I ended up spinning up this WordPress instance and called it a day.