Fedora < 41

July 10, 2026 · View on GitHub

ChatGPT Desktop for Linux

CI Upstream Build App

Unofficial Linux build wrapper for OpenAI ChatGPT Desktop. The official ChatGPT app is available for macOS and Windows; this repository covers Linux by converting the upstream macOS Codex.dmg into a runnable Linux Electron app.

The project builds native .deb, .rpm, and .pkg.tar.zst packages, supports local AppImage self-builds and Nix, and can install a local update manager that rebuilds future Linux packages from newer upstream DMGs.

Install · Uninstall · Features · Updates · Build · Troubleshooting · Docs

Before opening a pull request, read CONTRIBUTING.md. For implementation details, see AGENTS.md.

How To Install

ChatGPT Desktop for Linux is built locally from the upstream Codex.dmg: the installer downloads or reuses the DMG, extracts the Electron app, applies Linux compatibility patches, rebuilds native modules, stages the Linux runtime, and packages the result. Optional Linux-only integrations live in linux-features/ and stay disabled unless you enable them before building.

For native packages and AppImage self-builds, start from a checkout:

git clone https://github.com/ilysenko/codex-desktop-linux.git
cd codex-desktop-linux
PlatformRecommended pathNotes
Debian, Ubuntu, Pop!_OS, Mint, Elementarymake bootstrap-nativeBuilds and installs a .deb
Fedoramake bootstrap-nativeBuilds and installs an .rpm
openSUSEmake bootstrap-nativeBuilds and installs an .rpm
Arch, Manjaro, EndeavourOSmake bootstrap-nativeBuilds and installs a pacman package
NixOS / Nixnix run github:ilysenko/codex-desktop-linuxSee Nix docs
Atomic desktops / other distrosmake build-app && make appimageLocal self-build; no bundled updater

Recommended native install:

make bootstrap-native

If dependencies are already installed:

make install-native

make bootstrap-native installs build dependencies, validates the cached upstream Codex.dmg, downloads it only when missing or stale, builds codex-app/, packages it for your distro, and installs the newest artifact from dist/.

If you are installing dependencies manually on Fedora:

# Fedora 41+
sudo dnf install python3 7zip curl unzip rpm-build make gcc-c++ @development-tools

# Fedora < 41
sudo dnf install python3 p7zip p7zip-plugins curl unzip rpm-build make gcc-c++
sudo dnf groupinstall 'Development Tools'

For a guided first-run checklist and optional feature picker:

make setup-native

See Native setup for the wizard, non-interactive feature selection, cleanup flow, and PACKAGE_WITH_UPDATER=0.

Uninstall

Close ChatGPT Desktop first, then remove the native package with your distro's package manager:

# Debian / Ubuntu
sudo apt remove codex-desktop

# Fedora
sudo dnf remove codex-desktop

# openSUSE
sudo zypper remove codex-desktop

# Arch / Manjaro
sudo pacman -R codex-desktop

Native package removal stops and disables codex-update-manager.service when the service is installed. If the service was left behind by an older package or a manual install, disable it explicitly:

systemctl --user disable --now codex-update-manager.service

AppImage builds are not installed system-wide by this repository; delete the AppImage file you created. A repo-only generated app can be removed from the checkout with:

rm -rf codex-app

nix run github:ilysenko/codex-desktop-linux is ephemeral. If you installed the flake through a Nix profile, Home Manager, or a NixOS module, remove that profile or configuration entry and rebuild your profile/system.

User data is preserved for reinstall. To remove only this wrapper's local app state, logs, launcher flags, and updater state, delete these paths.

If you enabled Remote Mobile Control, ~/.config/codex-desktop can contain remote-control-device-keys-v1.json. Revoke paired devices in Codex Settings/Connections or ChatGPT before deleting that file or removing the whole directory. For feature-owned data, prefer the cleanup flow in Native setup.

rm -rf \
  ~/.config/codex-desktop \
  ~/.local/state/codex-desktop \
  ~/.cache/codex-desktop \
  ~/.config/codex-update-manager \
  ~/.local/state/codex-update-manager \
  ~/.cache/codex-update-manager

