The privacy policy previously only mentioned Sentry, Sparkle, and
Ghostty. Added PostHog (website analytics, cookies) and Resend
(transactional email for feedback) to both the data collection
section and the third-party services list.
Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
The previous PR (#1717) added 15 test files to the pbxproj PBXBuildFile and
PBXGroup sections but missed adding them to the cmuxTests Sources build phase
(F1000005), so they were never compiled in CI.
Also add executionTimeAllowance = 30s to AppDelegateShortcutRoutingTests to
prevent testCmdWClosesWindowWhenClosingLastSurfaceInLastWorkspace from hanging
indefinitely on CI (the actual root cause of the timeout).
Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
- Add canonical tags to community, nightly, wall-of-love, and all
legal pages (prevents duplicate content with trailing slashes)
- Add x-default hreflang to sitemap for all entries
- Add legal pages (privacy-policy, terms-of-service, eula) to sitemap
- Stabilize sitemap lastModified to fixed dates instead of new Date()
(avoids noisy lastmod changes on every deploy)
- Update legal page dates to March 18, 2026 (domain migration is a
material change to the "Site" definition)
- Update copyright year to 2026
Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
Add .textSelection(.enabled) to the success body text so users can
select and copy the founders@manaflow.com email address.
Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
Add chip (e.g. Apple M1 Pro), RAM, hardware model, architecture
(arm64/x86_64), and display info to feedback metadata. All fields are
non-sensitive system properties collected via sysctlbyname, ProcessInfo,
and NSScreen. Server-side route accepts and renders the new fields in
both plain text and HTML email bodies.
Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
These are user-generated quotes that should preserve the original
wording. The domain migration should not rewrite what users said.
Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
- Swift app: feedback API endpoint, docs URLs, changelog URL, CLI help
- PostHog proxy: r.cmux.dev -> r.cmux.com
- All 20 README files: docs and blog links
- Homebrew cask: homepage URL in update-homebrew workflow
Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
CmuxWebViewKeyEquivalentTests.swift grew to 15,907 lines with 100+ test classes.
Swift compiles per-file, so this single file serialized all type-checking onto one
compiler process, pushing CI past the 20-minute timeout after core-file changes.
Split into 10 domain-based files (1k-3k lines each) so Xcode can compile them in
parallel. Also bump timeout-minutes from 20 to 30 for headroom, stream xcodebuild
output via tee instead of capturing to a variable (makes CI logs debuggable), and
add 5 test files that were missing from the pbxproj Sources build phase.
Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
* test(terminal): cover Return after Korean IME commit
* fix(terminal): execute Return after Korean IME commit
---------
Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
The synchronizeScrollView() method was constantly resetting the scroll
position to match the terminal's scrollbar state, even when the user had
manually scrolled up to review scrollback. This caused the 'doomscroll'
bug where panes would fight the user's scroll position.
- Add userScrolledAwayFromBottom flag to track scroll intent
- Only auto-scroll when at bottom or when scrollbar indicates following
- Reset flag when user scrolls back to bottom
- Add 5-point threshold to tolerate minor float drift
Fixes#1577
Co-authored-by: BillionClaw <267901332+BillionClaw@users.noreply.github.com>
Add lastFocusState tracking to TerminalSurface to avoid sending duplicate
focus events to the terminal surface. This fixes double prompt / extra redraw
issues when using zsh with Powerlevel10k and switching workspaces.
Fixes#1566
Co-authored-by: BillionClaw <267901332+BillionClaw@users.noreply.github.com>
Add the `com.apple.developer.web-browser` entitlement to enable native
password autofill from iCloud Passwords and third-party Credential
Provider Extensions (e.g. 1Password) in the browser panel's WKWebView.
This entitlement tells macOS that cmux functions as a web browser,
allowing the system to provide credential autofill suggestions on
password fields for any domain — the same mechanism Safari uses.
Note: this is a restricted entitlement that requires Apple's approval
via a provisioning profile. Until approved, the entitlement will be
present in the binary but inactive at runtime.
ensureApplicationIcon() was explicitly loading and setting the light icon
via NSImage(named: NSImage.applicationIconName) even in automatic mode,
overriding the asset catalog's appearance-based icon selection.
Delegate to AppIconSettings.applyIcon() which correctly sets
applicationIconImage = nil for automatic mode, allowing macOS 15+ to
select the dark variant from the asset catalog automatically.
Fixes#1509
Related: #688
The socat path in _cmux_send did not redirect stdout/stderr, causing
the cmux socket's "OK" response to print to the user's terminal on
every shell integration event (new tab, cd, precmd, preexec).
The ncat path avoids this via --send-only, and the nc path already
redirects to /dev/null. This aligns the socat path with both.
Fixes#1618
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(web): exclude PostHog proxy path from i18n middleware
The next-intl middleware added in cf75da8f intercepts /cmuxterm/* requests
(the PostHog reverse proxy), causing analytics to break since March 12.
Add cmuxterm to the negative lookahead so proxy requests bypass i18n.
* refactor(web): rename middleware.ts to proxy.ts for Next.js 16
Next.js 16 renamed middleware.ts to proxy.ts. Migrate to the new
convention since we're on Next.js 16.1.6.
* feat(web): migrate PostHog to managed reverse proxy at r.cmux.dev
Replace the Next.js rewrites-based proxy (/cmuxterm -> us.i.posthog.com)
with PostHog's managed reverse proxy at r.cmux.dev. This removes the
rewrites from next.config.ts entirely and eliminates the proxy.ts
matcher conflict that caused the analytics regression.
---------
Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>