<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Iroh on sagenhaft</title>
    <link>https://sagenhaft.space/tags/iroh/</link>
    <description>Recent content in Iroh on sagenhaft</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    
    <lastBuildDate>Tue, 29 Sep 2026 19:45:00 -0700</lastBuildDate><atom:link href="https://sagenhaft.space/tags/iroh/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Beam</title>
      <link>https://sagenhaft.space/beam/</link>
      <pubDate>Tue, 29 Sep 2026 19:45:00 -0700</pubDate>
      
      <guid>https://sagenhaft.space/beam/</guid>
      <description>&lt;div class=&#34;not-prose my-6 flex flex-col sm:flex-row items-center gap-6 p-6 rounded-3xl bg-gradient-to-br from-primary-500/10 via-primary-500/5 to-transparent border border-primary-500/20 shadow-sm backdrop-blur-sm&#34;&gt;&#xA;  &lt;img src=&#34;icon.png&#34; alt=&#34;Beam App Icon&#34; class=&#34;w-28 h-28 rounded-2xl shadow-lg ring-1 ring-black/5 dark:ring-white/10 flex-shrink-0&#34; /&gt;&#xA;  &lt;div class=&#34;flex flex-col text-center sm:text-left&#34;&gt;&#xA;    &lt;div class=&#34;flex items-center justify-center sm:justify-start mb-2&#34;&gt;&#xA;      &lt;span class=&#34;text-xs font-medium px-3 py-1 rounded-md bg-primary-100 text-primary-800 dark:bg-primary-900/60 dark:text-primary-300&#34;&gt;macOS 27+&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;h1 class=&#34;text-3xl font-extrabold tracking-tight text-neutral-900 dark:text-white mb-1&#34;&gt;Beam&lt;/h1&gt;&#xA;    &lt;p class=&#34;text-base text-neutral-600 dark:text-neutral-300 mb-4&#34;&gt;&#xA;      Direct peer-to-peer file transfer between family Macs — powered by &lt;a href=&#34;https://iroh.computer/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34; class=&#34;font-semibold text-primary-600 hover:text-primary-500 dark:text-primary-400 underline decoration-primary-500/40 hover:decoration-primary-500&#34;&gt;iroh&lt;/a&gt;.&#xA;    &lt;/p&gt;&#xA;    &lt;div class=&#34;flex flex-col sm:flex-row sm:items-center justify-center sm:justify-start gap-3&#34;&gt;&#xA;      &lt;a href=&#34;Beam.dmg&#34; class=&#34;inline-flex items-center gap-2 rounded-xl bg-primary-600 px-5 py-2.5 text-sm font-bold text-white shadow transition hover:bg-primary-500 hover:shadow-md focus:outline-none focus:ring-2 focus:ring-primary-500 dark:bg-primary-500 dark:hover:bg-primary-400 !no-underline whitespace-nowrap self-start&#34;&gt;&#xA;        &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; class=&#34;w-4 h-4&#34; viewBox=&#34;0 0 512 512&#34; fill=&#34;currentColor&#34;&gt;&lt;path d=&#34;M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z&#34;/&gt;&lt;/svg&gt;&#xA;        &lt;span&gt;Download Beam for Mac (DMG)&lt;/span&gt;&#xA;      &lt;/a&gt;&#xA;      &lt;span class=&#34;text-xs text-neutral-500 dark:text-neutral-400&#34;&gt;8.8 MB &amp;bull; Apple Silicon&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;p class=&#34;text-xs text-neutral-500 dark:text-neutral-400 mt-2&#34;&gt;&#xA;      By downloading, you accept that Beam is provided &amp;ldquo;as is&amp;rdquo; without warranty (see &lt;a href=&#34;#disclaimer&#34; class=&#34;underline hover:text-primary-600 dark:hover:text-primary-400&#34;&gt;disclaimer&lt;/a&gt;).&#xA;    &lt;/p&gt;</description>
      <content:encoded><![CDATA[<div class="not-prose my-6 flex flex-col sm:flex-row items-center gap-6 p-6 rounded-3xl bg-gradient-to-br from-primary-500/10 via-primary-500/5 to-transparent border border-primary-500/20 shadow-sm backdrop-blur-sm">
  <img src="icon.png" alt="Beam App Icon" class="w-28 h-28 rounded-2xl shadow-lg ring-1 ring-black/5 dark:ring-white/10 flex-shrink-0" />
  <div class="flex flex-col text-center sm:text-left">
    <div class="flex items-center justify-center sm:justify-start mb-2">
      <span class="text-xs font-medium px-3 py-1 rounded-md bg-primary-100 text-primary-800 dark:bg-primary-900/60 dark:text-primary-300">macOS 27+</span>
    </div>
    <h1 class="text-3xl font-extrabold tracking-tight text-neutral-900 dark:text-white mb-1">Beam</h1>
    <p class="text-base text-neutral-600 dark:text-neutral-300 mb-4">
      Direct peer-to-peer file transfer between family Macs — powered by <a href="https://iroh.computer/" target="_blank" rel="noopener" class="font-semibold text-primary-600 hover:text-primary-500 dark:text-primary-400 underline decoration-primary-500/40 hover:decoration-primary-500">iroh</a>.
    </p>
    <div class="flex flex-col sm:flex-row sm:items-center justify-center sm:justify-start gap-3">
      <a href="Beam.dmg" class="inline-flex items-center gap-2 rounded-xl bg-primary-600 px-5 py-2.5 text-sm font-bold text-white shadow transition hover:bg-primary-500 hover:shadow-md focus:outline-none focus:ring-2 focus:ring-primary-500 dark:bg-primary-500 dark:hover:bg-primary-400 !no-underline whitespace-nowrap self-start">
        <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4" viewBox="0 0 512 512" fill="currentColor"><path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"/></svg>
        <span>Download Beam for Mac (DMG)</span>
      </a>
      <span class="text-xs text-neutral-500 dark:text-neutral-400">8.8 MB &bull; Apple Silicon</span>
    </div>
    <p class="text-xs text-neutral-500 dark:text-neutral-400 mt-2">
      By downloading, you accept that Beam is provided &ldquo;as is&rdquo; without warranty (see <a href="#disclaimer" class="underline hover:text-primary-600 dark:hover:text-primary-400">disclaimer</a>).
    </p>
  </div>
</div>
<div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl">
  Beam is a native macOS menu bar app for sending files directly between family members&rsquo; Macs. Pair once with each person, and from then on their Mac is in your menu bar and your Finder contextual menu. Files under a size threshold arrive silently into Downloads with no dialogs at all. Peer-to-peer over iroh — no server is written, deployed, hosted, or operated.
</div>

<hr>

<h2 class="relative group">Highlights at a Glance
    <div id="highlights-at-a-glance" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#highlights-at-a-glance" aria-label="Anchor">#</a>
    </span>
    
</h2>

<div class="not-prose my-8 grid gap-4 sm:grid-cols-2 grid-balance lg:grid-cols-3 grid-balance-3">
  







<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M266.3 48.3L232.5 73.6c-5.4 4-8.5 10.4-8.5 17.1v9.1c0 6.8 5.5 12.3 12.3 12.3c2.4 0 4.8-.7 6.8-2.1l41.8-27.9c2-1.3 4.4-2.1 6.8-2.1h1c6.2 0 11.3 5.1 11.3 11.3c0 3-1.2 5.9-3.3 8l-19.9 19.9c-5.8 5.8-12.9 10.2-20.7 12.8l-26.5 8.8c-5.8 1.9-9.6 7.3-9.6 13.4c0 3.7-1.5 7.3-4.1 10l-17.9 17.9c-6.4 6.4-9.9 15-9.9 24v4.3c0 16.4 13.6 29.7 29.9 29.7c11 0 21.2-6.2 26.1-16l4-8.1c2.4-4.8 7.4-7.9 12.8-7.9c4.5 0 8.7 2.1 11.4 5.7l16.3 21.7c2.1 2.9 5.5 4.5 9.1 4.5c8.4 0 13.9-8.9 10.1-16.4l-1.1-2.3c-3.5-7 0-15.5 7.5-18l21.2-7.1c7.6-2.5 12.7-9.6 12.7-17.6c0-10.3 8.3-18.6 18.6-18.6H400c8.8 0 16 7.2 16 16s-7.2 16-16 16H379.3c-7.2 0-14.2 2.9-19.3 8l-4.7 4.7c-2.1 2.1-3.3 5-3.3 8c0 6.2 5.1 11.3 11.3 11.3h11.3c6 0 11.8 2.4 16 6.6l6.5 6.5c1.8 1.8 2.8 4.3 2.8 6.8s-1 5-2.8 6.8l-7.5 7.5C386 262 384 266.9 384 272s2 10 5.7 13.7L408 304c10.2 10.2 24.1 16 38.6 16H454c6.5-20.2 10-41.7 10-64c0-111.4-87.6-202.4-197.7-207.7zm172 307.9c-3.7-2.6-8.2-4.1-13-4.1c-6 0-11.8-2.4-16-6.6L396 332c-7.7-7.7-18-12-28.9-12c-9.7 0-19.2-3.5-26.6-9.8L314 287.4c-11.6-9.9-26.4-15.4-41.6-15.4H251.4c-12.6 0-25 3.7-35.5 10.7L188.5 301c-17.8 11.9-28.5 31.9-28.5 53.3v3.2c0 17 6.7 33.3 18.7 45.3l16 16c8.5 8.5 20 13.3 32 13.3H248c13.3 0 24 10.7 24 24c0 2.5 .4 5 1.1 7.3c71.3-5.8 132.5-47.6 165.2-107.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM187.3 100.7c-6.2-6.2-16.4-6.2-22.6 0l-32 32c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l32-32c6.2-6.2 6.2-16.4 0-22.6z"/></svg></span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Direct P2P over iroh</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">Establishes direct, hole-punched QUIC connections across residential NATs. Files stream directly between Macs without touching any cloud storage or intermediate servers.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z"/></svg>
</span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Zero-Friction Delivery</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">Files below an auto-accept threshold (default 25 MB, customizable per contact) arrive silently into <code>~/Downloads</code> with a native notification.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"/></svg>
</span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Native Finder &amp; Menu Bar</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">Right-click any file in Finder to send, or click a contact in the menu bar. Built in 100% native SwiftUI and AppKit with a sandboxed FinderSync extension.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="currentColor" d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zM432 456c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Auto-Resume &amp; Queue</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">Sends to offline contacts wait in an ordered queue and drain when they wake. Drops or sleep reconnect automatically and resume from partial byte offsets.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="currentColor" d="M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.7 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0zm0 66.8V444.8C394 378 431.1 230.1 432 141.4L256 66.8l0 0z"/></svg></span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">End-to-End Encrypted</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">Transport-authenticated Ed25519 node identities and QUIC TLS 1.3 encryption. If hole punching falls back to an n0 relay, the relay sees only encrypted ciphertext.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
<path fill="currentColor" d="M144 144v48H304V144c0-44.2-35.8-80-80-80s-80 35.8-80 80zM80 192V144C80 64.5 144.5 0 224 0s144 64.5 144 144v48h16c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V256c0-35.3 28.7-64 64-64H80z"/></svg></span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Zero Accounts, Zero Tracking</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">No central user database, no email signups, no phone numbers. Pair in seconds using single-use, replay-proof <code>beam://</code> invite links.</div>
  
</article>


</div>

<hr>

<h2 class="relative group">Why Beam?
    <div id="why-beam" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-beam" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>AirDrop is miraculous when you and your recipient are sitting in the same living room. But the moment family members live across town, in another city, or across an ocean, AirDrop is out of the question.</p>
<p>The current alternatives are frustratingly clumsy:</p>
<ul>
<li><strong>Cloud Drives (iCloud Drive, Google Drive, Dropbox):</strong> Great for long-term document collaboration, terrible for single-shot file sends. You upload the file, wait for synchronization, copy a link, paste it in a message, they download it, and both sides eventually have to clean it up so it doesn&rsquo;t consume paid cloud storage quotas.</li>
<li><strong>Chat Apps (iMessage, WhatsApp, Signal):</strong> Convenient for small photos, but they aggressively recompress images and videos, choke on multi-gigabyte files, and store your family data on third-party servers.</li>
</ul>
<p>Beam was built to be <strong>AirDrop for the rest of the world</strong>: pair once with mom, dad, or your siblings, and sending a batch of vacation photos or a 4K home video is as simple as right-clicking the file in Finder.</p>
<hr>

<h2 class="relative group">How It Works
    <div id="how-it-works" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#how-it-works" aria-label="Anchor">#</a>
    </span>
    
</h2>

<h3 class="relative group">1. One-Time Pairing
    <div id="1-one-time-pairing" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-one-time-pairing" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Pairing creates a permanent mutual cryptographic relationship between two Macs. In the Beam menu, click <strong>Pair with…</strong> to generate a single-use invite link:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">beam://pair?id=4f8b2c...&amp;secret=9w7xdq...&amp;label=Uwe%27s%20Mac</span></span></code></pre></div></div>
<p>The invite contains the node&rsquo;s public key and a single-use random pairing secret encoded in <strong>z-base-32</strong> (chosen because its alphabet avoids visually confusable characters if read aloud). When the recipient clicks or accepts the link, both nodes exchange identities over an authenticated control stream and store each other in their contact list. Replaying the link or attempting unauthorized connections is immediately rejected.</p>

<h3 class="relative group">2. Sending Files
    <div id="2-sending-files" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2-sending-files" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Sending is integrated directly into macOS:</p>
<ul>
<li><strong>From Finder:</strong> Right-click any file or folder → <strong>Send with Beam ▸ [Contact Name]</strong>.</li>
<li><strong>From the Menu Bar:</strong> Click the Beam icon in the menu bar extra, select the contact, and choose files via the standard macOS open panel.</li>
</ul>
<p>If the recipient&rsquo;s Mac is asleep or offline, Beam automatically enqueues the transfer. As soon as the peer wakes up and announces presence, the queue drains in order.</p>

<h3 class="relative group">3. Receiving Without Friction
    <div id="3-receiving-without-friction" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#3-receiving-without-friction" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Every contact has an <strong>Auto-Accept Threshold</strong> (25 MB by default, adjustable globally and per-contact):</p>
<ul>
<li><strong>Under threshold:</strong> The file is accepted automatically and silently saved to <code>~/Downloads</code>. A native macOS notification appears; clicking it immediately reveals the file in Finder.</li>
<li><strong>Over threshold:</strong> An unobtrusive prompt appears displaying the sender&rsquo;s name, file name, file size, and remaining free disk space.</li>
<li><strong>Non-contacts:</strong> Any offer from an unknown node is declined silently with zero disk writes and nothing displayed.</li>
</ul>
<hr>

<h2 class="relative group">The iroh P2P Foundation
    <div id="the-iroh-p2p-foundation" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-iroh-p2p-foundation" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Under the hood, Beam is powered by <strong><a href="https://iroh.computer/"  target="_blank" rel="noreferrer">iroh</a></strong> (via <code>iroh-ffi</code> v1.1.0), linking a prebuilt Rust core through Swift bindings:</p>
<ol>
<li><strong>QUIC &amp; NAT Hole Punching:</strong> Nodes communicate over QUIC (RFC 9000). When two nodes connect, they initially coordinate through an <a href="https://iroh.computer/"  target="_blank" rel="noreferrer">n0 relay</a>, concurrently perform UDP hole punching, and rapidly upgrade to a direct peer-to-peer socket.</li>
<li><strong>Pipelined Stream Transport:</strong> File transfers run over a dedicated ALPN protocol (<code>beam/blobs/1</code>). To minimize round-trip bottlenecks on transatlantic routes, the sender pipelines continuous writes without per-chunk round-trip framing.</li>
<li><strong>Resumable Partial Transfers:</strong> Files are verified by SHA-256 upon completion. If a connection drops mid-transfer, re-initiating the transfer reads the receiver&rsquo;s partial byte offset and resumes instantly from where it stopped.</li>
<li><strong>Memory Efficiency:</strong> Thanks to streaming I/O, peak RSS remains around ~40 MB regardless of whether you&rsquo;re sending a 5 MB document or a 20 GB video.</li>
</ol>
<hr>

<h2 class="relative group">Security Architecture
    <div id="security-architecture" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#security-architecture" aria-label="Anchor">#</a>
    </span>
    
</h2>

  
  
  
  



<div
  
    class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
  
  >
  <span
    
      class="text-primary-400 pe-3 flex items-center"
    
    >
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="currentColor" d="M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.7 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0zm0 66.8V444.8C394 378 431.1 230.1 432 141.4L256 66.8l0 0z"/></svg></span>
  </span>

  <span
    
      class="dark:text-neutral-300"
    
    ><strong>Zero Trust for Untrusted Peers:</strong> Beam treats all external inputs as potentially hostile.</span>
</div>

<ul>
<li><strong>Transport-Authenticated Identities:</strong> Node IDs are derived directly from Ed25519 public keys. The remote node ID is authenticated by the QUIC handshake before any application bytes are exchanged.</li>
<li><strong>Filename Sanitization:</strong> All incoming filenames are rigorously sanitized against directory traversal attacks (<code>../</code>, hidden files, absolute paths, null bytes, and malicious Unicode sequences).</li>
<li><strong>Single-Use Pairing with Rate Limiting:</strong> Pairing secrets expire upon first use and pairing requests are rate-limited to 5 attempts per minute per peer ID to thwart brute-force attempts.</li>
<li><strong>Gatekeeper &amp; Notarization:</strong> Built and distributed as a signed, notarized, and stapled Apple disk image (<code>Beam.dmg</code>), fully compliant with modern macOS Gatekeeper requirements.</li>
</ul>
<hr>

<h2 class="relative group">Privacy: No Tracking, No Phoning Home
    <div id="privacy-no-tracking-no-phoning-home" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#privacy-no-tracking-no-phoning-home" aria-label="Anchor">#</a>
    </span>
    
</h2>

  
  
  
  



<div
  
    class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
  
  >
  <span
    
      class="text-primary-400 pe-3 flex items-center"
    
    >
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
<path fill="currentColor" d="M144 144v48H304V144c0-44.2-35.8-80-80-80s-80 35.8-80 80zM80 192V144C80 64.5 144.5 0 224 0s144 64.5 144 144v48h16c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V256c0-35.3 28.7-64 64-64H80z"/></svg></span>
  </span>

  <span
    
      class="dark:text-neutral-300"
    
    ><strong>Your Data Stays Yours:</strong> Beam does not collect, track, or share any personal information, usage metrics, or telemetry. Period.</span>
</div>

<ul>
<li><strong>Zero Analytics or Telemetry:</strong> There are no analytics libraries, tracking pixels, or third-party telemetry SDKs inside Beam.</li>
<li><strong>Does Not Phone Home:</strong> The app never pings a centralized server to announce that it was installed, launched, or used. There are no heartbeat pings, no license checks, and no diagnostic uploads.</li>
<li><strong>No Accounts or Central Directory:</strong> You never create an account, enter an email, or register with a central service. Your cryptographic identity (an Ed25519 keypair) is generated locally on your Mac and never leaves it.</li>
<li><strong>Direct Peer-to-Peer:</strong> Your files, filenames, and transfers travel directly between you and your paired contacts.</li>
<li><strong>Blind Relays:</strong> If hole punching is unable to establish a direct connection and packets fall back through an <a href="https://iroh.computer/"  target="_blank" rel="noreferrer">iroh relay</a>, the relay handles only opaque QUIC TLS 1.3 ciphertext. It has no ability to decrypt file contents, filenames, or transfer metadata.</li>
<li><strong>Strictly Local Storage:</strong> Your contact list, transfer queue, and preferences reside exclusively on your Mac in your local application container. Nothing is uploaded to any cloud.</li>
<li><strong>Contacts Permission (Display Name Only):</strong> On first launch, Beam may prompt for access to your Contacts. This is used <strong>solely</strong> to read your own card to pre-fill your friendly display name for pairing invites. Your address book is never searched, indexed, or transmitted. <strong>You can freely deny this permission</strong> — Beam will simply fall back to your Mac&rsquo;s hostname, and you can manually type any name you like in Settings. Everything functions identically either way.</li>
</ul>
<hr>

<h2 class="relative group">Technology Stack
    <div id="technology-stack" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#technology-stack" aria-label="Anchor">#</a>
    </span>
    
</h2>
<ul>
<li><strong>Language &amp; Toolchain:</strong> Swift 6.4 (strict concurrency enabled, actor isolation), Xcode 27</li>
<li><strong>User Interface:</strong> SwiftUI (<code>MenuBarExtra</code>), AppKit, and <code>FIFinderSync</code></li>
<li><strong>P2P Core:</strong> <a href="https://iroh.computer/"  target="_blank" rel="noreferrer">iroh</a> (<code>iroh-ffi</code> 1.1.0)</li>
<li><strong>Target:</strong> macOS 27+ (Apple Silicon)</li>
</ul>
<a
  class="!rounded-md bg-primary-600 px-4 py-2 !text-neutral !no-underline hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
  href="https://iroh.computer/"
  target="_blank"
  rel="noopener"
  role="button">
  
Explore iroh

</a>

<hr>

<h2 class="relative group">Download &amp; Installation
    <div id="download--installation" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#download--installation" aria-label="Anchor">#</a>
    </span>
    
</h2>
<div class="not-prose my-6 p-6 rounded-2xl border border-primary-500/30 bg-primary-500/5">
  <div class="flex flex-col sm:flex-row sm:items-center justify-between gap-4 pb-4 border-b border-neutral-200/70 dark:border-neutral-800">
    <div>
      <h3 class="text-xl font-bold text-neutral-900 dark:text-white mb-1">Beam for macOS</h3>
      <p class="text-sm text-neutral-600 dark:text-neutral-300">
        macOS 27+ &bull; Apple Silicon &bull; Signed &amp; Notarized
      </p>
    </div>
    <div class="flex-shrink-0">
      <a href="Beam.dmg" class="inline-flex items-center justify-center gap-2.5 rounded-xl bg-primary-600 px-6 py-3 text-base font-bold text-white shadow-md transition hover:bg-primary-500 hover:shadow-lg focus:outline-none focus:ring-2 focus:ring-primary-500 dark:bg-primary-500 dark:hover:bg-primary-400 !no-underline whitespace-nowrap">
        <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 flex-shrink-0" viewBox="0 0 512 512" fill="currentColor"><path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"/></svg>
        <span>Download Beam (8.8 MB)</span>
      </a>
    </div>
  </div>
  <div class="pt-3 text-xs text-neutral-500 dark:text-neutral-400 font-mono break-all">
    <span class="font-sans font-semibold text-neutral-700 dark:text-neutral-300">SHA-256:</span> e040fcaec6c16f35aabfc3816aed994473608937e6a61be3df6f3bd04595948d
  </div>
</div>
<p class="text-sm text-neutral-600 dark:text-neutral-300 -mt-2 mb-6 italic">
  By downloading, installing, or running Beam, you acknowledge and agree to the disclaimer and limitation of liability below.
</p>
<p>To install, mount <code>Beam.dmg</code> and drag <strong>Beam</strong> to your <code>/Applications</code> folder. On first launch, grant the Finder extension permission and allow launch at login so presence stays active.</p>
<div id="disclaimer"></div>

  
  
  
  



<div
  
    class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
  
  >
  <span
    
      class="text-primary-400 pe-3 flex items-center"
    
    >
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/></svg>
</span>
  </span>

  <span
    
      class="dark:text-neutral-300"
    
    ><p><strong>Disclaimer &amp; Limitation of Liability</strong></p>
<p>By downloading, installing, or using Beam, you expressly agree that this software is provided free of charge on an <strong>&ldquo;as is&rdquo;</strong> and <strong>&ldquo;as available&rdquo;</strong> basis, without warranty, representation, or guarantee of any kind, whether express, implied, statutory, or otherwise, including but not limited to any warranties of merchantability, fitness for a particular purpose, non-infringement, quiet enjoyment, data accuracy, or error-free operation.</p>
<p>The author and contributors shall not be held liable for any direct, indirect, incidental, special, consequential, exemplary, or punitive damages, or for any loss of data, failed or corrupted file transfers, network disruptions, hardware issues, or other claims arising out of or in connection with the software, its download, installation, performance, or use. You download, install, and use this software entirely at your own risk.</p>
</span>
</div>

]]></content:encoded>
      
    </item>
    
  </channel>
</rss>
