Looking for testers & feedback: A-La-Karte, a new game launcher for KDE

Hi everyone,

I’m working on A-La-Karte, a new game launcher for KDE, and I’d like to invite the community to try it out and share early feedback.

The goal of the project is to provide a simple, well-integrated launcher that can import and launch games from existing platforms such as Steam, Lutris, Heroic, etc., while fitting naturally into the KDE ecosystem.

At this stage, my main focus is on:

  • refining the current implementation

  • improving UX and overall workflow

  • exploring a foundation for future convergence across Desktop / Tablet / Handheld / Big Screen

I should also mention that I’m not a gamer myself, so feedback from real users is especially important to help shape priorities and future features (including more advanced configuration options).

The project is still in an early phase, so any kind of feedback is welcome:

  • usability impressions

  • missing features

  • rough edges or bugs

  • general ideas or use cases

Project page:

Thanks a lot for your time, and feel free to ask any questions or share ideas!

Launching alakarte in Terminal shows:

qt.svg: Cannot open file ':/icons/sc-apps-org.kde.alakarte.svg', because: No such file or directory

This makes the icon not show up in the About window?

Checked this on Haiku (I know we are not using Plasma) :slight_smile:

Changed some paths to search for “applications” and “icons” directory in desktopimporter.cpp

but I can’t seem to import games (like khangman) from the .desktop file.

Manual adding entries works though, just can’t seem to edit the added entry?

Sorry if this off topic, just my 2 cents.

Thanks for the report! I pushed a couple of fixes to master on GitLab instance

1 Like

Detection works now, thanks! Just can’t seem to get the icon shown in the main window?

(could be something with the paths I patched for Haiku?)

Current patch:

diff --git a/src/desktopimporter.cpp b/src/desktopimporter.cpp
index 3c0f504..8b70bd8 100644
--- a/src/desktopimporter.cpp
+++ b/src/desktopimporter.cpp
@@ -39,7 +39,9 @@ QStringList DesktopImporter::getDesktopFilePaths() const
     // Add common system locations
     appDirs << QStringLiteral("/usr/share/applications");
     appDirs << QStringLiteral("/usr/local/share/applications");
+    appDirs << QStringLiteral("/boot/system/data/applications");
     appDirs << expandPath(QStringLiteral("~/.local/share/applications"));
+    appDirs << expandPath(QStringLiteral("~/config/non-packaged/data/applications"));
 
     // Flatpak export directories
     appDirs << expandPath(QStringLiteral("~/.local/share/flatpak/exports/share/applications"));
