<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <updated>2026-09-07T20:36:38Z</updated>
  <generator>https://njump.me</generator>

  <title>Nostr notes by Resilum</title>
  <author>
    <name>Resilum</name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://njump.me/npub1rhj8lc0aecl6c0rgmxdvz8wgp0nq2ep3jqyy9q7c9npycryq9afsuvffdq.rss" />
  <link href="https://njump.me/npub1rhj8lc0aecl6c0rgmxdvz8wgp0nq2ep3jqyy9q7c9npycryq9afsuvffdq" />
  <id>https://njump.me/npub1rhj8lc0aecl6c0rgmxdvz8wgp0nq2ep3jqyy9q7c9npycryq9afsuvffdq</id>
  <icon>https://npub1rhj8lc0aecl6c0rgmxdvz8wgp0nq2ep3jqyy9q7c9npycryq9afsuvffdq.blossom.band/d9bb61a3e8add40e2a2f6e59349856b7cdaaa35c67017873e635baa0c363c38e.jpg</icon>
  <logo>https://npub1rhj8lc0aecl6c0rgmxdvz8wgp0nq2ep3jqyy9q7c9npycryq9afsuvffdq.blossom.band/d9bb61a3e8add40e2a2f6e59349856b7cdaaa35c67017873e635baa0c363c38e.jpg</logo>




  <entry>
    <id>https://njump.me/nevent1qqsv7lfw0tya9np37x04t87kk3fzncxc7362yps8gje6squzppelydczyqw7gllplh8rltpudrve4sgaeq97vptyxxgqss5rmqkvynqvsqh4xjqfnlv</id>
    
      <title type="html">Resilum Core v0.2.3 — a status command that reads the node ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsv7lfw0tya9np37x04t87kk3fzncxc7362yps8gje6squzppelydczyqw7gllplh8rltpudrve4sgaeq97vptyxxgqss5rmqkvynqvsqh4xjqfnlv" />
    <content type="html">
      Resilum Core v0.2.3 — a status command that reads the node aloud&lt;br/&gt;&lt;br/&gt;- docs: show the node starting and the peers placed&lt;br/&gt;- discovery: keep iroh and cache-warmed peers among the links&lt;br/&gt;- resilumd: a status command that reads the node aloud&lt;br/&gt;- coordinates: measure each route apart, not all as one&lt;br/&gt;- status: one snapshot for every consumer&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/Resilum/resilum-core/releases/tag/v0.2.3&#34;&gt;https://github.com/Resilum/resilum-core/releases/tag/v0.2.3&lt;/a&gt;&lt;br/&gt;
    </content>
    <updated>2026-09-11T19:47:54Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsw28vwkw40a5s6se4utf0r270w0cyv36t80l7ujx8ysfwaz4wyzhszyqw7gllplh8rltpudrve4sgaeq97vptyxxgqss5rmqkvynqvsqh4xvh4rnj</id>
    
      <title type="html">We started a devlog for Resilum Core — a Reticulum node in Rust ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsw28vwkw40a5s6se4utf0r270w0cyv36t80l7ujx8ysfwaz4wyzhszyqw7gllplh8rltpudrve4sgaeq97vptyxxgqss5rmqkvynqvsqh4xvh4rnj" />
    <content type="html">
      In reply to &lt;a href=&#39;/naddr1qqtx7mn994hx7er994kkzmne94mkz7tn94hh2aqzyqw7gllplh8rltpudrve4sgaeq97vptyxxgqss5rmqkvynqvsqh4xqcyqqq823cz3zl3n&#39;&gt;naddr1qq…zl3n&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;We started a devlog for Resilum Core — a Reticulum node in Rust that keeps TCP/IP, Tor, I2P, Yggdrasil, QUIC and ICMP up at once, under one peer identity. When an interface dies the link moves to another one, and the destination hash never changes, so nobody re-adds anybody.&lt;br/&gt;&lt;br/&gt;First entry: what a node looks like when it comes up, what it can tell you about the neighbourhood around it, and what is ready today.&lt;br/&gt;&lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqtx7mn994hx7er994kkzmne94mkz7tn94hh2aqpp4mhxue69uhkummn9ekx7mqpzemhxue69uhhyetvv9ujuurjd9kkzmpwdejhgq3qrhj8lc0aecl6c0rgmxdvz8wgp0nq2ep3jqyy9q7c9npycryq9afsxpqqqp65wf3ngag&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…ngag&lt;/a&gt;&lt;/span&gt;&lt;br/&gt; &lt;/div&gt; 
&lt;h1 id=&#34;one-node-many-ways-out-2&#34;&gt;One node, many ways out&lt;/h1&gt;

&lt;p&gt;There is a moment every mesh setup runs into: the interface you configured stops working, and
the node is simply gone. You edit a config, restart, tell people the new address. Reticulum
solves half of this — a destination is a hash, not an address — and then most setups undo it by
pinning a node to one interface.&lt;/p&gt;

&lt;p&gt;Resilum Core is a Reticulum node in Rust that keeps several interfaces up at once, under a
single identity, and moves a link to whichever one can currently reach the peer.&lt;/p&gt;

