Back to list
Skywire Development Update — October 16, 2026
The sixteenth of October was about the deployment’s load and the mux. A profile of the production deployment host led to cuts in redis traffic, allocation and CPU across transport discovery, dmsg discovery, the route finder and CXO, and the transport metrics feed learned to recover from a broken fill. A live test of route multiplexing found two router defects that ended 2-hop tunnels early, and both were fixed. home.skynet was split into tabs and now lists the sites every visor serves. On the skycoin.com side the site is now generated by a Go program, React is gone, and the Skywire page became a full article.
Skywire: Lighter Deployment Services
5705 moved settled per-transport uptime timelines out of redis. They were 1.67 million keys, nearly half of the deployment’s redis. Each finished UTC day is now written once to an archive file of about 4 MB, and the keys expire after 36 hours instead of eight days. The uptime endpoints read older days from the archive, so their answers do not change, and skywire cli tp uptime archive reads any day back.
5704 cut the largest source of redis commands, transport telemetry, which was about 1.16 million of the 1.0 to 1.8 million commands a minute on the deployment host. Transport discovery now applies each transport’s telemetry every 15 minutes instead of five, skips rows identical to the last one for up to 45 minutes, and writes each reporter’s daily totals once per batch. A row held across midnight is applied to the old day, which also stops up to one window of bytes landing on the wrong day. The bandwidth rules themselves are unchanged, and tests check exact totals across idle stretches, midnight and batched writes.
5703 took five cheap wins from the same profile. dmsg discovery sorted client keys through their hex strings, which was a tenth of the host’s allocations, and now compares raw bytes in the same order. The route finder rebuilt its graph of 93,000 transports every 15 seconds while answering about ten queries a minute, and now rebuilds only when a request finds it stale. CXO cached a connection string it formatted on every message, and the transport graph viewer and rewards stats server now share the memory-mapped geoip database instead of loading their own 59 MB copies.
5696 fixed the transport metrics feed. Since a restart the day before, its subscribers held only empty September leaves and reported a clean sync, so the reward system collected no bandwidth. When one object request timed out during a fill, CXO’s reference counts went wrong and every later fill skipped the missing subtree. The fill now loads those nodes again, a broken fill is reported instead of hidden, and the first sync waits for a whole root. A test of 30 cases failed 25 before the change and none after, and a subscriber with the fix synced the full production feed. 5699 fixed a visor that also runs a dmsg server losing the client half of its discovery entry. It had added its client half to a shared copy of its seed entry at boot, published that unversioned copy, and had it rejected, so route setups to it failed. The entry is now copied, and the fallback asks the live discovery for a seed.
Skywire: Keeping Mux Tunnels Alive
A live test of mux composition found two defects, fixed in 5700. A 2-hop tunnel never got a second leg, because the route lookup took the direct-hop shortcut using the visor-wide hop floor while the dial asked for two hops, so every candidate was rejected. The shortcut now respects the per-dial floor too. Cutting a QUIC leg under load also closed the whole tunnel, since the failed write reached the app before the dead leg was pruned and the exit ended the session along with all 16 of its streams. With selective acknowledgement on and another leg up, the frame is now resent on another leg from the retransmit buffer.
A retest showed a cut leg could still close the tunnel when it was pruned between being chosen and failing, leaving the resend path to think only one leg remained. 5701 resends whenever any other leg exists, never onto the failed transport. It also refills small pools, which had never redialed a cut 2-hop leg because taking a standby would drop them below the standby minimum. Each fix carries a test that fails without it.
5702 corrected four claims in the docs. The glossary said transports use the Noise XK handshake when they use KK with the ML-KEM-768 hybrid on every handshake, the post-quantum design doc still said it was not implemented, the mux.shape help called the setting advisory though the pool arbiter converges on it, and several guides pointed at service HTTP addresses that no longer answer. They now point to the CLI commands and dmsg addresses.
Skywire: Every Visor’s Sites
5697 taught the visor to list the sites it serves. A visor whose * vhost hands every name to a local Caddy serves sites it never heard of, so its landing page linked none of them, and once port 80 served a website the landing page could not be reached at all. The visor now reads the names Caddy serves from its admin API and caches them for five minutes, --site names them for other web servers, and GET /.skywire/sites returns them as JSON. The visor’s own pages are always at /.skywire/ and can also be given a name or a port. It was tested with a real server’s Caddy config, listing 20 sites.
5698 split home.skynet into three tabs: the deployment’s services, this visor and the visors it manages, and every visor the address resolver knows. The second tab links each managed visor’s own pages and lists its sites, so a hypervisor’s user can reach every site its visors serve, and it is shown only to the visor itself or a key on its survey whitelist. Links also got readable colors in dark mode.
Skycoin: skycoin.com Generated with Go
75 replaced the React site with a Go program that writes the pages from templates, plain CSS and a few dozen lines of JavaScript, keeping every URL so the server’s redirects are unchanged. A parity test compared the visible text, links and head tags of all 38 pages with the React build. Lighthouse mobile performance rose from 48 to 74 on the home page and to 100 on most others, and SEO from 92 to 100. Placeholder text was replaced, the cookie notice removed because the site sets no cookies, and videos now load from youtube-nocookie.com only after a click.
77 made the QR page check a Skycoin address in the browser with a 41 KB TinyGo module, instead of calling a node that sends no CORS header, and it agrees with the Go decoder on 12,000 test cases. The three hero animations now play from frames baked at build time through a small TinyGo player, so createjs is gone, the payload is 40 to 55 percent smaller and each frame costs about a third of the script time. 78 removed the React app entirely, rewrote /ecosystem around Skycoin, Skywire and CXO, and turned /skywire into an article of about 5,500 words covering identity and post-quantum encryption, transports, dmsg, routing and multiplexing, skynet, the apps, the browser visor and CXO. 76 kept the linter off the vendored and generated files, and 74 gave the five press releases page titles short enough for search results.