Radish alpha
h
rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
Radicle Heartwood Protocol & Stack
Radicle
Git
treewide: radicle.{xyz → dev,network}
Lorenz Leutgeb committed 2 days ago
commit aa177b040037f399312c5f21841f28910a07ce2f
parent cb57e65
36 files changed +90 -78
modified .env.seed
@@ -1,2 +1,2 @@
-
RADICLE_DOMAIN=seed.radicle.xyz
+
RADICLE_DOMAIN=seed.radicle.dev
RADICLE_NODE_OPTIONS=--force
modified .github/README.md
@@ -26,7 +26,7 @@ GitHub, but only via Radicle directly. However, pull requests are still
accepted.

To view existing issues and patches with your web browser, navigate to
-
[app.radicle.xyz][heartwood].
+
[radicle.network][heartwood].

To contribute issues and patches, please consider [installing][install]
Radicle and follow our [guides][guides].
@@ -34,7 +34,7 @@ Radicle and follow our [guides][guides].
## Feedback

If you have feedback, feel free to create issues using `rad issue`, join
-
[our Zulip][zulip], or email [feedback@radicle.xyz][mail-feedback].
+
[our Zulip][zulip], or email [feedback@radicle.dev][mail-feedback].
Emails sent to this address are [automatically posted][zulip-help-email] to
[our **public** #feedback channel on Zulip][zulip-feedback], revealing the
[`From` header][rfc2822s3.6.2] (which usually contains your name and email
@@ -42,12 +42,12 @@ address). This allows us to discuss your feedback on Zulip, and, if necessary,
respond to you via email.


-
[guides-protocol]: https://radicle.xyz/guides/protocol
-
[guides]: https://radicle.xyz/guides
-
[heartwood]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
-
[homepage]: https://radicle.xyz
+
[guides-protocol]: https://radicle.dev/guides/protocol
+
[guides]: https://radicle.dev/guides
+
[heartwood]: https://radicle.network/nodes/seed.radicle.dev/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
+
[homepage]: https://radicle.dev
[install]: ../README.md#installation
-
[mail-feedback]: mailto:feedback@radicle.xyz
+
[mail-feedback]: mailto:feedback@radicle.dev
[readme]: ../README.md
[rfc2822s3.6.2]: https://datatracker.ietf.org/doc/html/rfc2822#section-3.6.2
[run]: ../README.md#running
modified .typos.toml
@@ -27,7 +27,7 @@ extend-ignore-re = [
    "`radicle`",
    "radicle heartwood protocol & stack", # Old fixture.
    "radicle-\\w+", # Crates in Cargo style
-
    "radicle\\.((example|zulipchat)\\.com|xyz)", # URLs
+
    "radicle\\.((example|zulipchat)\\.com|dev|network|xyz)", # URLs
    "radicle\\w*::", # Crates in Rust code style
    "xyz\\.radicle\\.(issue|patch|id)", # COB Type Names
]
modified ARCHITECTURE.md
@@ -1,3 +1,3 @@
# ARCHITECTURE

-
See the [Protocol Guide](https://radicle.xyz/guides/protocol).
+
See the [Protocol Guide](https://radicle.dev/guides/protocol).
modified CHANGELOG.md
@@ -14,6 +14,7 @@ Following a domain move of the project, the names of the bootstrap nodes change:
Old names in the Radicle configuration will be detected and cause warnings to
be printed.
The systemd credential IDs that node uses change: `{xyz → dev}.radicle.node.*`.
+
COB type names and payload IDs remain unchanged for backwards compatibility.

## New Features

modified CONTRIBUTING.md
@@ -28,7 +28,7 @@ simple guidelines.
  before submitting a patch. We wouldn't want you to waste your time!
* If you need help or would like to discuss your changes, come to our community chat on [Zulip][zulip].

-
[guide]: https://radicle.xyz/guides/user#working-with-patches
+
[guide]: https://radicle.dev/guides/user#working-with-patches
[zulip]: https://radicle.zulipchat.com

### Submitting patches
@@ -194,9 +194,9 @@ for the reader:
    for rid in self.storage.inventory()? {
        ...

-
### Referring to radicle.xyz in Code
+
### Referring to radicle.dev in Code

-
While <https://radicle.xyz> is the main website of the project, and also the domain
+
While <https://radicle.dev> is the main website of the project, and also the domain
associated with COBs implemented in this repo, we strive to write code that is as
independent as reasonably possible from this particular domain name. For example, it
should not be used for default configuration values, or if it is, there should be a
@@ -208,11 +208,18 @@ or fork it altogether. It also tends to produce better, more flexible, code.
In tests, instead use names that are compliant with RFC 2606, e.g.
"radicle.example.com".

-
Note that as of 2025-08, there are still a few mentions of "radicle.xyz" in the
+
Note that as of 2025-08, there are still a few mentions of "radicle.dev" in the
codebase (mostly tests or user hints, fallback for configuration), and some of them
are not easy to remove. However, this is in no way a justification to add more
references.

+
In 2026-04, the project moved from "radicle.xyz" to "radicle.dev", and many IDs,
+
most notably COB type names and payload IDs (both in reverse domain name notation)
+
were not changed to stay backward compatible. So, while generally, "radicle.xyz"
+
should not be used anymore, think twice before changing such occurrences to
+
"radicle.dev". The same holds for "xyz.radicle", but in that case please think
+
thrice.
+

### Proposing changes

When proposing changes via a patch:
modified Cargo.toml
@@ -4,9 +4,9 @@ resolver = "2"

[workspace.package]
edition = "2024"
-
homepage = "https://radicle.xyz"
+
homepage = "https://radicle.dev"
license = "MIT OR Apache-2.0"
-
repository = "https://app.radicle.xyz/seeds/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5"
+
repository = "https://radicle.network/seeds/seed.radicle.dev/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5"
version = "0.9.0"

# Even though some crates in this workspace may build fine
modified README.md
@@ -11,11 +11,11 @@ Radicle was designed to be a secure, decentralized and powerful alternative to
code forges such as GitHub and GitLab that preserves user sovereignty
and freedom.

-
See the [Radicle home page](https://radicle.xyz/) for general
+
See the [Radicle home page](https://radicle.dev/) for general
information, and the [Zulip chat](https://radicle.zulipchat.com/) to
talk to the project.

-
See the [Protocol Guide](https://radicle.xyz/guides/protocol) for an
+
See the [Protocol Guide](https://radicle.dev/guides/protocol) for an
in-depth description of how Radicle works.

## Installation
@@ -32,9 +32,9 @@ in-depth description of how Radicle works.

Run the following command to install the latest binary release:

-
    curl -sSf https://radicle.xyz/install | sh
+
    curl -sSf https://radicle.dev/install | sh

-
Or visit our [download](https://radicle.xyz/download) page.
+
Or visit our [download](https://radicle.dev/download) page.

### 📦 From source

@@ -50,7 +50,7 @@ commands from inside this repository:
Or directly from our seed node:

    cargo install --force --locked --root ~/.radicle \
-
        --git https://seed.radicle.xyz/z3gqcJUoA1n9HaHKufZs5FCSGazv5.git \
+
        --git https://seed.radicle.dev/z3gqcJUoA1n9HaHKufZs5FCSGazv5.git \
        crates/radicle-cli crates/radicle-node crates/radicle-remote-helper

## Running
@@ -63,7 +63,7 @@ For running in debug mode, see [HACKING.md](HACKING.md).
## Feedback

If you have feedback, feel free to create issues using `rad issue`, join
-
[our Zulip][zulip], or email [feedback@radicle.xyz][mail-feedback].
+
[our Zulip][zulip], or email [feedback@radicle.dev][mail-feedback].
Emails sent to this address are [automatically posted][zulip-help-email] to
[our **public** #feedback channel on Zulip][zulip-feedback], revealing the
[`From` header][rfc2822s3.6.2] (which usually contains your name and email
@@ -84,5 +84,5 @@ See [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT) for details.
[zulip]: https://radicle.zulipchat.com/
[zulip-feedback]: https://radicle.zulipchat.com/#narrow/channel/392584-feedback
[zulip-help-email]: https://talently.zulip.com/help/message-a-channel-by-email
-
[mail-feedback]: mailto:feedback@radicle.xyz
+
[mail-feedback]: mailto:feedback@radicle.dev
[rfc2822s3.6.2]: https://datatracker.ietf.org/doc/html/rfc2822#section-3.6.2
modified RELEASE.md
@@ -93,7 +93,7 @@ install the binaries, as well as launching the new binaries on our team seed
node.

This is achieved through the `build/upload` script, which requires SSH access to
-
`files.radicle.xyz`, for example:
+
`files.radicle.dev`, for example:

```
SSH_LOGIN=<user> build/upload 1.3.0-rc.3
@@ -102,14 +102,14 @@ SSH_LOGIN=<user> build/upload 1.3.0-rc.3
Once the files are released we can install the binaries via:

```
-
curl -O -L https://files.radicle.xyz/releases/latest/radicle-$TARGET.tar.xz
+
curl -O -L https://files.radicle.dev/releases/latest/radicle-$TARGET.tar.xz
```

where `$TARGET` is the relevant architecture and version.

### Release on Team Node
To help with testing the pre-release internally, we upgrade our team node,
-
`seed.radicle.xyz`, which is restricted to only replicate from our team's Node
+
`seed.radicle.dev`, which is restricted to only replicate from our team's Node
IDs.

We do this using NixOS and the [`radicle-nix`][radicle-nix] and
@@ -133,7 +133,7 @@ Radicle 1.5.0-rc.2 (7b00bf2e3) is released.
## Installation

```
-
curl -sSf https://radicle.xyz/install | sh -s -- --no-modify-path --version=1.5.0-rc.2
+
curl -sSf https://radicle.dev/install | sh -s -- --no-modify-path --version=1.5.0-rc.2
```

## Notes
@@ -243,11 +243,11 @@ Remember that `heartwood/CHANGELOG.md` must be updated to include the latest
changes in the patch release. These must be forward-ported to the `master`
branch.

-
[radicle-infra]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z254T5p17bdFPmzfDojsdjo4HjpoZ
+
[radicle-infra]: https://radicle.network/nodes/seed.radicle.dev/rad:z254T5p17bdFPmzfDojsdjo4HjpoZ
[radicle-nix]: https://github.com/radicle-nix/radicle-nix
-
[get-started]: https://radicle.xyz/#get-started
-
[radicle-xyz]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z371PVmDHdjJucejRoRYJcDEvD5pp
-
[updates]: https://radicle.xyz/#updates
+
[get-started]: https://radicle.dev/#get-started
+
[radicle-xyz]: https://radicle.network/nodes/seed.radicle.dev/rad:z371PVmDHdjJucejRoRYJcDEvD5pp
+
[updates]: https://radicle.dev/#updates
[zulip]: https://radicle.zulipchat.com/#narrow/channel/409174-announcements
-
[mastodon]: https://toot.radicle.xyz/explore
-
[bsky]: https://bsky.app/profile/radicle.xyz
+
[mastodon]: https://toot.radicle.dev/@radicle
+
[bsky]: https://bsky.app/profile/radicle.dev
modified build/Dockerfile
@@ -3,7 +3,7 @@ ARG RUST_VERSION="1.85"
ARG ALPINE_VERSION="3.20"

FROM rust:${RUST_VERSION}-alpine${ALPINE_VERSION} as builder
-
LABEL maintainer="Radicle Team <team@radicle.xyz>"
+
LABEL maintainer="Radicle Team <team@radicle.dev>"
WORKDIR /src
COPY . .

modified build/release
@@ -7,12 +7,12 @@ if [ $# -ne 1 ]; then
fi

SSH_LOGIN=${SSH_LOGIN:-release}
-
SSH_ADDRESS=${SSH_ADDRESS:-$SSH_LOGIN@files.radicle.xyz}
+
SSH_ADDRESS=${SSH_ADDRESS:-$SSH_LOGIN@files.radicle.dev}
SSH_KEY="$(rad path)/keys/radicle"

main() {
  version="$1"
-
  destination="/var/www/files.radicle.xyz/releases"
+
  destination="/var/www/files.radicle.dev/releases"

  if [ -z "$version" ]; then
    echo "fatal: empty version number" >&2 ; exit 1
modified build/upload
@@ -2,7 +2,7 @@
set -e

SSH_LOGIN=${SSH_LOGIN:-release}
-
SSH_ADDRESS=${SSH_ADDRESS:-$SSH_LOGIN@files.radicle.xyz}
+
SSH_ADDRESS=${SSH_ADDRESS:-$SSH_LOGIN@files.radicle.dev}
SSH_KEY="$(rad path)/keys/radicle"

main() {
@@ -17,7 +17,7 @@ main() {
    echo "fatal: empty version number" >&2 ; exit 1
  fi

-
  destination="/var/www/files.radicle.xyz/releases/$version"
+
  destination="/var/www/files.radicle.dev/releases/$version"

  # Create remote folder.
  ssh -i "$SSH_KEY" "$SSH_ADDRESS" mkdir -p "$destination"
modified crates/radicle-cli/examples/rad-config.md
@@ -4,9 +4,9 @@ In its simplest form, `rad config` prints the current configuration.
```
$ rad config
{
-
  "publicExplorer": "https://app.radicle.xyz/nodes/$host/$rid$path",
+
  "publicExplorer": "https://radicle.network/nodes/$host/$rid$path",
  "preferredSeeds": [
-
    "z6MkrLMMsiPWUcNPHcRajuMi9mDfYckSoJyPwwnknocNYPm7@iris.radicle.xyz:8776"
+
    "z6MkrLMMsiPWUcNPHcRajuMi9mDfYckSoJyPwwnknocNYPm7@iris.radicle.network:8776"
  ],
  "web": {
    "pinned": {
@@ -71,7 +71,7 @@ $ rad config schema
    "publicExplorer": {
      "description": "Public explorer. This is used for generating links.",
      "$ref": "#/$defs/Explorer",
-
      "default": "https://app.radicle.xyz/nodes/$host/$rid$path"
+
      "default": "https://radicle.network/nodes/$host/$rid$path"
    },
    "preferredSeeds": {
      "description": "Preferred seeds. These seeds will be used for explorer links/nand in other situations when a seed needs to be chosen.",
@@ -115,7 +115,7 @@ $ rad config schema
      "type": "string",
      "pattern": "^.+@.+:((6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1-5][0-9]{4})|([0-5]{0,5})|([0-9]{1,4}))$",
      "examples": [
-
        "z6MkrLMMsiPWUcNPHcRajuMi9mDfYckSoJyPwwnknocNYPm7@rosa.radicle.xyz:8776",
+
        "z6MkrLMMsiPWUcNPHcRajuMi9mDfYckSoJyPwwnknocNYPm7@rosa.radicle.network:8776",
        "z6MkvUJtYD9dHDJfpevWRT98mzDDpdAtmUjwyDSkyqksUr7C@xmrhfasfg5suueegrnc4gsgyi2tyclcy5oz7f5drnrodmdtob6t2ioyd.onion:8776",
        "z6Mkvky2mnSYCTUMKRdAUoZXBXLLKtnWEkWeYQcGjjnmobAU@f2atcc7udeub5kh4nkljtjwyk7ikjviorufzgwnfwhkphljl3vhq.b32.i2p:8776",
        "z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi@seed.example.com:8776",
@@ -815,7 +815,7 @@ You can also get any value in the configuration by path, eg.
$ rad config get node.alias
alice
$ rad config get preferredSeeds
-
z6MkrLMMsiPWUcNPHcRajuMi9mDfYckSoJyPwwnknocNYPm7@iris.radicle.xyz:8776
+
z6MkrLMMsiPWUcNPHcRajuMi9mDfYckSoJyPwwnknocNYPm7@iris.radicle.network:8776
$ rad config get node.limits.routingMaxSize
1000
```
modified crates/radicle-cli/examples/rad-help.md
@@ -6,7 +6,7 @@ See `rad <COMMAND> --help` to learn about a specific command.

Do you have feedback?
 - Chat <radicle.zulipchat.com>
-
 - Mail <feedback@radicle.xyz>
+
 - Mail <feedback@radicle.dev>
   (Messages are automatically posted to the public #feedback channel on Zulip.)

Usage: rad[EXE] <COMMAND>
modified crates/radicle-cli/examples/rad-inbox.md
@@ -110,7 +110,7 @@ Your inbox is empty.
Now let's do an identity update.

``` ~alice
-
$ rad id update --title "Modify description" --description "Use website" --payload xyz.radicle.project description '"https://radicle.xyz"' -q
+
$ rad id update --title "Modify description" --description "Use website" --payload xyz.radicle.project description '"https://radicle.dev"' -q
[..]
$ rad sync -a
✓ Synced with 1 seed(s)
@@ -128,7 +128,7 @@ $ rad inbox show 1
  "payload": {
    "xyz.radicle.project": {
      "defaultBranch": "master",
-
      "description": "https://radicle.xyz",
+
      "description": "https://radicle.dev",
      "name": "heartwood"
    }
  },
modified crates/radicle-cli/examples/rad-init-sync-preferred.md
@@ -16,7 +16,7 @@ You can show it any time by running `rad .` from this directory.
Your repository has been synced to the network and is now discoverable by peers.
View it in your browser at:

-
    https://app.radicle.xyz/nodes/[...]/rad:z3Rry7rpdWuGpfjPYGzdJKQADsoNW
+
    https://radicle.network/nodes/[...]/rad:z3Rry7rpdWuGpfjPYGzdJKQADsoNW

To push changes, run `git push`.
```
modified crates/radicle-cli/examples/rad-node.md
@@ -125,8 +125,8 @@ $ rad sync status
✗ Error: to sync a repository, your node must be running. To start it, run `rad node start`
```
``` (fail)
-
$ rad node connect z6Mkt67GdsW7715MEfRuP4pSZxJRJh6kj6Y48WRqVv4N1tRk@radicle.xyz:8776
-
✗ Connecting to z6Mkt67…v4N1tRk@radicle.xyz:8776... <canceled>
+
$ rad node connect z6Mkt67GdsW7715MEfRuP4pSZxJRJh6kj6Y48WRqVv4N1tRk@radicle.example:58776
+
✗ Connecting to z6Mkt67…v4N1tRk@radicle.example:58776... <canceled>
✗ Error: failed to open node control socket "[..]/.radicle/node/control.sock" (entity not found)
✗ Hint: to start your node, run `rad node start`.
```
modified crates/radicle-cli/examples/rad-patch-open-explore.md
@@ -7,7 +7,7 @@ $ git push rad HEAD:refs/patches
✓ Patch acab0ec777a97d013f30be5d5d1aec32562ecb02 opened
✓ Synced with 1 seed(s)

-
  https://app.radicle.xyz/nodes/[..]/rad:z3yXbb1sR6UG6ixxV2YF9jUP7ABra/patches/acab0ec777a97d013f30be5d5d1aec32562ecb02
+
  https://radicle.network/nodes/[..]/rad:z3yXbb1sR6UG6ixxV2YF9jUP7ABra/patches/acab0ec777a97d013f30be5d5d1aec32562ecb02

To rad://z3yXbb1sR6UG6ixxV2YF9jUP7ABra/z6Mkt67GdsW7715MEfRuP4pSZxJRJh6kj6Y48WRqVv4N1tRk
 * [new reference]   HEAD -> refs/patches
@@ -25,7 +25,7 @@ To compare against your previous revision acab0ec, run:

✓ Synced with 1 seed(s)

-
  https://app.radicle.xyz/nodes/[..]/rad:z3yXbb1sR6UG6ixxV2YF9jUP7ABra/patches/acab0ec777a97d013f30be5d5d1aec32562ecb02
+
  https://radicle.network/nodes/[..]/rad:z3yXbb1sR6UG6ixxV2YF9jUP7ABra/patches/acab0ec777a97d013f30be5d5d1aec32562ecb02

To rad://z3yXbb1sR6UG6ixxV2YF9jUP7ABra/z6Mkt67GdsW7715MEfRuP4pSZxJRJh6kj6Y48WRqVv4N1tRk
 + e12525d...b2b6432 changes -> patches/acab0ec777a97d013f30be5d5d1aec32562ecb02 (forced update)
@@ -41,7 +41,7 @@ $ git push rad master
✓ Canonical reference refs/heads/master updated to target commit b2b6432af93f8fe188e32d400263021b602cfec8
✓ Synced with 1 seed(s)

-
  https://app.radicle.xyz/nodes/[..]/rad:z3yXbb1sR6UG6ixxV2YF9jUP7ABra/tree/b2b6432af93f8fe188e32d400263021b602cfec8
+
  https://radicle.network/nodes/[..]/rad:z3yXbb1sR6UG6ixxV2YF9jUP7ABra/tree/b2b6432af93f8fe188e32d400263021b602cfec8

To rad://z3yXbb1sR6UG6ixxV2YF9jUP7ABra/z6Mkt67GdsW7715MEfRuP4pSZxJRJh6kj6Y48WRqVv4N1tRk
   f2de534..b2b6432  master -> master
modified crates/radicle-cli/src/main.rs
@@ -27,7 +27,7 @@ See `rad <COMMAND> --help` to learn about a specific command.

Do you have feedback?
 - Chat <\x1b]8;;https://radicle.zulipchat.com\x1b\\radicle.zulipchat.com\x1b]8;;\x1b\\>
-
 - Mail <\x1b]8;;mailto:feedback@radicle.xyz\x1b\\feedback@radicle.xyz\x1b]8;;\x1b\\>
+
 - Mail <\x1b]8;;mailto:feedback@radicle.dev\x1b\\feedback@radicle.dev\x1b]8;;\x1b\\>
   (Messages are automatically posted to the public #feedback channel on Zulip.)\
";
pub const TIMESTAMP: &str = env!("SOURCE_DATE_EPOCH");
@@ -116,7 +116,7 @@ fn main() {
        env!("CARGO_PKG_VERSION")
    )
    .homepage(env!("CARGO_PKG_HOMEPAGE"))
-
    .support("Open a support request at https://radicle.zulipchat.com/ or file an issue via Radicle itself, or e-mail to team@radicle.xyz"));
+
    .support("Open a support request at https://radicle.zulipchat.com/ or file an issue via Radicle itself, or e-mail to team@radicle.dev"));

    if let Some(lvl) = radicle::logger::env_level() {
        let logger = Box::new(radicle::logger::Logger::new(lvl));
modified crates/radicle-protocol/Cargo.toml
@@ -4,7 +4,7 @@ description = "The Radicle Protocol"
homepage.workspace = true
license.workspace = true
version = "0.7.0"
-
authors = ["Radicle Team <team@radicle.xyz>"]
+
authors = ["Radicle Team <team@radicle.dev>"]
edition.workspace = true
rust-version.workspace = true

modified crates/radicle/src/explorer.rs
@@ -90,7 +90,7 @@ impl Default for Explorer {
    fn default() -> Self {
        Self(String::from(
            std::option_env!("RADICLE_EXPLORER")
-
                .unwrap_or("https://app.radicle.xyz/nodes/$host/$rid$path"),
+
                .unwrap_or("https://radicle.network/nodes/$host/$rid$path"),
        ))
    }
}
modified crates/radicle/src/identity/doc.rs
@@ -153,7 +153,7 @@ impl VersionError {
    pub fn verbose(&self) -> String {
        const UNKNOWN_VERSION_ERROR: &str = r#"
Perhaps a new version of the identity document is released which is not supported by the current client.
-
See https://radicle.xyz for the latest versions of Radicle.
+
See https://radicle.dev for the latest versions of Radicle.
The CLI command `rad id migrate` will help to migrate to an up-to-date versions."#;

        match self {
modified crates/radicle/src/node/config.rs
@@ -287,7 +287,7 @@ pub struct ConnectAddress(
        with = "String",
        regex(pattern = r"^.+@.+:((6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1-5][0-9]{4})|([0-5]{0,5})|([0-9]{1,4}))$"),
        extend("examples" = [
-
            "z6MkrLMMsiPWUcNPHcRajuMi9mDfYckSoJyPwwnknocNYPm7@rosa.radicle.xyz:8776",
+
            "z6MkrLMMsiPWUcNPHcRajuMi9mDfYckSoJyPwwnknocNYPm7@rosa.radicle.network:8776",
            "z6MkvUJtYD9dHDJfpevWRT98mzDDpdAtmUjwyDSkyqksUr7C@xmrhfasfg5suueegrnc4gsgyi2tyclcy5oz7f5drnrodmdtob6t2ioyd.onion:8776",
            "z6Mkvky2mnSYCTUMKRdAUoZXBXLLKtnWEkWeYQcGjjnmobAU@f2atcc7udeub5kh4nkljtjwyk7ikjviorufzgwnfwhkphljl3vhq.b32.i2p:8776",
            "z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi@seed.example.com:8776",
modified crates/radicle/src/test/fixtures.rs
@@ -228,7 +228,7 @@ pub fn populate(repo: &git::raw::Repository, scale: usize) -> Vec<git::fmt::Qual
            .to_lowercase();
        let name = git::fmt::refname!("feature")
            .join(git::fmt::RefString::try_from(random.as_str()).unwrap());
-
        let signature = git::raw::Signature::now("Radicle", "radicle@radicle.xyz").unwrap();
+
        let signature = git::raw::Signature::now("Radicle", "radicle@radicle.dev").unwrap();

        rng.fill(&mut buffer);

modified debian/control
@@ -1,12 +1,12 @@
Source: radicle
-
Maintainer: The Radicle Team <team@radicle.xyz>
+
Maintainer: The Radicle Team <team@radicle.dev>
Uploaders: Lars Wirzenius <liw@liw.fi>, Sebastian Martinez <sebastian@rhizoma.dev>
Section: vcs
Priority: optional
Standards-Version: 4.6.2
Build-Depends: debhelper (>= 10~),
  asciidoctor
-
Homepage: https://radicle.xyz/
+
Homepage: https://radicle.dev/

Package: radicle
Architecture: any
modified debian/copyright
@@ -1,7 +1,7 @@
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: heartwood
-
Upstream-Contact: https://radicle.xyz/
-
Source: https://app.radicle.xyz/seeds/seed.radicle.xyz
+
Upstream-Contact: https://radicle.dev/
+
Source: https://radicle.network/seeds/seed.radicle.dev

Files: *
Copyright: 2019-2021, The Radicle Foundation
modified flake.nix
@@ -28,7 +28,7 @@

  nixConfig = {
    keepOutputs = true;
-
    extra-substituters = ["https://attic.radicle.xyz/radicle"];
+
    extra-substituters = ["https://attic.radicle.dev/radicle"];
    extra-trusted-public-keys = ["radicle:TruHbueGHPm9iYSq7Gq6wJApJOqddWH+CEo+fsZnf4g="];
  };

@@ -184,7 +184,7 @@
            grep = rec {
              generators = [
                {
-
                  word = "radicle.xyz";
+
                  word = "radicle.dev";
                  files = "\\.rs$";
                  excludes = [];
                }
modified git-remote-rad.1.adoc
@@ -1,5 +1,5 @@
= git-remote-rad(1)
-
The Radicle Team <team@radicle.xyz>
+
The Radicle Team <team@radicle.dev>
:doctype: manpage
:revnumber: 0.8.0
:revdate: 2023-10-12
modified rad-id.1.adoc
@@ -1,5 +1,5 @@
= rad-id(1)
-
The Radicle Team <team@radicle.xyz>
+
The Radicle Team <team@radicle.dev>
:doctype: manpage
:revnumber: 1.0.0
:revdate: 2024-04-22
modified rad-patch.1.adoc
@@ -1,5 +1,5 @@
= rad-patch(1)
-
The Radicle Team <team@radicle.xyz>
+
The Radicle Team <team@radicle.dev>
:doctype: manpage
:revnumber: 1.0.0
:revdate: 2024-04-22
modified rad.1.adoc
@@ -1,5 +1,5 @@
= rad(1)
-
The Radicle Team <team@radicle.xyz>
+
The Radicle Team <team@radicle.dev>
:doctype: manpage
:revnumber: 1.0.0
:revdate: 2024-04-22
@@ -111,7 +111,7 @@ the logs will go to the system journal. These can be viewed with **journalctl**(
To connect to a specific peer, the *connect* sub-command can be used:
For example, to connect to a community node, you can run:

-
    $ rad node connect z6MkrLMMsiPWUcNPHcRajuMi9mDfYckSoJyPwwnknocNYPm7@iris.radicle.xyz:8776
+
    $ rad node connect z6MkrLMMsiPWUcNPHcRajuMi9mDfYckSoJyPwwnknocNYPm7@iris.radicle.network:8776

The argument given to *connect* is called a node _address_. It is composed of
a Node ID (NID), followed by an *@* symbol, and the _host_ name and _port_.
modified radicle-node.1.adoc
@@ -1,5 +1,5 @@
= radicle-node(1)
-
The Radicle Team <team@radicle.xyz>
+
The Radicle Team <team@radicle.dev>
:doctype: manpage
:revnumber: 1.0.0
:revdate: 2024-04-22
modified scripts/changelog
@@ -49,7 +49,7 @@ echo
echo "## Installation"
echo
echo '```'
-
echo "curl -sSf https://radicle.xyz/install | sh -s -- --no-modify-path --version=$version"
+
echo "curl -sSf https://radicle.dev/install | sh -s -- --no-modify-path --version=$version"
echo '```'
echo
echo "## Notes"
modified scripts/just/check-keywords.sh
@@ -6,6 +6,10 @@ echo "${CHECK}Checking for forbidden words in staged files...${NORMAL}"
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACMR | grep '\.rs$' || true)

if [ -n "$STAGED_FILES" ]; then
+
    if echo "$STAGED_FILES" | xargs rg --context=3 --fixed-strings 'radicle.dev'; then
+
        exit 1
+
    fi
+

    if echo "$STAGED_FILES" | xargs rg --context=3 --fixed-strings 'radicle.xyz'; then
        exit 1
    fi
modified simulation/README.md
@@ -15,9 +15,9 @@ A suite of tools to create simulated Radicle networks to run tests in:

`heartwood` already has the following types of tests (as of 2026-04):

-
- [Unit](https://app.radicle.xyz/nodes/iris.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/tree/crates/radicle/src/profile.rs#L842)
-
- [End-to-End](https://app.radicle.xyz/nodes/iris.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/tree/crates/radicle-node/src/tests/e2e.rs)
-
- [CLI](https://app.radicle.xyz/nodes/iris.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/tree/crates/radicle-cli/tests/commands/checkout.rs)
+
- [Unit](https://radicle.network/nodes/iris.radicle.network/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/tree/crates/radicle/src/profile.rs#L842)
+
- [End-to-End](https://radicle.network/nodes/iris.radicle.network/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/tree/crates/radicle-node/src/tests/e2e.rs)
+
- [CLI](https://radicle.network/nodes/iris.radicle.network/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/tree/crates/radicle-cli/tests/commands/checkout.rs)

However we can only run them on the currently checked out version of `heartwood`, this leaves gaps in our testing coverage, particularly for cross-version and cross-platform testing.

@@ -73,7 +73,7 @@ This will give us the following workflow for constructing test scenarios:

## Plan

-
- [ ] Migrate existing [simulation environment repo](https://app.radicle.xyz/nodes/iris.radicle.xyz/rad%3Az2CzknCvAq9jSCpKdyjMppbvGmxyZ) into `heartwood`.
+
- [ ] Migrate existing [simulation environment repo](https://radicle.network/nodes/iris.radicle.network/rad%3Az2CzknCvAq9jSCpKdyjMppbvGmxyZ) into `heartwood`.
  1. [ ] `radicle-node` timoni module.
  2. [ ] `radicle-node` custom container builder.
  3. [ ] `instances` topology definition files.
modified windows/Package.wxs
@@ -14,7 +14,7 @@

<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
  <Package
-
    Id="xyz.radicle"
+
    Id="dev.radicle"
    Name="Radicle"
    Manufacturer="Radicle Team"
    Version="$(env.RADICLE_VERSION)"
@@ -25,7 +25,7 @@
  >
    <MediaTemplate EmbedCab="yes" />
    <MajorUpgrade DowngradeErrorMessage="A newer version of Radicle is already installed." />
-
    <Property Id="ARPURLINFOABOUT" Value="https://www.radicle.xyz/" />
+
    <Property Id="ARPURLINFOABOUT" Value="https://www.radicle.dev/" />
    <StandardDirectory Id="LocalAppDataFolder">
      <Directory Id="INSTALLFOLDER" Name="Radicle">  
        <Component Id="InstallFolderComponent" Guid="*">