Repository navigation
Releases: tooluse-labs/perfetto-desktop
Release list
v0.2.7
Fixes
- Fixes the PowerShell command generated for Claude Code so a transient
New-TemporaryFilefailure no longer mis-binds the prompt to--mcp-config. PowerShell 5.1's native-arg binder silently drops$null/empty values from a native command's argv, which caused the trailing prompt to slide into--mcp-config's slot andclaudeto report a confusingMCP config file not found: <cwd>\<prompt>.
The command now derives the temp path explicitly from $env:TEMP plus a fresh GUID (which cannot evaluate to null), validates the write with Test-Path + throw, and double-quotes "$tmp" in the claude invocation so even an unexpected empty value yields a literal "" token instead of disappearing from argv. Construction primitives stay CLM-safe.
Verification
- Updated the regression test that locks the PowerShell Claude command shape: it now asserts the absence of
New-TemporaryFile, the presence ofJoin-Path $env:TEMP+[guid]::NewGuid().ToString('N'), theTest-Path -LiteralPath $tmpvalidation, and the double-quoted--mcp-config "$tmp"form, with each failure message documenting which PS 5.1 quirk the assertion guards. cargo testagainst theagent_bridgemodule passes.
Full Changelog: v0.2.6...v0.2.7
v0.2.6
Fixes
- Fixes the PowerShell command generated for Claude Code on systems running Windows PowerShell Constrained Language Mode.
- Adds a startup prompt to the generated Claude and Codex commands so the agent first calls
perfetto-get-trace-infoand analyzes the currently loaded Perfetto Desktop trace.
The command now creates the temporary MCP config file with New-TemporaryFile and writes it with Set-Content, avoiding the blocked [IO.Path]::GetTempFileName() .NET method call.
Verification
- Added a regression test that prevents the generated PowerShell Claude command from using
[IO.Path]::GetTempFileName(). - Added a regression test that all generated CLI commands carry the loaded-trace startup prompt.
- Verified the replacement temp-file command shape in the local constrained PowerShell environment.
Full Changelog: v0.2.5...v0.2.6
v0.2.5
Fixes
- Fixes Windows installs that kept showing the IIS default page after upgrade by moving the WebView2 profile used by the main window to a clean app-owned directory.
- Forces the Windows release job to rebuild the Tauri executable after restoring Rust cache, so downloaded Perfetto UI dist assets cannot be shadowed by a stale cached binary.
Verification
- Locally rebuilt the Windows NSIS package with the Linux-built Perfetto UI dist.
- Launched the release executable with the existing default WebView2 profile and confirmed the main WebView reports
Perfetto UIand loadsv55.0-086179353/frontend_bundle.jsinstead of the cached IIS page.
Full Changelog: v0.2.4...v0.2.5
v0.2.3
Perfetto Desktop v0.2.3
Patch release for the Windows installer startup path.
Fixes
Windows installers must use Tauri's embedded asset protocol
The desktop shell now enables Tauri's custom-protocol feature in Cargo by
default, so nonstandard release invocations cannot accidentally produce a
Windows binary that falls through to the machine's local IIS default page.
The Windows release job also logs the exact Tauri build command and fails before
uploading installers if tauri/custom-protocol is not enabled.
Install
macOS arm64
- Download
Perfetto.Desktop_0.2.3_aarch64.dmgfrom the assets below. - Open the DMG, drag Perfetto Desktop.app to /Applications.
- If macOS Gatekeeper blocks first launch:
xattr -d com.apple.quarantine "/Applications/Perfetto Desktop.app"
Windows x64
- Download either
Perfetto.Desktop_0.2.3_x64-setup.exe(NSIS) or
Perfetto.Desktop_0.2.3_x64_en-US.msi(MSI). - Run the installer. SmartScreen may prompt because the binary is not yet
code-signed; choose More info -> Run anyway.
Full Changelog: v0.2.2...v0.2.3
v0.2.2
Perfetto Desktop v0.2.2
Patch release for the Windows installer.
Fixes
Windows no longer opens the local IIS splash page
The Windows release job now packages the Linux-built Perfetto UI dist as a
tarball, extracts it into Tauri's exact frontendDist directory on the Windows
runner, and fails the release before bundling if index.html is missing.
This prevents a broken Windows installer from launching without embedded UI
assets and falling through to the host machine's local IIS page.
Install
macOS arm64
- Download
Perfetto.Desktop_0.2.2_aarch64.dmgfrom the assets below. - Open the DMG, drag Perfetto Desktop.app to /Applications.
- If macOS Gatekeeper blocks first launch:
xattr -d com.apple.quarantine "/Applications/Perfetto Desktop.app"
Windows x64
- Download either
Perfetto.Desktop_0.2.2_x64-setup.exe(NSIS) or
Perfetto.Desktop_0.2.2_x64_en-US.msi(MSI). - Run the installer. SmartScreen may prompt because the binary is not yet
code-signed; choose More info -> Run anyway.
Full Changelog: v0.2.1...v0.2.2
v0.2.1
Perfetto Desktop v0.2.1
Patch release. CLI Agent's connection commands now actually work on Windows
PowerShell, and the README's quick start now lands new users on the installer
flow instead of dropping them into build-from-source territory.
Fixes
CLI Agent commands work on Windows PowerShell
The previous release generated the Codex and Claude Code commands in a
sh-only form. On Windows PowerShell, two things went wrong:
- Codex's
VAR=value cmdinline env-var prefix isn't valid PowerShell
syntax. PowerShell would treatPERFETTO_DESKTOP_MCP_TOKEN=...as a
command name and fail with "command not found". - The inline JSON passed to
claude --mcp-config '{...}'got mangled
whenclaude.cmd(the npm-bin shim) handed argv to cmd.exe: the
tokenizer drops embedded", so claude received a quoteless string
and tried to resolve it as a relative file path.
The CLI Agent panel now generates separate PowerShell variants and shows
a Bash / Zsh ↔ PowerShell toggle, defaulting to PowerShell on
Windows. The PowerShell variants:
- Codex uses
$env:VAR='...'; codex ...and flips the-cTOML pairs
to outer-double / inner-single quotes (-c "key='value'"). cmd.exe
strips the outer doubles; the inner singles pass through, and Codex
parses them as TOML literal strings. - Claude writes the JSON config to a temp file with
Out-Fileand
passes the path to--mcp-config, avoiding"on the command line
entirely.
Bash/zsh variants are unchanged.
Documentation
- README's Quick start is now user-facing: download an installer →
open a trace → use CLI Agent. The build-from-source steps and the
repository layout moved to a Build from source section near the
bottom for contributors. Same restructure on the Chinese README.
Internal
- The shell toggle uses upstream Perfetto's
SegmentedButtonswidget
(keyboard navigation and ARIAradiogroupbaked in) instead of a
hand-rolled two-button mutex. - Two new unit tests lock down the PowerShell command shape so future
refactors can't silently reintroduce the cmd.exe regression.
Install
macOS arm64
- Download
Perfetto.Desktop_0.2.1_aarch64.dmgfrom the assets below. - Open the DMG, drag Perfetto Desktop.app to /Applications.
- If macOS Gatekeeper blocks first launch:
xattr -d com.apple.quarantine "/Applications/Perfetto Desktop.app"
Windows x64
- Download either
Perfetto.Desktop_0.2.1_x64-setup.exe(NSIS) or
Perfetto.Desktop_0.2.1_x64_en-US.msi(MSI). - Run the installer. SmartScreen may prompt — choose More info → Run anyway
on first launch, since the binary is not yet code-signed.
Verify it works
- Open a trace.
- Click CLI Agent in the sidebar. The shell toggle defaults to
PowerShell on Windows and Bash / Zsh elsewhere. - Copy the Codex or Claude Code command and run it in your
terminal. Ask the agent to callperfetto-get-trace-info— it
should print the loaded trace's metadata.
Full Changelog: v0.2.0...v0.2.1
v0.2.0
Perfetto Desktop v0.2.0
This release ships CLI Agent, the local MCP bridge that lets Codex,
Claude Code, and other MCP-speaking agents work directly against the
trace currently open in Perfetto Desktop. It also adds an unsigned
Windows x64 release alongside the existing macOS arm64 build.
What's new
CLI Agent
A local HTTP MCP bridge exposed from the Tauri shell:
- Loopback bind, bearer-token auth, host/origin checks, single-instance
ownership of the default port (38471, falls back to ephemeral on
collision). - Sidebar panel under "current trace" with one-click connection commands
for Codex and Claude Code. Copy buttons stay disabled until a
trace loads, so the agent always starts with trace context. - WebView-side
McpServerexposes upstream Perfetto MCP tool names where
applicable (perfetto-execute-query,perfetto-list-interesting-tables,
perfetto-list-table-structure,show-perfetto-sql-view,
show-timeline) plusperfetto-get-trace-info. A single source of
truth keepstools/liststable across pre-trace and trace-loaded states. - Long-poll RPC pump (~25s) replaces the previous 250 ms polling loop:
idle Tauri IPC traffic drops from roughly 14 k/h to ~144/h, with no
added wake-up latency for new requests.
Windows x64 release
- New
build-windows-x64job in the Release workflow. Because upstream
Perfetto's UI build does not run on Windows, the UI dist is pre-built
on Linux and consumed by the Windows packaging job; Tauri's prebuild
hook is disabled there via JSON Merge Patch on--config. - Ships unsigned NSIS
.exeand MSI.msiinstallers. - Windows SmartScreen will warn on first launch (the binary is not yet
code-signed).
Documentation
- README rewritten around CLI Agent, in both English and 简体中文,
including a comparison table with the headlessperfetto-mcp-rs
companion. - Added explicit design rationale ("Why CLI Agent, not extend AI Chat" /
"Why no embedded terminal").
Notable fixes
tools/listnow returns the same shape before and after a trace loads;
previously two separate code paths emitted different JSON Schemas, so
hosts that cached the schema saw drift.- Long-poll waker survives a disable→enable cycle (no more up-to-25 s
dead zone after rotating the bridge). - Bridge initialization failures surface as MCP
-32603errors with the
underlying message instead of silent 25 s timeouts on the HTTP side.
CI and build performance
- Cold-cache Perfetto setup is roughly 5 minutes faster:
git clone --filter=blob:none
for upstream Perfetto plus a small upstream patch (0006) that lets
the desktop wrapper opt out of Perfetto's//test/datasync via
PERFETTO_SKIP_TEST_DATA=1. - Release publication is now its own job, gated on tag refs only; build
jobs run on everyworkflow_dispatchfor smoke testing. scripts/sync-overlay.shno longer depends onrsync, so the overlay
step works on Windows runners through git-bash.
Known limits
- The app is unsigned. macOS Gatekeeper and Windows SmartScreen will
warn on first launch. - CLI Agent currently exposes read-only metadata, bounded SQL, and two
UI-driving tools. Richer UI control surfaces (audit log export, more
selection/timeline tools) are planned for the next release. - Local Windows bootstrap docs are still pending; the Windows installer
is currently produced only by CI.
Install
macOS arm64
- Download
Perfetto Desktop_0.2.0_aarch64.dmgfrom the assets below. - Open the DMG, drag Perfetto Desktop.app to /Applications.
- If macOS Gatekeeper blocks first launch:
xattr -d com.apple.quarantine "/Applications/Perfetto Desktop.app" open "/Applications/Perfetto Desktop.app"
Windows x64
- Download either the NSIS
.exeor the MSI.msiinstaller from the
assets below. - Run the installer. SmartScreen may prompt — choose More info → Run anyway
on first launch, since the binary is not yet code-signed.
Verify it works
- Open a trace.
- Click CLI Agent in the sidebar (under the current trace section).
- Copy the Codex or Claude Code one-time command and run it in a
terminal. - Ask the agent to call
perfetto-get-trace-info. Then try something
like "show the 10 longest slices in this trace" — the agent will
run a bounded PerfettoSQL query through the bridge and return the
result rows.
Full Changelog: v0.1.0...v0.2.0
v0.1.0
Perfetto Desktop v0.1.0
The first public release of Perfetto Desktop — the Phase 1 MVP. A Tauri 2 macOS desktop wrapper for Perfetto, built by Tooluse Labs. Unofficial; not affiliated with Google.
What this is
Open Perfetto trace files in a native macOS window with the full Perfetto UI. Upstream's com.google.PerfettoMcp plugin is enabled by default — drop a Gemini API key into Settings and an in-app AI Chat unlocks against the loaded trace.
What's in this release
- macOS arm64 (Apple Silicon) DMG, unsigned.
- Bundles upstream Perfetto UI at SHA
08617935(v55.0). - Default-enables
com.google.PerfettoMcpso the AI Chat menu appears in the sidebar after a trace loads — no manual plugin toggle in the Plugins page. - Works around the macOS WKWebView WASM Memory64 incompatibility by calling
ui/build.jsdirectly instead ofui/run-dev-server(which hardcodes--only-wasm-memory64). See architecture §6.1. - Service Worker bypassed (upstream's user-disabled path covers WKWebView; no patch required).
- One upstream patch lands at setup time (
patches/perfetto/0002-default-enable-perfetto-mcp.patch); upstream Perfetto source is never modified in this repo's git history.
What's NOT in this release
This is a Phase 1 MVP. Out of scope for v0.1.x:
- Linux / Windows builds — Phase 2.
- Code signing / notarization — first launch will trigger macOS Gatekeeper. See install steps below.
- Fork-owned AI Chat plugin (DeepSeek, ZAI/GLM, OpenAI-compatible, Anthropic) — Phase 2.
- Auto-update — Phase 3.
Install
- Download
Perfetto Desktop_0.1.0_aarch64.dmgfrom the assets below. - Open the DMG, drag Perfetto Desktop.app to /Applications.
- First launch (the app is unsigned, so macOS Gatekeeper blocks it). Pick one:
- Terminal — drop the quarantine flag and launch:
xattr -d com.apple.quarantine "/Applications/Perfetto Desktop.app" open "/Applications/Perfetto Desktop.app"
- GUI — double-click the app, click Cancel on the warning, then open System Settings → Privacy & Security, scroll to "Perfetto Desktop was blocked…", click Open Anyway.
- Terminal — drop the quarantine flag and launch:
To enable the AI Chat: open Perfetto's Settings (gear icon, sidebar), search for Gemini Token, paste a key from https://aistudio.google.com/app/apikey, reload, then load a trace. The AI Chat menu appears in the sidebar's current_trace section.
Headless companion
If you don't need the GUI and just want your existing MCP client (Claude Code, Codex, Cursor, Claude Desktop) to query a Perfetto trace, tooluse-labs/perfetto-mcp-rs is the recommended companion — a standalone stdio MCP server.
Verify it works
After install, the app should:
- Boot to the Perfetto UI homepage.
- Load
.pftrace/.perfetto-tracefiles via the sidebar's Open trace file. - Render a Timeline view with Browser / Renderer / etc. tracks.
- Show AI Chat in the sidebar after a trace is open.
If the AI Chat menu does not appear after a trace loads, check Plugins in the sidebar — com.google.PerfettoMcp should already be toggled on.
License
Apache 2.0, matching upstream Perfetto.
Full Changelog: https://github.com/tooluse-labs/perfetto-desktop/commits/v0.1.0