e1ae88948e7ae51180df471e4973b4f83df6c1c6
Dashward now actually renders content on the dashboard workspace. The container is a separate gjs subprocess (so a WebKit crash can't take down gnome-shell), and the extension pins its window to the dashboard slot via the WindowGuard whitelist. container/src/main.ts: tiny GJS bootstrap that creates a borderless fullscreen Gtk.Window with a WebKit2 WebView and loads dashboard.html from a runtime directory passed in via argv. `GLib.set_prgname` happens before any GTK init so Wayland's xdg-shell app_id matches `top.hangmanlab.dashward.container` -- that's the wm_class fingerprint the extension matches against. extension/src/container-supervisor.ts: spawn the container via Gio.Subprocess; pump its stdout/stderr into journal under `[container stdout|stderr]` tags so we can diagnose WebKit crashes without attaching; watch display::window-created for the app_id match; on arrival, whitelist with WindowGuard before moving to dashboard (so the move's window-added doesn't bounce); make_fullscreen; clear the cached ref on the window's `unmanaged` signal. Dispose SIGTERMs the subprocess. P3 explicitly skips auto-restart / exponential backoff and DBus signaling -- those land in P4. container/runtime/runtime.ts + styles.css: a "Dashward" placeholder card on the 12-column grid so the dashboard workspace is visually distinct from a regular workspace; widget mounting / edit mode is P5+. Verified on the ubuntu2504-test VM: extension enables cleanly, dashboard shows the placeholder, switching to/from dashboard works, ding's window is still ignored. MESA/EGL stderr lines are VM-only software-rendering fallback noise (no virgl). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Dashward
A dedicated rightmost workspace for custom widgets on Ubuntu/GNOME, in the spirit of macOS Dashboard.
- GNOME Shell extension (GJS) creates the dashboard workspace, defends it from regular window incursions, and supervises the container.
- WebKitGTK container (separate process) renders an HTML page on that workspace.
- Widget SDK (TypeScript) lets you write widgets as web components.
Status: P0 skeleton. Design lives in
UBUNTU-DASHBOARD-SPACE.md
(see also ~/arch/UBUNTU-DASHBOARD-SPACE.md locally).
Target
- Ubuntu 25.04 / GNOME Shell 48 / Wayland.
- Other distros & versions: post-v1.
Repo layout
sdk/ TS widget SDK, published as @dashward/widget-sdk
extension/ GNOME Shell extension (GJS, TS-authored)
src/ Extension source
widgets-builtin/ Builtin widgets shipped with the extension
container/ WebKit kiosk process
src/ GJS bootstrap
runtime/ Page-side runtime (host grid, edit mode, widget loader)
widgets/ Example / 3rd-party widget dev tree
proto/ Shared DBus XML + TS types
scripts/ Build & dev helpers
Dev setup
Requires Node ≥ 20 and pnpm ≥ 9. To install pnpm:
npm install -g pnpm
Then:
pnpm install
pnpm build
Testing discipline
All Shell-side iteration happens inside the
ubuntu2504-test libvirt VM, never on the host GNOME session — a
buggy extension can lock you out of the Wayland session. See the design
doc §17 for the dev loop.
License
TBD.
Description
Languages
TypeScript
90%
CSS
3.3%
JavaScript
2.9%
HTML
2.4%
Shell
1.4%