A minimal virtual desktop switcher for the KDE Plasma panel.
A dot marks the current desktop, dimmed labels show the rest.
Two ways to get it, pick one. The KDE Store is the easiest; the one command always pulls the newest release.
- Right-click the panel or desktop → Add Widgets…
- Get New Widgets… → Download New Plasma Widgets
- Search for Pager Dots → Install
Or open the store page directly: Pager Dots on store.kde.org
Grabs the latest release and installs it — safe to re-run, it upgrades an existing copy.
curl -fLo /tmp/pd.plasmoid "$(curl -s https://api.github.com/repos/Patruxs/pagerdots/releases/latest | grep -om1 'https[^"]*\.plasmoid')" &&
kpackagetool6 -t Plasma/Applet -i /tmp/pd.plasmoid 2>/dev/null || kpackagetool6 -t Plasma/Applet -u /tmp/pd.plasmoidNeeds curl and kpackagetool6 (kf6-kpackage on Fedora, kpackage on Arch), normally already installed.
Right-click the panel → Add Widgets…, search for Pager Dots and drag it onto the panel.
To update later, use the store dialog or run the command again, then restart Plasma to reload it:
systemctl --user restart plasma-plasmashell.serviceTo remove the widget:
kpackagetool6 -t Plasma/Applet -r pat.pagerdots- KDE Plasma 6.2 or newer (Debian 13, Fedora 41+, Arch, Ubuntu 25.10+)
- KWin on X11 or Wayland
- A dot for the current desktop, a label for every other one
- 18 label styles: numbers, letters (A B C / a b c), roman numerals (I II III / i ii iii), Greek, Cyrillic, Chinese, Heavenly Stems, Hiragana, Katakana, Hangul, Arabic-Indic digits, bars (▁ ▂ ▃), dots, fill-up-to-current (● ● ○ ○), pill (GNOME's page indicator: small dots, with the current desktop a pill, and its own animation), or blank
- 35 dot animations — stretch, glide, elastic, spring, hop, swing, lift, glow, ripple, footprints, ring, sparks, pour, drop, pop, fade, beam, split, flash, wrap, steps, boomerang, topple, cartwheel, arrow, train, twinkle, hoop, billiards, recoil, loop, volley, flip, burst, pacman — plus a speed slider, or none at all
- Dot in your text or accent colour, with adjustable spacing
- Desktops with no windows drawn fainter, as faint as you like, so the ones in use stand out
- Click to switch, scroll or swipe to step through desktops (wrapping around, inverted, or not at all, as you like); click the current desktop to show the desktop, the Overview or the desktop grid
- Hover for the desktop name and the windows on it
- Right-click to add a desktop, remove the last one, rename the current one, or open the Virtual Desktops settings; or let the widget add and remove desktops for you, GNOME-style (one empty desktop at the end, always)
- Horizontal and vertical panels, following your Plasma colour scheme and font
- With desktops switched independently for each screen (Plasma 6.7 on Wayland), each widget shows and switches the desktop of its own screen
Right-click the widget → Configure Pager Dots… to change any of it: Appearance for the labels and the dot, with a preview at the top that plays your choices live, Behavior for the mouse, tooltips and desktop management.
Each dot animation is one file in contents/ui/animations/; Dot.qml loads animations/<Name>.qml for the id <name> and calls its start(old, target) whenever the dot has to move. To add one:
- Copy the closest existing file under a new name, say
Bounce.qml.Pop.qmlis the simplest swap,Hop.qmlthe simplest slide with a flourish on top, andBoomerang.qmlthe simplest of those that move the dot along the row themselves. - Set
kindand, unless the default suits,travel; writestart()to kick the animation off, and draw any shapes it needs as children.animations/DotAnimation.qmldocuments every hook and everythingdotprovides. - Add
{ id: "bounce", name: "Bounce", description: "…" }toMODESincontents/ui/Animations.js, which puts it on the settings page and in the tests. - Run
tests/run, then restart Plasma and try it in a panel, including switching desktops again while it is still in flight.
start() is called again if the desktop changes mid-move. A fresh start sets everything up from scratch (setFrom(old) and dot.placeGhost(old) before restarting the animation); a cut-in should carry on from where the shapes are, as the existing files do.
Bug reports and pull requests are welcome on GitHub. New animations are the easiest contribution: see Adding an animation above, and keep in mind that on a dot a few pixels across only a distinct silhouette or tempo reads as a different animation.
If Pager Dots is useful to you, you can support development:
GNU General Public License, version 2 or later. See LICENSE.
