Add VS Code-style developer status bar to dev and staging builds - #7259
Merged
Conversation
Add a get_process_memory_bytes Tauri command (sysinfo RSS of the current process) with regenerated bindings and permissions, for the developer status bar's MEM readout. Co-authored-by: John Jeong <ComputelessComputer@users.noreply.github.com>
Mount a slim bottom bar in the main window when show_devtool is true. It shows the build channel, version and git hash (click opens the Devtools panel), FPS, Tauri IPC traffic (invokes/callbacks per second), host process memory, and, under the Vite dev server, React Scan render counts with toggles for re-render outlines and the React Scan toolbar. Move React Scan bootstrapping into devtools-bar/react-scan.ts and hide its floating toolbar by default now that the bar embeds its metrics. Co-authored-by: John Jeong <ComputelessComputer@users.noreply.github.com>
✅ Deploy Preview for anarlog canceled.
|
|
|
The bar re-renders once a second, so React Scan outlined its own segments and counted them as renders. Mark each bar component's props as ignored so outlines and the RENDERS counter only reflect the rest of the app. Co-authored-by: John Jeong <ComputelessComputer@users.noreply.github.com>
ComputelessComputer
marked this pull request as ready for review
September 2, 2026 13:30
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit f60c556. Configure here.
Wait for build metadata before rendering and use the mount-only metrics hook.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
Problem: Dev and staging builds have no at-a-glance runtime signal in the window itself. Checking which build you are on, whether the UI is dropping frames, how chatty the frontend is with the Rust side, or whether memory is drifting means opening Web Inspector or the separate Devtools panel window. React Scan runs in dev, but as its own floating toolbar that is disconnected from the rest of the app chrome.
Fix: Mount a slim, Linear/VS Code-style status bar at the bottom of the main window whenever
show_devtoolis true (debug builds,dev/devtoolsfeatures, and thecom.hyprnote.stagingbundle). Stable builds render nothing and the layout wrapper is the same one the Windows title bar already used. Segments, left to right:DEV/STAGINGwith version and short git hash; whole bar is tinted per channel (blue = dev, amber = staging). Clicking it opens the existing Devtools panel window (macOS-only, same as the Settings → Developers button).↑invokes,↓callbacks (invoke responses, events, channel messages). Tauri freezes__TAURI_INTERNALS__, so this is observed from the outside: invokes arefetchcalls to theipcscheme, deliveries go through the exposedcallbacksMap whosegetwe shadow. The bar's own memory poll is excluded.miscplugin commandget_process_memory_bytes(sysinfo); sparkline is min/max scaled so slow growth is visible.Developer status bar in the running dev build
Zoomed status bar: DEV 0.0.0 7df7853, FPS 62, IPC, RENDERS 0, MEM 313MB
React Scan bootstrapping moved out of
main.tsxintodevtools-bar/react-scan.ts. Note that React Scan only attaches in Vite dev because it relies on the devtools hook React Refresh installs before React evaluates; staging (production bundle) shows the bar without the React Scan segments. Enabling it there would needreact-scan/install-hookloaded ahead of React behind a build-time channel flag, which is left as a follow-up.Copy is English-only on purpose: the bar never ships in stable, so it is kept out of the Lingui catalogs.
Verification
pnpm -F desktop typecheck,pnpm -F @anlg/plugin-misc typecheckpnpm -F desktop test— 430 files / 3692 tests pass, including newdevtools-bar/metrics.test.tsanddevtools-bar/index.test.tsx, and an updatedmain/shell-frame.test.tsxpnpm exec oxlint --quiet --format=github apps/desktop/src/— 0 errorspnpm -F desktop i18n:check— no catalog diffpnpm exec dprint fmt/dprint checkon changed filescargo test -p tauri-plugin-misc(regeneratesbindings.gen.tsand autogenerated permissions, committed) andcargo clippy -p tauri-plugin-misc --tests -- -D warningsturbo dev:desktopon Linux (WebKitGTK), skipped onboarding, confirmed the bar renders in the main shell, FPS/IPC/MEM update every second, RENDERS toggles tooffand back, thereact scanbutton mounts/unmounts React Scan's toolbar, and the bar no longer outlines itself while idle (RENDERS stays at 0).cargo check -p desktop --features direct-distribution|app-store(the dev build compiled and ran; only themiscplugin's internal surface changed andinit()is unchanged).To show artifacts inline, enable in settings.