From 82c716dcf2b6f41eedceaef91e14ca6dc671ee23 Mon Sep 17 00:00:00 2001 From: Rae McKelvey <633012+okdistribute@users.noreply.github.com> Date: Sat, 11 Jul 2026 01:58:20 +0200 Subject: [PATCH 01/12] Add new customer logos and Built-in VPN use case Add Rayfish, Outl, Datum, and Fedimint to the homepage logo cloud, and a Built-in VPN use case card highlighting Rayfish and cmux. --- public/img/user-logos/datum.svg | 1 + public/img/user-logos/fedimint.png | Bin 0 -> 41311 bytes public/img/user-logos/rayfish.png | Bin 0 -> 12660 bytes src/app/page.jsx | 6 ++++++ src/components/home/LogoCloud.jsx | 19 ++++++++++++------- 5 files changed, 19 insertions(+), 7 deletions(-) create mode 100644 public/img/user-logos/datum.svg create mode 100644 public/img/user-logos/fedimint.png create mode 100644 public/img/user-logos/rayfish.png diff --git a/public/img/user-logos/datum.svg b/public/img/user-logos/datum.svg new file mode 100644 index 00000000..e2ec5587 --- /dev/null +++ b/public/img/user-logos/datum.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/img/user-logos/fedimint.png b/public/img/user-logos/fedimint.png new file mode 100644 index 0000000000000000000000000000000000000000..53c7c75d2e9a5ec4ee6dd25d7df8fac0f9912c7b GIT binary patch literal 41311 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 VQlE%7xB>ooV|LBb1ZC_R`(F`=o8|xj literal 0 HcmV?d00001 diff --git a/public/img/user-logos/rayfish.png b/public/img/user-logos/rayfish.png new file mode 100644 index 0000000000000000000000000000000000000000..ddc0b02e40ee2c8690fd8ad2c6bc071ca68f19fa GIT binary patch literal 12660 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

T*M zY2u#u(c=O0um#QBvAvrpafC;;%ZqoK0t801CV|W<3HpY<>GmmY0oSxZFHa1-gItp2 zv)=c(y{%uqG#VfU5}6-81!Y--b`P(8ga=a1)PnS3H&??|=sBY#xD@iJZk;757#TseTv0hQ4c9?L3$~ypitjEvEuy6D{7j=F19EhX~ zSQD38R?_t+Sa>w(1)mDpI5w)ek&)aZxx;H$OXFzXi}7O%wqS3>)>)IPDf zor?yt>8-PvFx&``7p4n!M}1D>G){1WNg_(nn}kF{1mTWhVXyU_07KbYn2ISdC7OL+0Qs@{7)SG)>f<= zj`d5=f7v}@iBvt+O+tZsTm;#;_!y`VR*W|ep(D4F?#cxZdJELR1q#_OL<$w_S%n47 zNFyu1y{&wC<9j(M1hKJwzSF2aB=YXuoZ#xG@`{{I9@n)Z-#tbNuD|2~oshSYa*(IQ z=Fr25$!q#-G5kxSY^^L;67ge>$xsNeuNO_p+RXMDde0 z%VhtR!B5Fsys?wt`;JZ;LF#e+-RL4!3OF;h@#)XB`|_4u&Wv4kw~I>ckpfRDaDxPD zKei_FrndF9cAVD(W4h;9jTNsgQq1 zjkv>pKaRaA@Wu2xOF3mI2mZ}l%TJ<1zm7>3@w@6=6l@4^{Y?n@3^4?ni21CwtTIBJ z5TiBMqN0D&ml^w3+diOP8}Z2}?IqJtoRiYm8TLB)GXqhDzV`%50%J;N%|HJ4zh`<7 z{n51L(5;fpDm3ZHD@EyGxgWVNsBct2=ywA#?z~TxJBK|R)&{Q>65HQCzvs0JDdFab zShY~t4K;d8Y@3Ua967D)J+dz+VTUc)AkI~BFEgtSe1X#`?qKIATuc9(_9S&HX78C(F&T9h)HNQ(!* znMFjxyeaQEOB7O}ZcJkmVt7wsr|^WGF9ZP>4<0%ks}Wli1)sFEFsMoW@G%b^$SBDq z=x9FqGQv+@i9s#%_nF5%FbXP-4bUetCJ{{EWdf;u%P1#L8PczcodKt^al==jz)%0%uN?Vs(L=BEdDTU5xio z(GeswTy0!6G|Z$LJ*pSH@Z8>=`7=1Y2@F&hpTtl`yWhqW|!0|}m?gPM54PXpx+MI2^6$WLOVtWyx@#r5FH zNrwRE2(EBR)nejy_jh?(HPU4YMCUlHQP`N(3*&}e6r?fmhR+^zqtT}w1rzN@Czw{; nB`y%rsJc4_Q4lVY+9!e#&WS?~iMmhz_s0WD&rG*g8y)+9nv#76 literal 0 HcmV?d00001 diff --git a/src/app/page.jsx b/src/app/page.jsx index 25128721..27aa3f93 100644 --- a/src/app/page.jsx +++ b/src/app/page.jsx @@ -213,6 +213,12 @@ export default function Page() {

