Build GitHub Desktop for Linux from source

You can build GitHub Desktop for Linux from source yourself and get the same .deb and AppImage that are published here. It is a standard Node.js and Electron build plus a Linux packaging step.

Requirements to build from source

  • A 64-bit x86_64 Linux machine, or Docker on any OS (see below).
  • Node.js at the version in the repository's .node-version file (24.22.1 at the time of writing).
  • Yarn 1.21.1, which is vendored in the repository, and Python 3.
  • Native build dependencies, as installed by the fork's script/linux/Dockerfile. On Debian or Ubuntu:
    shell
    sudo apt install build-essential libsecret-1-dev libkrb5-dev fakeroot rpm libfuse2 python3
    On Ubuntu 24.04, use libfuse2t64 instead of libfuse2.

Build steps

  1. 01Clone the linux branch

    Clone the fork and check out the linux branch, which is upstream GitHub Desktop plus the Linux changes.

    shell
    git clone --branch linux https://github.com/yehudah/desktop.git
    cd desktop
  2. 02Install dependencies

    Install the app dependencies and the Linux packaging tools, which have their own package.json.

    shell
    yarn
    yarn --cwd script/linux install
  3. 03Build

    Create a production build of the app.

    shell
    yarn build:prod
  4. 04Package

    Create the .deb and AppImage, plus .sha256 files, in dist/.

    shell
    yarn run package

The output is dist/GitHubDesktop-linux-amd64-<version>.deb and dist/GitHubDesktop-linux-x86_64-<version>.AppImage, each with a .sha256 file. Install the .deb with sudo apt install ./dist/GitHubDesktop-linux-amd64-*.deb.

Building in Docker on macOS or Windows

script/linux/run.sh runs any command inside a Linux container, so you can build from another OS:

shell
script/linux/run.sh bash -c 'yarn && yarn --cwd script/linux install && yarn build:prod && yarn run package'

If packaging fails with "The requested module 'glob' does not provide an export named 'glob'", an old node_modules is in the way. Delete it and run yarn again.

Sign-in in your own build

Without DESKTOP_OAUTH_CLIENT_ID and DESKTOP_OAUTH_CLIENT_SECRET set at build time, the app uses the development OAuth app from the public source, like the published builds. To use your own GitHub OAuth app, set both variables before yarn build:prod. Builds with credentials use the x-github-desktop-auth callback scheme instead of x-github-desktop-dev-auth.

Contributing

The Linux-specific code lives in script/linux/, script/package-linux.ts and docs/linux/ on the linux branch. CI builds every pull request on Ubuntu 22.04 and 24.04 and runs unit and end-to-end tests against the installed .deb. Issues and pull requests are welcome on yehudah/desktop.