heartwood [mirror]

Radicle Heartwood Protocol & Stack

by z6MksFqX…wzpT, fintohaps (z6MkireR…3voM), lorenz (z6MkkPvB…sTEz)

rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5 branch master HEAD ceb74c99 updated 4d ago
https git clone https://code.wrycode.com/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5.git heartwood
radicle rad clone rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5 heartwood

❤️🪵

Radicle Heartwood Protocol & Stack

Heartwood is the third iteration of the Radicle Protocol, a powerful
peer-to-peer code collaboration and publishing stack. The repository contains a
full implementation of Heartwood, complete with a user-friendly command-line
interface (rad) and network daemon (radicle-node).

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 for general
information, and the Zulip chat to
talk to the project.

See the Protocol Guide for an
in-depth description of how Radicle works.

Installation

Requirements

  • Linux or Unix based operating system.
  • Git 2.34 or later
  • OpenSSH 9.1 or later with ssh-agent

📀 From binaries

Requires curl and tar.

Run the following command to install the latest binary release:

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

Or visit our download page.

📦 From source

Requires the Rust toolchain.

You can install the Radicle stack from source, by running the following
commands from inside this repository:

cargo install --path crates/radicle-cli --force --locked --root ~/.radicle
cargo install --path crates/radicle-node --force --locked --root ~/.radicle
cargo install --path crates/radicle-remote-helper --force --locked --root ~/.radicle

Or directly from our seed node:

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

Running

Systemd unit files are provided for the node under the /systemd folder.
They can be used as a starting point for further customization.

For running in debug mode, see HACKING.md.

Feedback

If you have feedback, feel free to create issues using rad issue, join
our Zulip, or email feedback@radicle.dev.
Emails sent to this address are automatically posted to
our public #feedback channel on Zulip, revealing the
From header (which usually contains your name and email
address). This allows us to discuss your feedback on Zulip, and, if necessary,
respond to you via email.

Contributing

See CONTRIBUTING.md and HACKING.md for an
introduction to contributing to Radicle.

Packages

Community members maintain packages for various package managers.
This makes it a lot easier to install Radicle and allows tighter
integration of Radicle with various distributions. Thanks!

APT (Debian, etc.)

See https://radicle.dev/apt/
and rad:z2nDKoCF4hg6xVrv7v93LmWHDJKUr
maintained by Lars Wirzenius and Richard Levitte

Arch

See archlinux.org/packages
and gitlab.archlinux.org
maintained by tippfehlr and kpcyrd.

NixOS

See search.nixos.org/packages
and search.nixos.org/options
maintained by @NixOS/radicle.

Also see home-manager-options.extranix.com
for usage with home-manager.

License

Radicle is distributed under the terms of both the MIT license and the Apache License (Version 2.0).

See LICENSE-APACHE and LICENSE-MIT for details.

Branches

Tags

Recent commits

Latest 30 commits on master.

