Shardscape is a cheap, self-hosted S3 alternative built for redundancy across a small number of sites linked by a VPN such as Tailscale. You write to one location at a time; the others act as live mirrors that replicate everything and can serve reads at any time.
Objects are chunked, content-addressed with BLAKE3 and deduplicated globally. Sites converge through a last-write-wins fact log, with no consensus protocol and no quorum, so a site that goes offline for weeks simply catches up when it returns.
$ shardscape init --data-dir /var/lib/shardscape --location-id home --s3-addr 0.0.0.0:8014 --internal-addr 0.0.0.0:8015 --advertise http://100.64.0.1:8015
✓ Generated new Noise keypair
Shardscape site 'home' initialised.
S3 endpoint: http://0.0.0.0:8014
Admin secret key: •••••••••••••••• (shown once)
Cluster secret: ••••••••••••••••
$ shardscape serve --config /var/lib/shardscape/config.toml &
Starting shardscape node (home)
✓ Starting internal (Noise) server on 0.0.0.0:8015
✓ Starting S3 server on 0.0.0.0:8014
$ ssh office 'shardscape join http://100.64.0.1:8015 --secret •••••••• --location-id office'
✓ Joining cluster via http://100.64.0.1:8015...
Joined cluster; existing data will backfill via fact-log sync.
$ aws s3 mb s3://photos --endpoint-url http://localhost:8014
make_bucket: photos
$ aws s3 cp ./vacation s3://photos --recursive --endpoint-url http://localhost:8014
upload: 248 files 100%
$ shardscape status --config /var/lib/shardscape/config.toml
Shardscape site 'home'
live objects: 248
local blocks: 1903 (1.2 GiB)
blocks to pull: 0
peers: 1
$
Illustrative output · real commands