14 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
Release Highlights
Deprecations
New Features
rad issuenow usesclapto parse its command-line arguments. This affects error reporting as well as help output.radicle-nodenow supports systemd Credentials (refer to https://systemd.io/CREDENTIALS for more information) to load the secret key, in addition to the commandline argument--secret(higher priority than the credential) and the configuration file (lower priority than the credential). The identifier of the credential is "xyz.radicle.node.secret".
Fixed Bugs
1.5.0
Release Highlights
Better Support for Bare Repositories
Some improvements to supporting bare repositories have been made for rad and
git-remote-rad. For rad, the rad clone command has learned a new flag
--bare, which clones the repository into a bare repository, as opposed to
having a working tree (see [gitrepository-layout]).
git-remote-rad (our Git remote helper), also learned to better handle bare
repositories, when using git push and git fetch with a rad:// remote.
For jj users, this begins to unlock being able to use jj without co-location
of the Git repository. Further improvements to interoperability with jj are
in progress and will be released in future versions.
Introducing the patch.branch Option
Continuing on the theme of making jj users happy, git-remote-rad can now
handle the option -o patch.branch[=<name>]. When the option is passed without
a name, i.e. -o patch.branch, an upstream branch will be created which is
named after the patch being created – patches/<PATCH ID>. Alternatively, the
<name> value is used if supplied.
This allows you to specify if you want a tracking branch (or bookmark in jj)
for the patch. This means that you can avoid using rad patch checkout.
Improved rad patch show
The rad patch show command has received some love by improving its output. The
Base of the patch is now always output, where before it was behind the
--verbose flag.
The previous output would differentiate "updates", where the original author creates a new revision, and "revisions", where another author creates a revision. This could be confusing since updates are also revisions. Instead, the output shows a timeline of the root of the patch and each new revision, without any differentiation. The revision identifiers, head commit of the revision, and author are still printed as per usual.
Structured Logging
The radicle-node has learned to output structure logging using the new
--log-logger structured and --log-format json option pairs. If they are not
specified, then the logging will remain the same as per usual.
Deprecations in rad
It is important to note that we are now emitting deprecation and obsoletion
warnings for several rad commands and options.
For rad diff, the whole command is deprecated, and git diff should be used
instead. It is better to use the tools that already exist in this case.
The option rad self --nid was deprecated in favor of rad node status --only nid.
The reason for this is that we will be making efforts to separate the cryptographic
identity of user and node.
For this case, the node will – in a future version – read the location of the
secret key to use from configuration or arguments at runtime. This means that a
running node is required to report the correct Node ID – and the command cannot
rely on the default location, which is shared with the user.
The options rad patch review [--patch | --delete] are marked as obsolete,
since their functionality never worked as intended. Reviews are something that
requires more research and time to implement. These commands will likely be
removed before a next major release, since their lack of functionality is
confusing.
Deprecations
- The option
rad self --nidwas deprecated in favor ofrad node status --only nid rad diffwas deprecated in favor of usinggit diffrad patch review --patchandrad patch review --deleteare made obsolete. This functionality never worked as intended, and may be removed before the next major release.- The option
radicle-node --logwas deprecated in favor ofradicle-node --log-levelto be in line with--log-loggerand--log-format.
New Features
rad clonenow supports the flag--barewhich works analoguously togit clone --bare.rad patch shownow has improved output. It does not distinguish between the original author's updates and other updated, each update is marked asRevision, and the general output is cleaned up. It also showsBaseby default without the--verboseflag.rad init --setup-signingnow works on bare repositories.git-remote-radnow correctly reports the default branch to Git by listing the symbolic referenceHEAD.rad statuslearned a new option--only nidfor printing the Node ID.- The remote helper has learned a new server option
patch.branch[=<name>]. This will create an upstream branch when creating the branch. This upstream can then be used for updating the patch, post creation. radicle-nodehas learned--log-logger structuredand--log-format jsonoptions. The node will output its logs in a structured, JSON format when specified.
Fixed Bugs
- The
radCLI now uses indicatif for emitting progress spinners. This fixes an issue when the terminal size was too small for the spinner line. It also fixes when there is a user interrupt, the cursor would disappear. - The remote helper will no longer attempt to verify Git hooks twice, when
performing a
git push. - The default Git remote options, when using
rad remote, now setpruneTagsto prevent canonical tags from being pruned from the working copy of the repository'srefs/tags. rad init --setup-signingnow works in combination with--existing.
1.4.0
Release Highlights
Deprecations
New Features
rad cob lognow supports the arguments--fromand--towhich can be used to range over particular operations on a COB.
Fixed Bugs
1.3.1 - 2025-09-04
Fixed Bugs
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.
1.3.0 - 2025-08-12
Release Highlights
Canonical References
Introduce canonical reference rules via a payload entry in the identity
document. The payload is identified by xyz.radicle.crefs, and the payload
currently contains one key rules, which is followed by the set of rules. For
each rule, there is a reference pattern string to identify the rule, which in
turn is composed of the allow and threshold values. 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 checked when performing a
rad id update.
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, radicle-node is still not compatible with Windows.
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.
Display Full Node IDs
Node IDs and and node addresses have improved formatting. 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.
New Features
- Canonical reference rule in the identity payload, identified by
xyz.radicle.crefs. - The
git-remote-radexecutable can now be called from bare repositories and can push any kind of Git revision, greatly improving the experience for users ofjj. - The pinned repositories now maintain their insertion order.
- Improved error reporting during canonical reference calculations. This will provide users with more information on error cases that can occur when computing canonical references.
- When running
rad initthe default value for thedefaultBranchof the repository is now by provided the branch you are on or the Git configuration optioninit.defaultBranch.
Fixed Bugs
- Connection attempts will now return an error if they fail. Before the change, the connection attempts would timeout.
1.2.0 - 2025-06-02
Release Highlights
Improved Performance of Repository Initialization
There has been a huge improvement in initialising larger repositories. This was, unfortunately, due to libgit2 being a lot slower than git when performing file protocol push and fetches.
Better rad sync Output
There has been a concerted effort to improve the fetching and announcing output when using rad sync. This also helped us improve rad clone which should not include many error messages, while also succeeding.
New Features
CLI
- Output JSON lines for
rad cob - Allow showing multiple COBs at once
- Improvements to help documentation
- The full set of actions for patches are now available via
rad patch - Better error context when
ssh-agentconnection fails - The remote helper will print
git range-diffs when creating new patch revisions rad seedandrad unseedcan now take multiple RIDsrad cob [create | update]have been addedrad config schemafor emitting a JSONSchema of the configuration- Better syntax highlighting
rad cob showhandles broken pipes- Avoiding obtaining a signer when it is not necessary
- Print node addresses when syncing
Library
- Patch revisions can now be labelled and resolve comments
- Issues can be listed by status
- Extend the set of emojis that are supported
- Provide an API to do a reverse lookup from aliases to NIDs
- Use
signals_receiptscrate for improved signal handling - Integrate more up-to-date Gitoxide crates
- Ensuring an MSRV of 1.81
1.1.0 - 2024-12-05
Release Highlights
Database Migration
This release includes a migration of the COB database to version 2. The
migration is run automatically when you start your node. If you'd like to run
it manually, use rad cob migrate.
CLI
- A new
--editflag was added to therad id updatecommand, to make changes to an identity document from your editor. - A new
--storageflag was added torad patch cacheandrad issue cachethat operates on the entire storage, instead of a specific repository. - When fetching a repository with
--seedspecified on the CLI, we now try to connect to the seed it if not already connected. - A new set of sub-commands were added to
rad config, for directly modifying the local Radicle configuration. Seerad config --helpfor details. - Repositories are now initialized with a new refspec for the
radremote, that ensures that tags are properly namespaced under their remote. - A new
--remote <name>flag was added torad patch checkoutandrad patch setto set the remote for those commands. Defaults torad. - The
RAD_PASSPHRASEvariable is now correctly treated as no passphrase when empty.
Git Remote Helper
- The
GIT_DIRenvironment variable is no longer required for listing refs via the remote helper. This means the commands can be run outside of a working copy. - Fixed a bug where the wrong commit was used in the Patch COB when merging
multiple patches with a single
git push, resulting in some merged patches showing as unmerged.
Collaborative Objects (COBs)
- Fixed compatibility with certain old patches that contained empty reviews.
- Added a new
review.editaction to thexyz.radicle.patchCOB, for editing reviews.
Node
- When fetching a repository, the fetch would fail if the canonical branch could not be established. This is no longer the case, allowing the user to handle the problem locally.
- When fetching a repository, we no longer fail a fetch from a peer that is missing a reference to the default branch.
- Private RIDs that could sometimes leak over the gossip protocol no longer do. Note that this only affected the identifiers, not any repository data.
Protocol
- A new
rad/rootreference is added to the list of signed references (rad/sigrefs). This prevents a possible reference grafting attack.