Skip to content

[Rush] Add rush-serve plugin dashboard UI and config updates - #5893

Open
mojaza wants to merge 2 commits into
microsoft:mainfrom
mojaza:rush-server-plugin-dashboard
Open

[Rush] Add rush-serve plugin dashboard UI and config updates#5893
mojaza wants to merge 2 commits into
microsoft:mainfrom
mojaza:rush-server-plugin-dashboard

Conversation

@mojaza

@mojaza mojaza commented Jul 22, 2026

Copy link
Copy Markdown

Summary

This PR adds a built-in dashboard for the Rush serve plugin so developers can monitor and control watch-mode execution from a browser without creating a separate client.

The change introduces dashboard frontend assets, serves them through the plugin, and documents how to configure and open the dashboard route.

Details

Added a dashboard UI with:

  • WebSocket connection and reconnect handling
  • Overall status and iteration state visibility
  • Table and graph views
  • Filtering, search, and selection workflows
  • Run controls: run once, pause/resume, abort
  • Terminal/log output panel

Other changes:

  • Added global routing config to serve dashboard assets from a workspace-level path.
  • Added build copy steps so dashboard static assets are emitted with package outputs.
  • Added lint configuration for browser globals used by dashboard code.
  • Updated plugin documentation with setup and usage instructions.

Design notes

Considered keeping the dashboard as an external sample app.

Chose an in-package dashboard to make onboarding easier and reduce setup friction.

Compatibility and performance

Backward compatibility is preserved; changes are additive.

Existing plugin configuration continues to work.

Runtime impact is expected to be minimal and mostly limited to static asset serving during watch-mode usage.

How it was tested

View Expected This PR
Table view image image
Graph view image image

How to run the server

  • Run rush build -t rush in your terminal
  • Then, run node ./apps/rush/lib-esm/start-dev.js start --port <port_number>
  • Find the dashboard in https://127.0.0.1:<port_number>/dashboard/dashboard.html

Impacted documentation

  • Plugin README was updated with dashboard configuration and usage guidance.
  • No website documentation updates identified.

Comment thread rush-plugins/rush-serve-plugin/src/dashboard/dashboard.ts Outdated
Comment thread rush-plugins/rush-serve-plugin/src/dashboard/dashboard.ts Outdated
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
// See LICENSE in the project root for license information.

/* eslint-disable @typescript-eslint/no-explicit-any */

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you use unknown instead of any?

@iclanton iclanton Jul 29, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, a lot of these things should have real types.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I'm aiming to remove these lint disabled rules before landing my changes.

executionStates: Map<string, any>,
stateArray: any[]
): void {
if (!stateArray) return;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The type doesn't allow a nullish value to be passed in

// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
// See LICENSE in the project root for license information.

/* eslint-disable @rushstack/no-new-null */

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are you disabling these rules?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just to bypass the errors for now and view the expected dashboard. I'll clean them up before checking in this PR.

"extends": "./node_modules/local-node-rig/profiles/default/tsconfig-base.json",

"compilerOptions": {
"lib": ["ES2022", "DOM"],

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider putting the dashboard code in its own project so you can use the web rig.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's part of this plugin so, we should keep the dashboard under the rush-serve-plugin path.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Needs triage

Development

Successfully merging this pull request may close these issues.

3 participants