<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Routing on Skycoin Blog</title><link>https://blog.theskywirenetwork.net/tags/routing/</link><description>Recent content in Routing on Skycoin Blog</description><generator>Hugo</generator><language>en</language><lastBuildDate>Thu, 04 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.theskywirenetwork.net/tags/routing/index.xml" rel="self" type="application/rss+xml"/><item><title>Programmable Routing Policy: Skylark and WASM</title><link>https://blog.theskywirenetwork.net/posts/programmable-routing-policy/</link><pubDate>Thu, 04 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.theskywirenetwork.net/posts/programmable-routing-policy/</guid><description>&lt;p&gt;Skywire&amp;rsquo;s router has, over the last month, become genuinely capable. It builds &lt;strong&gt;multihop&lt;/strong&gt; routes through chosen intermediates, fans a flow across &lt;strong&gt;multiplexed&lt;/strong&gt; parallel routes, keeps those routes &lt;strong&gt;disjoint&lt;/strong&gt; (no shared middle hop), routes the forward and reverse legs &lt;strong&gt;asymmetrically&lt;/strong&gt;, and &lt;strong&gt;ranks candidates by measured per-hop latency&lt;/strong&gt;. That&amp;rsquo;s a rich mechanism.&lt;/p&gt;
&lt;p&gt;But a mechanism needs a policy. &lt;em&gt;Which&lt;/em&gt; of those capabilities applies to a given flow — how many routes, how many hops, through which countries, rotated how often — was, until recently, a decision hardwired in Go. If you wanted your VPN traffic to take a different path than your chat traffic, or to avoid transiting a particular jurisdiction, or to fan across four disjoint paths during the workday and collapse to one at night, you patched the router.&lt;/p&gt;</description></item><item><title>Route Setup Over Transports: The Source-Driven Cascade</title><link>https://blog.theskywirenetwork.net/posts/source-driven-cascade-route-setup/</link><pubDate>Thu, 04 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.theskywirenetwork.net/posts/source-driven-cascade-route-setup/</guid><description>&lt;p&gt;To carry traffic across the skywire overlay, a multihop route has to be &lt;em&gt;built&lt;/em&gt;: each visor along the path needs a routing rule telling it which transport to forward a packet onto next. Installing those rules has, until now, been the job of a &lt;strong&gt;route-setup node&lt;/strong&gt; (RSN) — a dedicated service that, given a route, reaches out to every hop and writes the rule.&lt;/p&gt;
&lt;p&gt;The way it reached each hop was the problem. The RSN dialed each visor &lt;strong&gt;over dmsg&lt;/strong&gt;. And dmsg reachability is not the same thing as &lt;em&gt;route&lt;/em&gt; reachability. A visor can be perfectly alive on its transports — its stcpr and sudph links up, forwarding packets fine — while its dmsg session has quietly gone half-dead (an older build with an undetected zombie session, a relay that dropped it). The RSN would try to dial that hop over dmsg, time out, and the whole route setup would fail — even though every transport the route actually needs is working.&lt;/p&gt;</description></item><item><title>Skywire Development Update — June 2, 2026</title><link>https://blog.theskywirenetwork.net/posts/dev-update-2026-06-02/</link><pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.theskywirenetwork.net/posts/dev-update-2026-06-02/</guid><description>&lt;p&gt;A routing-reliability day, and two releases. The router gets a run of hardening — one hop&amp;rsquo;s failure no longer tears down the whole route, a cluster of panics and races are guarded, and a multiplexed-route stall is fixed. The dmsg-first client stops a bad HTTP fallback, the hypervisor starts forwarding browser-side UI errors into the visor log (where they&amp;rsquo;re actually visible), and v1.3.62 / v1.3.63 ship.&lt;/p&gt;
&lt;h3 id="skywire-router--dont-let-one-hop-sink-the-route"&gt;Skywire: Router — Don&amp;rsquo;t Let One Hop Sink the Route&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;2976&lt;/code&gt; fix(router): stop one hop&amp;rsquo;s failure from RST-ing the whole route (setup cascade)&lt;/strong&gt; — during route setup, a single hop failing could cascade into a reset of the entire route. Now a hop failure is contained, so the rest of the route survives and can be repaired rather than torn down wholesale. This is the kind of fix that turns &amp;ldquo;the route flaps when any intermediate hiccups&amp;rdquo; into &amp;ldquo;the route tolerates a hiccup.&amp;rdquo;&lt;/p&gt;</description></item><item><title>Skywire Development Update — May 31, 2026</title><link>https://blog.theskywirenetwork.net/posts/dev-update-2026-05-31/</link><pubDate>Sun, 31 May 2026 00:00:00 +0000</pubDate><guid>https://blog.theskywirenetwork.net/posts/dev-update-2026-05-31/</guid><description>&lt;p&gt;A short day, mostly routing-policy ergonomics: the policy&amp;rsquo;s rotation callbacks get richer inputs, and the proxy and VPN clients learn to take a &lt;code&gt;--routing-policy&lt;/code&gt; directly on the command line.&lt;/p&gt;
&lt;h3 id="skywire-routing-policy--richer-rotation-cli-wiring"&gt;Skywire: Routing Policy — Richer Rotation, CLI Wiring&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;2938&lt;/code&gt; feat(router/policy): expose leg byte counters and hop chain to rotation callbacks&lt;/strong&gt; — a policy&amp;rsquo;s rotation callback now receives the per-leg byte counters and the hop chain. A rotation policy can make decisions on real data — &amp;ldquo;this leg has moved very little traffic&amp;rdquo; or &amp;ldquo;this path runs through an intermediate I want to avoid&amp;rdquo; — rather than rotating blindly on a timer.&lt;/p&gt;</description></item><item><title>Skywire Development Update — May 29, 2026</title><link>https://blog.theskywirenetwork.net/posts/dev-update-2026-05-29/</link><pubDate>Fri, 29 May 2026 00:00:00 +0000</pubDate><guid>https://blog.theskywirenetwork.net/posts/dev-update-2026-05-29/</guid><description>&lt;p&gt;The routing-policy work keeps building. Yesterday&amp;rsquo;s Starlark policies gain a &lt;strong&gt;WASM backend&lt;/strong&gt; (a compiled, language-agnostic alternative to the Starlark interpreter), the operator-facing name &lt;strong&gt;&amp;ldquo;skylark&amp;rdquo;&lt;/strong&gt;, periodic route &lt;strong&gt;rotation&lt;/strong&gt;, a hypervisor-UI panel to manage it, and runtime per-app hot-swap. Underneath, the router&amp;rsquo;s mux loop gets a best-effort + local-fallback path, and the CXO node sheds a long-standing accept-path serialization bottleneck. Two releases, v1.3.60 and v1.3.61, go out.&lt;/p&gt;
&lt;h3 id="skywire-routing-policy--wasm-backend-rotation-and-skylark"&gt;Skywire: Routing Policy — WASM Backend, Rotation, and &amp;ldquo;Skylark&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;2913&lt;/code&gt; feat(router/policy): WASM backend for routing policies&lt;/strong&gt; — alongside the Starlark interpreter, policies can be compiled to &lt;strong&gt;WASM&lt;/strong&gt; and run through a WASM backend. Starlark is the readable, write-it-inline option; WASM is the compile-it-from-any-language, run-it-fast option. The router can evaluate either.&lt;/p&gt;</description></item><item><title>Skywire Development Update — May 28, 2026</title><link>https://blog.theskywirenetwork.net/posts/dev-update-2026-05-28/</link><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><guid>https://blog.theskywirenetwork.net/posts/dev-update-2026-05-28/</guid><description>&lt;p&gt;The headline feature of the week lands: &lt;strong&gt;operator-programmable routing policy&lt;/strong&gt;. Skywire&amp;rsquo;s router already does multihop, multiplexed, latency-ranked, asymmetric path selection — but &lt;em&gt;which&lt;/em&gt; path a given flow takes was hardwired in Go. Today that decision becomes a program the operator writes, in &lt;strong&gt;Starlark&lt;/strong&gt; (a small, sandboxed, Python-like language), evaluated per dial. A flow can be steered onto disjoint paths, pinned by 5-tuple, made latency-adaptive, prioritized by DSCP, or forced onto the overlay — by policy, not by patch.&lt;/p&gt;</description></item></channel></rss>