Move files and large blobs directly between devices with content-addressed, resumable transfers that verify every byte.

+ +
+

Built-in VPN

+

Reach your devices directly, with no VPN to configure and no ports to open. Rayfish and cmux use iroh to connect phones and machines peer-to-peer, wherever they are.

+
+ diff --git a/src/components/home/LogoCloud.jsx b/src/components/home/LogoCloud.jsx index 2236b78d..f96c53e4 100644 --- a/src/components/home/LogoCloud.jsx +++ b/src/components/home/LogoCloud.jsx @@ -13,6 +13,10 @@ const companies = [ { name: "rave", ext: "png", href: "https://rave.io" }, { name: "delta_chat", ext: "png", href: "https://delta.chat" }, { name: "ottomatic", ext: "png", label: "Ottomatic", href: "https://ottomatic.io" }, + { name: "rayfish", ext: "png", label: "Rayfish", imgClassName: "max-h-8", href: "https://rayfish.xyz" }, + { name: "outl", label: "Outl", href: "https://outl.app" }, + { name: "datum", ext: "svg", href: "https://www.datum.net" }, + { name: "fedimint", ext: "png", href: "https://fedimint.org" }, ]; // interface LogoCloudProps { @@ -75,21 +79,22 @@ export function LogoCloud({ speed = 0.85, height = 100 }) { href={href} target="_blank" rel="noopener noreferrer" - style={{ height, width: height * (label ? 2 : 1.4) }} - className="flex items-center justify-center gap-2.5 px-4 transition-opacity hover:opacity-70" + style={{ height, width: height * (label && ext ? 2 : label ? 2 : 1.4) }} + className={`flex items-center justify-center ${label && ext ? 'gap-1' : 'gap-2.5'} px-4 transition-opacity hover:opacity-70`} > - {label ? ( - {label} - ) : ( + {ext && ( )} + {label && ( + {label} + )} ))} From 3cbe1c4888642f7d2fa81f5e3fcf311671c8ce6c Mon Sep 17 00:00:00 2001 From: Rae McKelvey <633012+okdistribute@users.noreply.github.com> Date: Sat, 11 Jul 2026 02:04:39 +0200 Subject: [PATCH 02/12] Shrink oversized icon logos in logo cloud Strada, Ottomatic, and Rayfish icons rendered larger than their neighbors at the default max-h-12; cap them at max-h-6 to match. --- src/components/home/LogoCloud.jsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/home/LogoCloud.jsx b/src/components/home/LogoCloud.jsx index f96c53e4..802e7e5b 100644 --- a/src/components/home/LogoCloud.jsx +++ b/src/components/home/LogoCloud.jsx @@ -8,12 +8,12 @@ const companies = [ { name: "spacedrive", ext: "png", href: "https://www.spacedrive.com" }, { name: "nous", ext: "png", href: "https://nousresearch.com" }, { name: "meshllm", ext: "svg", imgClassName: "max-h-12 grayscale", href: "https://meshllm.cloud" }, - { name: "strada", ext: "png", label: "Strada", href: "https://strada.tech" }, + { name: "strada", ext: "png", label: "Strada", imgClassName: "max-h-6", href: "https://strada.tech" }, { name: "paycode", ext: "svg", href: "https://www.paycode.com.mx" }, { name: "rave", ext: "png", href: "https://rave.io" }, { name: "delta_chat", ext: "png", href: "https://delta.chat" }, - { name: "ottomatic", ext: "png", label: "Ottomatic", href: "https://ottomatic.io" }, - { name: "rayfish", ext: "png", label: "Rayfish", imgClassName: "max-h-8", href: "https://rayfish.xyz" }, + { name: "ottomatic", ext: "png", label: "Ottomatic", imgClassName: "max-h-6", href: "https://ottomatic.io" }, + { name: "rayfish", ext: "png", label: "Rayfish", imgClassName: "max-h-6", href: "https://rayfish.xyz" }, { name: "outl", label: "Outl", href: "https://outl.app" }, { name: "datum", ext: "svg", href: "https://www.datum.net" }, { name: "fedimint", ext: "png", href: "https://fedimint.org" }, From fb6fb12c077698528d1bff4975d7c0c84b9ccf9e Mon Sep 17 00:00:00 2001 From: Rae McKelvey <633012+okdistribute@users.noreply.github.com> Date: Sat, 11 Jul 2026 02:11:34 +0200 Subject: [PATCH 03/12] Size text-label logo entries to their content Fixed-width slots left large dead space around variable-length labels (Strada, Ottomatic, Rayfish); size to content instead. --- src/components/home/LogoCloud.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/home/LogoCloud.jsx b/src/components/home/LogoCloud.jsx index 802e7e5b..fb8546c7 100644 --- a/src/components/home/LogoCloud.jsx +++ b/src/components/home/LogoCloud.jsx @@ -79,7 +79,7 @@ export function LogoCloud({ speed = 0.85, height = 100 }) { href={href} target="_blank" rel="noopener noreferrer" - style={{ height, width: height * (label && ext ? 2 : label ? 2 : 1.4) }} + style={{ height, width: label ? undefined : height * 1.4 }} className={`flex items-center justify-center ${label && ext ? 'gap-1' : 'gap-2.5'} px-4 transition-opacity hover:opacity-70`} > {ext && ( From 7aade36f33b0b52e9ce6cb3b50c05057bd19207e Mon Sep 17 00:00:00 2001 From: Rae McKelvey <633012+okdistribute@users.noreply.github.com> Date: Sat, 11 Jul 2026 02:28:31 +0200 Subject: [PATCH 04/12] Add dedicated Built-in VPN use case page, add Go language, lowercase strada - Add /solutions/vpn, a full use-case page (mirroring the Distributed AI Training page) on using iroh in place of Tailscale, WireGuard, and reverse SSH tunnels; wire it into the homepage card, nav dropdown, and /solutions listing - Add Go to the supported-languages rows (docs page + logo already existed, just wasn't listed) - Lowercase the strada label and bump its weight to better match their brand style --- src/app/page.jsx | 7 +- src/app/solutions/page.jsx | 7 + src/app/solutions/vpn/page.jsx | 285 ++++++++++++++++++++++++++++++ src/components/Header.jsx | 1 + src/components/home/LogoCloud.jsx | 6 +- 5 files changed, 301 insertions(+), 5 deletions(-) create mode 100644 src/app/solutions/vpn/page.jsx diff --git a/src/app/page.jsx b/src/app/page.jsx index 27aa3f93..770d5f96 100644 --- a/src/app/page.jsx +++ b/src/app/page.jsx @@ -20,6 +20,7 @@ import logoSwift from '@/images/language-logos/swift.svg'; import logoJavascript from '@/images/language-logos/node.svg'; import logoKotlin from '@/images/language-logos/kotlin.svg'; import logoPython from '@/images/language-logos/python.svg'; +import logoGo from '@/images/language-logos/go.svg'; import { CodeBlockTabs } from '@/components/CodeBlockTabs'; export const metadata = { @@ -34,6 +35,7 @@ const languages = [ { name: 'JavaScript', logo: logoJavascript, href: 'https://docs.iroh.computer/languages/javascript' }, { name: 'Kotlin', logo: logoKotlin, href: 'https://docs.iroh.computer/languages/kotlin' }, { name: 'Python', logo: logoPython, href: 'https://docs.iroh.computer/languages/python' }, + { name: 'Go', logo: logoGo, href: 'https://docs.iroh.computer/languages/go' }, ]; const platforms = [ @@ -213,10 +215,10 @@ export default function Page() {