&lt;h2 id=&#34;start-it-and-ask-it-where-it-is-2&#34;&gt;Start it, and ask it where it is&lt;/h2&gt;

&lt;p&gt;The image already carries Tor, Yggdrasil and I2P, and the entrypoint writes every config file
on first start. So a node is:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd deploy &amp;amp;&amp;amp; docker compose up -d
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;From there it is worth asking the node what it sees, because that is the part a mesh usually
hides from you:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;resilumd status          # interfaces up, addresses announced, links held
resilumd status --map    # the neighbourhood, placed by latency rather than geography
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The map is not a metaphor. Peers exchange positions over established links and measure the
round trip, so &amp;#34;near&amp;#34; means responsive, not geographically close — a node three countries away
on a good path sits closer than the one behind a congested circuit.&lt;/p&gt;

&lt;p&gt;And the mesh is usable as an internet exit right away:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;curl -s -x socks5h://127.0.0.1:10808 https://check.torproject.org/api/ip
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://npub1rhj8lc0aecl6c0rgmxdvz8wgp0nq2ep3jqyy9q7c9npycryq9afsuvffdq.blossom.band/b509c714059758874ece267d9e837f0b2a1d2776f45c3c623eefa2707f21bd3a.gif&#34; alt=&#34;A node starting from a cold container, reporting its status and its neighbours, then carrying a request out to the internet&#34;/&gt;&lt;/p&gt;

&lt;p&gt;There is nothing else to edit. Identity and state persist in a mounted directory, so a restart
comes back as the same node.&lt;/p&gt;

&lt;h2 id=&#34;the-build-is-the-same-everywhere-2&#34;&gt;The build is the same everywhere&lt;/h2&gt;

&lt;p&gt;The role follows from what the machine has, not from a different build. Images are published
for amd64 and arm64, so the same command works on all of these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A VPS with a public address&lt;/strong&gt; becomes an anchor others can dial, and — opt-in — a usable
exit. Turning on the exit means other people&amp;#39;s traffic leaves through your address, with the
same exposure as running any public exit. It is off by default for that reason.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A single-board computer on a home LAN&lt;/strong&gt; becomes the bridge between that LAN and the
overlays: it holds the Tor, Yggdrasil and I2P sides so the phones and laptops around it do
not have to.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A laptop&lt;/strong&gt; is a plain client that joins and leaves, and gets a local SOCKS5 port to browse
through the mesh.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anything with a Wi-Fi radio&lt;/strong&gt; can end up hosting a group for the devices around it, if the
election picks it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing above the link layer knows which interface carried a packet. If Tor dies mid-session,
the next announce re-establishes the path over Yggdrasil or QUIC. The destination hash does not
change, so nobody re-adds anybody.&lt;/p&gt;

&lt;h2 id=&#34;what-is-ready-2&#34;&gt;What is ready&lt;/h2&gt;

&lt;p&gt;Running today: TCP/IP, UDP, Tor (an external daemon, or an in-process client), I2P over SAM,
Yggdrasil, iroh/QUIC with hole punching, and ICMP echo — frames riding inside ping payloads,
where the client side needs no privileges at all. On top of the transports: LXMF messaging, a
SOCKS5 ingress and an L3 VPN that routes flows into the mesh.&lt;/p&gt;

&lt;p&gt;Being built right now: BLE, and Wi-Fi Direct, where the daemon raises a P2P group through
whichever of NetworkManager, iwd or wpa_supplicant holds the radio.&lt;/p&gt;

&lt;p&gt;The node is backwards compatible with the reference Python implementation, so it joins the
existing network as a peer rather than starting a parallel one.&lt;/p&gt;

&lt;h2 id=&#34;a-mobile-client-is-coming-2&#34;&gt;A mobile client is coming&lt;/h2&gt;

&lt;p&gt;Not as a rewrite: the phone links this same node as a shared library through its C ABI, so the
transports, the identity handling and the delivery logic are literally the same code as on a
VPS. That is the reason the C ABI exists at all.&lt;/p&gt;

&lt;p&gt;It is not released yet, and we are not giving a date — when it is out, it will be a post here
with a link, not a promise.&lt;/p&gt;

&lt;h2 id=&#34;why-a-devlog-2&#34;&gt;Why a devlog&lt;/h2&gt;

&lt;p&gt;The interesting part of this project is not the feature list, it is the decisions. How BLE peers
elect who hosts a group. What the covert ICMP transport can and cannot hide. What broke when a
link had to survive its interface dying.&lt;/p&gt;

&lt;p&gt;New entries go out with each release, plus whatever is worth writing up in between. The current
release is v0.2.3.&lt;/p&gt;

&lt;p&gt;Code, AGPL-3.0: &lt;a href=&#34;https://github.com/Resilum/resilum-core&#34;&gt;https://github.com/Resilum/resilum-core&lt;/a&gt;&lt;/p&gt;
 &lt;/blockquote&gt;&lt;br/&gt;#resilum #reticulum #meshnetwork #p2p #rust #privacy&lt;br/&gt;
    </content>
    <updated>2026-09-11T19:47:39Z</updated>
  </entry>

</feed>