Cardo

Cardo

Timeline:

TL;DR: Cardo is an experimental desktop of live pieces. I started it because I kept wanting to use one small part of an app without keeping the whole window around. Cardo lets me pull that part onto a desktop, where it stays connected to the app and can take different forms when I need it.

Here is a five-minute demo:

Using Cardo while getting ready for a trip to Paris.

Why I started it

I have tried a lot of desktop environments and window managers: Windows, macOS, KDE Plasma, GNOME, Xfce, dwm, i3, XMonad, EXWM (yes, really), AwesomeWM, and Sway. Right now I use KDE Plasma with Krohnkite.

But I still feel like they are far from the desktop environment I have in mind. Sometimes I keep a whole window around even though I only care about one small part of it. Making the window smaller does not help much; everything inside just gets cluttered.

I have a similar problem with things that keep running. If I am waiting for a build or backup, I often leave a Terminal open just to watch its progress. I need the full log when something goes wrong, while a one-line status is enough as I wait. Yakuake solves part of this by making the Terminal easy to hide and bring back. I started wondering whether the Terminal itself could change into the form I need.

Imagine this: isn't it great that I could just "pull" the useful part out of an app window? The important thing is that it would still know where it came from, so it could update and keep working. I could also assemble these pieces into something new and reuse it later.

This is why I created Cardo.

With Cardo, I want to explore two main questions:

  1. What kind of runtime abstraction and interaction model would let a piece keep its identity, its connection to the source, and what it can do while its form changes?
  2. What would a desktop built around these pieces look and feel like?
    • How could I pull pieces from different apps into one workspace?
    • How should the desktop visually arrange these pieces?
    • How should users interact with them?

Let me show you what I have built so far.

Compaction forms

A video can start as a full YouTube page. Later I can keep only the player, make it a mini-player, or leave a play button in the corner. Whichever shape I use, it still controls the same video.

The same YouTube video in four forms, from full page to play button
One YouTube video shown in four different forms.

A Terminal can do the same. I can use the full window when I need the output, then keep only a status row or a button while the command runs.

The same Terminal shown as a full window, status rows, and buttons
The same Terminal shown as a full window, status rows, and buttons.

Pulling out a live piece

Here I pulled the departure list out of a timetable webpage. It stays tied to the page, so the list on my desktop changes when the timetable does. I can unlink it when I want to keep the current version.

A live Geneva departure list pulled out of a timetable webpage onto the Cardo desktop
A live departure list pulled out of a timetable webpage.

Together: How the desktop organizes the pieces

These pieces also need somewhere to live. Here I am getting ready for a trip to Paris, and everything is open at once: my notes, the train departures, my railcard, a map download in a Terminal, and a video about Paris.

Five overlapping windows on the desktop: a Terminal, a departures page, trip notes, a railcard PDF, and a video
Before: everything open at once, on top of each other.

When I need room, I drag the ones I am not using to the bottom edge. My notes and the train departures stay open. The railcard, the download, and the video sit along the edge in small yet usable forms.

Trip notes and a departures page open on the desktop, with a PDF thumbnail, a Terminal status row, and a mini video player along the bottom edge
After: the pieces I am using stay open. The others wait along the bottom edge.

They are still running, so I can pause the video or check the download from the edge, and pull one back up when I want the whole thing again.

When I have to switch to other work, I can save the whole desktop as a context. When I open it again, everything comes back the way I left it, even the pieces I pulled out.

Pieces made by AI

I can also ask the AI to make a piece for me. Here I selected my Paris notes and asked it to turn them into a checklist. The checklist showed up next to the notes, and the dotted line shows the two are connected.

Trip notes on the left and a checklist made from them on the right, joined by a dotted line, with some items ticked and a count of four left to do
A checklist the AI made from my trip notes.

What it made is a piece like the others on the desktop. I can tick items and the count follows, move it around, or pull one item out and keep it on its own.

Where it is now

Cardo currently runs on Linux and is built with Qt. It is a Wayland compositor, so native apps can run inside it. It is not ready to run as a standalone compositor yet, so for now I run it nested inside another one.

It is still experimental and not public yet, but I already use it as my daily driver. I am working hard to make the interactions feel natural and the whole thing more reliable. Will make it public soon!

Created by Org Static Blog