Ghost Downloader
Workflows

Local Build

Validate changes locally with python deploy.py and the extension build commands.

Use a local build before opening a PR to confirm that the desktop app can still be packaged by Nuitka, Feature Packs are copied into the output, and the browser extension passes typecheck and build.

Desktop Build

Install Python dependencies.

pip install --timeout=300 -r requirements.txt

Run the build script from the repository root.

python deploy.py

Inspect the output directory.

PlatformMain Output
Windows / Linuxdist/Ghost-Downloader-3.dist
macOSdist/Ghost-Downloader-3.app

What deploy.py Does

StageDescription
Generate Nuitka argumentsChooses icons, Qt plugins, and platform-specific parameters for Windows, macOS, and Linux.
Compile entry pointUses Ghost-Downloader-3.py as the desktop app entry.
Include dependenciesBundles extra packages such as urllib3, qrcode, libtorrent, and aioftp.
Copy Feature PacksCopies packs that contain manifest.toml into the build output.
Apply blacklistjack_yao is currently listed in FEATURE_PACK_BLACKLIST.

A Local Build Is Not a Full Release

python deploy.py only generates desktop build outputs and copies Feature Packs. Installers, signing, DMGs, .deb, .AppImage, and other platform-specific artifacts are completed by later GitHub Actions steps.

Browser Extension Build

cd browser_extension\app
npm install
npm run typecheck
npm run build

When you change the bridge protocol, review both app/services/browser_service.py and browser_extension/app/src/background/desktop-bridge.ts.

On this page