Skip to content

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 --profile operation; REST bootstrap/auth remains in emulebb-rust-settings.toml, with runtime settings and network state in emulebb-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/v1 resources 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 SHA256SUMS file; 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.