OxiCloud
☁️ Ultra-fast, secure & lightweight self-hosted cloud storage — your files, photos, calendars & contacts, all in one place. Built in Rust.
Install / Use
/learn @DioCrafts/OxiCloudREADME
NextCloud was too slow on my home server. So I built OxiCloud — a complete cloud platform written in Rust that runs on minimal hardware and stays out of your way.

OxiCloud vs NextCloud
| Metric | OxiCloud | NextCloud | |--------|----------|-----------| | Language | Rust (compiled, zero-cost abstractions) | PHP (interpreted) | | Docker image | ~40 MB (Alpine, static binary) | ~1 GB+ (Apache + PHP + modules) | | Idle RAM | ~30–50 MB | ~250–512 MB | | Cold start | < 1 s | 5–15 s | | CPU at idle | ~0 % | 1–5 % (cron, background jobs) | | Min. hardware | 1 vCPU / 512 MB RAM | 2 vCPU / 2 GB RAM (recommended) | | Concurrent uploads | Parallel chunked (TUS-like), async I/O | Sequential PHP workers | | File dedup | SHA-256 content-addressable, ref-counting | None (each user = full copy) | | DB connections | Dual pool (user + maintenance) | Single pool, background jobs compete | | LTO + PGO | Fat LTO, codegen-units=1, opt-level=3 | N/A (interpreted) | | Dependencies | Single binary + PostgreSQL | PHP, Apache/Nginx, Redis, Cron, … | | WebDAV | Built-in (RFC 4918, PROPFIND streaming) | Built-in | | CalDAV / CardDAV | Built-in | Via apps | | WOPI (Office editing) | Built-in (Collabora / OnlyOffice) | Via apps | | OIDC / SSO | Built-in (Keycloak, Authentik, …) | Via apps |
Note: NextCloud is a mature, feature-rich ecosystem. OxiCloud targets users who prioritise raw performance, simplicity, and low resource usage over plugin breadth.
Features
Storage & Files
- Upload / download / organise — drag-and-drop, multi-file, grid & list views
- Chunked uploads — TUS-like protocol, parallel chunks, resumable, MD5 integrity
- File deduplication — SHA-256 content-addressable blobs with automatic ref-counting
- Adaptive compression — zstd / gzip selected per MIME type
- Trash bin — soft-delete, restore, auto-purge by retention policy
- Favourites & recent files
- Full-text search — by name, type, date range, size, recursive subtree (ltree)
- MIME magic-byte detection —
infercrate, not just extension guessing - Inline preview — images, PDF, text, audio & video player modal
- Thumbnails & transcoding — WebP / AVIF on-the-fly via
imagecrate
Protocols
- WebDAV — RFC 4918, streaming PROPFIND, locking, compatible with all major clients
- CalDAV — calendar sync (Thunderbird, GNOME Calendar, iOS, DAVx⁵, …)
- CardDAV — contacts sync with vCard support
- WOPI — edit Office docs in Collabora Online or OnlyOffice
- REST API — complete JSON API for all operations
Security & Auth
- JWT authentication with refresh tokens
- Argon2id password hashing
- OIDC / SSO — Keycloak, Authentik, Authelia, Google, Azure AD…
- Role-based access — admin / user, per-folder permissions
- Storage quotas per user
- Shared links with optional password protection
Infrastructure
- Single binary — no runtime, no interpreter, no framework overhead
- ~40 MB Docker image (Alpine)
- Dual DB pool — dedicated maintenance pool so background tasks never starve user queries
- LTO-optimised release — fat LTO, 1 codegen-unit,
opt-level = 3, stripped - Write-behind caching (moka) — sub-millisecond hot reads
- 112 automated tests —
cargo teston every push (CI) - 9 languages — EN, ES, DE, FR, IT, PT, NL, ZH, FA
Feature Status
| Feature | Status | Notes | |---------|--------|-------| | File storage & upload | ✅ Working | Chunked uploads, deduplication, thumbnails | | WebDAV | ✅ Working | Fully compatible with major clients | | CalDAV (Thunderbird, iOS) | ✅ Working | Calendar sync functional | | CardDAV (Thunderbird, iOS) | ✅ Working | Contacts sync functional | | DAVx⁵ (Android) | ⚠️ Partial | File sync works; calendar/contacts in progress | | WOPI / Office editing | ✅ Working | Collabora/OnlyOffice integration | | OIDC / SSO | ✅ Working | Keycloak, Authentik, Google, Azure AD | | Trash / recycle bin | ✅ Working | Soft-delete with restore | | Full-text search | ✅ Working | Recursive subtree search | | Shared links | ✅ Working | Optional password protection | | Desktop sync client | ❌ Planned | Not yet available | | Android / iOS app | ❌ Planned | Not yet available | | End-to-end encryption | ❌ Planned | Roadmap item |
Note: The DAVx⁵ Android app currently works for file sync via WebDAV, but calendar and contacts sync via CalDAV/CardDAV is still being refined. Use Thunderbird or iOS native clients for full CalDAV/CardDAV support.
Quick Start
Docker (recommended)
git clone https://github.com/DioCrafts/oxicloud.git
cd oxicloud
# Copy and optionally edit environment
cp example.env .env
docker compose up -d
Open http://localhost:8086. That's it.
If you want to access the server remotely set the OXICLOUD_BASE_URL to your server's domain/port or the authentication will fail after setting up the admin user.
From source
Requires Rust 1.93+ and PostgreSQL 13+.
git clone https://github.com/DioCrafts/oxicloud.git
cd oxicloud
# Configure database
echo "DATABASE_URL=postgres://user:pass@localhost/oxicloud" > .env
# Build optimised binary
cargo build --release
# Start the server (migrations run automatically)
cargo run --release
Client Setup
OxiCloud speaks standard protocols — any WebDAV / CalDAV / CardDAV client works:
| Client | Protocol | URL |
|--------|----------|-----|
| Windows Explorer | WebDAV | http://host:8086/webdav/ |
| macOS Finder | WebDAV | http://host:8086/webdav/ |
| Nautilus / Dolphin | WebDAV | dav://host:8086/webdav/ |
| Thunderbird (calendar) | CalDAV | http://host:8086/caldav/ |
| Thunderbird (contacts) | CardDAV | http://host:8086/carddav/ |
| DAVx⁵ (Android) | CalDAV + CardDAV | http://host:8086/ |
| GNOME Calendar | CalDAV | http://host:8086/caldav/ |
| GNOME Contacts | CardDAV | http://host:8086/carddav/ |
| Collabora / OnlyOffice | WOPI | See WOPI docs |
For detailed setup guides: WebDAV · CalDAV · CardDAV · OIDC/SSO
Architecture
Clean / Hexagonal architecture — each layer depends only on the one below:
┌───────────────────────────────────────────────────────────────┐
│ Interfaces │ REST API, WebDAV, CalDAV, CardDAV, WOPI │
├───────────────────────────────────────────────────────────────┤
│ Application │ Use cases, DTOs, port definitions │
├───────────────────────────────────────────────────────────────┤
│ Domain │ Entities, business rules, repository traits │
├───────────────────────────────────────────────────────────────┤
│ Infrastructure│ PostgreSQL, filesystem, caching, auth │
└───────────────────────────────────────────────────────────────┘
Swap the database, add a new protocol, or change auth — without touching business logic.
For a deep dive: Internal Architecture · Caching · DB Transactions
Configuration
All config via environment variables (see example.env):
| Variable | Default | Description |
|----------|---------|-------------|
| OXICLOUD_STORAGE_PATH | ./storage | Root directory for file storage |
| OXICLOUD_SERVER_PORT | 8086 | HTTP listen port |
| OXICLOUD_DB_CONNECTION_STRING | — | PostgreSQL connection string |
| OXICLOUD_JWT_SECRET | random | Token signing key (set in production!) |
| OXICLOUD_OIDC_ENABLED | false | Enable OpenID Connect SSO |
| OXICLOUD_WOPI_ENABLED | false | Enable Collabora / OnlyOffice editing |
| OXICLOUD_ENABLE_AUTH | true | Toggle authentication |
| OXICLOUD_ENABLE_TRASH | true | Toggle trash / recycle bin |
Full reference: example.env · Deployment guide · OIDC examples
Development
cargo build # Dev build
cargo run # Run locally
cargo test --workspace # 112 tests
cargo clippy -- -D warnings # Lint (zero warnings policy)
cargo fmt --all --check # Format check
RUST_LOG=debug cargo run # Debug logging
