Thank you so much for using Orca and for your continued support! ❤️
Please note: It usually takes 48–72 hours for a landed PR to be released (except P0+ fixes). We have many more exciting PRs and features coming in later versions!
Notable changes
- Faster, smoother everyday use through Markdown, worktree, terminal, and renderer performance improvements.
- More reliable agent sessions, native chat, remote/SSH connections, and Windows/WSL workflows.
- Refined browser, automation, mobile, onboarding, and cross-platform infrastructure.
UI / workspaces
- Improve worktree palette layout with flex-1 titles by @AmethystLiang in #17273
- perf(markdown): skip closed-search update renders by @nwparker in #17162
- perf(markdown): skip unmatched list tokenizer scans by @nwparker in #17134
- perf(markdown): update code highlighting incrementally by @nwparker in #17147
- perf(markdown): cache repeated syntax highlighting by @nwparker in #17158
- Make worktree palette hint rows keyboard-clickable by @AmethystLiang in #17272
- Raise rich Markdown size limit to 600 KB by @nwparker in #17288
- Clarify automation history unavailability and improve recovery UX by @AmethystLiang in #17284
- fix(browser): close guest-owned split tab by @AmethystLiang in #17281
- perf(worktrees): resolve watcher targets concurrently by @nwparker in #17166
- perf(editor): skip unchanged review-note reflows by @nwparker in #17212
- perf(markdown): reuse rich-mode eligibility per render by @nwparker in #17219
- perf(browser): release popup origin bar contents by @nwparker in #17234
- perf(automations): narrow status observer updates by @nwparker in #17249
- perf(worktrees): batch-prune stale local metadata by @nwparker in #17278
- Split external automation manager by @nwparker in #17149
- Split automation dispatch event handling by @nwparker in #17155
- Split settings navigation metadata by @nwparker in #17157
- Split Linear item drawer responsibilities by @nwparker in #17231
- Split Git worktree responsibilities by @nwparker in #17253
- Split Settings page responsibilities by @nwparker in #17271
- Split Activity page responsibilities by @nwparker in #17283
- Split accounts pane responsibilities by @nwparker in #17286
- fix(sidebar): keep project header labels from switching to the repo name by @nwparker in #16877
- fix(linear): collapse duplicate per-team status rows in the Tasks filter by @nwparker in #16879
- fix(add-project): use the entered group name when opening a folder by @nwparker in #16881
- feat(browser): address-bar convergence — previews and browser tabs convert in place (STA-5681) by @Jinwoo-H in #16998
- fix(linear): surface truncation when a deduplicated status exceeds the state-id cap by @nwparker in #17342
- fix(diagnostics): count case-only worktree nesting on macOS by @nwparker in #17364
- fix(browser): apply the app-wide HTTP proxy to embedded browser sessions by @brennanb2025 in #15536
- Open linked reviews in Orca browser by @Jinwoo-H in #17360
Agents / native chat
- perf(renderer): gate pending agent-status retries by @nwparker in #17254
- Split speech session lifecycle by @nwparker in #17123
- Split Codex hook service responsibilities by @nwparker in #17260
- refactor: split Codex account service modules by @nwparker in #17277
- fix(windows): stage node-addon-api headers before process-tree rebuild by @nwparker in #17332
- refactor(native-chat): isolate resolved bridge view by @nwparker in #17339
- fix(orchestration): recover stripped task deps by @Pr1p in #16743
- fix(wsl): scan agent sessions only in running distros by @OrcaWin in #17072
- Revert waiting for setup before agent startup by @AmethystLiang in #17418
Terminal
- fix(terminal): complete OMP stale cwd recovery by @nwparker in #17154
- perf(terminal): bound stalled setup-split grid polling by @nwparker in #17228
- perf(renderer): index unread completion tabs once per snapshot by @nwparker in #17246
- perf(terminal): index accepted input pane ownership by @nwparker in #17287
- perf(terminals): drop disposed queued inspections by @nwparker in #17187
- fix(memory): hydrate retained PTYs before diagnostics by @nwparker in #17308
- Prime native cache before E2E fanout by @nwparker in #17280
- Split terminal output scheduler pipeline by @nwparker in #17131
- Split runtime file client layers by @nwparker in #17188
- Split runtime environments pane layers by @nwparker in #17198
- Split local PTY provider responsibilities by @nwparker in #17206
- Split remote terminal multiplexer responsibilities by @nwparker in #17248
- Split web runtime session responsibilities by @nwparker in #17263
- Split Claude runtime auth responsibilities by @nwparker in #17268
- Split runtime RPC server responsibilities by @nwparker in #17270
- chore(deps): bump electron 43.4.1 and other meaningful runtime deps by @nwparker in #17330
- fix(native-chat): keep a tab launch draft out of split sibling composers by @nwparker in #16883
- fix(pi): stop the titlebar spinner on settlement and idle compaction by @nwparker in #16880
- test(e2e): cover session upgrade and Windows terminal recovery by @AmethystLiang in #17289
- STA-5496: offer Orca Browser for SSH terminal links by @Jinwoo-H in #16503
- Enable React static component and purity lints by @nwparker in #17337
- fix(terminal): restore lossy initial remote snapshots by @Jinwoo-H in #17113
- test(cross-version-wire): compare published fields per frame by @nwparker in #17301
- fix(diagnostics): measure reconciled IME typing latency by @nwparker in #17171
- fix(native-chat): preserve IME composition across async updates by @nwparker in #17169
- perf(rpc): compile Zod request schemas lazily by @nwparker in #17353
- Revert "perf(rpc): compile Zod request schemas lazily" by @nwparker in #17368
- docs(ime): codify desktop composition regression checks by @nwparker in #17172
- fix(terminal): render the IME caret and give the candidate anchor one owner by @nwparker in #17170
- fix(terminal): mask the agent composer's dim placeholder during a preedit by @nwparker in #17377
- fix(linear): stop the filter coverage warning firing on complete selections by @nwparker in #17376
- fix(native-chat): replay a draft clear dropped mid-composition by @nwparker in #17392
Windows, remote server / SSH
- test(cross-version-wire): derive skew expectations from the baseline under test by @brennanb2025 in #17178
- test(shared): stop two suites asserting POSIX separators on Windows by @JahyunBaek in #16511
- fix(worktree): ignore orphan remote-tracking refs in branch conflicts by @JahyunBaek in #16699
- perf(ssh): cache legacy worktree clean fallback by @nwparker in #17213
- Split hosted review creation checks by @nwparker in #17152
- Split daemon initialization lifecycle by @nwparker in #17161
- Split relay dispatcher layers by @nwparker in #17174
- Split CDP bridge responsibilities by @nwparker in #17215
- Split relay Git handler responsibilities by @nwparker in #17217
- fix(bench): report counterbalanced WSL Git medians by @OrcaWin in #13474
- fix(remote): focus host-delegated split panes by @Jinwoo-H in #16886
- perf(preflight): cache WSL CLI probes per distro by @nwparker in #17350
- fix(cli): name PowerShell when it strips quotes from JSON flags by @nwparker in #17351
- test(wsl): guard probes that report failure as a negative answer by @nwparker in #17352
- refactor(preflight): rename execCommandInWsl to execCommandInWslOrThrow by @nwparker in #17375
Mobile
- Split mobile browser pane modules by @nwparker in #17141
- Extract mobile troubleshoot screen styles by @nwparker in #17146
- Split mobile host screen layers by @nwparker in #17181
- perf(mobile): slow certified terminal inventory sweeps by @nwparker in #17182
Performance / reliability
- build: upgrade to pnpm 12 by @nwparker in #17156
- chore: update oxlint and oxfmt by @nwparker in #17150
- perf(startup): skip disabled diagnostic serialization by @nwparker in #17176
- perf(startup): stop rescanning persisted pane tabs by @nwparker in #17179
- Fix md file rendering 2 by @AmethystLiang in #17295
- test(persistence): give the 130k-leaf pane alias scale test headroom by @nwparker in #17323
- fix(crash): suppress Linux namespace SIGTERM reports by @nwparker in #17315
- Prune resolved max-lines suppressions by @nwparker in #17142
- Split pane tree equalization logic by @nwparker in #17145
- Split main window service attachments by @nwparker in #17151
- Split GitLab item dialog by @nwparker in #17165
- Split ports panel layers by @nwparker in #17194
- Split telemetry event schema responsibilities by @nwparker in #17235
- Split resource usage status responsibilities by @nwparker in #17244
- Split GitHub project view read path by @nwparker in #17266
- Split filesystem watcher responsibilities by @nwparker in #17274
- fix(ci): stop hourly/adhoc mac builds from executing native pnpm via node by @nwparker in #17331
- chore: enable React correctness lints by @nwparker in #17285
- test(vitest): adapt happy-dom OffscreenCanvas canvas mocks by @nwparker in #17336
- fix(build): preserve Electron during binary repair by @nwparker in #17334
- fix(window): keep automated Electron launches out of the foreground by @nwparker in #17347
- fix(scripts): stop pnpm-cli-invocation test leaking npm_execpath into the fallback case by @nwparker in #17340
- fix(tests): match showInactive() in paired-client-window-reveal spec by @nwparker in #17362
- test(e2e): match the paired-client reveal assertion to showInactive() by @nwparker in #17363
- Consolidate the renderer now-clock and drop the epoch setState round-trip by @nwparker in #17358
- ci: gate PRs on a real input method, and prove the lane engaged one by @nwparker in #17365
- refactor(preflight): rename execLocalPreflightCommand to execLocalPreflightCommandOrThrow by @nwparker in #17380
- chore(deps): remove pdfjs-dist release exception by @nwparker in #17372
- chore(deps): restore pdfjs-dist release-age exception until it ages out by @nwparker in #17385
- chore(deps): pin the pdfjs-dist release-age exception to 6.3.289 by @nwparker in #17389
New Contributors
- @JahyunBaek made their first contribution in #16511
- @Pr1p made their first contribution in #16743
Full Changelog: v1.4.193...v1.4.194