Skip to content

feat: add macOS desktop app installer#3627

Closed
huangrichao2020 wants to merge 8 commits into
QwenLM:mainfrom
huangrichao2020:feat/macos-desktop-app
Closed

feat: add macOS desktop app installer#3627
huangrichao2020 wants to merge 8 commits into
QwenLM:mainfrom
huangrichao2020:feat/macos-desktop-app

Conversation

@huangrichao2020

Copy link
Copy Markdown

Summary

This replaces the closed #3564 with the same macOS desktop launcher work, plus the review fixes from that thread.

It adds an optional installer that creates Qwen Code.app, so macOS users can launch Qwen Code from Spotlight, Launchpad, Finder, or the Applications folder. The generated app opens Terminal and runs qwen, so it keeps the existing CLI runtime path.

Changes

  • Add scripts/installation/install-qwen-macos-app.sh
  • Add bundled scripts/installation/qwen-icon.png for clone-based installs
  • Add macOS desktop app documentation under docs/users/installation/
  • Link the optional desktop app install path from the README

Review fixes carried over from #3564

  • Avoid ${BASH_SOURCE[0]} unbound-variable failures under bash -c no-clone installs
  • Use a concrete qwen install URL when the CLI is missing
  • Build the replacement app before removing the installed app
  • Fall back from /Applications to ~/Applications for new installs when the system Applications directory is not writable
  • Stop instead of silently installing to ~/Applications when a stale /Applications/Qwen Code.app already exists and cannot be replaced
  • Download the icon for no-clone installs when the adjacent bundled icon file is unavailable

Validation

  • bash -n scripts/installation/install-qwen-macos-app.sh
  • osacompile smoke test for the generated AppleScript app
  • npm run test:scripts
  • npm run lint -- scripts/installation/install-qwen-macos-app.sh docs/users/installation/macos-desktop-app.md README.md
    • Completed with 0 errors. ESLint reported expected ignored-file warnings for the .sh/.md paths.

Prior art: a similarly scoped macOS launcher installer was accepted in lsdefine/GenericAgent: lsdefine/GenericAgent#140

huangrichao2020 and others added 7 commits April 26, 2026 07:07
- Add install-qwen-macos-app.sh script for one-click macOS app installation
- Add comprehensive documentation for macOS Desktop App feature
- Update README.md with macOS Desktop App installation option
- Users can now launch Qwen Code via Spotlight, Launchpad, or Applications folder

Fixes user request for easier macOS desktop access to Qwen Code CLI

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Add qwen-icon.png (from vscode-ide-companion assets) to scripts/installation/
- Update install script to read icon from local SCRIPT_DIR
- Fallback to default icon if qwen-icon.png not found
- Update README and docs to use raw.githubusercontent.com URL

This ensures the installer works immediately without waiting for CDN upload.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Co-authored-by: Shaojin Wen <shaojin.wensj@alibaba-inc.com>
Comment thread docs/users/installation/_meta.ts Outdated
Bojun-Vvibe added a commit to Bojun-Vvibe/oss-contributions that referenced this pull request Apr 26, 2026
…en-code macos installer

- anomalyco/opencode#24491 (merge-after-nits): cross-project sidebar sync via cross-directory store fan-out + loadSessions refetch + panelProject memo, with two drive-by behavior changes (prompt.ts title gate, session.ts directory filter) that should be split out
- anomalyco/opencode#24487 (merge-as-is): five-route httpapi parity bridge for share/unshare/deleteMessage/deletePart/updatePart with URL-vs-body validator on updatePart and SessionRunState.assertNotBusy gate on deleteMessage
- QwenLM/qwen-code#3627 (needs-discussion): macOS osacompile-AppleScript installer with no signing/notarization, curl-pipe-bash from unpinned main URL, and login-shell PATH-resolution gap for nvm/fnm users
log_warning 'Icon file not available, using default AppleScript icon'
fi

