5b871b8ecb6ae6b86b10da2ee4de8ec9aeb4765b
P2 went onto the VM and the dashboard workspace appeared, but switching to it auto-bounced back to the previous workspace. Diagnostic build showed every `window-added` on dashboard was firing for a window with title `@!0,0;BDHF`, wm_class=gjs, type=NORMAL, sticky=false. That's the desktop-icons-ng (ding) extension's per-monitor desktop window: it runs as a separate gjs process, so it masquerades as a generic NORMAL window and the original DESKTOP/DOCK/SPLASHSCREEN filter missed it. WindowGuard was un-sticking it on every workspace switch, which caused mutter to flip the active workspace away from dashboard. WindowGuard.shouldSkip now also returns true for `is_skip_taskbar()` windows. That's the load-bearing check for ding, and a sensible general rule: skip-taskbar windows are owner-managed (PiP, helper utilities, backgrounded ding desktops) and shouldn't be dragged around by us. The DESKTOP/DOCK/SPLASHSCREEN check stays for extensions that do label themselves correctly. While re-deploying, also harden the WorkspaceWarden enable() ordering. The original sequence relied on mutter not reacting to the `dynamic-workspaces=false` flip before our `append_new_workspace` call landed -- but with default gsettings (num-workspaces=4), a faster reaction would expand the count to 4 and leave us with ghost workspaces. Reorder to: write num-workspaces=current first, then flip dynamic, then append, then update num-workspaces. The race is now closed regardless of mutter timing. Verified on ubuntu2504-test VM: dashboard workspace switchable, ding silently ignored, real-window bounces still log on Super+Shift+End. 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%