
Radicle is a peer-to-peer, local-first code collaboration stack built on Git.
Radicle 1.3.0
12.08.2025The Radicle team is delighted to announce the release of Radicle 1.3.0 (29043134a). This release contains 48 commits by 7 contributors. We would like to thank everyone for their continued effort in helping us improve the Radicle protocol and tooling via their contributions and usage reports ๐พ
Installation
curl -sSf https://radicle.xyz/install | sh -s -- --no-modify-path --version=1.3.0
Canonical References
This feature has been under way for quite some time, and we are proud to announce that itโs ready for you to use!
Canonical reference rules have been introduced via an identity payload entry
under the identifier xyz.radicle.crefs
. Hereโs an example of the payload that
includes a single rule for tags that live under refs/tags/releases/*
:
"xyz.radicle.crefs": {
"rules": {
"refs/tags/releases/*": {
"allow": [
"did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz",
"did:key:z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz",
"did:key:z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM"
],
"threshold": 2
}
}
}
The canonical reference rules are now used to check for canonical updates. The
rule for the defaultBranch
of an xyz.radicle.project
is synthesized from the
identity document fields: threshold
and delegates
. This means that a rule
for that reference is not allowed within the rule set. This is checked when
performing a rad id update
.
For a more detailed history and usage of canonical references, check out the accompanying post.
Introducing radicle-protocol
This set of changes is mostly cosmetic for the time being. A new crate,
radicle-protocol
, was introduced to provide a home for a sans I/O
implementation of the Radicle protocol. The crate currently defines the inner
workings of the protocol, and radicle-node
depends on this.
Note here that we switched to use the bytes
crate, and we witnessed a panic
from this crate while using a pre-release. It has not showed up again, but we
introduced the use of backtraces to help identify the issue further. So, please
report a backtrace if the radicle-node
stops due to this issue.
Path to Windows
We made an effort to start paving some of the way to being able to use Radicle
on Windows. The first step was taken for this, and you can now use the rad
CLI
on a Windows machine โ without WSL.
Currently, git-remote-rad
and radicle-node
are blockers for full Windows
support. However, the sans I/O approach mentioned above will provide a way
forward for implementing a radicle-node
that works on Windows, and we will
continue to look into other fixes required for getting full Windows support.
Improved Log Rotation
The rotation of logs under .radicle/node
now works using a numbered system,
i.e. node.log.1
, node.log.2
, etc. The current running node will log to
node.log
, which is a symlink to most recent number.
This means that logs will be persisted between runs, which will require occasional cleanup.
Display Full Node ID
We have improved the formatting for Node IDs and node addresses. The CLI will output shortened forms of NIDs and addresses when the output is transient, and the full form where it is presented to the user. This will allow you to be able to copy and paste these identifiers.
Stable Order for Pinned Repositories
The pinned repositories now maintain their insertion order, meaning that they should not be reordered by any other factors other than the userโs decision on which repositories should appear first.
Relax Pushes for git-remote-rad
The git-remote-rad
would always expect a working copy and a reference when
performing pushes. These constraints are relaxed to allow a bare Git repository
and any kind of Git revision. This should improve the experience for users of
jj
.
Connect Attempts will Error
If a connection attempt would not happen due to an error, the result of the
error was never returned. This would often lead to timeouts when using rad node
connect
. We now return the error and can report it instead of waiting for a
timeout.
Default Branch Picker
When running rad init
the default value for the defaultBranch
of the
repository is now by provided the branch you are on or the Git configuration
option init.defaultBranch
.
Changelog
For a full list of changes, see below:
7a9d4512f
radicle: fix Canonical::quorum doc link fintan.halpenny@gmail.com5d467418b
term: Revert using inquire to spawn editor lorenz.leutgeb@radicle.xyz4934473b8
cli/node: Improve log rotation lorenz.leutgeb@radicle.xyz3d352f23e
canonical: Support Annotated Tags lorenz.leutgeb@radicle.xyz54fd8c40a
node: clean up logging erik@zirkular.io174792813
node: register backtrace fintan.halpenny@gmail.com0aaa81f82
cli: mention binary names as part of unknown fintan.halpenny@gmail.comfdb1ac4e3
radicle: Fix clippy::result_large_err lorenz.leutgeb@radicle.xyz5bab3f9cc
clippy: Allow doc_overindented_list_items lorenz.leutgeb@radicle.xyz906803378
chore: Automated fixes generated by clippy lorenz.leutgeb@radicle.xyz586eefc3e
rust-toolchain: 1.85 โ 1.88 lorenz.leutgeb@radicle.xyzefeefd0da
chore(debian/changelog): update package version to match upstream me@sebastinez.dev2a47bc0c7
term: provide default HELP message fintan.halpenny@gmail.coma998ce691
ssh: provide path on connect error fintan.halpenny@gmail.com8224819fe
radicle/profile: Enable home detection on Windows lorenz.leutgeb@radicle.xyz1e0a14ddc
ssh: Remove dependency on log lorenz.leutgeb@radicle.xyz8e6279a38
ssh: Remove dependency on byteorder lorenz.leutgeb@radicle.xyz95b3303eb
term: Remove unused dependency shlex lorenz.leutgeb@radicle.xyz009436efa
ssh: Use winpipe for SSH agent on Windows lorenz.leutgeb@radicle.xyz070550153
radicle: Depend on winpipe for Windows support lorenz.leutgeb@radicle.xyz08b535d56
radicle: Only set file limits on Unix lorenz.leutgeb@radicle.xyze7fb5647a
term: Remove dependency on libc lorenz.leutgeb@radicle.xyz70fb0d3fe
term: Use inquire for spawning the editor lorenz.leutgeb@radicle.xyza28fd65e8
term/ansi: Remove unused Windows module lorenz.leutgeb@radicle.xyzd46d36ece
term/spinner: Only handle signals on Unix lorenz.leutgeb@radicle.xyz92d77f9ec
crypto/ssh/keystore: Reduce scope of DirBuilderExt lorenz.leutgeb@radicle.xyz37ea81766
cli: improve default branch pick sekhat@temporus.me85ddcace0
docs: fix installation instructions in README.md istankovic@posteo.net7c4b71ab8
radicle: Keep pinned repos ordered in config tobias.hunger@gmail.com1fa30e2e8
cli: test missing commits for canonical quorum fintan.halpenny@gmail.comafe64d517
remote-helper: improve canonical handling fintan.halpenny@gmail.com14444a43e
remote-helper: refactor pushing action fintan.halpenny@gmail.coma9f75d47e
remote-helper: allow any revision in push src tobias.hunger@gmail.comda72557cf
git-remote-rad: Allow pushing from bare repositories tobias.hunger@gmail.com271ef497d
crypto: Fix scope ofssh-key
dependency lorenz.leutgeb@radicle.xyz0e3f3f03d
cli: Improve formatting of Node IDs and addresses lorenz.leutgeb@radicle.xyz010d5134e
protocol: fixFrame
docstring fintan.halpenny@gmail.com3c5668edd
protocol: Reimplement encoding on top ofbytes
lorenz.leutgeb@radicle.xyz1c20f64a2
node, protocol: Refactor lorenz.leutgeb@radicle.xyz61c468778
protocol: Create skeleton by moving from radicle-node lorenz.leutgeb@radicle.xyzb9759c586
radicle: Makenode::Link
copy and addis_*
lorenz.leutgeb@radicle.xyz408d4f27e
chore: add canonical references to CHANGELOG fintan.halpenny@gmail.com820122516
cli: test canonical tags fintan.halpenny@gmail.comff365e2d8
radicle: disallow default branch fintan.halpenny@gmail.coma69397386
cli: extract document update logic fintan.halpenny@gmail.com7f646666b
radicle: canonical references payload fintan.halpenny@gmail.comaf6cf03ac
radicle: canonical reference rules fintan.halpenny@gmail.comfb8681f5b
radicle:connect
returnsConnectError
fintan.halpenny@gmail.com
Checksums
f09b4203a47611e1e6a78ea9087b5cae2f94cacc649ed195840a0869d821c861 radicle-1.3.0-x86_64-apple-darwin.tar.xz
a25c67276a86c9fbadadbacbd2ea9763202e99701aa85cf7fe5815662696988d radicle-1.3.0-x86_64-unknown-linux-musl.tar.xz
3a615bb99bc998b3fca5ad8582599c8dfb3cffb0beec291f5939d4b559270227 radicle-1.3.0-aarch64-unknown-linux-musl.tar.xz
7939e1d1bce232730843d8975f205558b0885479c6666b630abb1500b67756db radicle-1.3.0-aarch64-apple-darwin.tar.xz