OxiCloud

OxiCloud

Docker app from paulynomial's Repository

Overview

OxiCloud is an ultra-fast, lightweight self-hosted cloud built in Rust. It gives you files, sharing, previews, trash, search, photos, plus calendars and contacts over WebDAV, CalDAV, and CardDAV, with OIDC SSO, per-user quotas, and shared links. OxiCloud needs an EXTERNAL PostgreSQL database (it has no built-in DB) so install a PostgreSQL container first. The schema is created automatically on first start. There is no default login: open the WebUI after the first start and create your admin account.

OxiCloud logo

A fast self-hosted cloud for people who want files, calendars, contacts, and office editing without dragging a heavy stack behind them.

Documentation · Quick Start · Star OxiCloud · Request a Feature · Supported Clients · Project Status

Latest release CI GitHub stars Docker image size Rust 1.93+ MIT license

If OxiCloud saves you setup time, RAM, or complexity, give it a star. If something is missing, ask for a feature or request a docs improvement.

OxiCloud dashboard

Why People Try OxiCloud

OxiCloud is aimed at self-hosters, home labs, and small teams who want the useful parts of a cloud suite without the operational drag of a traditional PHP stack.

What pulls people in:

  • Standard protocols first: WebDAV, CalDAV, and CardDAV are built in
  • Useful product surface already there: files, previews, sharing, trash, search, favorites, and recent items
  • Modern auth and admin basics: OIDC/SSO, quotas, roles, and shared links
  • Better interoperability: native desktop and mobile clients work without custom sync tooling for basic access
  • Lower deployment friction: Docker Compose, environment-based configuration, Helm chart, and Nix module

OxiCloud is not trying to mirror the full plugin ecosystem of Nextcloud. It is designed for a smaller stack, fast startup, and standards-based interoperability.

Quick Start

Docker Compose

Requires Docker and Docker Compose.

git clone https://github.com/AtalayaLabs/OxiCloud.git
cd OxiCloud
cp example.env .env

# If users will access OxiCloud through a domain or reverse proxy,
# set OXICLOUD_BASE_URL in .env before the first login.
docker compose up -d

Open http://localhost:8086.

Run from source

Requires Rust 1.93+ and PostgreSQL.

git clone https://github.com/AtalayaLabs/OxiCloud.git
cd OxiCloud
cp example.env .env

# If PostgreSQL runs on your host instead of Docker, update both
# OXICLOUD_DB_CONNECTION_STRING and DATABASE_URL to use localhost:5432.
cargo run

Deployment details: deployment guide · example.env

What You Get

Area Included
Files Multi-file upload, folders, inline previews, thumbnails, chunked uploads, deduplication, trash
Sync and clients WebDAV, CalDAV, CardDAV, native OS clients, Thunderbird, DAVx5
Security JWT auth, Argon2id, OIDC/SSO, shared links, quotas, admin/user roles
Integrations REST API and WOPI for Collabora or OnlyOffice
Operations Docker image, Docker Compose, env-driven config, PostgreSQL backend
Project tooling Architecture docs, Helm chart, Nix module, CI

Supported Clients

OxiCloud uses standard DAV protocols, so it works with native clients instead of requiring a custom sync stack for basic access.

Use case URL
Files via WebDAV https://your-host/webdav/
Calendars via CalDAV https://your-host/caldav/
Contacts via CardDAV https://your-host/carddav/

Common clients that work well:

  • macOS Finder
  • Windows Explorer
  • GNOME Files and KDE Dolphin
  • Thunderbird
  • Apple Calendar and Contacts
  • DAVx5 on Android

Client setup guides: DAV client setup · WebDAV guide · CalDAV & CardDAV guide

Project Status

OxiCloud is actively developed and already covers the core self-hosted cloud workflow.

Capability Status Notes
File storage and web UI Ready Uploads, previews, sharing, trash, and search
WebDAV Ready Standard file access for desktop and mobile clients
CalDAV and CardDAV Ready Working with Thunderbird, Apple clients, and others
OIDC / SSO Ready Documentation and config examples included
WOPI office editing Ready Works with Collabora or OnlyOffice
DAVx5 Android support Partial File sync works well; calendar and contact behavior is still being refined
Desktop sync client Planned Not yet available
Mobile apps Planned Not yet available
End-to-end encryption Planned Roadmap item

Roadmap: TODO-LIST.md

Help Shape OxiCloud

If you want OxiCloud to get better faster, use the repo like a product feedback loop, not just a code dump.

The best feature ideas usually come from real deployment pain. If you hit friction, open an issue and describe the workflow you want.

Architecture and Deployment

OxiCloud follows a clean, hexagonal architecture so protocol handlers, business logic, and infrastructure stay separated.

  • Backend: Rust + Axum
  • Database: PostgreSQL
  • Configuration: environment variables
  • Default deployment: Docker Compose
  • Additional packaging: Helm chart and Nix module

Architecture docs: internal architecture · caching architecture · database transactions · storage safety

Configuration and Integrations

Start with example.env. The most important settings are:

  • OXICLOUD_BASE_URL for reverse proxies, domains, and external access
  • OXICLOUD_DB_CONNECTION_STRING for PostgreSQL
  • OXICLOUD_OIDC_ENABLED and related settings for SSO
  • OXICLOUD_WOPI_ENABLED and discovery URL for office editing
  • MIMALLOC_PURGE_DELAY=0 for lower idle RSS in constrained environments

Integration docs: OIDC setup · OIDC architecture · OIDC config examples · WOPI integration

Documentation

Development

cargo fmt --all --check
cargo clippy --all-features --all-targets -- -D warnings
cargo test --workspace

Contributing

Contributions are welcome. Read CONTRIBUTING.md before opening a pull request and CODE_OF_CONDUCT.md for community expectations.

If you are not ready to code yet, starring the project and opening a precise feature request is still a meaningful contribution.

Contributors

OxiCloud is a community-driven project, and we appreciate all contributions. Check out the Contributors page to see the amazing people who have helped make OxiCloud better.

Contributors

Star History

Star History Chart

License

MIT. See LICENSE.

OxiCloud is a trademark of the OxiCloud project. All other trademarks are the property of their respective owners.

Install OxiCloud on Unraid in a few clicks.

Find OxiCloud in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for OxiCloud Review the template variables and paths Click Install

Requirements

An external PostgreSQL database is required. Install a PostgreSQL container (for example the official postgres image from Community Applications), create a database and a user, then fill in the Database Connection String field before starting OxiCloud. On first start, open the WebUI and create your admin account.

Download Statistics

25,277
Total Downloads

Related apps

Details

Repository
diocrafts/oxicloud:latest
Last Updated2026-06-16
First Seen2026-06-21

Runtime arguments

Web UI
http://[IP]:[PORT:8086]
Network
bridge
Shell
sh
Privileged
false
Extra Params
--restart=unless-stopped

Template configuration

WebUI PortPorttcp

Host port mapped to the OxiCloud web interface. Browse to http://[UNRAID-IP]:[this port] to reach OxiCloud.

Target
8086
Default
8086
Value
8086
Database Connection StringVariable

PostgreSQL connection string. OxiCloud has no built-in database so it needs an external PostgreSQL container. After installing PostgreSQL, create a database and a role both named oxicloud, then replace HOST-IP with that container address or the Unraid host IP. Example postgres://oxicloud:yourpassword@192.168.1.10:5432/oxicloud . The schema is created automatically on first start.

Target
OXICLOUD_DB_CONNECTION_STRING
Default
postgres://oxicloud:oxicloud@HOST-IP:5432/oxicloud
Value
postgres://oxicloud:oxicloud@HOST-IP:5432/oxicloud
StoragePathrw

Holds all user files (the content-addressable blob store), the auto-generated JWT secret, the full-text search index, and the Tailscale state directory. Must persist across restarts and image updates. For a large file library you can point this at an array share such as /mnt/user/oxicloud instead of the cache-backed appdata path.

Target
/app/storage
Default
/mnt/user/appdata/oxicloud
Value
/mnt/user/appdata/oxicloud
Bind AddressVariable

Interface OxiCloud binds inside the container. Must stay 0.0.0.0 or the container becomes unreachable through the mapped port. Do not change.

Target
OXICLOUD_SERVER_HOST
Default
0.0.0.0
Value
0.0.0.0
Internal Server PortVariable

Port OxiCloud listens on inside the container. Keep it matched to the container side of the WebUI Port mapping above (8086). Change both together if you remap it.

Target
OXICLOUD_SERVER_PORT
Default
8086
Value
8086
JWT SecretVariable

Secret that signs session tokens (HS256). Leave blank to let OxiCloud generate a strong one on first start and persist it inside the Storage volume as .jwt_secret, which survives restarts. Set your own (minimum 32 characters) only if you want a fixed value across redeployments. Generate one with: openssl rand -hex 32

Target
OXICLOUD_JWT_SECRET
Public Base URLVariable

External URL clients use to reach OxiCloud, including the scheme. Set this when access goes through a reverse proxy, a custom domain, or a Tailscale hostname so generated share links and OIDC redirects are correct. Example https://oxicloud.your-tailnet.ts.net or https://cloud.example.com . Leave blank for plain LAN access by IP.

Target
OXICLOUD_BASE_URL
Disable Open RegistrationVariable

Set to true to block public self-registration once you have created your accounts. Recommended for an internet-exposed instance. Leave false while setting up.

Target
OXICLOUD_DISABLE_REGISTRATION
Default
false
Value
false
TimezoneVariable

Container timezone, used for log timestamps. tzdata is installed in the image. Example Europe/Madrid or America/New_York. Leave blank for UTC.

Target
TZ