Runtime selection and provisioning
August 16, 2026 ยท View on GitHub
Selection order
In system-first auto mode the desktop app uses:
- An already-running local service that passes DSH bootstrap identity checks.
- A working global
dshcommand. - A working system
npxcommand with the configured pinned DSH version. - The bundled DSH dependency executed with Electron in Node mode.
bundled-first swaps steps 2/3 with step 4. Explicit global, npx, bundled, and connect modes are also available.
New computers
The release contains the complete npm production dependency graph of @deepseek-ai/dsh 0.1.0-rc.6. Electron's embedded Node process starts its CLI using ELECTRON_RUN_AS_NODE=1 and --expose-internals. The user does not need a system Node/npm installation.
The release also bundles pnpm (a dependency of the desktop shell) and
provisions a PATH shim at startup (src/pnpm-runtime.js): a pnpm.cmd/pnpm
that forwards to the bundled node_modules/pnpm/bin/pnpm.cjs โ under plain
Node in dev, and under Electron-as-Node in packaged builds. Every owned DSH
process receives the augmented PATH and DSH_MARKET_PNPM_DIR, so the
community market's dsh plugin installs resolve pnpm even when nothing
installed it globally.
The bundled runtime writes only through DSH_HOME, npm cache, and normal tool-controlled workspace paths. It is a fallback runtime, not a second copy of user data.
Existing computers
Environment variables DSH_HOME and npm_config_cache are used as defaults. Existing DSH services are never stopped. A global/npx process started by the app is owned and stopped according to desktop close behavior.
macOS
The same Electron Node-mode mechanism is cross-platform. Native dependencies must be rebuilt separately for x64 and arm64 on macOS. GitHub Actions uses Intel and Apple Silicon runners. Actual public DMG files require Apple code signing and notarization for normal Gatekeeper behavior.