Do not remove ~/.codex unless you also want to delete your Codex CLI configuration and project state.

Before You Install

The generated app and native packages bundle a managed Linux Node.js runtime. You do not need a distro nodejs / npm package for normal installs, Browser Use, Codex CLI install/update, or local auto-update rebuilds.

The Codex CLI is still required at runtime. The first launch can install or update @openai/codex with the bundled npm, or you can manage the CLI yourself. If you install the CLI manually through npm, include optional dependencies with npm i -g --include=optional @openai/codex so the Linux platform binary is present. The launcher does not rank installed CLIs by version; it uses an explicit CODEX_CLI_PATH first, then the normal lookup order, and logs the resolved CLI path plus best-effort version so GUI PATH issues are visible. Set CODEX_CLI_PATH=/path/to/codex when you want to pin a specific binary.

X11 and Wayland sessions are supported. The launcher prefers XWayland on Wayland when available for better Electron popup positioning, then falls back to Electron's automatic Wayland handling. See Troubleshooting for GPU, Vulkan, and /tmp noexec workarounds.

Feature Matrix

Core And Platform Support

FeatureDefaultEnable / useDocs
Standard ChatGPT Desktop UIAlwaysInstall or run the generated appThis README
Managed Linux Node.js runtimeAlwaysBundled during build/installBuild and packaging
Native packagesAlwaysmake package && make installBuild and packaging
Auto-update managerNative packagesIncluded unless PACKAGE_WITH_UPDATER=0Updater
AppImage self-buildManualmake build-app && make appimageBuild and packaging
Nix flakeManualnix run github:ilysenko/codex-desktop-linuxNix
GUI install promptsIf installedUses kdialog / zenity, then terminal fallbackNative setup
Linux file manager integrationAlwaysBuilt into core Linux patchesArchitecture
Chrome plugin native hostAlwaysInstalled with bundled pluginsArchitecture
Portable upstream pluginsWhen shipped upstreamSites, Deep Research, and Visualize are staged automatically; upstream rollout still appliesArchitecture
Browser annotationsAlwaysBuilt into the patched webviewArchitecture
Tray and warm-start handoffAlwaysNormal app launchArchitecture
Multiple app instancesOpt-in./codex-app/start.sh --new-instanceBuild and packaging
Linux Computer Use backendBundledMCP backend registers by defaultLinux Computer Use
Linux Computer Use UIOpt-inCODEX_LINUX_ENABLE_COMPUTER_USE_UI=1 or settings flagLinux Computer Use
Linux Features frameworkOpt-inEdit linux-features/features.jsonLinux Features

Opt-In Linux Features

FeatureDefault / statusEnable / useDocs
Record and Replay (alpha)Opt-in alpharecord-and-replayDocs
Agent WorkspacesOpt-inagent-workspaceDocs
API key model visibilityOpt-inapi-key-model-visibilityDocs
API key service tierOpt-inapi-key-service-tierDocs
Linux AppShotsOpt-inappshotsDocs
Authenticated proxyOpt-inauthenticated-proxyDocs
Wrapper updater buttonOpt-incodex-wrapper-updaterDocs
Conversation modeOpt-inconversation-modeDocs
Copilot reasoning effort defaultsOpt-incopilot-reasoning-effortDocs
Example Linux FeatureDeveloper exampleexample-featureDocs
Frameless titlebarOpt-inframeless-titlebarDocs
MCP helper reaperOpt-inmcp-helper-reaperDocs
Browser Use node_repl reaperOpt-innode-repl-reaperDocs
Open Target DiscoveryOpt-inopen-target-discoveryDocs
Persistent status panelOpt-inpersistent-status-panelDocs
Read Aloud buttonOpt-inread-aloudDocs
Read Aloud MCPOpt-inread-aloud-mcpDocs
Remote Control UI gatesOpt-inremote-control-uiDocs
Experimental Remote Mobile ControlOpt-inremote-mobile-controlDocs
Thorium Chrome Plugin SupportOpt-inthorium-chrome-pluginDocs
UI tweaksOpt-inui-tweaksDocs
X11/EWMH Computer Use adapterOpt-inx11-ewmh-computer-useDocs

