From 65077e692c3c386944c87319f0b558a85318bc72 Mon Sep 17 00:00:00 2001
From: Rae McKelvey <633012+okdistribute@users.noreply.github.com>
Date: Thu, 5 Mar 2026 10:56:25 -0800
Subject: [PATCH 1/2] Update relay content for iroh-services 1.0
---
concepts/relays.mdx | 101 ++++++++--------
deployment/dedicated-infrastructure.mdx | 38 +++---
docs.json | 2 +-
iroh-services/access.mdx | 2 +-
iroh-services/billing/faq.mdx | 2 +-
iroh-services/billing/index.mdx | 4 +-
iroh-services/billing/manage-subscription.mdx | 2 +-
iroh-services/metrics/custom.mdx | 2 +-
iroh-services/metrics/endpoint.mdx | 2 +-
iroh-services/metrics/how-it-works.mdx | 8 +-
iroh-services/metrics/index.mdx | 2 +-
iroh-services/net-diagnostics/usage.mdx | 8 +-
iroh-services/quickstart.mdx | 12 +-
iroh-services/relays/index.mdx | 62 ++++------
iroh-services/relays/managed.mdx | 113 ++++++++++--------
iroh-services/relays/public.mdx | 41 ++-----
snippets/relay-endpoint-config.mdx | 17 +++
17 files changed, 207 insertions(+), 211 deletions(-)
create mode 100644 snippets/relay-endpoint-config.mdx
diff --git a/concepts/relays.mdx b/concepts/relays.mdx
index b117e52..0531949 100644
--- a/concepts/relays.mdx
+++ b/concepts/relays.mdx
@@ -2,74 +2,77 @@
title: "Relays"
---
-Relays are servers that temporarily route encrypted traffic until a direct, P2P connection is
-feasible. Once this direct path is set up, the relay server steps back, and the
-data flows directly between devices. This approach allows Iroh to maintain a
-secure, low-latency connection, even in challenging network situations.
+Relays are servers that temporarily route encrypted traffic until a direct, P2P connection is feasible. Once this direct path is set up, the relay server steps back, and the data flows directly between devices. This approach allows Iroh to maintain a secure, low-latency connection, even in challenging network situations.
+There are situations where a direct connection can’t be established, and in those cases traffic falls back to running through the relay. Relay servers do not have access to the data being transmitted, as it’s encrypted end-to-end.
-There are situations where a direct connection _can't_ be established, and in
-those cases traffic falls back to running through the relay. Relay servers **do
-not** have access to the data being transmitted, as it's encrypted end-to-end.
+Relays serve two roles in iroh:
-We're working on formally collecting the direct connection rate from production
-iroh networks. Anecdotal evidence points to roughly 9 out of 10 networking conditions we see in practice allowing a direct connection to be established. Our holepunching implementation is deterministic - if it works between two devices once, it should continue to work as long as their networking setup remains stable.
+1. **Holepunching assistance.** When two endpoints first connect, they exchange network information through the relay to attempt a direct P2P connection.
+2. **Encrypted traffic fallback.** If a direct connection can't be established (due to strict NATs, firewalls, or other network conditions), traffic flows through the relay instead.
-## Public relays
+Once a direct path is established, the relay steps back and data flows peer-to-peer. Relay servers **cannot read** any of the traffic they handle — it's encrypted end-to-end.
-iroh is configured with a set of public relays provided by [n0.computer](https://n0.computer) that are free to use. The public relays rate-limit
-traffic that flows through the relay. This is to prevent abuse, and ensure the
-relays are available to everyone. There are no guarantees around uptime or
-performance when using the public relays.
+In practice, roughly 9 out of 10 networking conditions allow a direct connection. iroh's holepunching implementation is deterministic: if it works between two devices once, it will continue to work as long as their networking setup stays stable.
-We recommend using the public relays for development and testing, as they are
-free to use and require no setup. However, for production systems, we recommend
-using dedicated relays instead.
+## Deploy your own relay
+
+
+ Sign up for Iroh Services and spin up a managed relay for your project in minutes.
+
-## Dedicated relays
-For production use, we recommend using dedicated relays. Dedicated relays are relay
-servers that are either self-hosted or provided as a managed service. Dedicated
-relays provide better performance, security, and uptime guarantees compared to
-the public relays.
+## Why relays are better
-## Why this architecture is powerful
+Unlike traditional servers, relay servers are **stateless**. They don't store your application data — they just facilitate connections.
-This approach makes uptime management significantly easier compared to
-traditional client-server architectures:
+- **No database synchronization.** Nothing to replicate across relay instances.
+- **No state migration.** When a relay goes down, clients reconnect to another with no data loss.
+- **Simple scaling.** Spin relay instances up or down like any lightweight service.
+- **Automatic failover.** Iroh can attempt to connect to multiple relays automatically; as long as one is reachable, your peers find each other.
-**Stateless servers, stateful clients**
-Unlike traditional servers that store your application's data and state, relay
-servers are just connection facilitators. All your business logic and data lives
-in your clients. This means:
+This inverts the traditional model: relays are disposable connection facilitators, while your clients own all the application state and logic.
-- **No database synchronization** - You don't need to worry about keeping multiple server databases in sync or handling data replication
-- **No state migration** - When a relay goes down, clients simply reconnect to another relay without any data loss or state transfer
-- **Simple server management** - Relay servers are lightweight and easy to spin up or down. No complex deployment procedures or data migration steps
+## Public relays
-**Automatic failover**
-iroh clients automatically try multiple relays when connecting. If one relay is unavailable, clients seamlessly fall back to another relay in your list without application-level retry logic. Your peers will find each other as long as at least one relay is reachable.
+Iroh hardcodes a set of public relays provided by
+[n0.computer](https://n0.computer), free to use.
-**Multi-cloud resilience**
-For even better guarantees, you can distribute relays across multiple cloud providers. If one provider experiences an outage, your application keeps running on relays hosted elsewhere. Since relays don't store state, you can freely mix providers without worrying about cross-cloud data consistency.
+Public relays:
-**Cost-effective scaling**
-Adding capacity means spinning up more lightweight relay instances, not provisioning databases or managing complex stateful server infrastructure. You can easily scale up for peak usage and scale down during quiet periods.
+- Rate-limit traffic to prevent abuse
+- Carry no uptime or performance guarantees
+- Are shared across all iroh developers worldwide
-This architecture inverts the traditional model: instead of treating servers as precious stateful resources and clients as disposable, relay-based architectures treat relays as disposable connection facilitators while clients own the application state and logic.
+**Public relays are suitable for development and testing.** For production, use dedicated relays.
-## Connection Changes
+## Dedicated relays
-During the lifespan of a connection, networking conditions can change, for
-example when a user switched from 5G to WiFi, plugs in an ethernet cable, or a
-sysadmin modifies router configurations. The connection may change from direct
-to relayed, or even a mixed combination of the two. Iroh will automatically
-switch between direct and relayed connections as needed, without any action
-required from the application.
+Dedicated relays are relay servers provisioned exclusively for your project — either managed through Iroh Services or self-hosted.
-## Read more
+They offer:
+
+- **Isolation** — no noisy neighbors; your traffic is yours alone
+- **Uptime guarantees** — SLAs available via [Iroh Services](/iroh-services/relays)
+- **Version locking** — stay on a specific iroh version or run blue/green deployments
+- **Multi-region & multi-cloud** — deploy relays across regions and providers for resilience
+
+## Deploy your own relay
+
+
+ Sign up for Iroh Services and spin up a managed relay for your project in minutes.
+
+
+Or self-host using the open-source relay binary:
-- [Dedicated infrastructure guide](/deployment/dedicated-infrastructure)
- [Relay source code](https://github.com/n0-computer/iroh/tree/main/iroh-relay)
- [Relay binary releases](https://github.com/n0-computer/iroh/releases)
-- [Managed relay service](/iroh-services/relays)
+- [Dedicated infrastructure guide](/deployment/dedicated-infrastructure)
diff --git a/deployment/dedicated-infrastructure.mdx b/deployment/dedicated-infrastructure.mdx
index 0e1a4d3..b3dd2aa 100644
--- a/deployment/dedicated-infrastructure.mdx
+++ b/deployment/dedicated-infrastructure.mdx
@@ -2,6 +2,8 @@
title: "Dedicated Infrastructure"
---
+import RelayEndpointConfig from '/snippets/relay-endpoint-config.mdx';
+
By default, iroh will use public shared infrastructure to facilitate connections over
DNS and end-to-end encryption over relays. This infrastructure comprises:
@@ -17,14 +19,30 @@ We recommend using the public relays for development and testing, as they are
free to use and require no setup. However, for production systems, we recommend
using dedicated relays instead.
+
+ Sign up for Iroh Services and spin up a managed relay for your project in minutes.
+
+
+
+
+ Learn how to self-host a relay for your project.
+
+
## Using dedicated relays
-To use dedicated relays with your iroh endpoint, you need to configure the
-endpoint to use your relay's URL.
+To use dedicated relays with your iroh endpoint, configure it with your relay URLs:
+
+
-For detailed information on configuring custom relays, including code examples
-and API documentation, see the [iroh relay configuration
-guide](/iroh-services/relays/managed).
+For full deployment steps, see the [managed relay guide](/iroh-services/relays/managed).
## Why use dedicated relays in production?
@@ -33,21 +51,13 @@ enhanced security, better uptime guarantees, and greater control over your netwo
using your own servers, you can optimize connection speeds and reduce
latency for your specific use case.
-If you require more control over your relay infrastructure, you can choose to
-[self-host your own
-relay](https://github.com/n0-computer/iroh/tree/main/iroh-relay) or [upgrade to
-a managed relay service](/iroh-services/relays). This managed relay
-service is monitored by [n0.computer](https://n0.computer) who maintain the iroh project, and
-offers SLAs around uptime and performance.
-
-[Sign up for a free account](https://n0des.iroh.computer?utm_source=docs&utm_content=dedicated-infrastructure) to get started.
## Recommended setup
We recommend setting up at least two relays for redundancy in different regions.
For example, you could set up one relay in North America and another in Europe.
-### Why this architecture is powerful
+## Why this architecture is powerful
This approach makes uptime management significantly easier compared to
traditional client-server architectures:
diff --git a/docs.json b/docs.json
index 188fd76..81ec2f1 100644
--- a/docs.json
+++ b/docs.json
@@ -140,7 +140,7 @@
"primary": {
"type": "button",
"label": "Login",
- "href": "https://n0des.iroh.computer?utm_source=docs&utm_content=nav-login"
+ "href": "https://services.iroh.computer?utm_source=docs&utm_content=nav-login"
}
},
"contextual": {
diff --git a/iroh-services/access.mdx b/iroh-services/access.mdx
index 7117381..5c91348 100644
--- a/iroh-services/access.mdx
+++ b/iroh-services/access.mdx
@@ -36,7 +36,7 @@ To authorize endpoints to push metrics to your project, Iroh Services uses API K
```rust
use iroh::Endpoint;
-use iroh_n0des::Client;
+use iroh_services::Client;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
diff --git a/iroh-services/billing/faq.mdx b/iroh-services/billing/faq.mdx
index 2ffabaf..94c0c16 100644
--- a/iroh-services/billing/faq.mdx
+++ b/iroh-services/billing/faq.mdx
@@ -39,7 +39,7 @@ details.
## Where can I see my invoices?
Invoices are available in the **Settings** > **Billing** section of your
-[project dashboard](https://n0des.iroh.computer).
+[project dashboard](https://services.iroh.computer).
## Are taxes included in the prices?
diff --git a/iroh-services/billing/index.mdx b/iroh-services/billing/index.mdx
index 2823a9c..891ed0b 100644
--- a/iroh-services/billing/index.mdx
+++ b/iroh-services/billing/index.mdx
@@ -14,7 +14,7 @@ Iroh Services offers plans to fit your needs, from free tiers for experimentatio
| **Net Diagnostics** | Community support | Priority support tickets | Guaranteed SLA response times |
| **Support** | Discord | Email & Discord | Dedicated support & professional services |
-For full plan details and pricing, visit the [pricing page](https://n0des.iroh.computer/pricing).
+For full plan details and pricing, visit the [pricing page](https://services.iroh.computer/pricing).
## How billing works
@@ -23,7 +23,7 @@ Iroh Services billing is usage-based, calculated monthly. Your bill is determine
- **Your plan tier** — each plan includes a base set of features and resource allocations.
- **Resource usage** — additional charges may apply for usage beyond what's included in your plan, such as metrics volume or relay bandwidth.
-Billing is managed through the [Iroh Services dashboard](https://n0des.iroh.computer). You can view your current plan, usage, and invoices at any time.
+Billing is managed through the [Iroh Services dashboard](https://services.iroh.computer). You can view your current plan, usage, and invoices at any time.
## Next steps
diff --git a/iroh-services/billing/manage-subscription.mdx b/iroh-services/billing/manage-subscription.mdx
index 0df8b8f..9908d92 100644
--- a/iroh-services/billing/manage-subscription.mdx
+++ b/iroh-services/billing/manage-subscription.mdx
@@ -3,7 +3,7 @@ title: "Manage Your Subscription"
description: "Upgrade, downgrade, or cancel your Iroh Services subscription"
---
-Manage your subscription from the [Iroh Services dashboard](https://n0des.iroh.computer).
+Manage your subscription from the [Iroh Services dashboard](https://services.iroh.computer).
## Upgrade your plan
diff --git a/iroh-services/metrics/custom.mdx b/iroh-services/metrics/custom.mdx
index 5bbe072..385daa8 100644
--- a/iroh-services/metrics/custom.mdx
+++ b/iroh-services/metrics/custom.mdx
@@ -37,7 +37,7 @@ For a complete example, see the [iroh-ping example on GitHub](https://github.com
```rust
use iroh::Endpoint;
-use iroh_n0des::Client;
+use iroh_services::Client;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
diff --git a/iroh-services/metrics/endpoint.mdx b/iroh-services/metrics/endpoint.mdx
index 7bfe4b2..3b19394 100644
--- a/iroh-services/metrics/endpoint.mdx
+++ b/iroh-services/metrics/endpoint.mdx
@@ -29,7 +29,7 @@ extended retention and lookback for endpoint-level metrics. This allows you to
analyze historical data and identify trends over time, which can be crucial for
long-term performance optimization and troubleshooting.
-Please refer to the [pricing page](https://n0des.iroh.computer/pricing?utm_source=docs&utm_content=endpoint-metrics) for more details on plan features
+Please refer to the [pricing page](https://services.iroh.computer/pricing?utm_source=docs&utm_content=endpoint-metrics) for more details on plan features
and benefits.
[Contact us](mailto:support@iroh.computer) if you have any questions about upgrading your plan.
diff --git a/iroh-services/metrics/how-it-works.mdx b/iroh-services/metrics/how-it-works.mdx
index 39beefc..5a7dbf2 100644
--- a/iroh-services/metrics/how-it-works.mdx
+++ b/iroh-services/metrics/how-it-works.mdx
@@ -11,15 +11,15 @@ Iroh Services dashboard. Metrics will be automatically collected and reported on
1. The endpoint is built using the API Secret Key
2. The endpoint sends metrics data to a Cloud endpoint hosted in the Iroh Services platform.
3. The Iroh Services platform aggregates the data and makes it available in the project dashboard.
-4. Iroh services deletes data on a rolling bases outside the retention window, based on your [plan](https://n0des.iroh.computer/pricing).
+4. Iroh services deletes data on a rolling bases outside the retention window, based on your [plan](https://services.iroh.computer/pricing).
## How it works
Once an iroh endpoint is integrated in rust program, you can add an
-`iroh_n0des::Client` to begin sending metrics to the Iroh Services platform.
+`iroh_services::Client` to begin sending metrics to the Iroh Services platform.
-1. The `iroh_n0des::Client` will automatically detect any running iroh instance in your
+1. The `iroh_services::Client` will automatically detect any running iroh instance in your
endpoint and begin sending metrics as long as the secret and the ssh
key match what has been set up in your project on the Iroh Services platform.
2. Call `endpoint.online().await` before creating the Client. The endpoint must be online before the client is instantiated in order to
@@ -30,7 +30,7 @@ authenticate to the platform.
## Metrics Retention
Project-level metrics are retained based on your events plan. Please refer to the
-[pricing page for more details on plan features and benefits](https://n0des.iroh.computer/pricing).
+[pricing page for more details on plan features and benefits](https://services.iroh.computer/pricing).
Endpoint level metrics are only available on Enterprise plans. For projects on
these plans, the amount of endpoint-level raw data retained is calculated on
diff --git a/iroh-services/metrics/index.mdx b/iroh-services/metrics/index.mdx
index a900147..f0ca0bf 100644
--- a/iroh-services/metrics/index.mdx
+++ b/iroh-services/metrics/index.mdx
@@ -56,4 +56,4 @@ No personally identifiable information (PII) is collected or stored. The
focus is on overall network performance rather than individual user behavior.
If you have concerns about data collection, please refer to the
-[privacy policy](https://n0des.iroh.computer/legal/privacy).
+[privacy policy](https://services.iroh.computer/legal/privacy).
diff --git a/iroh-services/net-diagnostics/usage.mdx b/iroh-services/net-diagnostics/usage.mdx
index 249270d..e2ea117 100644
--- a/iroh-services/net-diagnostics/usage.mdx
+++ b/iroh-services/net-diagnostics/usage.mdx
@@ -13,11 +13,11 @@ display.
To add net diagnostics support to your own iroh application, you need to:
-1. Connect to the n0des platform with an `iroh_n0des::Client`
+1. Connect to the n0des platform with an `iroh_services::Client`
2. Grant the `NetDiagnosticsCap::GetAny` capability to n0des so it can request diagnostics from your endpoint
3. Run a `ClientHost` so n0des can dial back into your endpoint
-[See the `net_diagnostics` example in the `iroh-n0des` repository for a complete working example of this integration.](https://github.com/n0-computer/iroh-n0des/tree/main/examples/net_diagnostics.rs)
+[See the `net_diagnostics` example in the `iroh-services` repository for a complete working example of this integration.](https://github.com/n0-computer/iroh-services/tree/main/examples/net_diagnostics.rs)
### 1. Update Cargo.toml
@@ -25,7 +25,7 @@ Add the following to your `Cargo.toml`:
```toml
[dependencies]
-iroh-n0des = { version = "...", features = ["net_diagnostics", "client_host"] }
+iroh-services = { version = "...", features = ["net_diagnostics", "client_host"] }
```
### 2. Get Your API Secret
@@ -45,7 +45,7 @@ Here's a minimal integration:
```rust
use anyhow::Result;
use iroh::{Endpoint, protocol::Router};
-use iroh_n0des::{
+use iroh_services::{
ApiSecret, Client, ClientHost, CLIENT_HOST_ALPN, API_SECRET_ENV_VAR_NAME,
caps::NetDiagnosticsCap,
};
diff --git a/iroh-services/quickstart.mdx b/iroh-services/quickstart.mdx
index 5dbdb33..80ef8b5 100644
--- a/iroh-services/quickstart.mdx
+++ b/iroh-services/quickstart.mdx
@@ -7,7 +7,7 @@ This guide will walk you through hooking up your first endpoint to Iroh Services
## Prerequisites
-- [An Iroh Services Account](https://n0des.iroh.computer?utm_source=docs&utm_content=quickstart)
+- [An Iroh Services Account](https://services.iroh.computer?utm_source=docs&utm_content=quickstart)
- [Rust Language](https://rust-lang.org/tools/install/)
*While iroh is currently only available in Rust, it can be deployed in many other languages and environments.
@@ -16,11 +16,11 @@ Languages](deployment/other-languages) guide for more information.*
## Step 1: Create a Project
-After signing in, [create a new project](https://n0des.iroh.computer/projects/projects/new?utm_source=docs&utm_content=quickstart). This will be your
+After signing in, [create a new project](https://services.iroh.computer/projects/projects/new?utm_source=docs&utm_content=quickstart). This will be your
sandbox for all endpoints. This is the control center where you can manage and
monitor your infrastructure, including relays, metrics, and networks.
-[](https://n0des.iroh.computer/projects/projects/new?utm_source=docs&utm_content=quickstart)
+[](https://services.iroh.computer/projects/projects/new?utm_source=docs&utm_content=quickstart)
## Step 2: Get Your API Key
@@ -34,10 +34,10 @@ this to authenticate your endpoints.
## Step 3: Add the Iroh Services Client
-Add the `iroh-n0des` crate to your `Cargo.toml`:
+Add the `iroh-services` crate to your `Cargo.toml`:
```
-cargo add iroh-n0des
+cargo add iroh-services
```
@@ -47,7 +47,7 @@ Then, in your code, create a client and connect your endpoint to Iroh Services.
```rust
use iroh::Endpoint;
-use iroh_n0des::Client;
+use iroh_services::Client;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
diff --git a/iroh-services/relays/index.mdx b/iroh-services/relays/index.mdx
index 080ea88..44ca19a 100644
--- a/iroh-services/relays/index.mdx
+++ b/iroh-services/relays/index.mdx
@@ -1,45 +1,23 @@
---
-title: "Relays"
-description: "Relays route encrypted traffic when direct P2P connections aren't possible"
+title: "Overview"
+description: "Deploy dedicated relay infrastructure for your iroh project"
---
-# Relays
-
-##### Relays route encrypted traffic unless a direct, P2P connection is feasible. This approach allows devices to maintain secure, low-latency connection, even in challenging network situations.
-
-Devices running iroh will attempt to connect to each other directly either on the
-local area network (LAN), or over the internet using NAT traversal techniques like
-hole punching.
-
-However, in some situations direct connections are not possible. This can be due to
-strict NATs, firewalls, or other network configurations that prevent direct peer-to-peer
-connections.
-
-In these cases, relays provide a reliable fallback mechanism to ensure
-connectivity between devices by forwarding traffic between them over the relay
-server. This traffic is end-to-end encrypted, so the relay server cannot read
-the contents of the communication.
-
-Relays help in the following ways:
-- **NAT Traversal**: Many devices are behind Network Address Translators (NATs) or firewalls that prevent direct connections. Relays help bypass these restrictions by acting as a middleman.
-- **Connection Stability**: Relays can provide a stable connection point, especially in cases where direct connections are unreliable.
-- **Global Reach**: By using relays located in various geographic locations, devices can connect more efficiently, reducing latency and improving uptime.
-
-For more information on relays, please refer to the [Relay concepts documentation](/concepts/relays).
-
-## Hosted Relays
-
-By default, iroh endpoints will use public relays to facilitate connections when direct
-peer-to-peer connections are not possible. These relays are managed and
-maintained by the [n0.computer](https://n0.computer), and are shared by a global public network of
-developers, with rate limits.
-
-However, for production use cases you will want to set up your own private relays, to
-ensure that your traffic is not mixed with other users, and to have more control
-over the relay infrastructure.
-
-You can do this in one of three ways:
-
-1. **[Public Cloud Relays](/iroh-services/relays/public)**: By default, all iroh nodes will connect to the public cloud relays. These relays have no guaranteed uptime and can be subject to noisy neighbors.
-2. **[Dedicated Relays](/iroh-services/relays/managed)**: You can have relays run by the [n0.computer](https://n0.computer) , by adding them to your project through the Iroh Services platform. This is the easiest way to get started with relays.
-3. **[Self-hosted](https://github.com/n0-computer/iroh/tree/main/iroh-relay)**: You can set up and manage your own relay servers using the iroh relay software. This gives you full control over the relay infrastructure, but requires more effort to set up and maintain.
+Iroh Services lets you run dedicated relay servers for your project — no infrastructure to manage yourself. For background on how relays work, see [Relay concepts](/concepts/relays).
+
+
+
+ Dedicated relays provisioned through Iroh Services. Isolated, version-locked, with SLAs. Recommended for production.
+
+
+ Free shared relays built into iroh. No setup required. Development and hobby use only.
+
+
diff --git a/iroh-services/relays/managed.mdx b/iroh-services/relays/managed.mdx
index 94404ef..d6244bf 100644
--- a/iroh-services/relays/managed.mdx
+++ b/iroh-services/relays/managed.mdx
@@ -1,56 +1,63 @@
---
-title: "Managed Relays"
-description: "Dedicated relay infrastructure managed by n0.computer"
+title: "Managed Hosting"
+description: "Deploy and configure dedicated relay infrastructure through Iroh Services"
---
-By default, iroh endpoints will use publically-hosted relays to facilitate connections when direct
-peer-to-peer connections are not possible. These relays are managed and
-maintained by [n0.computer](https://n0.computer).
-
-For production, you will need to deploy your own hosted relay. you can do that through the [Iroh Services](https://n0des.iroh.computer?utm_source=docs&utm_content=managed-relays)
-platform, and then add it to your rust client endpoint configuration.
-
-## Key Benefits
-
-- **Fully Managed Service**: Number 0's engineering experts handle all day-to-day operations and infrastructure maintenance.
-- **Isolation**: Maintain full control over your cloud infrastructure and scaling properties, with no noisy neighbors.
-- **Version locking**: Ensure compatibility by locking to specific iroh versions or enable blue/green deployments.
-- **Multi-Region & Multi-Cloud Support**: Enhance reliability and performance by deploying relays across various regions and cloud providers.
-- **On-prem**: Deploy relays within your own data centers or private clouds for enhanced security and compliance. Please [contact us](mailto:support@iroh.computer) for more information.
-- **Custom SLAs**: Tailor service level agreements to meet your specific business needs. Please [contact us](mailto:support@iroh.computer) for more information.
-
-## Configuration
-
-```rust
-use iroh::Endpoint;
-use iroh::relay::RelayUrl;
-
-#[tokio::main]
-async fn main() -> anyhow::Result<()> {
- // Configure your endpoint with dedicated relays
- let relay_url1: RelayUrl = "RELAY_URL_1".parse()?;
- let relay_url2: RelayUrl = "RELAY_URL_2".parse()?;
-
- let endpoint = Endpoint::builder()
- .relay_mode(iroh::endpoint::RelayMode::Custom(vec![relay_url1, relay_url2]))
- .bind()
- .await?;
-
- Ok(())
-}
-```
-
-## Recommended Relay Setup
-
-For production use cases, we recommend setting up at least two relays in
-different geographic regions. This ensures that if one relay goes down or
-becomes unreachable, your endpoints can still connect through the other relay.
-
-Each relay can handle up to 60,000 concurrent connections, so for larger scale
-deployments, you may need to set up multiple relays in each region or [contact
-us to increase the size of your relays](mailto:support@iroh.computer).
-
-## Support policy
-
-As part of your project-level and relay-level metrics, you will be able to
-monitor status of your relays. On the pro plan, we offer priority support.
+import RelayEndpointConfig from '/snippets/relay-endpoint-config.mdx';
+
+Managed relays are dedicated relay servers provisioned through the Iroh Services platform and operated by n0.computer. Unlike the [public relays](/iroh-services/relays/public), managed relays are exclusively yours — no shared traffic, no rate limits, and with uptime SLAs.
+
+## What you get
+
+- **Fully managed** — n0.computer handles operations, maintenance, and upgrades
+- **Isolation** — your traffic only; no noisy neighbors
+- **Version locking** — pin to a specific iroh version or run blue/green deployments
+- **Multi-region & multi-cloud** — deploy across regions and providers for resilience
+- **On-prem** — available on Enterprise plans; [contact us](mailto:support@iroh.computer)
+- **Custom SLAs** — [contact us](mailto:support@iroh.computer)
+
+## Deploy a relay
+
+### 1. Sign up and create a project
+
+Sign up at [services.iroh.computer](https://services.iroh.computer?utm_source=docs&utm_content=managed-relays) and create a project if you haven't already.
+
+{/* TODO: screenshot of the new project screen */}
+
+
+### 2. Add a relay
+
+Navigate to **Relays** in your project sidebar and click **Add Relay**. Select a region for your relay.
+
+{/* TODO: screenshot of the Add Relay dialog with region picker */}
+
+
+### 3. Copy your relay URL
+
+Once deployed, your relay URL will appear in the dashboard. Copy it — you'll need it to configure your endpoints.
+
+{/* TODO: screenshot of the Relays page showing the relay URL */}
+
+
+### 4. Configure your endpoint
+
+Set your endpoint to use your dedicated relay URLs instead of the public relays:
+
+
+
+### 5. Verify connectivity
+
+Go to your project's **Relays** page to confirm your endpoints are connecting through your dedicated relay. You should see connected endpoint counts and traffic metrics.
+
+{/* TODO: screenshot of relay metrics dashboard showing connected endpoints */}
+
+
+## Recommended setup
+
+For production, deploy at least two relays in different geographic regions. If one relay becomes unreachable, iroh automatically falls back to the next one in your list — your peers will still find each other.
+
+Each relay handles up to 60,000 concurrent connections. For larger deployments, [contact us](mailto:support@iroh.computer) to increase relay capacity.
+
+## Support
+
+Relay status and metrics are available in your project dashboard under **Relays**. On the Pro plan, we offer priority support. [Contact us](mailto:support@iroh.computer) for Enterprise SLAs.
diff --git a/iroh-services/relays/public.mdx b/iroh-services/relays/public.mdx
index c01eb91..2f064ff 100644
--- a/iroh-services/relays/public.mdx
+++ b/iroh-services/relays/public.mdx
@@ -3,42 +3,23 @@ title: "Public Relays"
description: "Free shared relays for development and hobby use"
---
+iroh includes a set of public relays provided by [n0.computer](https://n0.computer), available to all iroh users at no cost. No setup required — they work out of the box.
-By default, all endpoints will use public shared relays to facilitate connections, both forwarding traffic when direct
-peer-to-peer connections are not possible as well as facilitate holepunching for
-direct connections. These relays are managed and maintained by [n0.computer](https://n0.computer),
-and are shared by a global public network of developers.
+Public relays are suitable for **development and hobby use only**. For production, use [managed relays](/iroh-services/relays/managed).
## Support policy
-The public relays will always be available for free and hobby plans, but are not
-covered by any SLA or uptime guarantee.
+- No SLA or uptime guarantee
+- Only the latest stable release of iroh is officially supported — older versions may work, but this is not guaranteed and can change at any time
+- No version locking — n0.computer reserves the right to remove support for older iroh versions at any time
+- Traffic is rate-limited to prevent abuse
-The public relays will only officially support the latest stable release of
-iroh. If older versions of iroh work with the public relay, this is a happy
-accident, and not something to be relied upon for production use cases.
+For version locking, blue/green deployments, or multi-region support, [deploy a managed relay](/iroh-services/relays/managed).
-There is no version locking. This means that [n0.computer](https://n0.computer) reserves the right to remove
-support for old versions of iroh from the public relay infrastructure at any
-time.
+## Privacy and security
-For version locking, blue/green deployments, multi-region or multi-cloud
-support, we recommend that you upgrade to a [managed
-relay](/iroh-services/relays/managed).
+All traffic through the public relays is end-to-end encrypted. The relays cannot read any of the traffic they forward.
-## Privacy and Security
+However, the relays can see connection metadata: source and destination IP addresses, connection times, and the amount of data transferred. We recommend against using public relays for sensitive or confidential data.
-All traffic sent through the public relays is end-to-end encrypted. The relays
-are not able to read any of the traffic that they forward or help connect.
-However, the relays are able to see metadata about connections, such as source
-and destination IP addresses, connection times, and the amount of data
-transferred.
-
-We recommend that you do not use the public relays for sensitive or
-confidential data. If you need more control over your relay infrastructure, we
-recommend that you upgrade to a [managed relay](/iroh-services/relays/managed) or
-[self-host your own relay](https://iroh.computer).
-
-We monitor the public relays for abuse and malicious activity. If we detect
-abuse, we reserve the right to block offending IP addresses or users from
-accessing the public relays.
+We monitor public relays for abuse. If we detect malicious activity, we reserve the right to block offending IP addresses or users.
diff --git a/snippets/relay-endpoint-config.mdx b/snippets/relay-endpoint-config.mdx
new file mode 100644
index 0000000..1cccd22
--- /dev/null
+++ b/snippets/relay-endpoint-config.mdx
@@ -0,0 +1,17 @@
+```rust
+use iroh::Endpoint;
+use iroh::relay::RelayUrl;
+
+#[tokio::main]
+async fn main() -> anyhow::Result<()> {
+ let relay_url1: RelayUrl = "YOUR_RELAY_URL_US".parse()?;
+ let relay_url2: RelayUrl = "YOUR_RELAY_URL_EU".parse()?;
+
+ let endpoint = Endpoint::builder()
+ .relay_mode(iroh::endpoint::RelayMode::Custom(vec![relay_url1, relay_url2]))
+ .bind()
+ .await?;
+
+ Ok(())
+}
+```
From 00dbeb536849635d766a9edfdac83ee580c1122b Mon Sep 17 00:00:00 2001
From: Rae McKelvey <633012+okdistribute@users.noreply.github.com>
Date: Thu, 5 Mar 2026 11:02:06 -0800
Subject: [PATCH 2/2] add relay images
---
images/add-relay.png | Bin 0 -> 47671 bytes
images/create-project.png | Bin 0 -> 102257 bytes
images/region-relay.png | Bin 0 -> 51968 bytes
iroh-services/relays/managed.mdx | 19 ++++++++-----------
4 files changed, 8 insertions(+), 11 deletions(-)
create mode 100644 images/add-relay.png
create mode 100644 images/create-project.png
create mode 100644 images/region-relay.png
diff --git a/images/add-relay.png b/images/add-relay.png
new file mode 100644
index 0000000000000000000000000000000000000000..1ea1f1cddb44adb2cbfca180d25d89e6947211bc
GIT binary patch
literal 47671
zcmd?Rg;!Kv`#(%eNC*moq96j&NOy=xgMxrGNOug~h|-b*(k0T}45f(V(8DkcT|*8H
z((mz(=X;C(0q
>8rq{6V?)E&a;%TKjEoEoyC5t~_)c!BAt4c}
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
MUHx3vIVCg!00`eni2wiq
literal 0
HcmV?d00001
diff --git a/images/create-project.png b/images/create-project.png
new file mode 100644
index 0000000000000000000000000000000000000000..c599f26831ea919695e5c0a4f292247b7d067f26
GIT binary patch
literal 102257
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