Canonical and legacy names
When both a
SHUX_* variable and its MUX_* alias are set, the SHUX_* value wins and is mirrored to child processes under both names.
Local data migration
On startup, Shux performs one non-destructive directory transition before configuration or sessions are loaded:- If only
~/.muxexists, it is moved to~/.shux. ~/.muxis recreated as a directory link pointing to~/.shux.- The older
~/.cmuxname also points to~/.shux. - Development builds apply the same behavior to
.mux-devand.shux-dev.
SHUX_ROOT or MUX_ROOT locations are never moved. Shux makes both variable names resolve to the same configured path instead.
Desktop state and downgrades
Electron state such as window position, browser storage, and local preferences is moved from the platformmux app-data directory to shux, then the old directory name points forward. The stable application identifier remains com.mux.app during the transition so operating-system updater and uninstall identity does not fork.
The supported flow is sequential: close one version before launching or installing the other. Running old Mux and new Shux processes concurrently against the same sessions is not supported.
A manual macOS DMG downgrade may replace or coexist with shux.app as Mux.app, depending on where the user drags the bundle. The packaged directory is shux.app even though the display name is Shux. The shared data links preserve state, but Shux cannot create a system-wide /Applications/Mux.app alias without installation privileges. Windows and Linux installers likewise preserve data even when shortcut or executable filenames change.
Compatibility names that intentionally remain
Some names are persisted protocols or externally managed infrastructure rather than display branding:- Project-controlled
.mux/hooks, agents, skills, plugins, and.muxignore - Provider/config identifiers such as
mux-gateway - Internal persisted keys and extension IDs under
mux.* - The VS Code Marketplace extension identity
coder.mux - The stable desktop application ID
com.mux.app - GitHub releases, documentation, Gateway, and OAuth URLs on existing
muxdomains - Docker storage at
/var/mux - Existing SSH-host global storage at
~/.mux; local startup cannot safely migrate arbitrary or offline hosts
Compatibility implementation ownership
Transition-only behavior is intentionally concentrated in:src/common/compat/legacyMux.tsfor names, environment aliases, and accepted protocolssrc/node/compat/shuxTransition.tsfor directory moves and forward linkspackages/mux-compat/for the published legacy npm commandscripts/create-legacy-mux-artifact-aliases.shfor release filenames
mux fallbacks elsewhere. These boundaries can be removed together only in a release that explicitly ends downgrade support and after external package, URL, extension, remote-runtime, and persisted-key compatibility is no longer required.