if [ -w "${SYSTEM_APP_DIR}" ]; then

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Suggestion] Reinstalling an existing user-level app can create a second app instead of replacing the one the user already has. The script detects ~/Applications/Qwen Code.app as existing_app_path, but later always prefers /Applications whenever it is writable. If only the user-level app exists and /Applications is writable, “Reinstall” installs a new /Applications/Qwen Code.app while leaving the stale ~/Applications/Qwen Code.app in place. Spotlight/Launchpad can keep showing or launching the old user-level app, so the reinstall may appear to succeed while not updating the app the user actually launches.

When existing_app_path is set and writable, reinstall to that same path; only choose the system/user fallback path for first-time installs.

— gpt-5.5 via Qwen Code /review

@tanzhenxin tanzhenxin added the type/feature-request New feature or enhancement request label Apr 27, 2026
Bojun-Vvibe added a commit to Bojun-Vvibe/oss-contributions that referenced this pull request May 5, 2026
- google-gemini/gemini-cli#26225 MessageBus fail-fast — merge-after-nits
- QwenLM/qwen-code#3627 macOS desktop installer — merge-after-nits
- aaif-goose/goose#9014 unread state for background chats — merge-after-nits
- charmbracelet/crush#2520 Ctrl+D quit prompt — merge-as-is
@tanzhenxin

Copy link
Copy Markdown
Collaborator

Hey @huangrichao2020 — thanks for picking this back up after #3564 and carrying through the review fixes. The script itself is well-defended (set -euo pipefail, the BASH_SOURCE guard, build-before-remove, the ~/Applications fallback) and that polish is real.

I'm going to close this, and I want to be upfront about why so the time you spend isn't wasted — it's a direction call, not the implementation.

What this PR adds is a macOS launcher: an AppleScript .app that opens Terminal and runs qwen. The "installation" itself is still the existing npm install -g step; this just makes the CLI discoverable from Spotlight/Launchpad. That's a reasonable thing to want, but it's downstream of the larger problem. The reports we get on installation are overwhelmingly about the runtime requirement (Node version, npm permissions, corporate proxies, no-network installs) — not about where the binary surfaces in the OS.

#3776 is the direction we're committing to: standalone archives that bundle the Node runtime, cross-platform (Linux/macOS/Windows), with checksum verification, mirror support, and staged rollback. Once that lands, "install" stops requiring a working npm. A real, signed, runtime-bundled .app could be built on top of that artifact later — and that would be a more durable home for the desktop-launcher idea than an AppleScript shim around an external CLI.

Two installation paths are worse than one even when both work, and a macOS-only AppleScript launcher would be an awkward third thing to keep alive next to npm and the standalone archive. So I'd rather not carry it.

If you'd like to contribute to the desktop-app angle, the more interesting follow-up after #3776 is a proper Qwen Code.app bundle (signed, notarized, ships the runtime, doesn't shell out to Terminal) — that's a meaningful piece of work and we'd welcome it. Happy to discuss the shape if you're interested.

Thanks again for the effort here.

@tanzhenxin tanzhenxin closed this May 9, 2026
yiliang114 added a commit that referenced this pull request May 18, 2026
Add docs/design/code-review/ covering the PR review automation
system this branch is building toward:

- code-review-design.md (569 lines): problem statement, design
  principles, 4-stage workflow pipeline, Design Gate spec with
  PR shape generation and fail modes, Feature PR Readiness Gate,
  author/maintainer feedback loop with override, historical
  PR/issue detection, incremental cache wiring, App integration
  plan, testing strategy, risks.
- roadmap.md (179 lines): 7-phase rollout, each phase scoped to
  an independent PR with acceptance criteria.
- compare.md (86 lines): capability comparison vs claude-code,
  coderabbit, copilot review, cursor bugbot, greptile.

The design treats Direction/Scope/History/Validation as workflow
preflight gates separate from bundled /review, so direction issues
are decided in the first 30s rather than after a full deep pass.
Anchors are existing repo artifacts (roadmap.md, architecture.md,
docs/design/*) and historical close comments (#3863, #3627),
not new team-policy docs.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type/feature-request New feature or enhancement request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants