Clean up marketing copy

Copy:

- Sentence case for headlines, guide titles, and doc headings (proper
  nouns kept capitalized).
- Removed em dashes from the home page.
- Tightened the "Programmable repos" line, clarified the explore CTA
  ("Explore the network"), rewrote the Claude skill card, simplified the
  Install headline, and fixed the Garden nav description to describe
  what Radicle Garden actually is (a hosted, always-on node).

Layout:

- Aligned the Garden promo on the Learn and landing pages (same copy and
  dimensions).
- Balanced the page-header and hero headlines so they don't leave a
  hanging word or widow.
- Line-break the Garden promo copy on desktop only.
- Animate the arrow on marketing buttons on hover, and drop the white
  button's opacity hover.
This commit is contained in:
Brandon Oxendine
2026-07-21 17:58:59 +02:00
committed by Rūdolfs Ošiņš
parent 45c5787d68
commit fa1af21819
15 changed files with 148 additions and 116 deletions
+11 -3
View File
@@ -121,15 +121,18 @@
transition: transform 0.15s ease;
}
.marketing .arrow-link:hover .link-arrow-right {
.marketing .arrow-link:hover .link-arrow-right,
.marketing .button:hover .link-arrow-right {
transform: translateX(0.15rem);
}
.marketing .arrow-link:hover .link-arrow-down {
.marketing .arrow-link:hover .link-arrow-down,
.marketing .button:hover .link-arrow-down {
transform: translateY(0.15rem);
}
.marketing .arrow-link:hover .link-arrow-up-right {
.marketing .arrow-link:hover .link-arrow-up-right,
.marketing .button:hover .link-arrow-up-right {
transform: translate(0.15rem, -0.15rem);
}
@@ -223,6 +226,11 @@
margin-bottom: 3rem;
}
/* Balance headline line lengths so the last line isn't a lone word (widow). */
.marketing .page-header h1 {
text-wrap: balance;
}
.marketing .page-label {
text-transform: uppercase;
letter-spacing: 0.1em;
+2 -2
View File
@@ -61,8 +61,8 @@
<div class="product-card-text">
<h3 class="product-title">Claude skill</h3>
<p class="product-description">
Teach your AI agent to use Radicle. Break down issues into tasks, sync
progress, and capture session context, built for Claude Code.
Don’t want to learn Radicle? Let your agent do it. Claude Code manages
issues, patches, and session context for you.
</p>
<a
href="https://radicle.network/nodes/seed.radicle.garden/rad:zvBj4kByGeQSrSy2c4H7fyK42cS8"
-1
View File
@@ -52,7 +52,6 @@
}
.button.white:hover {
opacity: 0.85;
color: var(--color-neutrals-opaque-light-900);
}
</style>
+2 -3
View File
@@ -103,14 +103,13 @@
<Meta
title="Install | Radicle"
description="Everything you need to collaborate on code, from the terminal, the desktop, and agent skills." />
description="Everything you need to collaborate on code across the terminal, the desktop, and AI agents." />
<main class="page-container">
<header class="page-header">
<h1 class="txt-bold-32">
Get started with Radicle. <span class="txt-color-tertiary">
Everything you need to collaborate on code, from the terminal, the
desktop, and agent skills.
Everything you need to collaborate on code.
</span>
</h1>
</header>
+27 -11
View File
@@ -130,6 +130,12 @@
<style>
/* color inherited from :root, padding from .page-container */
/* Balance the hero into even lines so the second sentence starts a new line
instead of leaving a hanging word, without forcing a break when it fits. */
.hero h1 {
text-wrap: balance;
}
h3 {
padding-top: 3rem;
padding-bottom: 1rem;
@@ -461,6 +467,10 @@
.garden-promo-action {
align-self: flex-start;
}
.garden-break {
display: none;
}
}
@media (max-width: 44rem) {
@@ -497,7 +507,7 @@
</section>
<section class="features">
<article class="feature-card">
<h4 class="txt-bold-18">Local-First</h4>
<h4 class="txt-bold-18">Local-first</h4>
<p class="txt-medium-16 txt-color-tertiary">
Code, issues, and patches all live on your machine. No API limits, no
latency, no outage to wait out. Your agents work offline and sync when
@@ -514,9 +524,9 @@
</article>
<article class="feature-card">
<h4 class="txt-bold-18">Signed by Default</h4>
<h4 class="txt-bold-18">Signed by default</h4>
<p class="txt-medium-16 txt-color-tertiary">
Every change is cryptographically signed — commits, patches, issues,
Every change is cryptographically signed: commits, patches, issues,
comments, all of it. Nothing enters your repo unverified, so the whole
history is tamper-proof and attributable. Trust cryptography, not the
platform.
@@ -524,20 +534,20 @@
</article>
<article class="feature-card">
<h4 class="txt-bold-18">Human-First, Agent-Scale</h4>
<h4 class="txt-bold-18">Human-first, agent-scale</h4>
<p class="txt-medium-16 txt-color-tertiary">
One person or a thousand agents, same conflict-free workflow. Each gets
its own namespace, and Collaborative Objects merge concurrent edits
automatically — every one signed.
automatically, every one signed.
</p>
</article>
<article class="feature-card">
<h4 class="txt-bold-18">Programmable Repos</h4>
<h4 class="txt-bold-18">Programmable repos</h4>
<p class="txt-medium-16 txt-color-tertiary">
Radicle extends Git with conflict-free, programmable data types that
live inside your repo. Design custom workflows for humans and agents,
and they travel with your code, not a vendor’s API.
live inside your repo. Design custom workflows for humans and agents
that travel with your code, not a vendor’s API.
</p>
</article>
@@ -626,15 +636,21 @@
href={routeToPath(exploreRoute)}
on:click={e => onRepoClick(e, exploreRoute)}
class="all-repos txt-bold-18 arrow-link">
Explore <span class="link-arrow link-arrow-right">→</span>
Explore the network <span class="link-arrow link-arrow-right">→</span>
</a>
</section>
<section class="garden-promo">
<div class="garden-promo-text">
<h3 class="txt-bold-22">Need a hosted node? Try Radicle Garden.</h3>
<h3 class="txt-bold-22">
Need a hosted node?
<br class="garden-break" />
Try Radicle Garden.
</h3>
<p class="txt-medium-16">
Always-on nodes for your repositories — no infrastructure to manage.
Always-on nodes for your repositories.
<br class="garden-break" />
No infrastructure to manage.
</p>
</div>
<div class="garden-promo-action">
+47 -38
View File
@@ -194,36 +194,35 @@
}
}
.garden-banner {
.garden-promo {
display: flex;
flex-direction: column;
flex-direction: row;
justify-content: space-between;
align-items: center;
gap: 2rem;
padding: 2rem;
margin: var(--section-gap) 0;
padding: 1.5rem;
min-height: 25.5rem;
background:
url("/marketing/images/garden.png") no-repeat right center,
var(--color-accent-citrus-500);
background-size: cover;
border-radius: 0.25rem;
border-radius: var(--border-radius-tiny);
}
.garden-title {
max-width: 28rem;
color: var(--color-neutrals-opaque-dark-0);
}
.garden-bottom {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: flex-end;
}
.garden-description {
max-width: 25rem;
.garden-promo-text h3,
.garden-promo-text p {
margin: 0;
color: var(--color-neutrals-opaque-dark-0);
max-width: 32rem;
color: var(--color-neutrals-opaque-light-900);
}
.garden-promo-text h3 {
padding-top: 0;
margin-bottom: 0.25rem;
}
.garden-promo-action {
align-self: flex-end;
}
@media (max-width: 90rem) {
@@ -237,15 +236,21 @@
#guides.section {
padding-top: 1.5rem;
}
}
.garden-banner {
min-height: auto;
}
.garden-bottom {
@media (max-width: 56rem) {
.garden-promo {
flex-direction: column;
align-items: flex-start;
gap: 1rem;
gap: 1.5rem;
}
.garden-promo-action {
align-self: flex-start;
}
.garden-break {
display: none;
}
}
</style>
@@ -418,7 +423,7 @@
<div class="card-row faq-row">
<article class="product-card">
<div class="product-card-text">
<strong class="product-title">General Questions</strong>
<strong class="product-title">General questions</strong>
<span class="product-description">
What is Radicle and how is it different from GitHub? Who’s building
it, how many people use it, and what’s the project’s history.
@@ -433,7 +438,7 @@
</article>
<article class="product-card">
<div class="product-card-text">
<strong class="product-title">Technical Questions</strong>
<strong class="product-title">Technical questions</strong>
<span class="product-description">
What does “peer-to-peer” mean in practice? Why not just use Git
directly? How does identity work without accounts? The technical
@@ -455,23 +460,27 @@
</a>
</section>
<section class="garden-banner">
<h2 class="txt-bold-32 garden-title">
Introducing Radicle Garden. The quickest way to get started on the
network.
</h2>
<div class="garden-bottom">
<p class="txt-medium-16 garden-description">
Get started in minutes—no servers required. Instantly share code and
discover new projects.
<section class="garden-promo">
<div class="garden-promo-text">
<h3 class="txt-bold-22">
Need a hosted node?
<br class="garden-break" />
Try Radicle Garden.
</h3>
<p class="txt-medium-16">
Always-on nodes for your repositories.
<br class="garden-break" />
No infrastructure to manage.
</p>
</div>
<div class="garden-promo-action">
<Button
href="https://radicle.garden"
variant="white"
target="_blank"
rel="noopener noreferrer">
Visit radicle.garden
<span class="link-arrow link-arrow-up-right">↗</span>
<span class="link-arrow link-arrow-up-right" aria-hidden="true">↗</span>
</Button>
</div>
</section>
+2 -1
View File
@@ -272,7 +272,8 @@
<div class="mobile-nav-text">
<span class="mobile-nav-title">Garden</span>
<span class="mobile-nav-description">
The quickest way to get started on the network.
An always-on hosted node that keeps your repositories
available 24/7.
</span>
</div>
</a>
+1 -1
View File
@@ -66,7 +66,7 @@ Replace `$TARGET` with one of:
| macOS x86_64 | `x86_64-apple-darwin` |
| macOS ARM64 | `aarch64-apple-darwin` |
### Radicle HTTP Daemon
### Radicle HTTP daemon
```
curl -O -L https://files.radicle.dev/releases/radicle-httpd/latest/radicle-httpd-$TARGET.tar.xz
+5 -5
View File
@@ -28,7 +28,7 @@ If you can’t find an answer here, drop by our [support channel][support] and a
[support]: https://radicle.zulipchat.com/#narrow/stream/369873-support
## General Questions
## General questions
### What is Radicle? How is it different from Git/GitHub?
@@ -50,7 +50,7 @@ The current codebase is a little under 2 years old, but we’ve been working on
[heartwood]: https://radicle.network/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
## Technical Questions
## Technical questions
### What do you mean by “peer-to-peer”?
@@ -149,7 +149,7 @@ Radicle does not use DHT technology because DHTs don’t allow nodes on the netw
Additionally, DHTs can introduce high network latency, especially in the case of permissionless networks, due to requests beyond routed across the globe.
## User Experience
## User experience
### Are there plans to add multilingual/localization support to the UI?
@@ -187,7 +187,7 @@ There is a Visual Studio Code [integration][vscode] extension built by the commu
[vscode]: https://marketplace.visualstudio.com/items?itemName=radicle-ide-plugins-team.radicle
## Monetization & Funding
## Monetization & funding
### What is the monetization strategy for Radicle? Is Radicle free software?
@@ -207,7 +207,7 @@ The Radicle team is funded by [Radworks][radworks]. To date, around $7m has been
## Legal
### Am I liable as a Node Operator?
### Am I liable as a node operator?
Node operators should consult applicable local regulations. Radicle is free and open-source software; the project does not provide legal advice.
+9 -9
View File
@@ -13,11 +13,11 @@ subtitle: A quick start guide to getting up and running with Radicle
<Meta title="Getting Started | Radicle" description="A quick start guide to installing Radicle, creating your identity, and opening your first issue and patch." canonical="https://radicle.dev/guides/quick-start" />
# Getting Started with Radicle
# Getting started with Radicle
This quick start guide will take you through the basic installation and usage of the Radicle toolchain.
## Installing the Radicle Toolchain
## Installing the Radicle toolchain
Radicle is an ecosystem for code collaboration over a decentralized network.
You can start by installing the command-line toolchain, which includes:
@@ -92,7 +92,7 @@ Currently, the best way to install on Windows is building it [from source](#from
Pre-built binaries and verification instructions are available on the [download page](/download).
## Creating Your Radicle Identity
## Creating your Radicle identity
Before using Radicle, you need to create an identity — a cryptographic key pair that uniquely identifies you and your node on the network:
@@ -137,7 +137,7 @@ did:key:z6Mkux1...
> Radicle does not currently support using a single identity across multiple devices, nor rotating keys.
> Each device requires its own identity.
## Your Node and the Network
## Your node and the network
Radicle is a decentralized code forge — there is no central server.
You participate in the network by running a node, which connects to other nodes to discover and replicate repositories.
@@ -185,7 +185,7 @@ $ rad node stop
[systemd-service]: https://radicle.network/nodes/iris.radicle.network/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/tree/systemd/user/radicle-node.service
## Your First Repository
## Your first repository
Radicle is built on top of Git, so any existing Git repository can be published to the network.
To publish your first repository, you can navigate to the repository and run `rad init`.
@@ -253,7 +253,7 @@ $ rad sync
> Private repositories are only replicated to nodes you explicitly allow.
> See the [User Guide](/guides/user#3-selectively-revealing-repositories) for details on managing access.
## Cloning a Repository
## Cloning a repository
You can clone any repository from the network using its Repository ID (RID).
For example, to clone Heartwood, the Radicle protocol implementation itself:
@@ -275,7 +275,7 @@ $ rad clone rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
This fetches the repository from connected peers and creates a working copy, just like `git clone`.
The difference is that Radicle will first ask the network for the repository, and clone it from the first available node.
## Your First Issue
## Your first issue
Once you are working within a Radicle repository, it is easy to open an issue, whether your node is running or you are offline.
@@ -305,7 +305,7 @@ Here is an example of an issue in the `heartwood` repository:
╰───────────────────────────────────────────────────────────────────╯
```
## Your First Patch
## Your first patch
At this stage, you will likely want to propose changes to a repository.
As mentioned before, Radicle is built on top of Git, which means your `git` (or `jj`) workflow does not need to change too much.
@@ -381,7 +381,7 @@ $ git push rad patches/76f1369e7bab4126e97b175bcddea58f55f3c741
Alternatively, you can create an upstream branch that points to `patches/76f1369e7bab4126e97b175bcddea58f55f3c741`.
In fact, `rad patch checkout` will do this for you.
## Next Steps
## Next steps
Now you know enough about Radicle to be dangerous!
+21 -21
View File
@@ -14,7 +14,7 @@ subtitle: How Radicle works under the hood
<Meta title="Protocol Guide | Radicle" description="Gossip, replication, identity, and the data structures behind Radicle." canonical="https://radicle.dev/guides/protocol" />
# Radicle Protocol Guide
# Radicle protocol guide
Heartwood, the latest generation of the [Radicle](/) protocol establishes a sovereign data network for code collaboration and publishing, built on top of [Git][git]. In Radicle, users maintain local copies of their repositories of interest and related social artifacts such as issues and patches. Instead of depending on a centralized service like GitHub, each participant in Radicle operates a node that is capable of running on a personal computer, and is connected via a peer-to-peer network.
@@ -39,7 +39,7 @@ Radicle is a [peer-to-peer][peer-to-peer] system, which means that there is no t
<aside> In the peer-to-peer model, nodes act as <em>both clients and
servers</em>. </aside>
### Seeding Repositories
### Seeding repositories
Whenever a user clones, initializes, or opts to seed a repository, their node’s seeding policy is changed to reflect their choices. This policy establishes the repositories they are interested in and sets the rules for data retention, and synchronization, allowing users to have direct control over which repositories are kept on their device and offered to the network.
@@ -49,7 +49,7 @@ The typical end-user may choose to only seed the repositories they are actively
href="/guides/seeder">Radicle Seeder’s Guide</a>.
</aside>
### Node Identifiers (NIDs)
### Node identifiers (NIDs)
<aside class="kicker"> DIDs are a new identifier standard established by the
W3C. </aside>
@@ -72,7 +72,7 @@ It is important to safeguard one’s private key, as if it is either lost or com
<aside> In the Radicle protocol, the terms “Node ID”, “Peer ID”, and “Public
Key” all refer to the same thing and can be used interchangeably. </aside>
### Running a Node
### Running a node
To run a node and connect to the network, users install Radicle client software that is lightweight and suitable for use on both end-user devices and seed nodes. The reference implementation can be found in the Radicle [Heartwood][heartwood] repository, and is actively maintained by a small team of engineers.
@@ -85,7 +85,7 @@ The Radicle _stack_ is comprised of both the network client and a command line i
<aside> For a guided install of the Radicle stack, check out the <a
href="/guides/user">user guide</a>. For reproducible binaries and verification, see the <a href="/download">download</a> page. </aside>
## Peer-to-peer Protocol
## Peer-to-peer protocol
Radicle adopts a local-first, peer-to-peer (P2P) architecture, which draws inspiration from Secure Scuttlebutt (SSB) and Bitcoin’s [Lightning Network][ln].
@@ -100,7 +100,7 @@ Unlike SSB’s focus on social networking via append-only logs, Radicle focuses
<figcaption>A set of connected peers forming a gossip network.</figcaption>
</figure>
### Gossip Protocol
### Gossip protocol
The Radicle networking layer is designed as a gossip protocol, where messages are relayed between peers to build routing tables that aid in repository discovery and replication. The core functionality is achieved with three message types, each fulfilling a distinct role:
@@ -145,7 +145,7 @@ Each announcement includes the originating _Node ID_ along with a _cryptographic
> **Tip**: Refer to [RIP-1][rip-1] to learn more details about Radicle’s networking protocol.
### Transport Encryption & Privacy
### Transport encryption & privacy
Connections between peers in the Radicle network are encrypted using a [Noise][noise] protocol handshake. This begins with two peers performing a [Diffie-Hellman][ecdh] key exchange to agree on a shared session key that is used for the duration of the connection.
@@ -186,7 +186,7 @@ href="https://en.wikipedia.org/wiki/Multiplexing">multiplexing</a>. </aside>
<figcaption>Connection multiplexing in Radicle.</figcaption>
</figure>
### Bootstrap Nodes
### Bootstrap nodes
A node joining the network for the first time will not know any peers. Hence, it’s useful to pre-configure network clients with addresses of well-known nodes that can be used to initiate or _bootstrap_ the peer discovery process and build an address book.
@@ -194,7 +194,7 @@ Radicle’s reference implementation is pre-configured with two bootstrap nodes
In the bootstrapping process, nodes connect to an initial set of bootstrap nodes and once they establish a connection, use the regular peer discovery mechanism to find more peers.
### Federation vs. Peer-to-peer
### Federation vs. peer-to-peer
Federation allows for a degree of sovereignty, as each node can set its content policies, but user experience and identity are ultimately tied and mediated by these nodes’ administrators rather than by the users themselves.
@@ -229,7 +229,7 @@ The identity document is where repository permissions and ownership are defined,
Repositories are managed and owned by what are called _delegates_. A delegate is an individual, group, or bot, identified by a [DID][did]. Delegates are responsible for critical tasks such as merging patches, addressing issues, and modifying repository permissions. A repository always begins with one delegate, its creator, and can eventually grow to multiple delegates.
### Identity Document
### Identity document
Before a repository can be published on Radicle, it needs to be initialized with an _identity document_. This JSON document, stored under the `refs/rad/id` reference in Git, encapsulates key metadata such as the repository’s name, description, and default branch. It also includes the DIDs of the repository’s delegates and the _threshold_ of delegate signatures required to authorize changes to the repository’s default branch.
@@ -254,7 +254,7 @@ Here’s an example of the identity document for the [heartwood][heartwood] repo
}
```
### Private Repositories
### Private repositories
Radicle supports **private repositories** where access is restricted to a designated group of trusted peers. This is achieved by setting the `visibility` attribute in the identity document. For example, the following snippet sets the visibility to _private_, while also allowing a specific peer to have access to the repository.
@@ -272,7 +272,7 @@ This ensures only nodes in the privacy set can replicate and access the data, ma
Note that repository delegates _always_ have access to their private repositories.
### Repository Identifier (RID)
### Repository identifier (RID)
To ensure uniqueness and easy identification of repositories, a stable and globally unique identifier, known as the Repository Identifier (RID), is assigned to each repository. The RID is deterministically derived from the initial version of the repository’s identity document. This process involves using Git’s `hash-object` function to produce a 160-bit SHA-1 digest of the document. This is then encoded using [multibase][mb] encoding with the `base-58-btc` alphabet, and prefixed with `rad:`, making it a valid [URN][urn]:
@@ -288,13 +288,13 @@ Since the RID is derived from the _initial_ version of the repository’s identi
> **Tip**: Refer to [RIP-2][rip-2] for more details about how repository identity works in the Radicle protocol.
## Local-First Storage
## Local-first storage
Storage is designed in such a way that it’s easy to transfer data between peers over the network using an unmodified Git protocol. Radicle repositories are simply Git repositories stored in a special location on disk. Peer data is stored within the same repository using Git [namespaces][gns], where Node IDs are used as the namespace. This allows storage to be managed through a partitioned approach where each user maintains their own _namespace_ of a repository, as well as namespaces of other users they have an interest in, all within the same Git repository. These copies are then shared among users across the network.
We can view a peer’s namespace as their “soft-fork” of the repository. It is their own space for making changes to the repository without affecting other namespaces. The peer is the _sole owner and writer_ of this namespace, identified, and verified, by their Node ID.
### Working vs. Stored Copy
### Working vs. stored copy
Storage is accessed directly by the node to report its inventory to other nodes, and by the end user through either specialized tooling or the `git` command line tool. Users are typically interacting with two repository copies: the _working copy_, and a remote _stored copy_ that is interacted with via `git push` and `git fetch`, using Radicle’s [git-remote-helper][grh].
@@ -307,7 +307,7 @@ Changes to the stored copy are automatically propagated to the network when the
<figcaption>Synchronizing the working copy with the stored copy of a repository.</figcaption>
</figure>
### Storage Layout
### Storage layout
Radicle’s storage layout is designed to support multiple repositories and multiple peers per repository. Each repository is a _bare_ Git repository, stored under a common base directory, identified uniquely with its Repository ID or RID. Instead of each of the repository’s peers storing data in a separate Git repository with a separate [object database][git-odb] (ODB), peer data is stored within the same Git repository using Git [namespaces][gns].
@@ -345,7 +345,7 @@ Though this storage tree is browsable by the user with standard file system comm
> **Tip**: Refer to [RIP-3][rip-3] to learn more about storage in the Radicle protocol.
### Git URL Scheme
### Git URL scheme
The Radicle protocol uses its own URL scheme to point to specific repository namespaces in the network. This allows the Git `fetch` and `push` commands to operate on the correct namespace when fetching or pushing code.
@@ -372,11 +372,11 @@ If a Node ID is not specified in the URL, Git will interact with the repository
references.</figcaption>
</figure>
## Trust through Self-Certification
## Trust through self-certification
Unlike centralized forges such as GitHub, where repositories are deemed authentic based on their location (e.g. `https://github.com/bitcoin/bitcoin`), in a decentralized network like Radicle, location is not enough. Instead, we need a way to automatically verify the data we get from _any given location_. This is because peers in a decentralized network may be dishonest. Radicle’s approach hinges on the self-certifying nature of its repositories, anchored in the repository [identity document](#identity-document).
### Canonical Branches
### Canonical branches
When repositories are hosted in a known, trusted location, updating the repository’s canonical branch (eg. `master`) is simply a matter of pushing to that repository’s branch. Permission to push is granted to a small set of maintainers, and any one maintainer is allowed to update the branch.
@@ -384,13 +384,13 @@ In Radicle, lacking a central location where repositories are hosted, the canoni
> **Note**: Currently, only the branch specified under the `defaultBranch` attribute of the identity document is set automatically based on a signature threshold. In the future, additional branches may be supported.
### Self-certifying Repositories
### Self-certifying repositories
Together, a repository’s RID and its identity document create a cryptographic proof that serves as the basis for verifying all repository states leading up to its current state. For this reason, we say that Radicle repositories are _self-certifying_: the process of verification doesn’t require any inputs other than the repository itself.
For repositories to be self-certifying, delegates authenticate every change to the repository data and metadata via cryptographic signatures. This includes all Git references published to the network.
#### Signed Refs
#### Signed refs
To enable the verification of Git references beyond commits to the source code, Radicle automatically signs the entirety of a node’s references every time they change. This signature is then placed in a Git blob under a special branch referenced under `refs/rad/sigrefs`, along with the references that were signed.
@@ -426,7 +426,7 @@ through an <em>id</em> COB. </aside>
COBs are identified by a unique type name in [reverse domain name notation][reverse-dns] and a unique Object ID.
### Concurrency & Consistency
### Concurrency & consistency
In a system with no central server, operation concurrency is the norm. If two users comment on an issue at the same time, those comments will reach peers in the network at different times and in different orders. To maintain a good user experience, it’s important that these factors don’t determine the issue’s final state. All users must eventually converge to the same exact state and see the same thing.
+7 -7
View File
@@ -14,7 +14,7 @@ subtitle: How to run a Radicle seed node
<Meta title="Seeder Guide | Radicle" description="Run a public seed node to keep repositories available 24/7." canonical="https://radicle.dev/guides/seeder" />
# Radicle Seeder Guide
# Radicle seeder guide
To seed is to give back. By seeding repositories on the Radicle network, you offer bandwidth, storage, and data availability to Radicle users.
@@ -36,7 +36,7 @@ Therefore, a healthy peer-to-peer network necessitates at least _some_ highly av
> By running a _permissive_ node (see below for further explanation), you are contributing to the growth and resilience of the Radicle network, but it is important to be aware of the potential implications of hosting data in a permissionless network. Use your best judgment. If you have any concerns, consider starting with the selective seeding policy, described in the following section, and expanding as you become more comfortable with the network.
## Getting Started
## Getting started
For this guide, we’ll focus on setting up a seed node using `systemd`. If you’re running a different service manager, you should be able to follow along just fine, as we’ll be explaining the steps. Using a service manager is not required, but highly recommended.
@@ -127,7 +127,7 @@ Once your profile is initialized, a decentralized identifier (DID) will be outpu
You can view information about your Radicle profile by running `rad self`. The `--nid` and `--alias` flags can be used to return the Node ID and alias.
## Configuring Your Node
## Configuring your node
There are a couple of things we need to set up a seed node.
@@ -291,7 +291,7 @@ rad node config --addresses
Share this with others, and they will be able to connect to your node using `rad node connect <address>`, or by adding your address to their configuration, under the `node.connect` field.
#### DNS-Based Service Discovery
#### DNS-based service discovery
If you would like to facilitate discovery of your node via DNS, you can do so via [DNS-Based Service Discovery (DNS-SD)][dnssd]. This requires you to set three DNS records per node you are running.
@@ -315,7 +315,7 @@ With these records set, anyone can discover your nodes from the domain name `rad
To find out more about the the interpretation of `SRV` records, refer to [RFC 2782][srv].
## Running Your Node
## Running your node
Before setting up your node as a system service, it’s a good idea to run it once to make sure everything is working properly. Enter the following command to start your node in the foreground:
@@ -407,7 +407,7 @@ If you are running a firewall, ensure that port `8776` is open for TCP connectio
> It’s recommended to run a basic firewall to further lock down your server, using something like `iptables`, though this is out of scope for this guide.
## Running the HTTP Daemon
## Running the HTTP daemon
In the prior sections, we set up `radicle-node`, a background process that actively and continuously discovers and replicates repositories on the network, based on your seeding policy. This node allows users to collaborate, host, share, and publish repositories on the network via the Radicle CLI or any compatible application. However, at this stage, the repositories on your seed node cannot be browsed or viewed without cloning them first, using the Radicle CLI. To enable web browsing of the content of your seed node, the Radicle HTTP Daemon `radicle-httpd` needs to be deployed alongside `radicle-node`.
@@ -502,7 +502,7 @@ You should now be able to visit your seed node via any Radicle web frontend as w
> On some distributions, installing `caddy` will start the system service automatically. If you’re not able to connect to your HTTP daemon from the outside, try running `systemctl reload caddy` after you’ve updated the configuration.
## You’re All Set
## You’re all set
If you got this far, congratulations, you now have a Radicle seed node up and running!
+5 -5
View File
@@ -14,7 +14,7 @@ subtitle: A fantastic journey through the Radicle universe
<Meta title="User Guide | Radicle" description="Create an identity, open patches, manage issues, and collaborate from the CLI." canonical="https://radicle.dev/guides/user" />
# Radicle User Guide
# Radicle user guide
Software is _the_ fundamental way in which we interface with data that comprises our current reality, and code is the language of software. Most software systems were created through a collaborative process involving multiple people. If we accept that software is important and collaborative by nature, then a shared system for communicating about code and collaborating is needed. This system shouldn’t be owned by one company, as code is too important to be monopolized.
@@ -47,7 +47,7 @@ We’ve created this Radicle Guide to initiate you as a settler of our network t
<aside> The Radicle manual can be accessed by entering <code>man
rad</code> from your command line, after installing Radicle. </aside>
## 1. Getting Started
## 1. Getting started
One of the important facts to understand about Radicle is that it is a peer-to-peer protocol, which is uncommon when it comes to software you typically rely on. Most collaboration technologies are hinged upon a client-server model, where you’re entrusting your data and social interactions to a single entity that is managing a bunch of servers or data centers. This paradigm is transformed in a peer-to-peer protocol, where every user of the protocol is a _peer_, participating equally. Peers on the Radicle network are also referred to as **nodes**, and it doesn’t matter what you are doing -- whether you’re publishing repositories or discussing issues -- you have to run a node.
@@ -1221,7 +1221,7 @@ And, that’s a wrap! You now know the most relevant nitty gritty details of how
_One thing to keep in mind is that Radicle doesn’t have advanced code review features yet for patches, but that is coming in a near-term release._
## 3. Selectively Revealing Repositories
## 3. Selectively revealing repositories
In his influential work, [A Cypherpunk’s Manifesto][cyph-man] (1993), Eric Hughes eloquently encapsulated the essence of privacy, stating: **_Privacy is the power to selectively reveal oneself to the world._** This notion of self-determination and control over one’s personal information stands in stark contrast to the reality of using “private repository” features on traditional centralized code forges. In those systems, privacy is merely an illusion maintained by terms of service agreements, as data is stored in cleartext, fully accessible to the platform’s employees, vulnerable to potential misuse or leaks, and subject to external pressures such as government requests. Users are left with no real control, forced to blindly trust that their code and data won’t be viewed, exploited, or even used without consent for purposes like training large language models.
@@ -1603,7 +1603,7 @@ By leveraging Radicle’s private repositories and the Tor network, we protected
While Mixed Mode allows us to connect to Tor nodes and traverse NATs, there are two additional configurations that offer more comprehensive network privacy through Tor, at the expense of network latency. These options route all Radicle traffic through the Tor network, including to nodes that are not configured with Tor.
#### Full Proxy Mode
#### Full proxy mode
Full Proxy Mode routes all traffic through Tor for maximum anonymity.
@@ -1637,7 +1637,7 @@ Then, we change the `mode` for `.onion` addresses to `forward`, and remove the `
The `listen` and `externalAddresses` configuration doesn’t change.
#### Transparent Proxy Mode
#### Transparent proxy mode
If you’ve already set up a fully transparent Tor proxy on your network, simply omit the global proxy configuration, and set the `.onion` configuration to `forward`:
+5 -5
View File
@@ -11,7 +11,7 @@ export interface Guide {
// Learn page, and the next entries fill the small guide grid beneath it.
export const guides: Guide[] = [
{
title: "Getting Started",
title: "Getting started",
description:
"New to Radicle? This quick-start walks you through installing the stack, creating your identity, and opening your first patch.",
href: "/guides/getting-started",
@@ -20,7 +20,7 @@ export const guides: Guide[] = [
video: false,
},
{
title: "Protocol Guide",
title: "Protocol guide",
description:
"Gossip, replication, identity, and the data structures behind it all.",
href: "/guides/protocol",
@@ -29,7 +29,7 @@ export const guides: Guide[] = [
video: false,
},
{
title: "Seeder Guide",
title: "Seeder guide",
description: "Run a public seed node to keep repositories available 24/7.",
href: "/guides/seeder",
image: "/marketing/images/learn/seeder.jpg",
@@ -37,7 +37,7 @@ export const guides: Guide[] = [
video: false,
},
{
title: "User Guide",
title: "User guide",
description:
"Create an identity, open patches, manage issues, and collaborate from the CLI.",
href: "/guides/user",
@@ -55,7 +55,7 @@ export const guides: Guide[] = [
video: false,
},
{
title: "Custom Domains on Radicle Garden",
title: "Custom domains on Radicle Garden",
description:
"Set up a custom domain for your repositories on Radicle Garden.",
href: "https://www.youtube.com/watch?v=KDbajeSTtjk",
+4 -4
View File
@@ -35,10 +35,10 @@ const docsTitles = new Map<DocsPage, string>([
["faq", "FAQ"],
["glossary", "Glossary"],
["download", "Download"],
["guides/getting-started", "Getting Started"],
["guides/protocol", "Protocol Guide"],
["guides/seeder", "Seeder Guide"],
["guides/user", "User Guide"],
["guides/getting-started", "Getting started"],
["guides/protocol", "Protocol guide"],
["guides/seeder", "Seeder guide"],
["guides/user", "User guide"],
]);
export function docsTitle(page: DocsPage): string[] {