eMuleBB Rust 0.1.0-beta.1 Changelog¶
Status: ACTIVE CANDIDATE. Final candidate heads, artifact hashes, and publication
date are recorded only after the release gate passes and the operator explicitly
approves the rust-v0.1.0-beta.1 tag.
Format: one line per item, grouped by area; this is a power-user changelog, not a Git log.
Product And Runtime¶
- First public Rust-native eMuleBB prerelease: a headless daemon with embedded browser WebUI, Rust-forward REST control plane, and SQLite-backed profile state.
- Added platform-native default profiles plus explicit
--profileoperation; REST bootstrap/auth remains inemulebb-rust-settings.toml, with runtime settings and network state inemulebb-rust-metadata.db. - Added finished-download delivery to category or incoming directories with same-volume hard-link and cross-volume copy/atomic-rename behavior while retaining the piece store for seeding.
- Added recursive monitored folder-root sharing, persistent categories/servers/settings/identity/credits, local file indexing, and observable reload/hash progress.
- Added automatic first-run eD2K and Kad startup with live server-population ranking and bounded fallback when preferred public servers are unavailable.
- Made broadband-oriented async IO the default runtime model instead of a compatibility preference or legacy UI toggle.
eD2K And Kad¶
- Added IPv4 eD2K server login with HighID/LowID operation, search, TCP/global-UDP source discovery, transfer queues, compressed/multipacket blocks, 64-bit offsets, AICH/ICH, secure identification, and persisted credits.
- Added UDP source reask, server-mediated LowID callback, server cycling/import, and bounded connection/source scheduling.
- Added full peer-centric A4AF connection reuse so outbound and LowID connect-back sessions traverse alternate files on one TCP transport with per-file NNP/FNF attribution.
- Added learned and persisted server obfuscation metadata from extended status and crypt-ping discovery, including obfuscated ports, UDP-key/public-IP binding, stale-key suppression, and bounded plaintext fallback.
- Added bounded shared-file media-metadata extraction with stock-compatible Kad artist/album/title/duration/bitrate/codec publication and the supported duration/bitrate/codec subset in eD2K server offers.
- Added Kad bootstrap, routing maintenance, search/publish/local index, firewall checks, buddy operation and buddy-relayed callbacks, flood controls, and persistence.
- Added upload scoring, elastic broadband slots, equal-share FIFO bandwidth scheduling, duplicate-block rejection, peer bans, IP filtering, and network-facing diagnostics.
- Matched the maintained fork's rate-limited upload send granularity with 2600-byte chunks at or above 6 KiB/s and 536-byte chunks below it while retaining whole-packet writes for unlimited uploads.
- Preserved queued upload range generations across request packets so diagnostics distinguish queued duplicates from already-served duplicates while rejecting both.
- Froze the beta parity omissions: live source exchange is SX2-only, eD2K/Kad is IPv4-only, peer chat/captcha UI and media preview are absent and unadvertised, and LAN/loopback Kad sources remain flood-exempt outside stock LAN mode.
- Kept the conservative rolling five-second outgoing-connection grant window as the only deferred parity behavior; it is gentler than stock tick-batch pacing and has no wire effect.
REST, WebUI, And Diagnostics¶
- Added API-key-authenticated
/api/v1resources for application state, settings, transfers, uploads, search, sharing, categories, servers, Kad, NAT, VPN Guard, IP filter, logs, and runtime diagnostics. - Added the embedded Vite/Preact WebUI and packaged it beside every native daemon and inside the container image.
- Added operational WebUI network controls, a unified connection-status toolbar, persistent search-session routes/history with paged live results, and transfer stop/delete actions.
- Added SSE reset/resume behavior and contract-version headers while keeping the Rust REST contract explicitly unstable between beta releases.
- Added static route/query/body/auth/header drift checks and a live 100-route plus SSE OpenAPI response-conformance CI gate using the tested Linux daemon artifact.
- Added regular operational summaries and diagnostics for process state, ED2K/Kad, publish, transfer, upload, download, shared hashing/reload, VPN Guard, and public-IP probes.
Routing And Safety¶
- Made explicit P2P bind/interface selection fail closed across ED2K, Kad, STUN, NAT, listeners, and outbound transport paths.
- Added an independent in-tree SSDP/SOAP UPnP IGD provider behind preferred MiniUPnPc, including bind-pinned discovery, mapping verification, rollback, deletion, settings, REST, WebUI, and diagnostic support.
- Added a blocking test-only socket-egress audit covering tunnel-up, tunnel-down, and tunnel-pulled scenarios while preserving loopback REST control.
- Added Docker-over-Gluetun isolation proof with positive sensor validation and zero observed off-tunnel P2P packets after tunnel loss.
- Kept native packages in direct-route posture with no anonymity promise; the isolated Gluetun namespace is the tested beta VPN deployment.
Packaging And Operations¶
- Added unsigned Windows x64/ARM64 ZIP packaging with embedded WebUI, example settings, license, release scope, manifest, SPDX SBOM, and SHA-256 evidence.
- Added Linux amd64/arm64 DEB and x86_64/aarch64 AppImage packaging with the same runtime/WebUI and provenance contract.
- Added unsigned, unnotarized macOS x64/ARM64 app-in-DMG packaging with first-launch Gatekeeper guidance and browser WebUI startup.
- Added a linuxserver-style s6 OCI image for linux/amd64 and linux/arm64 with
PUID/PGID/TZ,/config,/data/ed2k, and a versioned beta tag only. - Added six-target native package smoke and multi-architecture image assembly gates; publication remains tag-only after separate operator approval.
- Added per-asset manifests and SPDX SBOMs plus a release-wide
SHA256SUMSfile; final published hashes remain pending candidate approval.
Validation¶
- Added deterministic Rust-to-Rust and Rust-to-MFC upload/download coverage, stock-compatible live-byte witnesses, and exact delivered-file SHA-256 verification.
- Added four sanitizer-backed libFuzzer targets covering ED2K server parsers, peer TCP parsers, clear/obfuscated client UDP parsing, and the Kad v2 packet decoder.
- Added Windows and WSL direct-network diagnostic campaigns with bounded inputs, retained sanitized evidence, and graceful teardown requirements.
- Added cross-platform Rust build/test CI on Windows, Linux, and macOS, pinned Rust/tool/action dependencies, formatting/Clippy policy, and cargo-deny advisory/license/source gates.
- Added native package/WebUI startup smoke, container ownership/persistence checks, and independent Gluetun tunnel-down validation without touching an operator's existing stack.
- Added a live consumer workflow covering zero-configuration network startup, search/download, transfer deletion, shared-folder reload, and publish visibility through the packaged WebUI.
Migration And Risk Notes¶
- Treat this as a new Rust beta profile; do not point it at a live MFC profile or run two clients against one profile directory.
- Back up state before testing; development-era SQLite schemas are current-only and are not silently repaired or migrated by the Rust daemon.
- REST clients must use
X-API-Key; keep the listener on loopback or a trusted network and expect contract changes in later betas. - macOS packages require manual first-launch approval because they are unsigned and unnotarized; all native packages may trigger platform reputation warnings.
- TrackMuleBB, the frozen Slint UI, autonomous Torznab/indexer and Arr integration are outside this artifact set.