PackageKit GUI ideas

I think we all agree that while PackageKit is the way to go, its interface is less than pretty. Or useful for that matter. That’s why I tried to list the biggest annoyances:

Updates window problems

  • Has a useless step 1 that tells you the total number of updates available. In theory it groups updates by severity. In reality such information is only available in two distros or so.
  • Same step 1: I think we are trying to dumb the interface down too much so we ended up adding more buttons than necessary. Even Apple does not hide the list of updates from the user.
  • Every time you click anything the windows resizes itself. Usually moving along to try and stay within the screen boundary.
  • When you try to update anything, another small window appears in a different part of the screen. The main window is gone so what is exactly the point of having multiple windows here?
  • When the update is done the smallish window disappears and yet another small window appears. This time offering you to go back. I think we all agree that if the update is successful a notification would be enough. And the go back button is only there because the UI is broken and hides the interface while doing the work.

Add/Remove Software problems

  • Every time you click a package, half of the window gets covered with package details and buttons. These are all stacked vertically so they take a whole effing lot of useful place. Not to mention the package you clicked suddenly scrolls out of view.
  • Every time you install or remove anything the window blanks for a brief moment then it gets repopulated with packages, putting you back at the top of the results list. Doesn’t sound bad unless you try to install a bunch of gstreamer packages (and there are 195 matching results in PLD).


  • Try to keep it each interface in one window.
  • Really try to keep it all in one window.
  • Don’t show technical details each time I click.


This is the update mockup I came up with some time ago. Think of it as the main part of the window that allows you to select packages to update. The point is once you click update instead of hiding the window, we can hide unselected packages and show live progress in the very same window. Without resizing it. And then hide it if the update is successful.

If it’s not? Well, see that Failed button? The label is wrong but it should be able to show you the details. We all agreed that update is really a background process so popping a big cryptic Update failed window in the middle of my solitaire session is not a thing to do. Just pop a critical notification and I’ll get back to the window to check the details once I’m done with my current task.

Bonus: It also lets you see the whole queue while updating which is quite useful.

Oh and by the way. One failing update should not immediately break the transaction. This forces me to update packages one by one and is actually slower than typing upgrade * in poldek’s interactive shell (not sure if single failed package breaks transaction applies to other backends as well).


Here’s a mockup for Add/Remove Software. The main difference is that instead of annoying users with a panel that pops up each time you select anything, once you click a package, it shows more info inline. Here more info does not include files and dependencies. How often do users choose their software basing on a number of packaged files? There’s an Information button for that. The one below Install (it actually says Add on the picture above but that’s because there is no stock Install button and I’m lazy).

Bonus: clicking install on any package should just display a small progress bar beside that package. See previous mockup for details. And when it’s done, just update the icons of affected packages instead of refreshing the whole window. This way I can scroll and click Install on any number of packages without having to go through the whole install-wait-refresh-wait-scroll-to-previous-position cycle.

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Poland
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Poland.