A fully-featured, extensible XMPP chat client built with Python and GTK4.
Gajim aims to be an easy-to-use and fully-featured XMPP client. Chat with friends or family, securely share encrypted images and files, record voice messages, and participate in multi-user group chats with OMEMO end-to-end encryption.
This maintained development fork provides multi-platform release pipelines, modern GNOME Platform 51 Flatpak packages, Apple Silicon macOS DMG images, Windows NSIS/MSIX bundles, Linux portable AppImages, and resilient network connectivity fallbacks.
- Modern Upstream Baseline (v2.6.0): Built on the official Gajim 2.6.0 release featuring standard
src/layout, Python 3.12+ compatibility, andhttpx2asynchronous HTTP engine. - End-to-End Encryption: State-of-the-art OMEMO encryption powered by
omemo-dr, with additional OpenPGP and PGP support. - Network Resilience: Custom connectivity guards (
check_client_connectivity) ensuring automatic reachability verification and graceful reconnection across diverse network topologies. - Enhanced Message Formatting: Refined message input styling, formatting marker toggling, and whitespace preservation in chat views.
- Multi-Platform Distribution Suite:
- Linux: Single-bundle Flatpak, standalone AppImage, and portable
.tar.zstarchive. - Windows: Native UCRT64 MSYS2 setup installer and Windows Store MSIX application package.
- macOS: Isolated virtualenv-based bundling for Apple Silicon (
arm64, macOS 15+) producing ready-to-run.dmgdisk images.
- Linux: Single-bundle Flatpak, standalone AppImage, and portable
- Automated CI/CD with SHA-256 Checksums: Every release builds all target packages in parallel on GitHub Actions with standalone cryptographic checksum verification files.
Official multi-platform binaries from our automated release pipeline:
| Platform | Format / Package | Architecture | Checksum |
|---|---|---|---|
| Windows | Gajim.exe | x86_64 | SHA-256 |
| Windows Store | Gajim.msixbundle | x86_64 | SHA-256 |
| Linux (Portable) | gajim-linux-amd64-portable.tar.zst | x86_64 | SHA-256 |
| Linux (AppImage) | gajim-linux-amd64.AppImage | x86_64 | SHA-256 |
| Linux (Flatpak) | gajim-flatpak.flatpak | x86_64 | SHA-256 |
| macOS | Gajim.dmg | Apple Silicon (arm64) | SHA-256 |
For past builds and changelogs, visit GitHub Releases.
gajim/
├── src/gajim/ # Application sources (common, GTK4 UI, plugins, data)
├── tests/ # Unit and integration test suite
├── linux/ # Linux AppImage, PyInstaller, and portable packaging scripts
├── mac/ # macOS bundle scripts, gajim.spec, and helper tools
├── win/ # Windows MSYS2 build scripts, NSIS definitions, and MSIX packaging
├── flatpak/ # Flatpak manifests (GNOME 51 platform) and dependency definitions
└── .github/workflows/ # Automated multi-platform CI/CD and release pipelines
- FORK.md: Architectural boundaries, upstream synchronization baseline, and fork features.
- CONTRIBUTING.md: Git commit message standards, pre-commit setup, and pull request guidelines.
- SECURITY.md: Vulnerability reporting policy, security contacts, and scope.
- mac/README.md: Detailed macOS packaging and local developer environment guide.
- win/README.md: MSYS2 UCRT64 build instructions and MSIX registration details.
- flatpak/README.md: Flatpak installation, plugins, and custom CA certificates.
- Python (>=3.12)
- Gtk4 (>=4.17.5)
- libadwaita (>=1.7.0)
- PyGObject (>=3.53.0)
- pycairo
- cairo (>=1.16.0)
- Pango (>=1.50.0)
- GLib (>=2.80.0)
- GtkSourceView5
- libspelling
- GStreamer and
gst-plugins-base - nbxmpp (>=7.4.0)
- omemo-dr (>=1.2.0)
- cryptography (>=43.0.0)
- httpx2 & h2
- Pillow (>=9.1.0)
- SQLAlchemy (>=2.0.0)
- sqlite (>=3.35.0)
- keyring
- truststore
- qrcode (>=7.3.1)
- emoji (>=2.6.0)
The easiest way to develop locally is using uv and Nix:
# Enter reproducible environment
nix-shell .github/nix/shell.nix
# Synchronize dependencies
uv sync
# Run tests
uv run python -m pytest tests/common/test_client.py tests/common/test_styling.py
# Lint & Format
uv run ruff check src/
uv run ruff format --check src/
# Build package wheel
uv buildTo run Gajim in development mode:
uv run gajim --user-profile devEvery push of a gajim-* tag automatically triggers the Multi-Platform Release Pipeline. All packages are compiled in parallel in clean virtual environments and published to GitHub Releases accompanied by individual SHA-256 verification files.
(C) 2003-2026 The Gajim Team & Contributors
https://gajim.org