ChatGPT-account model rollouts remain controlled by OpenAI per account. Rebuilding this wrapper does not unlock them. API-key-authenticated custom providers can opt in to their own visible CLI model catalog with api-key-model-visibility.

Optional Linux Features

Optional Linux-only integrations live in linux-features/ and are disabled by default. They can add ASAR patches, staged resources, runtime hooks, package hooks, or legacy build/install hooks without changing the core build flow.

Enable tracked or local features before building:

cp linux-features/features.example.json linux-features/features.json
{
  "enabled": [
    "read-aloud",
    "open-target-discovery"
  ]
}

Private user-local features can live under the git-ignored linux-features/local/<feature-id>/ directory and use the same feature.json contract. Rebuild after changing feature choices:

make install-native

Full contract: linux-features/README.md and docs/linux-features-architecture.md.

Updates

Default native packages install codex-update-manager, a systemd --user service that checks for newer upstream DMGs, rebuilds a local native package, and installs it after ChatGPT Desktop exits. The final install uses pkexec. Minimal window-manager sessions need a graphical polkit authentication agent for the in-app install button; otherwise the updater keeps the package ready and reports a terminal sudo /usr/bin/codex-update-manager ... --path ... command.

Manual-update package:

PACKAGE_WITH_UPDATER=0 make package
make install

Manual rebuild from a trusted checkout:

PACKAGE_WITH_UPDATER=0 make update-native

AppImage builds and repo-only generated apps do not include the native-package updater. See Updater.

Build, Package, And Run

Generate the local Electron app:

make build-app-fresh
make run-app

Use a local DMG:

make build-app DMG=/path/to/Codex.dmg

Build and install a package:

make package
make install

Build a specific artifact:

make deb
make rpm
make pacman
make appimage

The package scripts only repackage the already-generated codex-app/. They do not download or extract the DMG themselves. See Build and packaging.

Troubleshooting

ProblemFirst thing to try
/tmp is mounted noexecSet TMPDIR and XDG_CACHE_HOME to executable directories under $HOME
Blank window or splash stuckCheck ~/.cache/codex-desktop/launcher.log and whether port 5175 is already in use
CODEX_CLI_PATH or CLI install errorCheck ~/.cache/codex-desktop/launcher.log, set CODEX_CLI_PATH=/path/to/codex to pin a binary, or install @openai/codex manually with optional dependencies
Wayland / GPU / Vulkan hangTry CODEX_LINUX_RENDERING_MODE=wayland-gpu ./codex-app/start.sh or persistent launch flags
UI oversized or blurry (HiDPI / fractional scaling)Try CODEX_FORCE_DEVICE_SCALE_FACTOR=1 ./codex-app/start.sh or CODEX_OZONE_PLATFORM=x11 ./codex-app/start.sh; see ./codex-app/start.sh --diagnose-scaling
Resize ghosting or stale frame trailsTry CODEX_ELECTRON_DISABLE_GPU_COMPOSITING=1 ./codex-app/start.sh or --disable-gpu-compositing
Computer Use UI is hiddenEnable the UI opt-in; account/server rollouts may still hide upstream-gated parts
Computer Use has no input backendCheck /dev/uinput, portal support, or ydotoold / ydotool.service
Updater seems stuckCheck codex-update-manager status --json and service logs

Full list: Troubleshooting.

Project Docs

Disclaimer

This is an unofficial community project and is not affiliated with OpenAI. ChatGPT Desktop, OpenAI services, trademarks, upstream application code, binaries, and assets remain the property of OpenAI or their respective owners.

The MIT license in this repository applies only to this wrapper's source code, packaging scripts, documentation, and Linux compatibility glue. It does not grant any rights to OpenAI software or services.

This repository does not redistribute OpenAI software or modified OpenAI application binaries. Users must obtain their own authorized copy of Codex Desktop through OpenAI's official channels. The build process performs a local Linux compatibility conversion on the user's own copy so it can run on Linux. In practice, it automates the conversion process that users perform on their own copies.

Use of ChatGPT Desktop remains subject to OpenAI's applicable terms and server-side feature availability.

License

MIT