ceb74c99 cli: Test explorer URL for annotated tag push
- Push an annotated tag and expect the tree URL of the tagged commit - Currently fails: the URL uses the tag object id
Daniel Norman 4d ago
8501e563 remote-helper: Peel pushed tags for explorer URL
- Use the tagged commit for the tree URL, not the tag object - Print no URL if the ref does not point to a commit
Daniel Norman 4d ago
c4cc4624 Revert "remote-helper: Compute `HEAD` for user namespaces"
This reverts commit 2747c52beb15db057f289a8f96774ee246de5284. I forgot that this is only supported from Git 2.48 onwards.
Lorenz Leutgeb 4d ago
736d21f6 node/db: Index routing by node
`sync_routing` calls `get_inventory(&from)` once per inbound inventory announcement, to work out which of a peer's previously-announced repo…
Yorgos Saslis 4d ago
2f930e35 node/reactor: Terminate transports whose socket is dead
A transport whose peer has gone away is never terminated, and the reactor then spins on it at 100% of a core. On every iteration the reactor…
Yorgos Saslis 4d ago
0f715810 protocol/node: count received pack bytes as peer liveness
`disconnect_unresponsive_peers` drops any session whose `last_active` is older than STALE_CONNECTION_TIMEOUT (hard-coded to 2 minutes). `las…
Yorgos Saslis 4d ago
73ad1de2 node/routing: Enforce routingMaxSize
`limits.routingMaxSize` is documented as "Number of routing table entries before we start pruning", but the implementation diverges from thi…
Yorgos Saslis 4d ago
3129de3b cli/init: Warn about Vulnerability
All released versions of Radicle are affected by vulnerabilities [1] in the network protocol: traffic is unencrypted and peers are not authe…
Yorgos Saslis 7d ago
0e5a56f2 protocol: Limit allocations when decoding frames
`VarInt` can get large enough to exhaust available memory on many machines. Instead of allocating directly, check the size of the allocation…
Lorenz Leutgeb 1mo ago
d8298a1d treewide: Remove `test_` prefix from test `fn`s
This redundancy does not add much. These functions are already marked via `#[test]`, and often times they are in a separate module named "te…
Lorenz Leutgeb 1mo ago
7e1cb406 build/Dockerfile: Bump `cargo-zigbuild`
This is required for compatiblity with Rust.
Lorenz Leutgeb 1mo ago
34198211 Release 1.10.3 Lorenz Leutgeb 1mo ago
3fc92f83 radicle/identity: Remove useless `@` binding Lorenz Leutgeb 1mo ago
63ed3890 flake: Add `cargo-msrv` to development shell Lorenz Leutgeb 1mo ago
6fd73f4f flake: Update Lorenz Leutgeb 1mo ago
d285eccb fetch: Include the founder namespace always
Read the initial identity document from the blob addressed by the repository ID and include its founder in the set of namespaces to be fetch…
Lorenz Leutgeb 1mo ago
90f44824 node/test/e2e: Clone without founder namespace
Add a test that demonstrates erroneous behavior in case the founder of a repository is not a delegate anymore. The change in commit 388d985…
Lorenz Leutgeb 1mo ago
a6f93802 CHANGELOG: Fix level of headings and whitespace Lorenz Leutgeb 1mo ago
919d5c78 crypto: Error on empty `SSH_AUTH_SOCK`
The empty string will never give a useful socket. Co-authored-by: Lorenz Leutgeb <lorenz.leutgeb@radicle.dev>
Steven Roose 1mo ago
50129a71 radicle/canonical: Remove dangling reference
An oversight in commit `218ba30d73adbab0c2c51c6`.
Lorenz Leutgeb 1mo ago
ba4ca694 Add `.editorconfig`
Co-authored-by: Lorenz Leutgeb <lorenz.leutgeb@radicle.dev>
Steven Roose 1mo ago
218ba30d radicle/canonical: Introduce `RawSymbolicRefs`
Serialization and deserialization of symbolic references was implemented with assumptions on the order of pairs of key and value in JSON obj…
Daniel Norman 1mo ago
0c2e8c15 radicle/config: Remove `public_seeds`
This function is unused.
Lorenz Leutgeb 1mo ago
5790e319 radicle/config: Do not populate `preferred_seeds`
Adding the "public seeds" of the network to the `preferred_seeds` configuration on all nodes causes all nodes to connect to the preferred se…
Lorenz Leutgeb 1mo ago
8677fd9e treewide: Update gix-packetline to 0.21.5
[Advisory Report]. [Advisory Report]: https://github.com/GitoxideLabs/gitoxide/security/advisories/GHSA-2vh6-hw4j-32ww
Fintan Halpenny 1mo ago
c14346d9 radicle/canonical: Remove `MatchedRule`
This `struct` is unused.
Lorenz Leutgeb 1mo ago
4867917f radicle/canonical: Remove `RawRules::matches`
Testing revealed that the implementation violated RIP-0006, which requires the most specific rule matching the target of `HEAD` to use an `a…
Daniel Norman 1mo ago
fd4e4903 radicle, cli: Move Git versions
Move `struct Version` from `radicle` to `radicle-cli`, where it is used.
Lorenz Leutgeb 1mo ago
05a192da fetch: Do not pretend to be Git
There is no good reason to fake being Git.
Lorenz Leutgeb 1mo ago
2747c52b remote-helper: Compute `HEAD` for user namespaces
If a user pushes to the reference of the same name as the default branch according to the identity document, expose this as `HEAD`, too.
Lorenz Leutgeb 1mo ago