@@ -148,10 +150,14 @@ Game *DesktopImporter::parseDesktopFile(const QString &filePath) const
             // Try to find in standard icon locations
             QStringList iconPaths = {
                 expandPath(QStringLiteral("~/.local/share/icons/hicolor/256x256/apps/") + icon + QStringLiteral(".png")),
+                expandPath(QStringLiteral("~/config/non-packaged/data/icons/hicolor/256x256/apps/") + icon + QStringLiteral(".png")),
                 QStringLiteral("/usr/share/icons/hicolor/256x256/apps/") + icon + QStringLiteral(".png"),
+                QStringLiteral("/boot/system/data/icons/hicolor/256x256/apps/") + icon + QStringLiteral(".png"),
                 QStringLiteral("/usr/share/pixmaps/") + icon + QStringLiteral(".png"),
                 expandPath(QStringLiteral("~/.local/share/icons/hicolor/128x128/apps/") + icon + QStringLiteral(".png")),
+                expandPath(QStringLiteral("~/config/non-packaged/data/icons/hicolor/128x128/apps/") + icon + QStringLiteral(".png")),
                 QStringLiteral("/usr/share/icons/hicolor/128x128/apps/") + icon + QStringLiteral(".png"),
+                QStringLiteral("/boot/system/data/icons/hicolor/128x128/apps/") + icon + QStringLiteral(".png"),
             };
 
             for (const QString &iconPath : iconPaths) {

1 Like

Cool project.

I tried it out a bit:

  • The initial import page could stop the user from importing the same thing repeatedly by removing the entry or greying it out
  • Steam imports Proton stuff and Linux Runtimes as games as well, would be nice if it could recognise and not import those
  • Games from Heroic don’t import their images (should be possible)
  • Why are there two settings buttons? I’d prefer the one on the bottom left as it is less in the user’s face
  • Toggling off Steam in the settings does not remove the steam games
  • In fact, despite selectively choosing which sources to import, the settings claim to import from everywhere
  • The buttons on the sidebar don’t have hover indicators like the buttons on the top right
  • I think replacing the search button with the search bar that appears is better than a search bar suddenly appearing
  • Similar to the above point: If you enter something in search and then click the search button again, the filter retains without actually showing the user what is being searched. This might lead to confusion as to why no games are showing (in fact, it confused me for a moment, when this exact thing happened to me.)
  • When hovering over games, a play icon appears, which is great visual feedback, but the auto-selected game is still the first game in the library, making it slightly confusing which game is going to be chosen. (Maybe remove the auto-selection?)
  • The auto-selection of games always defaults to the first game in the library. IMO, when you view a game and leave, it should be selecting the game you just viewed
  • Empty favourites/hidden says that that your library is empty and you need to import games, which is misleading
  • The settings page (and similar pages) has a very large height which cuts off when resizing the application vertically.
  • It would be nice if it could import Heroic games added by the user
  • Also, codebase-wise, there are a lot of warnings (both C++ and QML) and I don’t think it is a good idea to do manual memory management using new/delete.

Also, how do I build the project using kde-builder? The instructions in the repo didn’t work, so I built it with cmake.

1 Like

Thanks for the detailed feedback — it was extremely helpful.

I went through your list item-by-item and compared it against the current implementation. A number of these points are now addressed in the latest preview (v0.1.1rc1), and a few still need more design/UX decisions.

Implemented / improved since your post (in v0.1.1rc1)

  • Import repeatedly re-importing the same sources

    • The import workflow now avoids re-importing sources that already have imported games. This prevents the “import everything again” loop.
  • Steam importing Proton / Steam Linux Runtime / redistributables as games

    • Steam importing now filters known non-game entries (Proton, Steam Linux Runtime, redistributables, shader pre-caching, etc.) and also skips titles that aren’t fully installed.
  • Toggling off an import source doesn’t remove its games

    • Turning off an import source now removes previously imported games for that source, keeping the library consistent with settings.
  • Heroic games missing cover images

    • Heroic importing now tries harder to find covers, and prefers cached cover images when available. It also supports importing “sideload apps”.
  • Empty favorites/hidden views show misleading “library empty” messaging

    • The empty-state messaging is now context-aware:
      • Favorites: “No favorites yet”
      • Hidden: “No hidden games”
      • Search: “No games found”
      • Truly empty library: prompts to import
  • Settings sheet height / vertical resizing issues

    • Settings is now scrollable and capped to the window height, so it shouldn’t get cut off when resizing vertically.
  • Hover indicators in the sidebar

    • Sidebar entries now have hover and selection indicators similar to the top-row buttons.
  • Codebase warnings / manual deletion concerns

    • Some QObject lifetime management was cleaned up (moving to deleteLater() in relevant places) to reduce unsafe manual deletes. There may still be warnings left, but this direction is now established.
  • kde-builder instructions

    • Docs were updated and we added clearer guidance (including SDL3 notes). kde-builder usage is now documented as a custom-project entry in ~/.config/kde-builder.yaml, and SDL3 is documented as either a system dependency or via ALAKARTE_SDL3_SOURCE_DIR.

Still to consider / not fully addressed yet

  • “Why are there two settings buttons? prefer one on bottom left”

    • The UI currently exposes settings in more than one place depending on layout/context. We should likely consolidate this (or make one location canonical and the other conditional). Needs a deliberate UX decision.
  • Search UX details (search button vs clear affordance, staying filtered)

    • Search behavior has improved, but we should still review the “search toggle” interaction to make it more obvious when search is active and how to clear it (e.g., clearer “clear search” affordance).
  • Auto-selection behavior (first game selected by default / selection after hovering)

    • Focus/selection behavior is improved for gamepad navigation, but we should revisit default selection and what happens after hover/leave to reduce confusion for mouse users.

If you’re willing to retest, v0.1.1rc1 should already feel noticeably better on importing and navigation. Any follow-up notes (especially around the remaining UX items) would be very welcome.

I’ve been looking for a KDE version of Cartridges for ages, thank’s so much for taking the time to do this. Awesome project.

After some battling with kdebuilder I finally got it to work. Looks really good. A couple of things I noted:

The window size does not seem to be persistent when the application is closed and then opened (it opens in the same small size every time).

Animated banners don’t seem to work/be found by SteamGridDB.

Importing newly installed games is quite arduous, for example, I have installed a new game and wan’t to import it using the Desktop option, I have to uncheck the source (removing all games from that source) and then re-import them all to get the new game. Auto-import on start-up does also not seem to work.

Finally, if you could find a way to import from Faugus Launcher as well that would be awesome.

1 Like

Thanks for pointing me to this issue, the window size values ​​were hardcoded and every time it was reopened those values ​​were overwritten for X and Y. I fixed it with the latest commit.

Again, I fixed the issue in the penultimate commit. Game imports should be incremental—this should be fixed now, though I’m looking for a less cumbersome workflow.

I’m currently working on this, thanks for the heads-up. I think I’ll be able to mirror the Faugus logic and integrate it into the launcher in a few days. Thanks.

After you’ve recompiled, let me know if things have improved and if you have any other features you’d like to add or a different UX. Thanks again for your time, and I hope you’ll be fully satisfied with the project in the future.

1 Like

Awesome update, the window size is now persistent, and the game import’s seem to be working great now :slight_smile: thanks.

A bug that I just noticed is having “Exit after launching game” check seems to kill the game process with A-la-karte closes.