- Redesigned workspace: one header band, a new sidebar and menus, a chat you can hide, and no site overview #5215
- Give the app its own design system, ported from the redesign #5289
- Match the redesign's global foundations and gather the theme in one place #5364
- Draw every icon with the redesign's icon set #5340
- Match the redesign's motion across the app #5344
- Appearance settings: accent color, tint intensity and contrast #5339
- Show the Desktop app as WordPress Studio and adopt the new app icons #5362
- Show colored app logos in the Open in menus #5360
- Final fidelity pass for starting and opening chats #5373
- Restyle dialogs and toasts app-wide #5221
- Dialogs fade in on the shell's timing, including Rename chat #5246
- Dialog backdrops, blocked sends and the composer beside the preview move like the redesign #5418
- Simplify dialog backdrops and align command palette styling #5536
- Improve spacing and sizing in small dialogs #5507
- Improve primary button contrast and hover states #5498
- Improve rounded button spacing and mute composer chevrons #5551
- Keep active controls opaque and unify button feedback #5535
- Unify send and plus icons across Studio #5488
- Unify clipboard copy controls across Studio #5509
- Distinguish sidebar and Settings selection from hover #5534
- Soften chat and command palette surfaces #5545
- Refine chat, dialog, and sidebar surfaces #5578
- Polish interface controls and appearance #5562
- Use accent colors for user messages and Publish #5572
- Welcome new users with one dialog over the empty workspace #5374
- What's New: Announce the redesign and show it once per content version #5375
- Match the redesign's header band and chat pane menu #5353
- Keep chat controls in a shared workspace header #5541
- Remember chat and preview layouts per site #5538
- Restore each site's last chat when switching sites #5580
- Open sites without creating empty chats #5473
- Replace the site dropdown with the site actions menu #5282
- Use the site menu for workspace lifecycle actions #5510
- Remove the Stop button from the workspace header #5477
- Remove busy-state explanations from action menus #5453
- Improve the Open in menu order and start stopped sites automatically #5550
- Refine site controls, chat navigation, and preview behavior #5563
- Show a button to reopen the hidden chat beside the site menu #5485
- Keep the sidebar toggle and site menu in place as the chat hides and shows #5487
- Keep the hidden chat closed when opening site settings #5448
- Start from a site's context menu opens it, Export waits for a busy site, and the empty workspace follows sites #5421
- Match the redesign's sidebar groups, rows, menus and footer #5354
- Pinned sites and chats in the sidebar, shared by both Studio apps #5223
- Add a site straight into Pinned from the Pinned group's + #5247
- Needs input group: chats waiting on your answer move to the top of the sidebar #5229
- Sidebar chat actions: rename, read/unread, archive with undo #5216
- Select several sites and chats in the sidebar and act on them at once #5250
- Small windows: the sidebar opens over the workspace, and Studio stops resizing the window #5249
- Make the sidebar reliable: every chat reachable, overlay closes on picks, bulk shortcuts, run-once toast actions, persisted state #5294
- Restyle the sidebar message cards as toasts #5371
- Make the sidebar card actions run again, so Restart installs a downloaded update #5528
- Replace the update-ready notice with an accent update button #5554
- Start a sidebar multi-selection from the open chat, never from its site row #5387
- Keep the sidebar multi-selection through bulk actions, and reach row menus from the keyboard #5414
- Allow excluding sites from bulk removal #5533
- Show the site list's error state instead of refetching it in a loop #5404
- Show the chat list's error instead of refetching it in a loop #5431
- Sidebar reachable on the empty workspace, restored by Reset interface, and sliders that don't jump back #5426
- Sidebar row actions and Share's ready dot show on hover, and Escape keeps focus on the sidebar toggle #5428
- Sidebar groups reopen on their first item and fold their sites #5413
- Dragged sites fold, drops land on their new slot, and drops outside a list move nothing #5423
- Fix sidebar drag previews and drop feedback #5478
- Add sidebar sorting menus and interface reset defaults #5480
- Mark as unread sticks on the open chat, and Add AI credits returns focus to the Model button #5416
- Select the next Recent chat after archiving #5444
- Keep archived chat navigation within its site or Recent #5491
- Keep parent sites collapsed when opening Recent chats #5445
- Keep parent sites collapsed when opening pinned chats #5469
- Keep sidebar chat selection with navigation history #5532
- Keep the sidebar divider visible above the footer gradient #5446
- Unify sidebar hover previews and narrow-window flyovers #5456
- Reset the sidebar scroll position when reopening #5462
- Prevent automatic sidebar docking when widening the window #5464
- Dismiss the floating sidebar when opening a dialog #5463
- Polish sidebar layout and interface details #5556
- Make sidebar hover feedback immediate #5560
- Polish sidebar scrolling and small interface details #5584
- Restyle the composer and transcript to match the redesign #5264
- Match the redesign's transcript #5369
- Composer: match the redesign's command list, model picker, column, chips, notices and queue #5350
- Make chat runs recover and port the redesign's chat behaviors #5292
- Keep agent runs, their questions and transcripts in sync after a reload or dropped connection #5209
- Split agent runs and keep a slow active-runs snapshot from overwriting newer run state #5381
- Keep a chat idle when its run finishes before the send is acknowledged #5405
- Stream replies as they arrive and re-render only what changed in the transcript #5398
- Let signed-out Anthropic chats run, show chat requirements as notices, anchor the transcript on prompts, and highlight code #5299
- Switch a chat between its local and live site from the composer #5271
- Fall back to Local in studio ui when a chat's live site was disconnected #5212
- Hide the Work on live site command from the composer for now #5569
- Empty the composer on send so a reopened chat doesn't bring the sent message back #5402
- A failed send keeps attachments added meanwhile, Enter on a disabled /live doesn't send it, and the welcome dialog drops its unreachable Cancel #5433
- Unify command surfaces and refine composer feedback #5573
- Render agent questions on native radios and checkboxes with a questionnaire primitive #5395
- Unify chat message grouping and questionnaire navigation #5474
- Remove questionnaire option subtext #5502
- Improve chat activity states #5460
- Keep the chat dot grid continuous through site loading #5468
- Fix the doubled chat preview divider border #5466
- Fix the session UI provider crash at / and the chat blanking when the model picker opens #5368
- Stop the chat from looping on its loading skeleton when the AI credits request fails #5288
- Keep the AI usage notice up while a failed quota check is retried #5388
- Keep Balanced and Strong unlocked once an account has bought AI credits #5482
- Offer the design system view from the chat instead of switching to it #5519
- Match the redesign's site preview, Publish, Share and annotations #5356
- Preview header: Start/Stop, address field actions, and a More menu when narrow #5272
- Preview lifecycle: a stopped site's screenshot in the chat, captured in both apps #5273
- Preview a Live chat's remote site, and let the agent reload the preview with refresh_browser #5336
- Add responsive site preview controls #5543
- Simplify preview actions and add design system navigation #5461
- Fix preview address editing and polish dropdown behavior #5465
- Keep the preview header, reload and address bar working at the edges #5417
- Keep the preview frame mounted when Back or Forward follows a reload #5389
- Improve the stopped-site thumbnail start button #5537
- Keep preview controls available for stopped sites #5579
- Stage preview annotations with images in the chat draft, sendable from the composer or a Send bar #5283
- Align the CLI's /annotate with the app's annotation flow #5285
- Annotation Cancel exits, iframes keep Annotate ready, and limits count every note #5409
- Prompt users to connect an AI provider before annotating #5496
- Fix annotation Send behavior and queue direct feedback #5501
- Refine annotation markers and stage notes before sending #5549
- Unify annotation and element attachment chips #5546
- Keep annotation highlights flush with the viewport edge #5564
- Move publishing and pulling into a Publish panel in the preview header #5278
- Share previews from the preview header and a Sharing settings tab #5280
- Preview, Publish and Share edges, plus Delete site #5293
- Unify preview sharing and publishing #5511
- Simplify Share and Publish load errors #5529
- Publish once per checkout, and keep Share and the payment gate in step with the browser trip #5420
- Keep publish and pull reviews in the delivery dialog #5552
- Open the publish dialog directly from site menus #5559
- Add a switcher for connected publishing sites #5571
- Make preview creation and actions easier to discover #5570
- Connect requires an empty folder instead of pulling over an existing local site #5403
- Connect asks for an empty folder instead of suggesting an existing WordPress site #5411
- Keep the name and URL of connected sites gone from WordPress.com #5160
- Show symlinked folders as folders in the push tree and count their size #5174
- Keep Studio's local wp-config.php constants out of push archives #5251
- Add sites from a dialog over the workspace, with Blueprint details #5284
- Add site dialog: match the redesign tab by tab, on shared primitives #5352
- Add site: a Connect setup step, the When adding a site preference, and follow-ups #5290
- Add site keeps the typed setup and the focus when going Back #5424
- Clean up the site creation step from a Blueprint #5467
- Refine site creation and Blueprint setup #5565
- Download only Blueprint bundles listed in Studio's catalog #5454
- Improve Personal Blog Blueprint previews and gallery order #5544
- Update the Substrata Blueprint slug after the library rename #5548
- Move Studio and site settings into one searchable dialog #5255
- Settings: match the redesign's settings dialog tab by tab #5355
- Settings and account: exit guard, setting links, search, history, AI providers #5291
- Settings search finds shortcuts, credit balance, snapshots, color and Connect provider #5422
- Settings report failed copies and toggles, keep a failed directory, and a reopened login prompt waits for the running login #5415
- Settings tabs, rows and messages make sense to screen readers #5419
- Translate settings labels on first load and tidy dependencies, reduced motion and stale docs #5376
- Blur the settings dialog while another dialog opens over it #5270
- Keep a site settings change when another save follows it #5406
- Keep a saved preference when a stale fetch resolves after the save #5233
- Instructions and skills settings: switch them on or off for all sites and per site #5256
- Manage WordPress skills from studio ui too #5213
- Add a preferred browser for opening Studio sites #5574
- Show the site's local path in site settings #5484
- Remove the Studio Code on/off preference #5443
- Remove the logout spinner from General settings #5500
- Delete site no longer remembers a cancelled "move to Trash" choice #5400
- Explain the running-sites limit in both Studio apps #5143
- Search sites, chats and commands from a ⌘K command palette #5252
- Shortcuts and palette: the redesign's keyboard model, and settings in ⌘K #5303
- Run simple settings actions directly from the command menu #5582
- Don't open the command palette over a dialog that stays open #5401
- Fix the command palette sidebar icon and export label #5479
- Let notifications be revisited: a marked bell, dismissable and replayable history items, focus-paused toasts, and login toasts #5306
- Open notifications from the palette with the sidebar hidden, and close the history and toasts cleanly #5425
- Improve notification layout, actions, and copy #5475
- Reduce notification close icons to match composer attachments #5503
- Keep toast edges and the close button visible in Safari #5275
- Stack toasts above dialogs and popovers above both, on named layer tokens #5363
- Failure toasts show the CLI's message alone, and an auth change looks the account up once #5412
- Report account refresh failures through notifications #5530
- Replace the online pre-check with the real request's network error #5452
- Clarify the login action in account prompts #5489
- Simplify welcome and account dialogs #5494
- Polish account dialog spacing and loading feedback #5508
- Point Studio's links to wordpress.studio #5566
- Studio Code: Move the site-building workflow into a build-site skill shared by every runtime #5132
- Studio Code: Expose top-level skills to plugins and add edit-manage-site #5137
- Studio Code: Give the agent its WordPress.com site's plan features instead of describing plan tiers #5170
- Studio Code: List the user's WordPress.com sites in site_list #5234
- Studio Code: Bring the remote-site runbook with a WordPress.com active site instead of a rule to load it #5231
- Studio Code: State the active site in the system prompt instead of prepending it to every message #5192
- Studio Code: Reload the preview in the app when the agent finishes, instead of asking the agent to #5171
- Studio Code: Say in the screenshot result when the user cannot see it #5165
- Studio Code: Continue a turn that ends with an empty reply #5205
- Studio Code: Continue a turn whose tool call leaked into the reply as DSML markup #5346
- Studio Code: Stop agent tools from guessing between sites that share a name #5208
- Studio Code: Refuse writes to a Studio site's WordPress core instead of forbidding them in the prompt #5164
- Studio Code: Fill in placeholders in block validation messages #5161
- Studio Code: Flag block attributes the block type does not declare #5300
- Studio Code: Show a core block's declared settings in tool results that show the block #5307
- Studio Code: Read the file a wp_cli --post_content path names #5305
- Studio Code: Refuse wp_cli --post_content JSON that does not parse #5310
- Studio Code: Read wp_cli --post_content quoting the way a shell does #5312
- Studio Code: Refuse a file path given as wp_cli --post_content instead of rewriting the command #5327
- Studio Code: State the active site's WordPress version, block types, and Site Editor copies as facts #5301
- Studio Code: State saved Site Editor copies in tool results, when a call touches the theme file they replace #5343
- Studio Code: Revert active site facts and saved Site Editor copy notes #5361
- Studio Code: Drop the payload-limit prose the Write, Edit and Bash refusals already carry #5162
- Studio Code: Drop the prompt rules that repeat the file tools' own guidance #5189
- Studio Code: Drop the plan guardrail that repeats the hosting-plans-helper skill #5190
- Studio Code: Record tool calls, errors, checks and token usage on studio_code_turn_completed #5297
- Studio Code: Report the skills a turn loads in studio_code_turn_completed #5407
- Studio Code: Move the agent into a @studio/agent package #5514
- STUDIO.md: Drop the skills list that agents already discover from the installed skills #5195
- STUDIO.md: State the core-files rule once, with its reason #5210
- Evals: Report token usage and support follow-up messages #5193
- Evals: Report where a run's time and context go #5197
- Evals: Let the agent ask the user, and run on a WordPress.com site #5230
- Evals: Judge each case on the outcome a user would see #5167
- Evals: Stop a run at a matching tool call, and add skill routing cases #5287
- Evals: Fail a case that goes over its tool call or token budget #5304
- Evals: Keep each routing case's skills in one test #5341
- Evals: Run the screenshot-all-timing eval on an image-capable tier #5136
- WordPress Studio plugin for Claude Code #5180
- Prepare the WordPress Studio plugin for Anthropic's directory #5185
- Clear the avoidable review findings on the plugin for Anthropic's directory #5199
- Codex plugin: OpenAI review metadata, and Studio's tools on first start #5155
- Codex plugin: Add the demo recording for OpenAI's review #5173
- WordPress Studio plugin: Address OpenAI's review (annotations, no generic WordPress.com tool in ChatGPT, informational plans) #5326
- Studio MCP: Declare all three MCP annotations on every Studio tool #5152
- Studio MCP: Add the declared settings of core blocks to tool results #5333
- CLI: Load the MCP server only when studio mcp runs #5235
- CLI: Name --from imports from the captured source (skip the name prompt, match DLA's receipt schema) #5157
- CLI: Keep import reports out of the theme
studio create --fromgenerates #5176 - CLI: Clear the local token on logout even when WordPress.com rejects the revoke #5286
- CLI: Authenticate pull-reprint with Reprint public keys #5486
- CLI: Install the bundled PHP atomically to fix Windows first-launch site start failures #5179
- CLI: Install the bundled WordPress into server-files atomically so concurrent commands never copy a partial install #5314
- CLI: Set Studio's install options inside wp core install #5492
- CLI: Skip setting admin credentials right after the installer set them #5512
- CLI: Bump the SQLite integration to v3.1.2 and keep the database at its fixed path #5515
- CLI: Fail site starts clearly when the custom domain proxy can't start #5206
- CLI: Skip ports another app holds on any local address when picking a site port #5207
- CLI: Give each PHP worker a distinct port #5259
- CLI: Keep Studio mu-plugins in a stable folder so WP-CLI runs with another TMPDIR don't break running sites #5253
- CLI: Save the email each site sends, one folder per site #5359
- CLI: Clear the graceful-stop timer so site stop returns as soon as the site is down #5476
- CLI: Drop open proxy connections when stopping a site #5531
- CLI: Load each command's implementation when the command runs #5495
- CLI: Load @inquirer/prompts when a prompt is shown #5316
- CLI: Import each date-fns function from its own path #5313
- CLI: Write the opcache file cache only on Windows #5504
- CLI: Remove import runtime versions no import uses any more #5518
- CLI: Time each site-start step in the studio_site_start Tracks event #5338
- Native PHP: Don't serve dotfiles or the SQLite database directory #5198
- Native PHP: Balance POST requests across the worker pool #5240
- Native PHP: Update the bundled PHP binaries to 8.2.35, 8.3.36, 8.4.27 and 8.5.12 #5266 #5269 #5268 #5267
- Desktop: Open the window without waiting for the site list #5140
- Desktop: Start a site from its path in cli.json instead of listing every site first #5351
- Desktop: Apply site events to the site list instead of refetching it #5506
- Desktop: Finish site creation when the CLI reports done, not when telemetry lets the process exit #5522
- Desktop: Show the site a start or stop reports, instead of waiting for its process to exit #5524
- Desktop: Stop stray WP-CLI output from crashing the app on launch #5248
- Desktop: Keep the app booting when dev-only setup fails on Intel Macs #5201
- Desktop: Let the macOS app handle wp-studio:// links #5214
- Desktop: Open deep links that arrive before the app is ready, and reveal a linked setting each time #5410
- Desktop: Fix the duplicate fullscreen menu item on macOS #5497
- Desktop: Open the system's terminal on Linux instead of requiring GNOME Terminal #5242
- Desktop: Run Studio's quit cleanup once when will-quit fires again #5281
- Desktop: Fix sync cancel, folder names in open-in-terminal/editor, and smaller edge cases #5177
- Desktop: Skip non-PE binaries in the Windows signing hook #5202
- Desktop: Run CLI commands through the shared CLI runner #5142
- Desktop: Remove dead main-process code left over from the Classic UI #5139
- Remove the experimental hosted backend #5211
- Share local media containment and reject rebound hosts in studio ui #5141
- Read and write user preferences through one shared module #5144
- Share push, pull, cancel and sync lookups between Desktop and studio ui #5145
- Remove the fs-ext binary cleanup left over from the Playground runtime #5203
- CLI: Move the create --from static import pipeline into its own module #5194
- Agentic UI: Reorganize apps/ui into lib packages and features #5372
- Agentic UI: Keep the data layer below components and colocate single-use hooks #5367
- Agentic UI: Break the import cycle through the feature entries and lint against new ones #5377
- Agentic UI: Split the command palette into command definitions, search and bindings #5382
- Agentic UI: Split the sidebar site list into row, chat and group modules with pure collections #5383
- Agentic UI: Split the composer into its picker, attachments, notice, commands and draft hooks #5384
- Agentic UI: Split the chat conversation into messages, trace rows, agent questions and a tested transcript derivation #5385
- Agentic UI: Split the site preview into header, surface, navigation hooks and tested helpers, and the create-site form #5386
- Agentic UI: Build the sidebar rows on a sidebar kit with real list semantics #5399
- Agentic UI: Use Button variants instead of local button overrides in Publish and the account prompt #5394
- Agentic UI: Adopt a base reset like the redesign's preflight and drop the declarations it covers #5370
- Agentic UI: Close the CSS design-system gaps with tokens, shared recipes, surface stepping, scoped dark mode and a token lint #5390
- Agentic UI: Remove dead code left by the port #5366
- Agentic UI: Remove the primitives' unused parts #5365
- Agentic UI: Remove the unused useLiveWpcomSites hook #5357
- Agentic UI: Lint feature code that reaches into the UI primitives #5396
- Agentic UI: Check apps/ui for unused code in CI #5391
- Agentic UI: Proxy the studio ui API from the browser dev server #5392
- Agentic UI: Add playground pages for the chat transcript and the preview animation #5397
- Agentic UI: Say which primitive to use and how to restyle one in the lib/ui README #5393
- Agentic UI tests: Test behavior over a fake connector and port the redesign's unit tests #5408
- Agentic UI tests: Remove the mock-heavy unit tests the behavior tests cover, and rewrite the rest over the fake connector #5432
- Agentic UI tests: Fix the flaky preference save-order test #5429
- Remove dead code, low-value tests and stale comments across the repo, apps/ui first, and run knip repo-wide #5441
- Upgrade TanStack Router so a superseded route redirect can't close a dialog opened after it #5329
- Bump Playwright to 1.64.1 to fix a capture crash from CDP responses for crashed sessions #5218
- Update knip to v6 so it no longer blocks the TypeScript 7 upgrade #5204
- Type-check the Forge config and fix its Forge 8 type errors #5244
- Update type packages, keeping TypeScript on 6.0 #5245
- Describe the shared-operation architecture and drop stale docs #5178
- Add Markdown versions of the developer docs to the repository #5182
- E2E: Cover each backup format and Blueprint step once, in the CLI suite #5232
- E2E: Run desktop test files in two parallel workers #5236
- E2E: Upload each desktop session's daemon logs when a run fails #5261
- E2E: Drop desktop site tests that repeat CLI E2E checks and merge the two adopt-directory tests #5311
- E2E: Record the app window in each failed desktop test's trace #5315
- E2E: Fold the agentic UI's critical flows into the Desktop e2e and keep it to flows that need the real app #5430
- E2E: Keep daemon logs and site process exit codes from failed CLI e2e runs #5127
- E2E: Shrink the concurrent server-files install test so it fits Windows CI's time limit #5499
- CI: Skip desktop E2E and performance metrics on Studio Code agent-only changes #5308
- CI: Move the trunk performance baseline to the Add site dialog #5342
- CI: Download the Windows RELEASES artifacts whichever path separator they were uploaded with #5523
- CI: Bump Node to 24.22.1 to stop Windows CI processes crashing with 0xC0000409 #5332
- CI: Allow triggering the PHP CLI version check workflow manually #5243
- CI: Remove the unused Claude GitHub Actions workflows #5521
- CI: Fix the trunk build: restore openNoticeHistory for the command palette #5334
- CI: Fix the trunk unit tests: mock useNoticeHistory for the user menu's notification bell #5335
- Metrics: Time site starts from the moment the site shows as running #5505
- Limit Dependabot to security updates #5328
- Fix Dependabot security alerts with a lockfile refresh #5330
- build(deps): bump the wordpress group across 1 directory with 30 updates #5028
- build(deps): bump the electron-forge group across 1 directory with 13 updates #5026
- build(deps): bump the sentry group across 1 directory with 13 updates #5228
- build(deps): bump the testing group across 1 directory with 8 updates #5226
- build(deps): bump the eslint group across 1 directory with 4 updates #5150
- build(deps): bump follow-redirects from 1.16.0 to 1.16.1 #5219
- build(deps): bump body-parser #5378
- build(deps): bump undici from 7.29.0 to 7.30.1 in /docs/user #5442
- build(deps): bump anthropics/claude-code-action from 1.0.244 to 1.0.248 #5148
- build(deps): bump anthropics/claude-code-action from 1.0.248 to 1.0.252 #5222
- build(deps): bump anthropics/claude-code-action from 1.0.252 to 1.0.255 #5319
- build(deps): bump actions/upload-artifact from 7.0.1 to 7.0.2 #5147
- build(deps): bump ruby/setup-ruby from 1.328.0 to 1.329.0 #5149
- build(deps): bump the ruby-minor-and-patch group with 2 updates #5181
- build(deps-dev): bump the electron group with 2 updates #5151
- build(deps-dev): bump the electron group with 2 updates #5224
- build(deps-dev): bump electron from 44.9.0 to 44.9.1 #5380
- build(deps-dev): bump vite from 8.2.2 to 8.3.4 #5220
- build(deps-dev): bump the vite group across 1 directory with 2 updates #5227
- build(deps-dev): bump vite from 8.3.4 to 8.3.5 in the vite group across 1 directory #5325
- build(deps-dev): bump typescript-eslint from 8.71.2 to 8.72.0 in the eslint group #5324
- @crweiner made their first contribution in #5021
Full Changelog: v2.0.4...v2.1.0
Download Studio 2.1.0: Mac Intel (DMG), Mac Apple Silicon (DMG), Windows - x64, Windows - ARM64, Linux - x64 (DEB), Linux - ARM64 (DEB)
The latest version is always available on the WordPress Studio site.