eMule Qt is a free, open-source file sharing client for the ED2K and Kademlia networks that also downloads BitTorrent, Usenet and file hoster links — all from one client, rebuilt from the ground up with Qt 6 and modern C++23.
Cross-platform. Fully compatible with the existing eMule network.
Website: emule-qt.org
- ED2K & Kademlia — Server-based and decentralized DHT networks for maximum source availability
- Protocol Obfuscation — TCP/UDP encryption enabled by default
- AICH Verification — Chunk-level integrity checks with automatic corruption recovery
- Queue & Credit System — The proven eMule reward system for fair sharing
- Built-in Web Server — Remote control from any browser via the classic web interface
- Advanced Search — Expression-based queries across multiple networks
- IRC Chat & Messages — Built-in IRC client and peer-to-peer messaging
- IP Filtering — Dynamic blocklists with automatic updates
- Media & Archive Preview — Preview video files and browse archives before download completes
- Statistics — Real-time bandwidth graphs, connection metrics, and Kademlia visualization
- Internationalization — 13 languages out of the box
Not found in the original eMule.
- BitTorrent Downloads — Torrents and magnet links in their own Torrents tab, powered by libtorrent: DHT, PEX, local peer discovery, encryption, per-file selection, seeding limits by ratio or time, and torrent results from Torznab indexers and eD2K servers in the same Search tab (details)
- File Hoster Downloads — Paste links from more than 3,500 one-click hosters and 1,000 link sites; the daemon resolves them with JDownloader's plugins (Java is fetched for you), shows image captchas, uses your premium accounts, falls back to mirrors, resumes broken transfers and groups files into packages (details)
- Usenet Downloads — A complete NNTP engine in the daemon: up to 16 providers on a priority and failover ladder, TLS, allowance tracking, PAR2 repair, and unpacking that finishes as the download does (details)
- Indexer Search — newznab and Torznab indexers queried in parallel from the same Search tab and de-duplicated, with the grab done daemon-side so the GUI never holds an API key or a download URL
- Auto-Download Feeds — A saved indexer query or an RSS URL polled on a schedule, filtered by regex, size and age, and queued into the category you chose
- Cross-Platform — One codebase running natively on Windows, macOS, and Linux; the original is MFC and Windows-only
- Daemon/GUI Split — Headless
emulecored+emuleqtGUI over a CBOR IPC link (TLS with a pinned certificate when remote); run the core on a server or NAS and attach the GUI locally or remotely - IPv6 — Dual-stack across client-to-client, client-to-server, Kademlia, and eD2K links, so IPv6-only and CGNAT users can participate fully — additive and legacy-safe (spec)
- HTTP Cache — When several peers want the same part, encrypt and upload it once, then hand each peer a URL and key; the cache server never sees plaintext (spec)
- PCP & NAT-PMP Port Mapping — Three backends raced at startup — PCP, NAT-PMP, and UPnP IGD1/IGD2 with IPv6 pinholes — graded on whether the exact port was actually granted (details)
- NAT Traversal for LowID Clients — Two LowID peers can now transfer to each other (IPv6 fallback, QUIC): a server or Kad buddy introduces them, both punch their NATs, and the link runs over direct TCP/IPv6 when both have it, else over an obfuscated QUIC stream compatible with eMuleAI and aMule (details)
- REST API — A JSON
/api/v1/*interface with API-key auth alongside the classic web UI, for scripts and dashboards; browser apps on another origin are opted in withwebserver.corsAllowedOriginsinpreferences.yml - CLI Control — Drive a running daemon from the shell:
--add-link,--add-nzb,--add-torrent,--connect,--disconnect,--connect-kad - MCP Server for AI Assistants — A Model Context Protocol endpoint at
/mcpon the web server's port, so an assistant can search, queue and manage downloads through 51 tools that share the REST API's validation and code; read-only switch, API-key auth, and anemuleqt-mcpstdio bridge for clients that only start a local program (details) - Extended Source Exchange — Source exchange widened with each source's server endpoint, user hash, and obfuscation options, negotiated per peer
- Save/Load Sources — Each part file's best sources are written to disk and re-injected on restart, so a download resumes at speed instead of rebuilding its source list
- Country Flags — MorphXT-style flags next to every client, source, server, Kad contact, friend and news server, from a MaxMind GeoLite2 database the daemon keeps up to date (details)
- Fake-File Detector — A Confidence column in search results, indexer results and downloads that scores how likely a file is not what its name says — conflicting names, a program or archive named like a video, implausible media data, spam and fake ratings — with every reason in the tooltip; it warns, never hides or blocks (details)
- Upload Queue Persistence — The waiting list survives a restart with every peer's earned wait time intact, so queued peers keep their position (details)
- Hardened Kademlia — Node reputation with one-node-per-IP enforcement, variance-based adaptive timeouts, and a public IP adopted only once several independent peers agree on it
- Persistent Statistics — Graph history is collected in the core rather than the window, so traces survive a GUI restart and two GUIs on one daemon see the same picture
- Modern Foundation — C++23 and Qt 6 throughout, human-readable YAML configuration with encrypted secrets, a cross-platform crash handler, and 150+ automated test executables
Requirements:
- Qt 6.8+
- CMake 3.25+
- C++23 compiler (Clang 16+, GCC 13+, MSVC 2022+)
scripts/build.shBinaries are output to build/.
Open src/eMuleQt.sln in Visual Studio 2022 (or later) and build. See docs/windows-build.md for dependency setup (should be done by Visual Studio automatically).
The Usenet module builds by default and pulls two extra libraries on first configure: rapidyenc for SIMD yEnc decoding and par2cmdline-turbo for PAR2 verify and repair. Both are optional — -DEMULE_USENET_RAPIDYENC=OFF selects the built-in scalar decoder and -DEMULE_USENET_PAR2=OFF drops verify and repair — and the queue still downloads, assembles and shares either way. On Windows both arrive as vcpkg overlay ports from src/vcpkg-ports/.
Start the GUI (launches the daemon automatically):
build/emuleqtOptionally run the daemon standalone for headless/server use — the GUI can connect remotely over IPC (default port 4712):
build/emulecoredDocker: ghcr.io/moddermule/emuleqt runs the core, with the GUI in the browser as an option. See docs/docker.md.
To create a distributable app bundle, use the platform-specific scripts: scripts/bundle-macos.sh, scripts/bundle-linux.sh, or scripts/bundle-win.ps1.
emuleqt (GUI) ←— IPC/CBOR over TCP —→ emulecored (Daemon)
├── ED2K Protocol
├── Kademlia DHT
├── BitTorrent (libtorrent)
├── Usenet (NNTP / NZB)
├── File Hosters (JDownloader plugins)
├── Indexer Search & Feeds
├── Web Server / REST API
└── File Management
- Report bugs and suggest features via GitHub Issues
- Submit pull requests
- Add translations using Qt Linguist (see
lang/)
GPL-2.0 — see LICENSE.
Based on the original eMule by Merkur.
Torrent features implemented thanks to libtorrent.
File hoster downloads use a custom process extension implemented via JDownloader.
GeoLite2 country data by MaxMind.
