Private Archive privatearchive.xyz
node up · v0.1.0 · self-hosted runners · non-custodial · reproducible build
v0.1.0 linux/amd64 · linux/arm64 · darwin · windows go 1.23

Offsite for the bits
that need to leave
the house.

You already have a NAS, a Proxmox box, three Pis, and a UPS that yells at you on Telegram. Private Archive is the small piece of "not in my house" you've been putting off — without giving anyone your name, your card, or your plaintext.

$ tar xzf privatearchive-linux-amd64.tar.gz
$ ./privatearchive init          # generates X.509 keypair (this IS your account)
$ ./privatearchive backup /srv     # Restic encrypts → Tor → opaque blob offsite
ok snapshot 9af3c2b1 — 412 MiB, 38s
  • + Restic on the client. Server gets opaque ciphertext. No key, no read.
  • + Tor in transit. No exit IP correlation.
  • + mTLS auth. Cert is the account. No password reset.
  • + Monero billing. No KYC, no card.

The path your bytes take.

End-to-end. No intermediate keys. The diagram is the architecture — and it stops where your knowledge needs to stop.

  • The server cannot read your data. It doesn't have the key. You do.
  • No DNS leak, no exit IP, no source IP logged. The .onion is the address.
  • Storage location is intentionally opaque to the client. We hold the bytes. You hold the only thing that matters: the encryption keys.

Plays with what you already run.

It's a single Go binary. No agent, no helper service, no opinion on your stack. If you can run a binary, you can run this.

unit file systemd
[Unit]
Description=Private Archive daemon
After=network-online.target tor.service

[Service]
Type=simple
ExecStart=/usr/local/bin/privatearchive daemon
Restart=on-failure
DynamicUser=yes
ProtectSystem=strict
ReadWritePaths=/var/lib/privatearchive

[Install]
WantedBy=multi-user.target

Drop in. systemctl enable --now privatearchive. Done.

timer cron / systemd.timer
# /etc/cron.d/privatearchive
17 3 * * * root \
  /usr/local/bin/privatearchive backup \
    --tag nightly /srv /etc /home

# or systemd:
# OnCalendar=*-*-* 03:17:00
# RandomizedDelaySec=15m

Exit code is the contract. Non-zero on failure. Pipe to whatever yells at you on Telegram.

restore restic-compatible
# standard restic against your repo
export RESTIC_REPOSITORY=privatearchive:default
export RESTIC_PASSWORD_FILE=/etc/pa/key

restic snapshots
restic restore latest --target /tmp/r
restic forget --keep-daily 7 --keep-weekly 4

The repo format is plain Restic. If we vanish tomorrow, your data still mounts in any vanilla restic client.

Runs anywhere a Go binary runs.
  • linux/amd64
  • linux/arm64 (Pi 4/5, NAS, OPi)
  • darwin/arm64
  • darwin/amd64
  • windows/amd64
  • freebsd/amd64 (unofficial, build from source)

Things we do not collect.

This is the whole list. There is nothing under it. There is no "anonymized analytics" footnote.

identity
  • name
  • email
  • phone
  • address
  • government ID
network
  • source IP
  • exit IP
  • user agent
  • DNS queries
  • device fingerprint
payment
  • card
  • bank
  • billing address
  • real name
  • tax ID
behaviour
  • analytics
  • page views
  • file names
  • backup schedule patterns
  • telemetry from the binary

Pricing.

Pay-as-you-go in XMR. Balance burns down by the second. Top up when needed. No subscription. No commit.

how it works
XMR balance · meters down
  • send XMR to your subaddress — balance goes up
  • daemon runs — balance goes down by the second
  • top up whenever. stop topping up whenever.
  • no monthly bill, no auto-renew, no card on file
what it isn't
no tiers · seats · commit
  • no "starter plan" · no "pro plan" · no upsell path
  • no per-API-request fee, no egress fee, no lifecycle fee
  • no minimum, no contract, no notice period
  • balance hits zero — daemon stops writing. that's it.

Fund the address with XMR. Run the daemon. Walk away when you want. The only thing we will ever ask you for is more XMR — and only if you want to keep going.

Download v0.1.0.

Verify the SHA256SUMS against your own copy before you run anything. Source mirror at git.privatearchive.xyz.

$ curl -O https://privatearchive.xyz/releases/v0.1.0/SHA256SUMS
$ sha256sum -c SHA256SUMS --ignore-missing
privatearchive-linux-amd64.tar.gz: OK
privatearchive-source-v0.1.0.tar.gz: OK