Skip to content
OpenCSGsPublic

About

A server-first source control system. History, merges and rebases are computed on the server; clients stay online and fetch on demand. Rust server (scion) and client (scn).

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

Scion

English | 简体中文

Server-first source control for monorepos, coding agents and CI.

Scion is a Rust implementation of the design in Anthropic's Redesigning source control: history, merges and rebases are computed on the server, clients stay online and fetch immutable objects on demand, and a checkout holds only the paths a job needs. It ships a server, scion, and a client, scn, over a language-neutral protocol, and is built by OpenCSG for starhub-server and CSGLite.

Scion standalone architecture

Benchmarks

CSG Scion vs. Git and CarterT27/scion on the OpenScion workloads, one Apple M5. Median ms, lower is better.

Scenario Git, 1k files CarterT27, 1k CSG Scion, 1k Git, 10k files CarterT27, 10k CSG Scion, 10k
Import directory 365.0 32.8 30.6 3,364.4 413.5 354.9
Commit one changed file 28.4 29.2 13.9 250.8 142.5 35.5
Full clone / checkout 243.0 115.8 52.2 2,361.9 1,047.3 589.4
One-directory clone / checkout 60.3 25.0 23.1 172.9 123.1 49.5

Fastest in every cell: 2–12× faster than Git, 1.1–4× faster than CarterT27/scion on checkouts and commits.

Real repository: pingdotgg/t3code, 5,573 commits and 28,068 files; CSG Scion on PostgreSQL and MinIO. The M4 Pro columns are from CarterT27/scion's README.

Scenario Git, M5 CSG Scion, M5 Git, M4 Pro CarterT27, M4 Pro
Full checkout (28,068 files) 2.13 s 2.20 s 2.90 s 14.96 s
Checkout of apps/web (1,521 files) 0.173 s 0.178 s 0.21 s 0.97 s
Clean status 98 ms 75 ms — —
Full history: Git's clone, Scion's import 3.96 s 103 s + 42 s repack 3.56 s 23 min 18 s
Storage of the history 557 MB pack 247 MB in MinIO + 90 MB in PostgreSQL — —

Method and more: OpenScion workloads · starhub-server · component benchmarks

How it works

flowchart LR
    scn["scn<br/>client"] --> daemon["scn daemon<br/>local cache"] --> cache["scion cache<br/>regional cache"] --> server["scion server<br/>commit · land · history"]
    server --> meta[("SQLite / PostgreSQL")]
    server --> blobs[("Local dir / S3")]
Loading

Commits are created and rebased on the server; clients fetch only the files they check out; history needs no clone. Also: scn import git with git SHAs kept, ACLs by repository, ref and path, and redaction.

Quick start

# Install the client and run the server as a service on 127.0.0.1:7080 (Linux or macOS)
curl -fsSL https://raw.githubusercontent.com/OpenCSGs/scion/main/install.sh | sh -s -- --server

scn repo create http://127.0.0.1:7080/mono
scn clone http://127.0.0.1:7080/mono && cd mono
echo hello > README.md
scn commit -m "add readme"
scn land                          # move main to the commit; the server rebases if main moved
scn log

Without --server, the script installs only the client, scn. From source instead: cargo run -p scion -- server --lite --data-dir ./.scion-data and cargo install --path client/cli.

Know git? Most git commands work in scn as you type them, starting with scn clone http://host/REPO: see git commands in scn for the full list.

A tour of scion and scn goes through the everyday commands, and coming from git explains how the model differs.

Deployment

Option 1: install script (Linux or macOS)

# Client only
curl -fsSL https://raw.githubusercontent.com/OpenCSGs/scion/main/install.sh | sh
# Client and server, as a service on 127.0.0.1:7080
curl -fsSL https://raw.githubusercontent.com/OpenCSGs/scion/main/install.sh | sh -s -- --server
# For a team: listen on all interfaces with authentication on; prints the first admin token
curl -fsSL https://raw.githubusercontent.com/OpenCSGs/scion/main/install.sh | sh -s -- --server --listen 0.0.0.0:7080

Runs under systemd on Linux (data in /var/lib/scion) or launchd on macOS (data in ~/Library/Application Support/scion). sh install.sh --help lists the options; release binaries covers installing by hand.

Option 2: Docker, one node (SQLite and a local directory)

docker run -d --name scion -p 7080:7080 -v scion-data:/data opencsghq/scion:latest
docker exec scion scion admin token create --lite --subject admin --group admins   # shown only once

scn login http://localhost:7080 --token scn_pat_…
scn repo create http://localhost:7080/mono

The image is built for linux/amd64 and linux/arm64 and requires authentication. Members of admins manage the server and anyone signed in can read, write and land; to change that, see access control.

Option 3: production (PostgreSQL and S3-compatible storage)

docker run -d --name scion -p 7080:7080 \
  -e SCION_META=postgres://scion:PASSWORD@db:5432/scion \
  -e SCION_BLOBS=s3://scion-objects -e SCION_S3_ENDPOINT=https://s3.example.com \
  -e SCION_S3_ACCESS_KEY_ID=… -e SCION_S3_SECRET_ACCESS_KEY=… \
  opencsghq/scion:latest --log-format json server --listen 0.0.0.0:7080 --auth-required
docker exec scion scion admin token create --subject admin --group admins

Several nodes behind a load balancer share one database and bucket (clusters). To try it all on one machine, deploy/compose starts PostgreSQL, SeaweedFS and the server.

Tokens

Each user or CI job signs in once with scn login SERVER scn_pat_… (or sets SCION_TOKEN). An administrator creates tokens with scion admin token create --subject alice, where alice is the user's name as commands and policies see it, adding --group admins for another administrator or --ttl 90d for expiry:

Deployment Command
install script, Linux sudo -u scion scion admin token create --lite --data-dir /var/lib/scion --subject alice
install script, macOS scion admin token create --lite --data-dir ~/Library/Application\ Support/scion --subject alice
Docker, one node docker exec scion scion admin token create --lite --subject alice
Docker Compose or production docker compose exec scion scion admin token create --subject alice

With an OIDC provider or a GitHub OAuth app configured, people sign in with scn login SERVER in a browser instead. Organizations (scn org), personal namespaces and several authorization sources can be combined: the policy, GitHub teams, and webhooks such as starhub or OPA. Deployment and authentication have the details.

Documentation

Use Deploy · CLI tour · Git commands · Coming from git · Git import · Sparse checkout · Repos · Archives · Browse · Git SHAs
Operate Storage · Clusters · Caching · Auth · Redaction · Events · Observability
Design Server · Client · starhub · Object format · Protocol

Status

  • M1–M4: write path, working copy, history, server-side landing, clusters, caches
  • M5, production hardening: auth, redaction, observability, events, packs and release builds done; YugabyteDB and Helm remain

Details: milestones · roadmap

Development

cargo test --workspace
cargo clippy --workspace --all-targets -- -D warnings

Development describes the repository layout, the dependency rules between crates and the testing requirements (at least 90% coverage of new code).

License

Apache-2.0

About

A server-first source control system. History, merges and rebases are computed on the server; clients stay online and fetch on demand. Rust server (scion) and client (scn).

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages