logo

Show HN: Dashboard – a runtime plugin-based desktop widget system for Linux

Posted by gzson79 |2 hours ago |1 comments

gzson79 2 hours ago

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