LearnNewsExamplesServices
Frontmatter
id19614
titleBuild a multi-window dashboard with Dock Layouts: the implementation post
stateClosed
labels
documentationenhancementBlog Postaidashboard
assigneesneo-opus-ada
createdAtOct 11, 2026, 6:19 PM
updatedAtOct 11, 2026, 9:24 PM
githubUrlhttps://github.com/neomjs/neo/issues/19614
authorneo-opus-ada
commentsCount0
parentIssue13383
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtOct 11, 2026, 9:24 PM

Build a multi-window dashboard with Dock Layouts: the implementation post

Closed v13.2.0/archive-v13-2-0-chunk-25 documentationenhancementBlog Postaidashboard
neo-opus-ada
neo-opus-ada commented on Oct 11, 2026, 6:19 PM

Context

Stage 2 of the operator's two-stage blog post (2026-10-11), and the second entry in the series order recorded on #13383 (comment). Stage 1, learn/blog/multi-window-dashboards-with-dock-layouts.md (#19602, merged as 97112ed5ea), shows what the person at the dashboard gets. It ends on two configs and a promise: "The next post in this series builds a workspace end to end."

The Problem

  • Angle: build one dashboard workspace from an empty app to panes that leave the window and come home. Each step is a decision the developer owns, shown with code that runs.
  • Audience: developers who read stage 1 and want to try it. Neo knowledge is optional, and each step links its guide.
  • Sources to mine (nothing invented):
    • learn/guides/uibuildingblocks/DockLayoutsAdoption.md (the five decisions; its default tear-out contract as corrected by #19608);
    • DockLayoutsWindows.md, DockLayoutsStateAndPersistence.md, DockLayoutsPanes.md and DockLayoutsStyling.md;
    • learn/tutorials/DockLayoutsFirstLayout.md;
    • src/dashboard/dock/Workspace.mjs (enableDockTearOutLifecycle, openTearOutVessel, canOpenTearOutVessel, perspectives, the action flags);
    • the Workstation (apps/workstation/view/VesselWorkspace.mjs, its BootIntent, its IndexedDB persistence);
    • examples/dashboard/crossWindow/Viewport.mjs (the empty boot page);
    • examples/dashboard/dock/MainContainer.mjs (perspectives, saved layouts).

The Architectural Reality

Docs only: learn/blog/<slug>.md, a blog.json leaf, and images in neomjs/pages under resources_pub/website/blog/<slug>/. A code block is shown in the post only after it has run, live in the Portal or in an app the post names.

The Fix

One post, ordered the way a developer would build:

  1. panes and zones;
  2. pane policies (lock, pin, close);
  3. named perspectives and saving a layout;
  4. turning on windows (useSharedWorkers, the tear-out opt-in, the cross-window sort group, the empty page a torn-out window boots into);
  5. styling with tokens;
  6. the keyboard path.

The bounds come from the guides, not memory.

Plan (2026-10-11, from a read of the corrected Adoption guide):

  • Live where the Portal can run it. Blog posts render javascript live-preview blocks (the v10 deep dives use them). Steps 1–3 and the action flags run as live, editable previews: panes and zones, per-pane policy (closable/movable/pinnable on the declaration), and perspectives + activePerspective behind a toolbar (the dock example's dockShellIndex pattern).
  • Read-only where it cannot. A torn-out window reopens the host document with ?tearout=<itemId>, which a live preview inside the Portal cannot answer. The windows step is read-only code checked against Workspace.mjs, and the reader runs it in the Workstation. Persistence (Persistence.createSavedLayout / restoreSavedLayout) and styling tokens (.neo-dock-workspace .neo-dashboard) are read-only too.
  • Every live block is render-verified in the Portal before review, and every read-only block's symbols are checked at the PR's base.

Acceptance Criteria

  • Every code block runs, either in the Portal's live preview or in an app the post names, and the PR records where each one ran. (#19618, merged as ca3b95460f; steps 1–3 run headless in the Portal, steps 4–6 match the examples they name)
  • The windows section matches Workspace.mjs and the corrected Adoption guide at the PR's base: what the engine owns, and what the application supplies. (at the PR's base; the addon list gets a re-read against #19622, see the follow-up ticket)
  • It links stage 1 for the benefits and does not repeat them.
  • Registered in blog.json and render-verified on the Portal.
  • At least two model reviews, one from a non-Claude family; the operator approves last. (Euclid, GPT: APPROVED round 2; the operator merged)
  • No client names.

Out of Scope

Engine changes, and the benefits story (stage 1).

Related

Live latest-open sweep: latest 20 open issues read at 2026-10-11T16:19Z, no equivalent. A2A in-flight sweep: no claim on an implementation post.

Retrieval Hint: "dock layouts implementation blog post build workspace perspectives tear-out boot page"

tobiu referenced in commit ca3b954 - "docs(blog): from two configs to a second screen, building a dashboard with Dock Layouts (#19614) (#19618) on Oct 11, 2026, 9:24 PM
tobiu closed this issue on Oct 11, 2026, 9:24 PM