Back to list
Skywire Development Update — October 28, 2026

Skywire Development Update — October 28, 2026

The twenty-eighth of October taught visors about the network they are on. A visor that moves to another network now refreshes what it advertises instead of announcing the old address until it expires, an operator can choose which interfaces are advertised at all, and a visor on a metered connection, such as a phone on mobile data, stops carrying other visors’ traffic. The hypervisor UI got a command palette, a searchable visor list with bulk actions, an overview at the top of each visor and live updates over its socket. The allocation work on the deployment host continued down into yamux and Skycoin’s encoder and signature code, slow CXO subscribers can now finish their fills, and the Android app replaced its SkyChat and SkyDEX web pages with native screens. Skycoin landed the first stage of multi-signer blocks for fiber chains.

Skywire: Moving Networks

A visor that moved to another network kept advertising the old one. Its public address, STUN result and LAN addresses were learned once at start, and the transports’ 90 second refreshes kept re-sending the old public address, so the address resolver’s entry never expired. 5908 adds a network refresh that reconnects dmsg, probes STUN again, looks up the public address again, drops the visor’s own reach card and rebinds every transport type at once. A burst of triggers runs one refresh, and it runs on request from the CLI or from the Android app. The LAN list had also carried the visor’s own SkyDNS address, which is now left out.

5909 lets an operator choose which interfaces are advertised, with allow and deny lists of interface patterns or address ranges under transport.network. Deny wins and an empty allow list allows everything, so nothing changes by default. The policy applies to address resolver binds, the reach card and WebRTC’s candidates alike, live from skywire cli visor network set. 5910 lets a visor behind NAT stop appending its public address to its binds eventually: the address resolver now asks the visor’s fresh reach declaration first, and takes the bind when it says the visor accepts that transport type.

A visor on mobile data carried other visors’ traffic like any other: autoconnect grew transports, it took transit hops and dmsg relay streams, and it accepted new automatic transports. 5911 marks the network as metered when the operator says so, when the Android app reports the system’s flag, or when the active interface matches a configured pattern, and then runs the visor lean. Lean stops public autoconnect, refuses transit and dmsg relaying, refuses new automatic inbound transports and declares that it accepts none. Two stricter modes, dmsg-only and offline, go further. 5913 has the Android app report moves and the metered flag, so the phone runs lean on mobile data and normally on Wi-Fi, and 5915 fixed the in-process path, where a “not metered” flag had arrived as unknown and left the visor lean after the phone returned to Wi-Fi. 5912 moves the VPN client’s direct routes around the tunnel to the new default gateway after a move.

Skywire: Hypervisor UI

The visor list showed about five visors per screen, and its bulk update and reward address actions applied to every online visor on the page. 5893 adds a search box, quick filters for online, offline, outdated and no reward address, a compact one line per visor mode as the default, and a selection bar to update, set the reward address of, or restart only the ticked visors. 5907 adds a Ctrl-K command palette that jumps to any visor by label, key, address or place, to any page or visor tab, and runs actions such as copy key, terminal, logs, restart and update. 5894 starts each visor’s Info tab with cards for health, transports by type and direction, network, apps and rewards, and a list of what needs attention, such as a failing health check, an autostart app that is not running or a config from another release.

5895 lets the dashboard subscribe to a visor’s summary over the /ws socket it already used for requests, sending an event only when the summary changed, and 5905 moves the rest of the dashboard’s polled pages there too, each keeping polling as its fallback. 5891 adds a Contacts tab beside Mail for the new address book, with search, editing and vCard import and export. 5896 checks keys, addresses, durations and log levels in the settings form and in skywire autoconfig before they reach skywire.conf, where a typo used to fail only at the next config generation, possibly on a remote visor. 5906 shows the values from skywire.conf as the autoconfig help’s defaults.

Skywire: Deeper Allocation Work

The deployment host’s profiles led further down. 5884 takes a yamux release that pools the timers it had allocated for every deadline wait and every frame sent, about 6 GB an hour. skycoin#3175 adds decoders to Skycoin’s encoder that do not copy their input, and 5882 uses them in CXO’s decode path, which copied about 5 GB an hour. skycoin#3174 removes the big integer temporaries from secp256k1’s wNAF digit extraction, which accounted for most of the 11 percent of all allocated objects that signatures caused on the host. Verifying a signature went from 197 allocations to 53, and every output was checked against the old code for 20,000 fixed inputs.

5883 reuses CXO’s cache eviction buffer, 5886 sizes decoded transport lists once, 5887 and 5889 encode each key once in transport discovery’s counts and dmsg discovery’s clients by server, and 5903 allocates the landmark search queue once. At startup the transport discovery heap reached 2.1 GB, so 5900 builds the metrics window in stages, 5902 reads the startup bandwidth window in chunks, and 5898 keeps a feed’s leaves in the store after a restart instead of holding them all in memory until the first publish, 493 MB of that heap. 5897 adds a runtime section to visor state and a /debug/gctrace page, so heap, pause share and collection rate are visible without shell access on both the Go and TinyGo builds, and 5899 moves its ring length into the config.

Skywire: CXO Fills and Android

Visors kept failing to sync CXO feeds with “no connections to fill from”. On the Android emulator channel posts and pairing messages from another visor arrived late or never, and one home visor had never synced the service discovery feed. 5879 found the cause with the debug logs: a subscriber fills one root, the publisher replaces it before the fill ends and deletes the objects the subscriber still needs, so the request waits out its timeout and the fill fails. Publishers now keep recent roots long enough for slow fills to finish, and a subscriber that hears “cannot serve this” drops that peer as a source instead of the connection.

5878 replaced the Android app’s SkyChat web page with native screens over the same HTTP API and event stream, covering direct messages, files, voice and video messages, groups, channels and calls, and gave the routes that wait on another visor two minutes instead of the server’s ten second write timeout. 5881 did the same for SkyDEX, over the same control API the web page used. 5914 moves the app onto the visor’s contact book and shows it in the phone’s contacts, and 5880 shows contact book names in skychat wherever there is no skychat nickname. 5904 keeps the SMTP mail bridge enabled across autoconfig, which had dropped it and left a host mail server’s .skynet mail with nowhere to go. 5901, 5885, 5888, 5890 and 5916 fixed a test race, a Windows permission test, a UI rebuild and stale module sums.

Skycoin: Several Signers per Fiber Chain

skycoin#3173 is stage one of the multi-signer design from the day before. A fiber chain can list several block signers in fiber.toml, and from a fork height a block is final once a threshold of them has signed it. Signers take turns to propose, and the others check the proposal against their own chain, record their vote durably and sign. On a local network of four signers with a threshold of three, blocks came from every proposer in turn, the chain went on with one signer stopped, and with two stopped it halted. skycoin#3181, with the dependency updates skycoin#3162, skycoin#3163, skycoin#3165, skycoin#3167, skycoin#3168, skycoin#3176, skycoin#3177 and skycoin#3178, refreshed the explorer, web wallet and SkyDEX client builds.