RADICLE RADICLE RADICLE 
RADICLE PEER-TO-PEER NETWORK 
RADICLE SOVEREIGN FORGE 
RADICLE PEER-TO-PEER NETWORK 
RADICLE SOVEREIGN FORGE 
RADICLE PEER-TO-PEER NETWORK 
RADICLE SOVEREIGN FORGE 
RADICLE PEER-TO-PEER NETWORK 
RADICLE SOVEREIGN FORGE 

Radicle is a peer-to-peer, local-first code collaboration stack built on Git.


Radicle 1.4.0 – Lily

04.09.2025

The Radicle team is delighted to announce the release of Radicle 1.4.0 (bbd1e2c), code name Lily. Going forward, we want to name our releases after the abundant flowers and plants of this earth. We chose Lily as the first in honor of Finland’s national flower, the Lily of the Valley. The team is making this release from Helsinki 🇫🇮

This release contains 67 commits by 5 contributors. It’s exciting to see our Zulip community growing and having patches from fresh contributors! 👾

Thanks to the following contributors for providing their time and effort for this release:

Installation

curl -sSf https://radicle.xyz/install | sh -s -- --no-modify-path --version=1.4.0

Canonical Reference Improvements

The canonical reference calculation was improved internally so that the developers can better reason about the process. During this, it was noted that the Radicle storage copy of the repository and the working copy of the repository were both used during the process. By ensuring that the storage copy is the only one used, a class of bugs is ruled out. This, however, means that a git push will not fail when the pushed commit diverges, but will still emit a warning that the new commit is diverging away from the other heads. We weighed this up, and consider it an improvement, since the user is given control of their own Git history.

Future improvements will provide ways of inspecting and resolving diverging heads.

Fixed Panics

Two instances of panics were fixed in this release.

The first, and most important, was a panic around serializing wire messages. There is a strict size limit on the protocol messages that we control. However, this size limit is not intended to be imposed on Git streams, for example during fetching from other nodes. We incorrectly placed a check for this size limit in the serialize function, which meant it would panic for some Git fetches. This was fixed by moving the check elsewhere, while also improving the code so we do not make that mistake again.

The second involved using the read method from the sqlite crate. This method calls try_read and unwraps the Result, which would cause a panic. We have replaced the calls to read with try_read to more gracefully handle the error.

Improvements Towards Windows Compatibility

We have continued along the path towards compatibility by fixing some areas that required some Windows specific handling. These included canonicalization of paths, and using the correct named pipes location for the control socket.

Improved Bootstrapping

Previously, we would use DNS to resolve to the IP address of bootstrap nodes, which would be used as the bootstrap address. Now, we may also use the IPv4, IPv6, and Tor addresses directly for bootstrapping.

Improvements to rad sync

We now use a more suitable symbol in rad sync status for the status:

✗ Hint:
   ? … Status:
       ✓ … in sync          ✗ … out of sync
       ! … not announced    • … unknown

This aligns closer with the rad node status output. As well as this, the Tip column was renamed to SigRefs, since the term Tip was too ambiguous.

The internal logic of rad sync --announce was improved by writing more tests and finding edge cases to fix. Included in these improvements is changing the target behavior. Before, the announcements would attempt to reach the preferred seeds target and the replication factor. Now, it tries to reach the preferred seeds and falls back to the replication factor.

Improvements to rad cob log

The rad cob log command learned two new options, --from and --to. These take a commit SHA that correspond to a COB operation, and allows you to limit the log to start from or end the log at those operations, respectively.

Various Improvements

We have made the errors that occur in radicle-fetch more fine-grained so that we get better error reporting.

Also, thanks to Matthias Beyer for making improvements within our Rust code. These may not be visible to the user, but they may improve some performance, and improve the developers lives :)

Changelog

This release contains 67 commit(s) by 5 contributor(s).

82ad1e7f0afbf59bc95b6f9996bb5db570ba3661ce9644c370e8140a2364cdb3  radicle-1.4.0-x86_64-apple-darwin.tar.xz
937ddc7016fa0cbd9ce2449294939dcab6802880109ae58a5f4b7a03ae63d5b9  radicle-1.4.0-x86_64-unknown-linux-musl.tar.xz
6b673bae8d2531c07b3e1df853dbc0396397569aae29f5675b3bb4606306735e  radicle-1.4.0-aarch64-apple-darwin.tar.xz
d51ba8ca3b9277e5d06dcafee2ae04d9a4ad697b6bd57b33e436b559e85820e0  radicle-1.4.0-aarch64-unknown-linux-musl.tar.xz