-> [!NOTE]
-> I'm a solo maintainer and don't always keep up with GitHub Issues daily.
-> If something is urgent or blocking you, [Discord](https://discord.gg/jz8T2uahpH) is the fastest place to reach me.
-
----
-
Run agents in parallel on your own machines. Ship from your phone or your desk.
- **Self-hosted:** Agents run on your machine with your full dev environment. Use your tools, your configs, and your skills.
@@ -144,7 +138,7 @@ Quick monorepo package map:
- `packages/app`: Expo client (iOS, Android, web)
- `packages/cli`: `paseo` CLI for daemon and agent workflows
- `packages/desktop`: Electron desktop app
-- `packages/relay`: Relay package for remote connectivity
+- `packages/relay`: Relay transport and encryption used by the daemon and clients
- `packages/website`: Marketing site and documentation (`paseo.sh`)
Common commands:
@@ -166,23 +160,11 @@ npm run build:server
npm run typecheck
```
-## Community
+## Related projects
-- [paseo-relay](https://github.com/zenghongtu/paseo-relay) — self-hosted relay in Go
+- [getpaseo/paseo-relay](https://github.com/getpaseo/paseo-relay) — official distributed relay, written in Elixir
- [paseo-vscode](https://marketplace.visualstudio.com/items?itemName=hinnes.paseo-vscode) — VS Code extension
----
-
-
-
## License
AGPL-3.0
diff --git a/docs/architecture.md b/docs/architecture.md
index c46e463c7..354e0a77c 100644
--- a/docs/architecture.md
+++ b/docs/architecture.md
@@ -133,16 +133,18 @@ Commander.js CLI with Docker-style commands. Common agent operations are also ex
Communicates with the daemon via the same WebSocket protocol as the app.
-### `packages/relay` — E2E encrypted relay
+### `packages/relay` — Relay transport and E2E encryption
Enables remote access when the daemon is behind a firewall.
- Curve25519 ECDH key exchange + XSalsa20-Poly1305 (NaCl `box`) encryption
-- Relay server is zero-knowledge — it routes encrypted bytes, cannot read content
+- The relay is zero-knowledge — it routes encrypted bytes and cannot read content
- Client and daemon channels with identical API (`createClientChannel`, `createDaemonChannel`)
- Pairing via QR code transfers the daemon's public key to the client
- Self-hosted relays opt into TLS with `daemon.relay.useTls` or `PASEO_RELAY_USE_TLS=true`; the public (client-facing) TLS setting can be overridden independently via `daemon.relay.publicUseTls` or `PASEO_RELAY_PUBLIC_USE_TLS`
+The production relay server lives in [getpaseo/paseo-relay](https://github.com/getpaseo/paseo-relay). It is a distributed Elixir service. The Cloudflare relay implementation in this monorepo is retained as legacy code and is not deployed.
+
See [SECURITY.md](../SECURITY.md) for the full threat model.
### Paseo Hub
diff --git a/docs/docker.md b/docs/docker.md
index 268331303..15e22081b 100644
--- a/docs/docker.md
+++ b/docs/docker.md
@@ -176,8 +176,9 @@ IPs and `localhost` are allowed by default.
- Set `PASEO_PASSWORD` for any published port or network-reachable deployment.
- Prefer HTTPS at the reverse proxy for direct browser access.
-- Use the Paseo relay for untrusted networks or mobile access when you do not
- want to expose the daemon port directly.
+- Use the [official Paseo relay](https://github.com/getpaseo/paseo-relay) for
+ untrusted networks or mobile access when you do not want to expose the daemon
+ port directly.
- The container is the isolation boundary for agents. Agents can read and write
whatever you mount into `/workspace` and whatever credentials you place in
`/home/paseo`.
diff --git a/docs/release.md b/docs/release.md
index ed40fa278..8b53f9547 100644
--- a/docs/release.md
+++ b/docs/release.md
@@ -78,7 +78,7 @@ This bumps the version across all workspaces, runs checks, publishes to npm, and
The Docker workflow builds images from the checked-out source tree on pull requests and on `main` as non-publishing checks. Stable `vX.Y.Z` tag pushes publish `ghcr.io/getpaseo/paseo:X.Y.Z` and `ghcr.io/getpaseo/paseo:latest`; beta `vX.Y.Z-beta.N` tag pushes publish only `ghcr.io/getpaseo/paseo:X.Y.Z-beta.N` and never move `latest`.
-Relay deployment is manual-only while `relay.paseo.sh` bridges traffic to the Fly deployment. Releases and pushes to `main` do not deploy the Cloudflare relay worker. Deploy it explicitly with `gh workflow run deploy-relay.yml` only when the production bridge should change.
+The production relay is the Elixir service in [getpaseo/paseo-relay](https://github.com/getpaseo/paseo-relay), with its own deployment process. Paseo releases and pushes to this repository do not deploy it. The Cloudflare relay code and workflow in this repository are legacy and are not used in production.
**Stable means stable.** If the user says "stable" or "ship stable", do not ask whether they want a beta first. They picked stable; treat it as a direct stable release. Only run the beta flow when the user explicitly says "beta".
diff --git a/public-docs/community.md b/public-docs/community.md
index 8d835e01a..feeff3baa 100644
--- a/public-docs/community.md
+++ b/public-docs/community.md
@@ -1,21 +1,25 @@
---
-title: Community projects
-description: Community-built tools and integrations for Paseo, including self-hosted Docker builds and an alternative relay.
-nav: Community
+title: Related projects
+description: The official Paseo relay and community-built tools and integrations.
+nav: Related projects
order: 7
category: Getting started
---
-# Community projects
+# Related projects
-Projects built by the Paseo community. These **aren't official Paseo projects** and aren't covered by Paseo's support, but they're useful starting points, especially for self-hosting. Review the code before running anything that touches your machine or your agents.
+## Official relay
+
+**[getpaseo/paseo-relay](https://github.com/getpaseo/paseo-relay)** is Paseo's official distributed relay server, written in Elixir. It powers hosted remote access and can also be self-hosted. For how the relay fits into Paseo's connection model, see [Security](/docs/security).
+
+## Community projects
+
+The projects below are built by the Paseo community. They **aren't official Paseo projects** and aren't covered by Paseo's support, but they're useful starting points, especially for self-hosting. Review the code before running anything that touches your machine or your agents.
## Self-hosting
- **[blockfeed/paseo-selfhosted](https://github.com/blockfeed/paseo-selfhosted)**, a Docker build that runs the Paseo web UI connected to a self-hosted local daemon. A good reference if you want a containerized setup. For the built-in way to serve the UI from the daemon, see [Self-hosting the web UI](/docs/web-ui).
-- **[zenghongtu/paseo-relay](https://github.com/zenghongtu/paseo-relay)**, a lightweight self-hosted relay server for Paseo, written in Go. Run your own relay instead of the hosted one for fully self-hosted remote access. For how the relay fits into Paseo's connection model, see [Security](/docs/security).
-
- **[paseo-vscode](https://marketplace.visualstudio.com/items?itemName=hinnes.paseo-vscode)**, a VS Code extension.
## Add your project
diff --git a/public-docs/security.md b/public-docs/security.md
index 981b82362..56c27099e 100644
--- a/public-docs/security.md
+++ b/public-docs/security.md
@@ -23,7 +23,7 @@ Clients connect to the daemon over WebSocket. There are two ways to establish th
## Relay connections (recommended)
-The relay is the simplest way to connect from your phone. It requires no VPN setup, no port forwarding, and no firewall configuration. The daemon can stay bound to localhost or a socket file, it connects _outbound_ to the relay, and your phone meets it there.
+The relay is the simplest way to connect from your phone. It requires no VPN setup, no port forwarding, and no firewall configuration. The daemon can stay bound to localhost or a socket file, it connects _outbound_ to the relay, and your phone meets it there. The official relay server is the open-source Elixir service at [getpaseo/paseo-relay](https://github.com/getpaseo/paseo-relay).
> **The relay is designed to be untrusted.** All traffic between your phone and daemon is end-to-end encrypted. The relay server cannot read your messages, see your code, or modify traffic without detection. Even if the relay is compromised, your data remains protected.