Dashboard is a Qt6 desktop overlay where widgets are shared libraries
(.so files) loaded at runtime via QPluginLoader. Drop a plugin into the
plugins/ directory and it appears in the picker immediately — no rebuild,
no restart.
**Why I built it**
I wanted glanceable system info (CPU, memory, logs) alongside productivity
widgets (todo, pomodoro, AI chat) in a single persistent window I could
arrange freely. Existing solutions were either too rigid or required a
specific DE.
**Architecture**
Each widget implements a small C++ interface (IWidget):
QString name() const;
QWidget* createWidget(WidgetContext*, QWidget* parent);
void saveState(QJsonObject&);
void loadState(const QJsonObject&);
The host application (PluginLoader → WidgetManager → WidgetCanvas) handles
discovery, layout, and serialization. Widget state is stored as per-instance
JSON files under ~/.config/Dashboard/widget-data/.
**Widgets included (12)**
Clock, Calendar, Todo, Notes, Pomodoro, Countdown, Links, Weather
(Open-Meteo — no API key), System Status (/proc), Htop, AI Chat (OpenAI),
Log Tail (file or systemd journal).
**Distribution**
AppImage built on ubuntu-22.04 (GLIBC 2.35) and Flatpak (org.kde.Platform
6.9, app ID io.github.duh_dashboard.Dashboard). Both bundle Qt and all 12
plugins. The AppImage build uses linuxdeploy + patchelf to fix up plugin
RPATHs so Qt is found at $APPDIR/usr/lib/.
**SDK**
There's a widget-sdk package (CMake, installs headers + a cmake target) and
a Python scaffolding script that generates a complete, buildable widget
skeleton from a name. Each first-party widget is its own independent repo.
Repo: https://github.com/duh-dashboard/dashboard
Releases: https://github.com/duh-dashboard/dashboard/releases
SDK: https://github.com/duh-dashboard/widget-sdk
gzson79•1h ago