Cradicle is a C implementation of the Radicle protocol. Its codebase consists of the command line interface (CLI), the graphical user interface (GUI), and a supplementary SSH library (libssh-rad).
The CLI lives in the crad repository with Radicle ID (RID) rad:z2ydYmUCJvDfNFTVTpEbQmm55EPt1. You clone the repo with git with this link:
https://iris.radicle.xyz/z2ydYmUCJvDfNFTVTpEbQmm55EPt1.git. To build it from source, see the README.md there.
The GUI consists of cradicle-gui (standalone GTK-4 app) and crad-http (web service you can access through your web browser). It lives in the cradicle-gui repository with RID rad:zVKd2asJa4AzDkQ3VQSoxanBipAX. You can clone the repo with git with this link:
https://iris.radicle.xyz/zVKd2asJa4AzDkQ3VQSoxanBipAX.git. To build it from source or to read installation instructions, see the README.md there. You can also run the prebuilt AppImage (cradicle-gui-x86_64.AppImage) from a standard Linux distribution. If you have a Debian-based distro, see the doc/debian.md file in the cradicle-gui repo for instructions on how to install the DEB package.
libssh-rad lives in the libssh repository with RID rad:z3azMM7wahAi6AKgfhynEnZ5XzrSq (default branch is rad2). You can clone the repo with git with this link:
https://iris.radicle.xyz/z3azMM7wahAi6AKgfhynEnZ5XzrSq.git.
C was chosen as the programming language mainly for security and portability purposes. A C-compiler toolchain can relatively-easily be bootrapped completely from source on a wide variety of CPU architectures. By performing such a bootstrap one can avoid certain backdoor injection attacks into the binaries of the toolchain. Further, the resources needed to compile the codebase is modest and can be comfortably performed in a resource-constrained operating system such as a VPS or a live image without persistent storage and limited RAM.
The node that connects to the Radicle network and communicates with peers is not yet implemented in C. Instead, we use the rust-based reference implementation, and sandbox it (with bubblewrap). The reproducible builds for the rust-based implementation are conveniently bundled with the CLI (in the bin directory). The radicle-node-wrapped command is used to start the radicle-node in the sandbox, and by default network traffic in the sandbox is routed through Tor (using torsocks and slirp4netns).
The usage for the CLI (crad) is similar to the rad command in the reference implementation.crad -h shows the help information and lists the available commands. For more information about a particular command <command> type crad <command> -h. The first command to run is typically crad auth. This lets you set an alias and a password for encrypting the SSH key. Leave the password blank if you don't want the key to be encrypted.
If you already have a git repo with at least one commit, you can initialize it for radicle usage with crad init (inside the repo directory). Note: If you have a plain (non git) directory, you can turn it into a git directory by running (inside this directory) git init and then git add <files> and git commit -m "my commit message".
Once you ran crad init on a repo, you can perform regular git operations such as push and pull using the rad remote. You can see the remotes with git remote -v. You should see something like:
rad rad://zVKd2asJa4AzDkQ3VQSoxanBipAX (fetch) rad rad://zVKd2asJa4AzDkQ3VQSoxanBipAX/z6MkphQ3d3sK1q7XAyAU6emouYZV8Bd9JA4HWX7hekH6zWGo (push)in the list. Now you can, for example, push to the repo with
git push rad mybranch, pull with git pull rad mybranch. These operations are local-only. To sync with the network, use crad sync.
To clone a public repo with rid rad:zVKd2asJa4AzDkQ3VQSoxanBipAX, run crad clone rad:zVKd2asJa4AzDkQ3VQSoxanBipAX.
Private repos are a bit more complicated. See the README.md in the crad repository for usage with those.
If a command fails, you can use the -v (verbose) option for more details on what the command is doing. For example, crad clone -v rad:zVKd2asJa4AzDkQ3VQSoxanBipAX.
To list the repos you have cloned/inited/seeded, run crad ls . Sometimes you may need to pass the --refresh option to crad ls in order to refresh the repo cache.