Skip to content
Skip to content
Get started
/Developers

Developers

Tech stack & infrastructure

Everything zcrypt is built with, layer by layer, and how each piece is deployed. Versions track the repository; the manifests (go.mod, package.json, Cargo.toml) are the source of truth.

How it's put together

zcrypt is one product across three surfaces: web, desktop, and Android, sharing a single design principle: all encryption happens on your device, and the server only ever handles ciphertext. That principle drives the stack. The backend stays deliberately thin (standard-library Go, no framework), the cryptography lives in code that runs on the client (a Rust core for native, Web Workers for the browser), and the database stores only metadata and encrypted blobs.

The manifests are canonical

Exact versions live in app/backend/go.mod, app/frontend/package.json, and app/core/Cargo.toml. The numbers below reflect the current tree and may drift slightly ahead of a release.

Backend

A stateless HTTP service written in Go with the standard library only, no web framework, just net/http. It brokers the chunked upload/download API, coordinates the storage adapters, and holds no plaintext and no encryption keys.

PieceChoiceWhy
LanguageGo 1.26Fast, statically linked, tiny distroless container.
HTTPStandard library net/httpNo framework: fewer moving parts, easy to audit.
DB driverpgx / pgxpoolRaw SQL against PostgreSQL, no ORM.
AuthJWT (HS256), bcrypt, TOTPAccess/refresh tokens, hashed passwords, 2FA.
Compression / cryptozstd · AES-256-GCMServer-side crypto only wraps platform tokens and re-seals metadata during key rotation; file crypto and compression are client-side.

Web app

The browser client is a Next.js App Router application. The full encryption pipeline runs here in a pool of Web Workers, so compression, encryption, and hashing happen off the main thread: the server never sees a plaintext byte.

PieceChoice
FrameworkNext.js 16 (App Router)
UI runtimeReact 19
LanguageTypeScript 5.7
StylingTailwind CSS
StateZustand
MotionMotion (Framer Motion)
Runtime / package managerBun

Native core & apps

Desktop and Android run zcrypt-core, a shared Rust crate that implements the same zero-knowledge crypto and chunk pipeline as the web workers, compiled to native code and embedded in-process, so there is no subprocess. The native shell is Tauri v2.

PieceChoiceNotes
Core engineRust (zcrypt-core, edition 2021)Crypto, chunk pipeline, local ledger, platform adapters.
Async / HTTPtokio · reqwestConcurrent chunk streaming, direct-to-platform uploads.
ShellTauri v2Native window + OS integration on macOS, Windows, Linux, Android.
Local storeEmbedded SQLite ledgerOffline resume, dedup lookups, sync cursor.

See Desktop app and Android app for how the shared core reaches each platform.

Crypto & compression

The cryptographic format is identical across every surface and pinned by conformance vectors, so a file encrypted in one client decrypts in any other.

ConcernPrimitive
EncryptionAES-256-GCM (authenticated)
Key derivationPBKDF2-HMAC-SHA256, 600,000 iterations
IntegritySHA-256 per chunk + whole-file hash
Dedup MACHMAC-SHA256
Compressionzstd (per-chunk, skipped when it wouldn't help)
SharingX25519 ECIES key-wrapping (keys move, never plaintext)

Data & storage

A PostgreSQL database is the index that ties everything together, users, folders, per-file salts, chunk references, encrypted platform tokens, and shares. It holds no readable file contents and no passphrase. Your actual encrypted bytes never live on zcrypt's infrastructure at all: they go to a storage platform you own.

LayerChoice
DatabasePostgreSQL (Neon serverless)
AccessRaw SQL via pgx / pgxpool, no ORM
Your storage backendsGitHub · GitLab · Hugging Face · Telegram (bring your own)

Infrastructure & hosting

Deployment is intentionally boring and portable. The backend is a small distroless Docker image that runs on any Linux host; nothing about it is tied to a specific provider, which is the point. You can self-host the exact same image (see Self-hosting).

ComponentWhere it runs
FrontendVercel (Next.js)
BackendDistroless Docker image on a cloud Linux VM (provider-agnostic)
DatabaseNeon serverless PostgreSQL
Encrypted file storageYour own GitHub / GitLab / Hugging Face / Telegram accounts

What our infrastructure can and can't see

Because encryption is client-side, our hosting only ever handles ciphertext and metadata. Compromising the frontend, the backend VM, or the database would not expose your files: the keys to decrypt them exist only on your devices.

Where to go next

For how these pieces move data at runtime, read Architecture. To run the whole stack yourself, see Self-hosting, and to build on it, Contributing.