aMule 3.0.0 | aMule
Skip to main content<br>Release name: The 'alive again' version
First major release in 5+ years (since 2.3.3, 2021-02-07). Headline changes are dramatic throughput improvements, full build-system overhaul, modernized dependency stack, native binaries for Linux / macOS / Windows, and a broad legacy-API cleanup.
Highlights
Throughput rewrite. Disk I/O moved off the main thread, ASIO/EPOLLET races fixed, throttlers replaced with proper token-bucket limiters. Peer-to-peer download on the same hardware sees ~100–380× speedups across macOS / Linux / Windows over 2.3.3, plus aMule 3.0.0 sustains ~4.8× the upload throughput of eMule 0.70b on Windows. See Performance for the full matrix and per-PR breakdown.
Both throttlers (MaxUpload, MaxDownload) were also broken pre-fix — MaxUpload=0 capped at "current rate + 5 KB/s", MaxDownload was a ratio controller rather than a literal cap. Both rewritten (#461, #491). Important user-facing bug fixes, but secondary to the headline numbers.
Big-library / big-shareset scaling. Follow-up wave targeting nodes with 100 k+ shared files: per-file EC payload caches (#725, #736), skip-unchanged EC updates (#727), local-peer ZLIB bypass (#728), and a string of O(N²) → O(N log N) / O(1) algorithmic fixes across SharedFileList, SharedFilesCtrl, KnownFileList, wxListCtrl, ExternalConn, and amuleweb — the WebUI / amulegui stay responsive even on libraries where the previous GUI took minutes to redraw.
CMake replaces autotools. Single build system, modern toolchain — minimum CMake 3.10, minimum wxWidgets 3.2.0.
Native binaries for every major desktop. AppImage (x86_64 + aarch64), Flatpak (x86_64 + aarch64), macOS Universal2 .dmg (now bundling aMuleGUI.app alongside aMule.app, #529), Windows portable .zip and NSIS installer (x64 + ARM64, #740). First-run desktop integration prompt for AppImage; cross-platform autostart-on-login toggle (#744).
Auto-rescan of shared folders. wxFileSystemWatcher-driven (#591), with recursive vs explicit-share intent split (#606) and coverage of Incoming + per-category Incoming dirs (#743).
HTTPS works again. CHTTPDownloadThread rewritten on top of wxWebRequest; the hand-rolled stack had silently stopped working against modern TLS.
Kad parallel searches with alpha-frontier widening.
MaxMindDB replaces deprecated GeoIP for IP→country.
Performance
Throughput work landed across April 2026. The bottom-line cross-platform<br>numbers first, then the per-PR contributions that produced them.
Cross-platform end-to-end (2.3.3 vs 3.0.0)
Leecher platform2.3.3 (sustained)3.0.0 (sustained)SpeedupmacOS (Apple Silicon, Mac Studio)0.35 MB/s135 MB/s 381× Linux ARM (UTM VM, Ubuntu 25.10)0.34 MB/s117 MB/s 345× Windows ARM (UTM VM, Windows 11)0.36 MB/s39 MB/s 107×<br>Sustained over a 90 s window, single LAN peer downloading a 30 GB file<br>from an x86_64 Linux seeder running the same aMule version under test.
Per-platform breakdown of the seeder-side vs leecher-side contributions:
Platform2.3.3+ seeder fix+ leecher fix (3.0.0)macOS0.35 MB/s30 MB/s135 MB/s Linux0.34 MB/s20 MB/s117 MB/s Windows0.36 MB/s6.8 MB/s39 MB/s<br>The seeder-side contribution (PR #451 CUploadDiskIOThread + ASIO fixes)<br>dominates everywhere; the leecher-side contribution (#454 partfile-write<br>offload + #484 throttler-wake fix + #491 token-bucket cap) stacks another<br>~4–6× on top.
vs eMule 0.70b (Windows · same UTM hardware)
DirectioneMule 0.70baMule 3.0.0SpeedupUpload (Windows seeds → Mac leecher)22 MB/s106 MB/s ~4.8× Download (Linux seeds → Windows leeches)20 MB/s39 MB/s ~1.9×<br>Upload
#451 — eMule CUploadDiskIOThread port. Disk reads + ed2k packet construction off the main thread, RC4 stream-desync race fixed in the ASIO layer, EPOLLET spurious-wakeup fix in HandleRead, adaptive per-slot packet sizing (10 KiB → EMBLOCKSIZE). Dominant contributor to the upload gain.
#461 — MaxUpload=0 is now literal unlimited. The legacy code set allowedDataRate = current_rate + 5 KB/s per iteration — a tracking cap that pinned the uplink at a fraction of capacity on any link above a few hundred KB/s.
#436 — Speed-limit fields widened from uint16 to uint32. Legacy 65,534 KB/s (~524 Mbps) configuration ceiling gone; gigabit-class links can now be configured.
#463 — Bandwidth-cap UI. Spin button ceiling 19,375 → 1,000,000 KB/s; field width 100 → 140 px so the + button no longer clips off on modern themes. Slot Allocation cap 100 → 100,000 KB/s.
#898 — Default SlotAllocation raised from 2 kB/s to 10 kB/s. The previous default (set in 2005) fragmented uploads into so many sub-slot slices that fast peers were rate-shaped down to a trickle.
Download
#454 — CPartFileWriteThread. Disk writes for downloads moved off the main thread.
#484 — Throttler-wake fix. UploadBandwidthThrottler::Entry() adaptive backoff dozed for 5–25 ms between control-queue pumps, stalling the request→response loop. Empty→non-empty wake gate added on the control-queue path, plus IOCP-native async_read_some on Windows, wxMutex →...