Move files and large blobs directly between devices with content-addressed, resumable transfers that verify every byte.

- +

Built-in VPN

-

Reach your devices directly, with no VPN to configure and no ports to open. Rayfish and cmux use iroh to connect phones and machines peer-to-peer, wherever they are.

+

Reach your devices directly, with no VPN to configure and no ports to open.

@@ -281,6 +283,7 @@ export default function Page() { { logo: logoJavascript, name: 'JavaScript' }, { logo: logoKotlin, name: 'Kotlin' }, { logo: logoPython, name: 'Python' }, + { logo: logoGo, name: 'Go' }, ].map(({ logo, name }) => ( + + + ) + } + return ( + + + + ) +} + +export default function VPNUseCasePage() { + return ( +
+ + +
+ {/* Hero Section */} +
+
+
+
+

Use Case: Networking

+

+ Reach Any Device, No VPN Required +

+

+ Teams are replacing Tailscale, WireGuard, and reverse SSH tunnels with iroh—dial + a device's public key and get a direct, encrypted connection. No coordination + server to run, no ports to open. +

+
+ + + + + Talk to Us + +
+
+
+ +
+
+
+
+ + {/* Highlights */} +
+
+
+
+

Direct

+

Peer-to-peer connections, no relay in the hot path

+
+
+

Encrypted

+

Every connection encrypted end-to-end by default

+
+
+

Embedded

+

A library in your app, not a client to install

+
+
+

Anywhere

+

Automatic NAT & firewall traversal, with relay fallback

+
+
+
+
+ + {/* The Problem */} +
+
+

The Problem: VPNs Are Infrastructure You Didn't Want to Own

+

+ Reaching a device that isn't sitting on the public internet usually means standing up + a VPN: a coordination server to run and secure, client software to distribute, and firewall + rules to get right. Or it means reverse SSH tunnels and all the operational shenanigans + that come with them. +

+
+

+ “Thinking about implementing a SOCKS proxy on top of iroh to get into my self-hosted + service at home without WireGuard infra and all the related network shenanigans.” +

+
+

+ But what if your app could just dial the other device directly—no separate network + to join, no client to install, no infrastructure to babysit? +

+
+
+ + {/* The Solution */} +
+
+
+
+

The Solution: Dial Keys, Not IPs

+

+ Every iroh node has a public key as its address. To reach a device, you dial that key + directly from inside your own application—there's no separate VPN client for + your users to install, and no central network your traffic has to join. +

+

+ One developer building an agentic coding app described swapping out planned reverse SSH + tunnel infrastructure for iroh in about a day: +

+
+
+
+ +
+

Dial Keys, Not IPs

+

+ Every node has a cryptographic identity. Connect to a device by its public key, wherever it is. +

+
+
+
+ +
+

Direct Connections

+

+ Iroh punches through NATs and firewalls automatically to connect devices directly. +

+
+
+
+ +
+

Encrypted by Default

+

+ Every connection is end-to-end encrypted, so your platform can't see or modify traffic between devices. +

+
+
+
+ +
+

A Library, Not a Client

+

+ Iroh ships inside your app, so the connection is just part of your product—not a separate piece of software your users manage. +

+
+
+
+
+
+

+ “I read iroh's headline ‘dial keys, not IPs’…I think that was + last Tuesday. By Wednesday it was in our app as one of the most load-bearing pieces.” +

+
+
+
+ + {/* Why Relays Matter */} +
+
+

Why Relays Matter

+

+ Iroh automatically establishes direct connections when possible, for the lowest latency + and highest throughput. When a direct connection isn't possible—due to symmetric + NATs, restrictive firewalls, or carrier-grade NAT—traffic falls back to an encrypted + relay, so the connection stays up either way. +

+

+ Use n0's hosted relays, + or run your own for full control over that part of the stack. +

+
+
+ + {/* Comparison */} +
+
+
+

Why iroh

+

iroh vs. Tailscale & WireGuard

+
+
+ + + + + + + + + + {comparison.map((row) => ( + + + + + + ))} + +
irohTailscale / WireGuard
{row.feature}
+
+

+ Iroh connects your app's own devices directly—it's not a general-purpose + replacement for joining a whole network of unrelated machines. +

+
+
+ + {/* CTA */} +
+
+

+ Ready to Skip the VPN Infrastructure? +

+

+ Get started with iroh in minutes. No complex configuration required. +

+
+ + + + + + +
+
+
+ + +
+
+ ) +} diff --git a/src/components/Header.jsx b/src/components/Header.jsx index 05a77fc9..f7aa54e3 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -27,6 +27,7 @@ export const navItems = [ {label: 'Real-time Sync', href: '/solutions/delta-chat'}, {label: 'Payments & POS', href: '/solutions/pos'}, {label: 'IoT & Embedded', href: '/solutions/iot'}, + {label: 'Built-in VPN', href: '/solutions/vpn'}, ]}, {content: 'Docs', href: 'https://docs.iroh.computer/'}, {content: 'Blog', href: '/blog'}, diff --git a/src/components/home/LogoCloud.jsx b/src/components/home/LogoCloud.jsx index fb8546c7..936f4e45 100644 --- a/src/components/home/LogoCloud.jsx +++ b/src/components/home/LogoCloud.jsx @@ -8,7 +8,7 @@ const companies = [ { name: "spacedrive", ext: "png", href: "https://www.spacedrive.com" }, { name: "nous", ext: "png", href: "https://nousresearch.com" }, { name: "meshllm", ext: "svg", imgClassName: "max-h-12 grayscale", href: "https://meshllm.cloud" }, - { name: "strada", ext: "png", label: "Strada", imgClassName: "max-h-6", href: "https://strada.tech" }, + { name: "strada", ext: "png", label: "strada", labelClassName: "font-black", imgClassName: "max-h-6", href: "https://strada.tech" }, { name: "paycode", ext: "svg", href: "https://www.paycode.com.mx" }, { name: "rave", ext: "png", href: "https://rave.io" }, { name: "delta_chat", ext: "png", href: "https://delta.chat" }, @@ -73,7 +73,7 @@ export function LogoCloud({ speed = 0.85, height = 100 }) { {/* Scroller container */}
- {companies.map(({ name, ext, imgClassName, label, href }, index) => ( + {companies.map(({ name, ext, imgClassName, label, labelClassName, href }, index) => ( )} {label && ( - {label} + {label} )} ))} From f6fd90a4606087b64b00c53ddf22ad384c9c2d00 Mon Sep 17 00:00:00 2001 From: Rae McKelvey <633012+okdistribute@users.noreply.github.com> Date: Sat, 11 Jul 2026 03:07:41 +0200 Subject: [PATCH 05/12] Rename Built-in VPN to VPN and Remote Access, make it the top use case - Rename the use case everywhere it appears (nav dropdown, homepage card, solutions listing) - Move it to the top of the homepage grid, nav dropdown, and /solutions listing - Move the iroh vs. Tailscale/WireGuard comparison table earlier on the VPN page, right after the hero highlights --- src/app/page.jsx | 12 +++--- src/app/solutions/page.jsx | 14 +++---- src/app/solutions/vpn/page.jsx | 74 +++++++++++++++++----------------- src/components/Header.jsx | 2 +- 4 files changed, 51 insertions(+), 51 deletions(-) diff --git a/src/app/page.jsx b/src/app/page.jsx index 770d5f96..a839b71d 100644 --- a/src/app/page.jsx +++ b/src/app/page.jsx @@ -179,6 +179,12 @@ export default function Page() {

How are people using iroh?

+ +
+

VPN and Remote Access

+

Reach your devices directly, with no VPN to configure and no ports to open.

+
+

Distributed AI Training

@@ -215,12 +221,6 @@ export default function Page() {

Move files and large blobs directly between devices with content-addressed, resumable transfers that verify every byte.

- -
-

Built-in VPN

-

Reach your devices directly, with no VPN to configure and no ports to open.

-
-
diff --git a/src/app/solutions/page.jsx b/src/app/solutions/page.jsx index bcc5d304..e736aee4 100644 --- a/src/app/solutions/page.jsx +++ b/src/app/solutions/page.jsx @@ -10,6 +10,13 @@ export const metadata = { } const solutions = [ + { + category: "Networking", + company: "VPN Alternative", + headline: "Reach Any Device, No VPN Required", + description: "Teams are replacing Tailscale, WireGuard, and reverse SSH tunnels with iroh to reach devices directly, with no coordination server to run.", + href: "/solutions/vpn", + }, { category: "AI/ML", company: "Nous", @@ -50,13 +57,6 @@ const solutions = [ description: "Run iroh on ESP32, Raspberry Pi, and Linux with the same API. No brokers, no gateways, no custom protocols.", href: "/solutions/iot", }, - { - category: "Networking", - company: "VPN Alternative", - headline: "Reach Any Device, No VPN Required", - description: "Teams are replacing Tailscale, WireGuard, and reverse SSH tunnels with iroh to reach devices directly, with no coordination server to run.", - href: "/solutions/vpn", - }, ] export default function SolutionsPage() { diff --git a/src/app/solutions/vpn/page.jsx b/src/app/solutions/vpn/page.jsx index 1a80e888..af293eea 100644 --- a/src/app/solutions/vpn/page.jsx +++ b/src/app/solutions/vpn/page.jsx @@ -106,6 +106,43 @@ export default function VPNUseCasePage() {
+ {/* Comparison */} +
+
+
+

Why iroh

+

iroh vs. Tailscale & WireGuard

+
+
+ + + + + + + + + + {comparison.map((row) => ( + + + + + + ))} + +
irohTailscale / WireGuard
{row.feature}
+
+

+ Iroh connects your app's own devices directly—it's not a general-purpose + replacement for joining a whole network of unrelated machines. +

+
+
+ {/* The Problem */}
@@ -210,43 +247,6 @@ export default function VPNUseCasePage() {
- {/* Comparison */} -
-
-
-

Why iroh

-

iroh vs. Tailscale & WireGuard

-
-
- - - - - - - - - - {comparison.map((row) => ( - - - - - - ))} - -
irohTailscale / WireGuard
{row.feature}
-
-

- Iroh connects your app's own devices directly—it's not a general-purpose - replacement for joining a whole network of unrelated machines. -

-
-
- {/* CTA */}
diff --git a/src/components/Header.jsx b/src/components/Header.jsx index f7aa54e3..83d90bee 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -22,12 +22,12 @@ export const navItems = [ {label: 'Enterprise', href: '/services/enterprise'}, ]}, {content: 'Use Cases', href: '/#solutions', dropdown: [ + {label: 'VPN and Remote Access', href: '/solutions/vpn'}, {label: 'Distributed AI', href: '/solutions/nous'}, {label: 'Video Streaming', href: '/solutions/rave'}, {label: 'Real-time Sync', href: '/solutions/delta-chat'}, {label: 'Payments & POS', href: '/solutions/pos'}, {label: 'IoT & Embedded', href: '/solutions/iot'}, - {label: 'Built-in VPN', href: '/solutions/vpn'}, ]}, {content: 'Docs', href: 'https://docs.iroh.computer/'}, {content: 'Blog', href: '/blog'}, From b31ea196a9bdcc2449dd9ce29662047baa977103 Mon Sep 17 00:00:00 2001 From: Rae McKelvey <633012+okdistribute@users.noreply.github.com> Date: Sat, 11 Jul 2026 03:14:11 +0200 Subject: [PATCH 06/12] Trim quotes and Why Relays Matter section from VPN page --- src/app/solutions/vpn/page.jsx | 35 +--------------------------------- 1 file changed, 1 insertion(+), 34 deletions(-) diff --git a/src/app/solutions/vpn/page.jsx b/src/app/solutions/vpn/page.jsx index af293eea..6805dbd0 100644 --- a/src/app/solutions/vpn/page.jsx +++ b/src/app/solutions/vpn/page.jsx @@ -153,12 +153,6 @@ export default function VPNUseCasePage() { rules to get right. Or it means reverse SSH tunnels and all the operational shenanigans that come with them.

-
-

- “Thinking about implementing a SOCKS proxy on top of iroh to get into my self-hosted - service at home without WireGuard infra and all the related network shenanigans.” -

-

But what if your app could just dial the other device directly—no separate network to join, no client to install, no infrastructure to babysit? @@ -172,15 +166,11 @@ export default function VPNUseCasePage() {

The Solution: Dial Keys, Not IPs

-

+

Every iroh node has a public key as its address. To reach a device, you dial that key directly from inside your own application—there's no separate VPN client for your users to install, and no central network your traffic has to join.

-

- One developer building an agentic coding app described swapping out planned reverse SSH - tunnel infrastructure for iroh in about a day: -

@@ -221,29 +211,6 @@ export default function VPNUseCasePage() {
-
-

- “I read iroh's headline ‘dial keys, not IPs’…I think that was - last Tuesday. By Wednesday it was in our app as one of the most load-bearing pieces.” -

-
-
-
- - {/* Why Relays Matter */} -
-
-

Why Relays Matter

-

- Iroh automatically establishes direct connections when possible, for the lowest latency - and highest throughput. When a direct connection isn't possible—due to symmetric - NATs, restrictive firewalls, or carrier-grade NAT—traffic falls back to an encrypted - relay, so the connection stays up either way. -

-

- Use n0's hosted relays, - or run your own for full control over that part of the stack. -

From 22831db1c41f40d7e05a9d73a222d7d34ab9989d Mon Sep 17 00:00:00 2001 From: Rae McKelvey <633012+okdistribute@users.noreply.github.com> Date: Sat, 11 Jul 2026 21:58:45 +0200 Subject: [PATCH 07/12] Add composite quote to VPN page problem section --- src/app/solutions/vpn/page.jsx | 32 ++++++++------------------------ 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/src/app/solutions/vpn/page.jsx b/src/app/solutions/vpn/page.jsx index 6805dbd0..6391cba0 100644 --- a/src/app/solutions/vpn/page.jsx +++ b/src/app/solutions/vpn/page.jsx @@ -82,30 +82,6 @@ export default function VPNUseCasePage() { - {/* Highlights */} -
-
-
-
-

Direct

-

Peer-to-peer connections, no relay in the hot path

-
-
-

Encrypted

-

Every connection encrypted end-to-end by default

-
-
-

Embedded

-

A library in your app, not a client to install

-
-
-

Anywhere

-

Automatic NAT & firewall traversal, with relay fallback

-
-
-
-
- {/* Comparison */}
@@ -153,6 +129,14 @@ export default function VPNUseCasePage() { rules to get right. Or it means reverse SSH tunnels and all the operational shenanigans that come with them.

+
+

+ “It's Tailscale, but as a library. Instead of standing up VPN + infrastructure—coordination servers, client software, all the network + shenanigans—we dial a device's public key directly from inside our own app + and get a direct, encrypted connection.” +

+

But what if your app could just dial the other device directly—no separate network to join, no client to install, no infrastructure to babysit? From 7008f820e32496762cdb99aa11b822e709a2c7c9 Mon Sep 17 00:00:00 2001 From: Rae McKelvey <633012+okdistribute@users.noreply.github.com> Date: Sat, 11 Jul 2026 22:01:23 +0200 Subject: [PATCH 08/12] Rework VPN and Remote Access card copy Use the "Tailscale at the application layer, not the network layer" framing for the homepage card description. --- src/app/page.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/page.jsx b/src/app/page.jsx index a839b71d..b3c8831f 100644 --- a/src/app/page.jsx +++ b/src/app/page.jsx @@ -182,7 +182,7 @@ export default function Page() {

VPN and Remote Access

-

Reach your devices directly, with no VPN to configure and no ports to open.

+

Tailscale at the application layer, not the network layer. Embed direct, encrypted connections right in your app, with public relays to start and your own relays when you outgrow them.

From df1a34577e2e306eab0e0aae1af7c9f6c8b701ea Mon Sep 17 00:00:00 2001 From: Rae McKelvey <633012+okdistribute@users.noreply.github.com> Date: Sun, 12 Jul 2026 12:41:32 +0200 Subject: [PATCH 09/12] remote access --- src/app/page.jsx | 2 +- src/components/Header.jsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/page.jsx b/src/app/page.jsx index cff5c045..8573e814 100644 --- a/src/app/page.jsx +++ b/src/app/page.jsx @@ -181,7 +181,7 @@ export default function Page() {
-

VPN and Remote Access

+

Remote Access

Tailscale at the application layer, not the network layer. Embed direct, encrypted connections right in your app, with public relays to start and your own relays when you outgrow them.

diff --git a/src/components/Header.jsx b/src/components/Header.jsx index f2f88ad6..320929d3 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -22,7 +22,7 @@ export const navItems = [ {label: 'Enterprise', href: '/services/enterprise'}, ]}, {content: 'Use Cases', href: '/#solutions', dropdown: [ - {label: 'VPN and Remote Access', href: '/solutions/vpn'}, + {label: 'Remote Access', href: '/solutions/vpn'}, {label: 'Distributed AI', href: '/solutions/distributed-ai'}, {label: 'Video Streaming', href: '/solutions/rave'}, {label: 'Real-time Sync', href: '/solutions/delta-chat'}, From 7c5bfd66c2a7d74476b7935556dd15d031b41d49 Mon Sep 17 00:00:00 2001 From: Rae McKelvey <633012+okdistribute@users.noreply.github.com> Date: Sun, 12 Jul 2026 12:42:47 +0200 Subject: [PATCH 10/12] remote access --- src/app/page.jsx | 2 +- src/app/solutions/vpn/page.jsx | 13 +++++++++++++ src/components/Header.jsx | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/app/page.jsx b/src/app/page.jsx index 8573e814..d2fd2bd9 100644 --- a/src/app/page.jsx +++ b/src/app/page.jsx @@ -182,7 +182,7 @@ export default function Page() {

Remote Access

-

Tailscale at the application layer, not the network layer. Embed direct, encrypted connections right in your app, with public relays to start and your own relays when you outgrow them.

+

Embed direct, encrypted connections right in your app and create tunnels for remote access instead of using third-party VPNs.

diff --git a/src/app/solutions/vpn/page.jsx b/src/app/solutions/vpn/page.jsx index 6391cba0..52dc1ca7 100644 --- a/src/app/solutions/vpn/page.jsx +++ b/src/app/solutions/vpn/page.jsx @@ -19,6 +19,19 @@ const comparison = [ { feature: "Whole-device network overlay", iroh: false, other: true }, ] +const builtWithIroh = [ + { + name: "TunTun", + description: "Open-source mesh networking. Connect your machines into a private network, wherever they are.", + href: "https://github.com/orielhaim/TunTun", + }, + { + name: "Pigeons", + description: "SSH to any machine without an IP address, behind a NAT or firewall, without port forwarding or VPN setup.", + href: "https://github.com/n0-computer/pigeons", + }, +] + function Mark({ value, accent = false }) { if (value) { return ( diff --git a/src/components/Header.jsx b/src/components/Header.jsx index 320929d3..7e768418 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -22,7 +22,7 @@ export const navItems = [ {label: 'Enterprise', href: '/services/enterprise'}, ]}, {content: 'Use Cases', href: '/#solutions', dropdown: [ - {label: 'Remote Access', href: '/solutions/vpn'}, + {label: 'Zero-trust', href: '/solutions/vpn'}, {label: 'Distributed AI', href: '/solutions/distributed-ai'}, {label: 'Video Streaming', href: '/solutions/rave'}, {label: 'Real-time Sync', href: '/solutions/delta-chat'}, From ac27b188d86cda97d53eda12c86524efda7db2b5 Mon Sep 17 00:00:00 2001 From: Rae McKelvey <633012+okdistribute@users.noreply.github.com> Date: Sun, 12 Jul 2026 13:56:47 +0200 Subject: [PATCH 11/12] remote access --- src/app/page.jsx | 2 +- src/app/solutions/vpn/page.jsx | 27 +++++++++++++++++++++++++++ src/components/Header.jsx | 2 +- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/app/page.jsx b/src/app/page.jsx index d2fd2bd9..a8a14065 100644 --- a/src/app/page.jsx +++ b/src/app/page.jsx @@ -182,7 +182,7 @@ export default function Page() {

Remote Access

-

Embed direct, encrypted connections right in your app and create tunnels for remote access instead of using third-party VPNs.

+

Embed direct, encrypted connections right in your app and create tunnels for remote access instead of third-party VPNs.

diff --git a/src/app/solutions/vpn/page.jsx b/src/app/solutions/vpn/page.jsx index 52dc1ca7..3c15d234 100644 --- a/src/app/solutions/vpn/page.jsx +++ b/src/app/solutions/vpn/page.jsx @@ -30,6 +30,11 @@ const builtWithIroh = [ description: "SSH to any machine without an IP address, behind a NAT or firewall, without port forwarding or VPN setup.", href: "https://github.com/n0-computer/pigeons", }, + { + name: "Rayfish", + description: "Your own private network. No servers, no setup.", + href: "https://rayfish.xyz/", + }, ] function Mark({ value, accent = false }) { @@ -211,6 +216,28 @@ export default function VPNUseCasePage() {
+ {/* Built With Iroh */} +
+
+
+

Built With Iroh

+

Open Source VPN Solutions

+
+
+ {builtWithIroh.map((project) => ( + +

{project.name}

+

{project.description}

+
+ ))} +
+
+
+ {/* CTA */}
diff --git a/src/components/Header.jsx b/src/components/Header.jsx index 7e768418..dcfd79ba 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -22,7 +22,7 @@ export const navItems = [ {label: 'Enterprise', href: '/services/enterprise'}, ]}, {content: 'Use Cases', href: '/#solutions', dropdown: [ - {label: 'Zero-trust', href: '/solutions/vpn'}, + {label: 'Remote access', href: '/solutions/vpn'}, {label: 'Distributed AI', href: '/solutions/distributed-ai'}, {label: 'Video Streaming', href: '/solutions/rave'}, {label: 'Real-time Sync', href: '/solutions/delta-chat'}, From a569643e43af9c55c3c775c9b3d8c61713a929dc Mon Sep 17 00:00:00 2001 From: Rae McKelvey <633012+okdistribute@users.noreply.github.com> Date: Sun, 12 Jul 2026 13:57:29 +0200 Subject: [PATCH 12/12] update vpn page --- src/app/solutions/vpn/page.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/solutions/vpn/page.jsx b/src/app/solutions/vpn/page.jsx index 3c15d234..9ce01dd5 100644 --- a/src/app/solutions/vpn/page.jsx +++ b/src/app/solutions/vpn/page.jsx @@ -75,12 +75,12 @@ export default function VPNUseCasePage() {

Use Case: Networking

- Reach Any Device, No VPN Required + Zero-trust connectivity

Teams are replacing Tailscale, WireGuard, and reverse SSH tunnels with iroh—dial a device's public key and get a direct, encrypted connection. No coordination - server to run, no ports to open. + server to run, no ports to open, no third-party app to install.