fork of radicle with Git LFS support, backed by IPFS
Go to file
Alexis Sellier 89b9eb53b7
node: Implement protocol multiplexing
To improve the reliability and flexibility of the protocol, we introduce
multiplexing over peer connections. This involves a new `Frame` type
that carries a stream-id and payload.

Three stream types are made available:

1. Control
2. Gossip
3. Git

This change brings the following improvements:

* Removed need to queue fetch requests
* Removed need to queue gossip messages
* Removed need for `Fetch` and `FetchOk` messages
* Service doesn't need to know about inbound fetches
* Removed one round-trip for fetch negotiation
* Removed special `done` git packet
* Removed session logic and state around Git/Fetch protocols
* Removed code around upgrading/downgrading transport
* Worker in responder mode is able to process any number of fetches
* Connections support any number of concurrent fetches

We had to introduce a few extra things however to make it all work:

* A `VarInt` type for variable-length integers, since we want the frames
  to be lightweight.
* A custom "tunnel" implementation, since we couldn't use the existing
  one anymore.

Overall the change removes more complexity than it adds, while improving
the protocol along the way.
2023-04-10 14:41:55 +02:00
.github/workflows ci: Improve directory structure 2023-04-07 11:37:17 +02:00
.nix Rust 1.67 2023-02-04 19:30:29 +01:00
radicle cli: Add `patch archive` sub-command 2023-04-10 10:17:37 +02:00
radicle-cli node: Implement protocol multiplexing 2023-04-10 14:41:55 +02:00
radicle-cli-test cli-test: Improve testing framework logging 2023-03-13 11:38:33 +01:00
radicle-cob cli: Some improvements to `rad merge` 2023-04-03 16:06:24 +02:00
radicle-crdt radicle: force new or initial construction of LWWReg 2023-03-31 15:49:55 +02:00
radicle-crypto crypto: add PublicKey::to_namespace 2023-03-30 15:53:27 +01:00
radicle-dag Rust 1.67 2023-02-04 19:30:29 +01:00
radicle-httpd Set patch status to `merged` automatically 2023-04-05 10:32:45 +02:00
radicle-node node: Implement protocol multiplexing 2023-04-10 14:41:55 +02:00
radicle-remote-helper remote-helper: Tell the user we're announcing refs 2023-03-06 15:39:35 +01:00
radicle-ssh Update to Rust 1.65 2022-11-05 12:47:26 +01:00
radicle-term cli: Unify format of help messages 2023-04-10 10:06:45 +02:00
radicle-tools cli: Improve `patch` command 2023-03-08 20:23:49 +01:00
radicle-tui tui: Fix clippy issue 2023-03-21 13:19:38 +01:00
scripts Add `install` script 2023-04-06 11:29:42 +02:00
.dockerignore Dockerize services 2022-12-14 17:15:40 +01:00
.env.seed node: Add `--force` option to start node 2023-03-31 17:30:55 +02:00
.gitignore Initial commit 2022-09-13 10:13:13 +02:00
.gitsigners Add `.gitsigners` file with core team 2023-04-05 11:46:57 +02:00
ARCHITECTURE.md Flesh out `HACKING.md` 2023-03-16 13:06:38 +01:00
CONTRIBUTING.md Flesh out `CONTRIBUTING.md` 2023-03-13 15:10:53 +01:00
Cargo.lock tui: Implement basic application 2023-03-20 16:27:42 +01:00
Cargo.toml tui: Add basic framework 2023-03-20 16:27:42 +01:00
DCO Add licenses and contributor information 2022-11-16 12:26:12 +01:00
HACKING.md node: Rename control socket 2023-03-31 17:29:58 +02:00
LICENSE-APACHE Add licenses and contributor information 2022-11-16 12:26:12 +01:00
LICENSE-MIT Add licenses and contributor information 2022-11-16 12:26:12 +01:00
README.md Flesh out `README` 2023-03-13 12:19:20 +01:00
build.rs Rust 1.67 2023-02-04 19:30:29 +01:00
docker-compose.yml ci: Add git tracing to node deployment 2023-03-16 12:30:15 +01:00
rust-toolchain Rust 1.67 2023-02-04 19:30:29 +01:00

README.md

❤️🪵

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 implemention 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.

Installation

Requirements

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

📦 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 radicle-cli --force --locked
cargo install --path radicle-node --force --locked
cargo install --path radicle-remote-helper --force --locked

Or directly from our seed node:

cargo install --force --locked --git https://seed.radicle.xyz/z3gqcJUoA1n9HaHKufZs5FCSGazv5.git \
    radicle-cli radicle-node radicle-remote-helper

Contributing

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

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.