Getting Started¶
eMuleBB Rust is a headless IPv4 eD2K/Kad client with a browser console and REST
API. Start with a matching nightly package, verify
its checksum, and keep the complete extracted layout, including webui. No Rust
toolchain is needed to use the native packages.
First Launch¶
On Windows, run emulebb-rust.exe; for an extracted Linux native archive, run
./emulebb-rust from its directory. DEB users can run emulebb-rust. On macOS,
launch the copied app. Container and Android users must follow their separate
package notes.
Without --profile, the first native launch creates a private default profile
and prints its generated API key once. Open http://127.0.0.1:4711/ and enter
that key. Keep it private. Existing profiles do not generate or print a new key
on every run; macOS GUI/container users may need the private bootstrap file.
| System | Default profile |
|---|---|
| Windows | %LOCALAPPDATA%\emulebb-rust |
| Linux | $XDG_CONFIG_HOME/emulebb-rust, falling back to ~/.config/emulebb-rust |
| macOS | ~/Library/Application Support/emulebb-rust |
| Official container | /config/emulebb-rust |
An explicit --profile <directory> normally requires an existing
emulebb-rust-settings.toml; it is not a way to repair an incompatible database.
The one-shot stock/MFC importer has its own explicit
target-creation behavior.
Loopback REST does not mean offline P2P. Startup may fetch trusted discovery inputs and start configured networking. Use a deliberately isolated configuration and the supported harness when testing offline; a first launch is not that harness.
Profile And Control-Plane Settings¶
The minimal bootstrap TOML owns REST binding/authentication and optional asset location. This schematic example contains a placeholder, not a working secret:
The blank key above is deliberately invalid: use the generated key or a privately
generated replacement. Startup rejects
blank, documented placeholder, whitespace-padded, non-printable and shorter-than-32
character keys. Generated keys are 32-character random UUID hex. Unix profile and
bootstrap permissions are private (0700/0600); permissive existing bootstrap
files are rejected with a remediation message. Never commit this file.
Mutable client/network settings live in SQLite and are exposed by Settings and
the API. Do not add a second set of runtime keys
to bootstrap TOML. Keep the REST listener on loopback for local use. The daemon
serves plain HTTP; a remote deployment needs a trusted TLS reverse proxy and
independent access restrictions. webui normally sits beside the executable;
optional [rest].webRootDir resolves relative to the profile when not absolute.
Connect And Check Reachability¶
Review Network, Servers and Kad in the console. Check your intended P2P interface and incoming/category directories before starting transfers. First-run listener defaults are eD2K TCP 4662, Kad UDP 4672 and REST TCP 4711. Router/firewall/container mappings must match your chosen settings; High ID is not guaranteed behind every NAT, router or VPN.
If route detection is ambiguous, select the intended interface explicitly for
that run with --p2p-bind-interface "INTERFACE_NAME", then save the network
setting through the console. Do not bypass an unresolved bind by exposing REST
or selecting an arbitrary interface. VPN use is optional and does not itself
establish native leak-safety proof.
Empty enabled discovery lists may trigger trusted bootstrap downloads. Bootstrap
failure leaves the console available for manual recovery. The policy target is
read-only server.met/nodes.dat import, but removal of remaining nodes.dat
write-back is still tracked by RUST-FEAT-062.
Do not treat bootstrap file formats as a second mutable-settings authority.
Search, Download And Share¶
After connecting, search for a synthetic name such as Sample File, inspect the result and choose its download action. Watch Transfers for sources, progress and errors. An empty search alone does not mean installation failed; availability, server/Kad state, peers, queues and reachability affect results. Only download content you are entitled to access.
Add an intentionally chosen folder under Shared Directories, review ignore rules, and watch scan/hash progress in Shared Files. Each shared root is a recursive, monitored tree. There are no single-file sharing-management controls or non-recursive mode. Use a dedicated sample directory rather than your home directory; review the files it contains before sharing.
Shutdown, Updates And Rollback¶
Stop gracefully using the console/API shutdown operation or the process/service's normal stop. Preserve the stopped profile, payloads and old binary before an update. Inspect the selected nightly's schema warning and source revision.
Minimal TOML bootstrap settings have a stability goal separate from the beta's explicitly unstable API/database. An incompatible schema is visibly rejected and requires an entirely fresh profile. The client does not migrate, reset, delete, move or partially repair the old profile. Keep it and its payloads intact for explicit rollback with the matching old binary. Do not edit schema markers, delete the database, use internal harness migrations or promise automatic continuation of unfinished transfers in a new incompatible profile.
The stock/MFC importer is a separate read-only source import into the current Rust schema. It does not provide cross-version Rust database migration or carry unfinished downloads. See the import guide.
Logging And Listener Troubleshooting¶
Regular builds log INFO and above to the console, bounded REST buffer and daily
JSON Lines under <profile>/logs. The logger retains the newest eight files;
file-output failure warns and leaves console/API logging available. RUST_LOG
controls the tracing filter, for example warn or info,emulebb_core=debug.
The API buffer retains 2,000 entries and truncates rendered messages at 4 KiB;
clearing that buffer does not delete retained files.
On Windows, REST socket error 10013 means access denied. It can involve reserved ports, exclusive socket ownership or security software. Inspect the REST address in the error separately from your P2P interface. For the default port:
netsh interface ipv4 show excludedportrange protocol=tcp
Get-NetTCPConnection -LocalPort 4711 -ErrorAction SilentlyContinue
Choose an available loopback port if needed. A temporary
--rest-bind-addr 127.0.0.1:14711 changes only that run; browse to the matching
address. To retain it, stop the daemon and update [rest].bindAddr in the private
bootstrap TOML. This does not change eD2K/Kad ports. For ambiguous P2P routing,
Get-NetAdapter | Select-Object Name, Status identifies Windows interface names;
use the intended name with --p2p-bind-interface, then persist through Settings.
The browser console is served at the REST origin root, with history routes such
as /transfers and static /assets. Reverse-proxy subpath mounting is not part
of the current deployment contract. Keep the complete packaged asset directory.
Common Problems¶
| Symptom | First check |
|---|---|
| Executable will not start | CPU/package match and the selected build's host dependencies |
| Console assets missing | Complete package layout, adjacent webui, configured asset root |
| API returns 401 | Exact private X-API-Key; do not substitute Basic/Bearer authentication |
| REST bind fails | Occupied/reserved port and configured loopback listener, separately from P2P |
| Default route ambiguous | Explicit intended P2P interface, then persist through Settings |
| Schema rejected | Preserve the old profile; select an entirely fresh profile for the new binary |
Regular logs are available in the console, bounded API log buffer and retained profile log files. Diagnostic bundles are private operator evidence and can contain the exact API key, paths, identifiers and logs. Do not attach them unreviewed to a public issue. Report suspected vulnerabilities through the private security route.
Next: API consumers, contributors, or release scope.