Arch / Manjaro

August 21, 2026 · View on GitHub

ChatGPT Community for Linux

CI Official Linux package build Join the Discord community

English | 简体中文

codex-desktop is an unofficial, community-maintained distribution of OpenAI's official Linux ChatGPT desktop application. It verifies and repackages the signed upstream Linux payload, adds disabled-by-default Linux features, and produces deb, RPM, pacman, AppImage, and Nix outputs.

The custom application appears in desktop menus as ChatGPT Community and uses an icon marked with a blue C. Its package, command, and installation identity remain codex-desktop and /opt/codex-desktop, so it is easy to distinguish from OpenAI's separate ChatGPT package.

OpenAI's signed Linux .deb is the only upstream source. The official Electron runtime, native modules, bundled codex and rg, code-mode host, plugins, libraries, locales, and Owl metadata are reused directly. With no ASAR-changing feature enabled, resources/app.asar remains byte-for-byte identical to the official package.

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

Before contributing, read CONTRIBUTING.md. Maintainers and coding agents should also read AGENTS.md.

Install

Clone the repository before building a native package or AppImage:

git clone https://github.com/ilysenko/codex-desktop-linux.git
cd codex-desktop-linux
PlatformRecommended commandResult
Debian, Ubuntu, Pop!_OS, Mint, Elementarymake bootstrap-nativeBuilds and installs a .deb
Raspberry Pi 5, 64-bit OSmake bootstrap-nativeBuilds the official arm64 payload; see Pi notes
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 or another Nix systemnix run github:ilysenko/codex-desktop-linuxBuilds and runs the flake output; see Nix
Atomic desktops or another distributionmake build-app && make appimageProduces a local AppImage without the native updater

The recommended native installation is:

make bootstrap-native

This installs build dependencies, resolves the current package through OpenAI's signed stable APT metadata, builds codex-app/, creates the native package for the detected distribution, and installs the newest artifact from dist/.

If the dependencies are already installed, use:

make install-native

To choose optional features before installing:

make setup-native
make install-native

make setup-native only writes the local feature selection. It does not build or install the application. See Native setup for the guided flow, non-interactive settings, updater selection, and cleanup.

Use an already downloaded official package

Normally the build resolves amd64 or arm64 from the signed stable index. You can instead provide a local package that you already trust:

UPSTREAM_DEB=/path/to/chatgpt_<version>_<arch>.deb make build-app

The local package is still checked for package name, architecture, control metadata, payload completeness, and SHA-256 recording. Because signed repository discovery is skipped, the caller is responsible for its origin. Old .dmg, DMG=, and CODEX_DMG_* inputs are intentionally unsupported.

Before you install

  • Only the latest signed stable OpenAI Linux package is supported, on amd64 and arm64.
  • Build tools require Node.js 20 or newer, npm, Python 3, curl, gpgv, dpkg-deb, tar, make, and a C/C++ toolchain. Rust is used for the updater and enabled native feature helpers. make bootstrap-native installs or guides you through these requirements.
  • The official chatgpt and custom codex-desktop packages may coexist, but both intentionally use the upstream Codex user profile. Do not run them at the same time; the upstream single-instance lock may route the second launch into the process that is already running.
  • AppImage never adds --no-sandbox automatically. If your distribution disables unprivileged user namespaces, use the native package or follow the sandbox guidance in Troubleshooting.

Anonymous daily usage count

To help the community decide whether maintaining this distribution is useful, the launcher sends at most one anonymous usage event per UTC day to the public GoatCounter dashboard. The event contains only the fixed path /app-launch. GoatCounter derives an aggregate country from the network request; no application activity, account or machine identifier, version, architecture, package format, language, screen size, or referrer is sent. Every installation sends the same fixed, non-identifying User-Agent so GoatCounter does not discard the request as a bot.

The request runs silently in the background. A missing curl, a blocked request, or any other error never delays the application and produces no output. Disable the usage count with the single environment variable:

CODEX_LINUX_DISABLE_USAGE_REPORTING=1 codex-desktop

Uninstall

First close both ChatGPT Community and the official ChatGPT application. Then remove the native package with the package manager that installed it:

# 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 disables the user update service. If a service from an older or manual installation remains, remove it explicitly:

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

For AppImage, delete the AppImage file you built. For a repository-only app, delete only the generated tree inside the checkout:

rm -rf -- ./codex-app

For Nix, remove the package from your profile, Home Manager configuration, or NixOS module and rebuild that profile or system.

Package removal preserves user data. To remove only Community wrapper and updater state, inspect and then delete the following directories:

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

If remote-mobile-control was enabled, revoke paired devices before removing its private device keys. Do not remove ~/.codex unless you intentionally want to delete the shared Codex profile, configuration, plugins, and project state used by both official and Community applications.

Feature matrix

Core distribution

CapabilityDefaultHow it is provided
Official ChatGPT Linux runtimeAlwaysCopied from the verified official .deb data payload
Signed source verificationAlwaysPinned repository key → InReleasePackages SHA-256 → package SHA-256
Byte-identical baseline ASARAlwaysThe ASAR is not unpacked when no enabled feature needs it
Native deb, RPM, and pacman packagesManual buildmake deb, make rpm, or make pacman
AppImageManual buildmake appimage; no automatic sandbox bypass or bundled updater
Nix flakeManual buildnix run github:ilysenko/codex-desktop-linux
Transactional update managerNative packagesIncluded unless built with PACKAGE_WITH_UPDATER=0
Official Browser and Chrome integrationsUpstreamReused from the official Linux package; no legacy port layer
Optional Linux feature frameworkDisabledConfigure with make setup-native
Distinct desktop identityAlwaysChatGPT Community, blue C icon, codex-desktop package identity

Optional Linux features

Every feature below is disabled by default. Its adjacent README describes requirements, known limitations, configuration, and tests.

Feature IDPurposeDocumentation
agent-workspaceAgent-workspace settings and bridge for hidden desktop environmentsDocs
api-key-model-visibilityShow models reported by API-key authenticated compatible providersDocs
api-key-service-tierFast/service-tier UI for API-key authenticated compatible providersDocs
appshotsCapture and crop the focused Linux window from the composerDocs
authenticated-proxyUsername/password support for HTTP proxiesDocs
automation-extensionsMulti-time schedules and eager automation_update exposureDocs
browser-proxyPass explicit proxy settings to Browser Use network helpersDocs
chronicle-skysightOpt-in Linux desktop activity memory and restricted Skysight MCP toolsDocs
codex-microWork Louder Codex Micro hotplug and hidraw policy using upstream node-hidDocs
computer-use-linuxLinux desktop-control UI and native MCP backendDocs
copilot-reasoning-effortPersistent reasoning-effort defaults for Copilot-auth sessionsDocs
directory-only-working-tree-watchBounded Watchbound working-tree watchingDocs
frameless-titlebarHide official Linux overlay buttons for compositor-managed decorationsDocs
global-dictationX11 and XDG portal global dictation hotkeysDocs
linux-performance-workaroundsMeasured renderer workarounds for affected systemsDocs
mcp-helper-reaperReap orphaned MCP helpers without touching live sessionsDocs
node-repl-reaperReap Browser Use node_repl helpers leaked after owner exitDocs
omarchy-themeLoad CSS generated from the current Omarchy themeDocs
persistent-status-panelKeep the /status panel across thread switches and restartsDocs
pet-overlayLinux avatar-overlay placement and compositor hintsDocs
project-group-last-updated-sortApply Last updated ordering to project groups and tasksDocs
project-task-sortRestore Created ordering for alternate Projects tasksDocs
read-aloudAdd Linux read-aloud controls to assistant responsesDocs
read-aloud-mcpLet the agent speak through the Linux Read Aloud backendDocs
record-and-replayRecord a Linux demonstration and turn it into a reusable skillDocs
remote-control-uiExpose experimental remote-control settings on LinuxDocs
remote-mobile-controlExperimental Linux remote-host and outbound-control flowsDocs
shallow-repository-watchesAvoid recursive main-thread walks for transient repository previewsDocs
shared-app-server-socketShare one protocol-transparent Unix app-server socketDocs
thorium-chrome-pluginAdd Thorium to the official bundled Chrome integrationDocs
tray-usageShow usage remaining in the Linux system-tray menuDocs
ui-tweaksOptional visual and interaction customizationsDocs

