BillionClaw ec09136836 fix(webdav): enforce storage quota on WebDAV PUT uploads
Adds storage quota checking to the WebDAV PUT handler, which was missing
while present in other upload handlers (regular upload and chunked upload).

The quota check happens after the file is spooled to a temp file (so we
know the exact size) but before it's moved to permanent storage. If the
quota is exceeded, the temp file is cleaned up and a 507 Insufficient
Storage error is returned.

Fixes #104
2026-03-17 16:04:20 +08:00
2026-03-12 13:07:19 +01:00
2026-03-11 08:46:12 +00:00
2026-03-08 00:04:36 +01:00

OxiCloud

Self-hosted cloud storage, calendar & contacts — blazingly fast.

License: MIT Latest Release CI Rust Docker Image Size GitHub Stars GitHub Issues Last Commit


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 Dashboard


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 — infer crate, not just extension guessing
  • Inline preview — images, PDF, text, audio & video player modal
  • Thumbnails & transcoding — WebP / AVIF on-the-fly via image crate

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 test on 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

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

Project stats

Metric Value
Rust source files 170
Lines of code ~50 000
Automated tests 112
Documentation pages 35

Documentation

Extensive docs live in doc/:

Topic Link
Deployment & Docker deployment.md
WebDAV integration webdav-integration-guide.md
CalDAV / CardDAV caldav-technical-spec.md · carddav-technical-spec.md
OIDC / SSO setup oidc-integration.md · oidc-config-examples.md
WOPI (Office editing) wopi-integration.md
Chunked uploads chunked-uploads.md
Deduplication deduplication.md
Search search.md
Caching architecture caching-architecture.md
Storage quotas storage-quotas.md
Trash / recycle bin trash-feature-summary.md
Internationalisation i18n.md
Internal architecture internal-architecture.md

Roadmap

Check TODO-LIST.md for the full roadmap. Highlights:

  • File versioning & diff viewer
  • End-to-end encryption
  • Desktop sync client (Rust)
  • Android / iOS app
  • OCR & intelligent tagging
  • Automated workflows

Contributing

The project is actively developed. Contributions welcome!

Read CONTRIBUTING.md before submitting a PR. Follow the Code of Conduct.

License

MIT — see LICENSE.


Star History


Questions? Open an issue. Want to help? PRs welcome.

S
Description
No description provided
Readme MIT 52 MiB
Languages
Rust 63.5%
Hurl 10.2%
TypeScript 8.5%
Svelte 8.2%
Shell 3.8%
Other 5.6%