Two related improvements requested while testing the private fork:
1. Custom TCP/QUIC listen ports (SidecarConfig.tcpListenPort,
.quicListenPort). With ephemeral ports, the daemon's peer-listen
port changes at every restart, which makes port-forwarding on a
home router useless after the first daemon stop. Pinning these
keeps the same port across restarts so other private-network
nodes can dial in reliably.
Backend uses the configured port if Some, falls back to
pick_port_skip otherwise. Frontend exposes two inputs in
Settings → Daemon configuration with a help line explaining
when to fill them.
2. Daemon-failure banner in App.vue. The previous behaviour was
silent: a click on \"Start daemon\" that hit a backend error
only flipped the sidebar dot to red, with no message visible.
Now an inline banner at the top of the main content area shows
the error, plus a \"Go to Settings\" shortcut when the message
mentions a network config issue.
This repo is a hard fork of mycellium-ui dedicated to the
mycelium-private experimental track upstream. The two apps coexist
on the same machine via distinct app identifiers, polkit actions,
and binary names.
Renames
- package + crate: mycellium-ui → mycellium-ui-private
- bundle identifier: tech.threefold.mycellium-ui-private
- daemon binary: mycelium-private (separate upstream release tarball)
- bootstrap wrapper: /usr/bin/mycellium-bootstrap-private
- polkit policy file + action id
Functional changes
- SidecarConfig.network_name field (UTF-8, 2..=64 bytes)
- start() refuses to spawn without a network name AND a 32-byte
key file at app_data_dir/network_key.bin; surfaces a clear
error rather than letting mycelium-private fail mid-startup
- network_key_status / generate / import / export / delete
commands; uses OS RNG (rand) and writes 0600
- empty default peers list (no Threefold seed for private overlays)
- new Settings → Private network panel: name input, key generate /
reveal-hex / import / delete, status indicator
Adapted bootstrap script kills both `mycelium` and
`mycelium-private` orphans (cross-clash on UDP/9650 + TCP/8990).
CI workflow + sidebar branding updated. The README explains the
divergence model and how to cherry-pick upstream fixes.