Account rollouts and server-side ChatGPT features remain controlled by OpenAI. Rebuilding this project does not unlock an account rollout.

Configure optional features

The recommended editor is the setup wizard:

make setup-native

For manual configuration, copy the example to the gitignored local file:

cp linux-features/features.example.json linux-features/features.json
{
  "enabled": [
    "read-aloud",
    "ui-tweaks"
  ]
}

Then rebuild and install:

make install-native

Private features may live under the gitignored linux-features/local/<feature-id>/ tree and use the same manifest contract. Known retired IDs are ignored to migrate old local configs; arbitrary unknown IDs and misspellings remain errors. See the feature framework README and feature architecture.

Updates

Native packages include codex-update-manager by default. Its user service polls the same signed APT metadata, caches official packages by version/architecture/SHA-256, reconstructs the selected native package with the currently enabled features, and waits for the application to exit before promotion. The immediately previous managed package remains available for rollback.

codex-update-manager status
codex-update-manager status --json
codex-update-manager check-now
codex-update-manager diagnose
codex-update-manager install-ready
codex-update-manager rollback
systemctl --user enable --now codex-update-manager.service
systemctl --user status codex-update-manager.service
journalctl --user -u codex-update-manager.service

Build a manual-update package without the service:

PACKAGE_WITH_UPDATER=0 make package
make install

AppImage and repository-only generated apps do not include the native package updater. Full behavior and recovery steps are documented in Updater.

Build, package, and run

# Build the local application tree and run it without installing a package
make build-app
make run-app

# Build and install the package format detected for this distribution
make package
make install

# Build a specific output
make deb
make rpm
make pacman
make appimage

Builds are transactional: a candidate is verified before it replaces the working tree. Enabled ASAR-feature drift rejects a candidate; disabled features are not probed. Package scripts consume the generated codex-app/ tree. See Build and packaging for prerequisites, variables, output layout, parallelism, and payload inspection.

Troubleshooting

ProblemFirst check
Official and Community launches interfereFully exit every ChatGPT process; both apps share the upstream profile
Browser/Chrome extension cannot connect after migrationExit ChatGPT and Chrome completely, then follow the narrow cache repair in Troubleshooting
Signature or package verification failsDo not bypass it; check time, network, gpgv, architecture, and disk space
App does not launchRun /opt/codex-desktop/start.sh --diagnose
App uses XWayland or needs persistent Electron flagsPut one flag per line in ~/.config/codex-desktop/electron-flags.conf; for example, --ozone-platform=wayland
AppImage reports a sandbox errorEnable user namespaces or install a native package; --no-sandbox is not added automatically
Enabled feature drifts after an upstream releaseDisable that feature to confirm the clean baseline and attach its patch report to an issue
Updater waits for application exitClose official and Community processes, then inspect codex-update-manager status --json
Old codex-app.backup-* reports permission errorsInspect the exact path and follow the root-owned backup procedure; never delete a wildcard blindly

Full guide: Troubleshooting.

Project documentation

Historical macOS DMG conversion, downloaded Electron replacement, native-module rebuild, local webview server, and custom warm-start documents are intentionally not active documentation: the official Linux package now owns those runtime responsibilities.

Disclaimer

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

The repository downloads and repackages the official Linux payload locally; it does not grant rights to OpenAI software or services. Use of ChatGPT remains subject to OpenAI's applicable terms and server-side feature availability.

The MIT license applies only to this repository's wrapper source, packaging, documentation, and community-owned extensions.

License

MIT