Theca

Open source · AGPL-3.0 · amd64 and arm64

Your files, on your server.

Theca is a self-hosted cloud storage: a web app, a drive your computer and phone mount over WebDAV, and every file's history, in one Docker image.

A file and its versions · 1 of 6
A file's page: its preview and its versions

Demo: demo@theca.rs / thecademo, reset every hour.

Edit a file. Send and store only what changed.

Theca cuts every file into pieces, called chunks, at points chosen by the content itself. Edit the middle of a file and only the pieces around your edit change. Those are sent and stored; the rest is already there, shared by both versions.

First upload of a 64 MiB file 64 MiB sent
After editing 1 MiB in the middle 2.5 MiB sent
61.5 MiB already there, not sent again
Stored for both versions 64 MiB + 2.5 MiB
Theca
128 MiB as copies
Measured with Theca's upload engine against CE 1.1.0, on random data: how.

Measured, not promised

Measured against CE 1.1.0: a fresh instance from its compose file, files sent by the same upload engine as the web app, what the organization stores read from the server. The data is random, so compression gains nothing: these come from chunking and deduplication alone.

stored for 10 versions of a 1 GiB file, each with 1 MiB edited, against 10 GiB as copies
1 GiB + 34.1 MiB
stored for the same 1 GiB file in two libraries that trust each other
1 GiB
to download the image, amd64 (18.9 MiB for arm64)
19.5 MiB
of memory at rest; answering 1 s after starting
50.6 MiB

How it works

Deduplicated where people trust each other
Within a library, and the dedup namespaces it shares: never across strangers.
Every version, as a tree
Restoring starts a new branch instead of overwriting, and two people editing at once both keep their work.
The server never carries your files
With S3, chunks go straight to the bucket: the server scales with metadata, not bandwidth.
One Rust binary and Postgres
The browser runs the same Rust engine, compiled to WASM. End-to-end encryption is designed in from the start.
A file's page: its preview and its versions

What happens when you upload

  1. 1 · Chunk FastCDC cuts the file where its content says.
  2. 2 · Hash Each chunk is named by its content.
  3. 3 · Look up The server says which it already has.
  4. 4 · Upload Only the new ones, straight to the storage by signed URL.
  5. 5 · Commit A new version in the file's tree; nothing overwritten.

Editions

Available

Community edition

Free and open source (AGPL-3.0). Everything above, on your machine, amd64 or arm64: a Raspberry Pi will do.

Run it yourself
Coming

Hosted

The same Theca, run for you. Not open yet.

Yours to run

The compose file, its secrets, then the setup link in the logs. The guide covers HTTPS, S3, OIDC, WebDAV sync, every setting, backups and upgrades.

Read the self-hosting guide
curl -fsSLO https://raw.githubusercontent.com/theca-cloud/ce/main/docker-compose.yml
# the commands at the top of docker-compose.yml: .env and the secrets
docker compose up -d && docker compose logs theca   # the setup link