{"id":25958048,"url":"https://github.com/diocrafts/oxicloud","last_synced_at":"2026-03-09T01:02:14.782Z","repository":{"id":279589750,"uuid":"939308212","full_name":"DioCrafts/OxiCloud","owner":"DioCrafts","description":"☁️ Ultra-fast, secure \u0026 lightweight self-hosted cloud storage — your files, photos, calendars \u0026 contacts, all in one place. Built in Rust.","archived":false,"fork":false,"pushed_at":"2026-03-03T10:49:54.000Z","size":5470,"stargazers_count":2625,"open_issues_count":32,"forks_count":102,"subscribers_count":21,"default_branch":"main","last_synced_at":"2026-03-03T13:38:55.606Z","etag":null,"topics":["cloud","cloud-storage","dropbox","file-share","file-sync","file-upload","nas","nextcloud","nextcloud-alternative","onedrive","open-source","own-your-data","owncloud","platform","privacy","rust","rust-lang","security","self-hosted","webdav"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DioCrafts.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-02-26T10:36:04.000Z","updated_at":"2026-03-03T10:49:58.000Z","dependencies_parsed_at":null,"dependency_job_id":"6cf5c103-79f4-457c-ac40-e333a446b849","html_url":"https://github.com/DioCrafts/OxiCloud","commit_stats":null,"previous_names":["diocrafts/oxicloud"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/DioCrafts/OxiCloud","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DioCrafts%2FOxiCloud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DioCrafts%2FOxiCloud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DioCrafts%2FOxiCloud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DioCrafts%2FOxiCloud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DioCrafts","download_url":"https://codeload.github.com/DioCrafts/OxiCloud/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DioCrafts%2FOxiCloud/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30279765,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-08T20:45:49.896Z","status":"ssl_error","status_checked_at":"2026-03-08T20:45:49.525Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloud","cloud-storage","dropbox","file-share","file-sync","file-upload","nas","nextcloud","nextcloud-alternative","onedrive","open-source","own-your-data","owncloud","platform","privacy","rust","rust-lang","security","self-hosted","webdav"],"created_at":"2025-03-04T17:53:30.223Z","updated_at":"2026-03-09T01:02:14.760Z","avatar_url":"https://github.com/DioCrafts.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"static/oxicloud-logo.svg\" alt=\"OxiCloud\" width=\"375\" /\u003e\n\u003c/p\u003e\n\n\u003ch3 align=\"center\"\u003eSelf-hosted cloud storage, calendar \u0026amp; contacts — blazingly fast.\u003c/h3\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge)](https://opensource.org/licenses/MIT)\n  [![Latest Release](https://img.shields.io/github/release/diocrafts/OxiCloud.svg?style=for-the-badge)](https://github.com/diocrafts/OxiCloud/releases)\n  [![CI](https://img.shields.io/github/actions/workflow/status/diocrafts/OxiCloud/ci.yml?branch=main\u0026style=for-the-badge\u0026label=CI)](https://github.com/diocrafts/OxiCloud/actions/workflows/ci.yml)\n  [![Rust](https://img.shields.io/badge/Rust-1.93+-orange?style=for-the-badge\u0026logo=rust)](https://www.rust-lang.org/)\n  [![Docker Image Size](https://img.shields.io/docker/image-size/diocrafts/oxicloud?style=for-the-badge\u0026logo=docker)](https://hub.docker.com/r/diocrafts/oxicloud)\n  [![GitHub Stars](https://img.shields.io/github/stars/diocrafts/OxiCloud?style=for-the-badge\u0026logo=github)](https://github.com/diocrafts/OxiCloud/stargazers)\n  [![GitHub Issues](https://img.shields.io/github/issues/diocrafts/OxiCloud?style=for-the-badge)](https://github.com/diocrafts/OxiCloud/issues)\n  [![Last Commit](https://img.shields.io/github/last-commit/diocrafts/OxiCloud?style=for-the-badge)](https://github.com/diocrafts/OxiCloud/commits/main)\n\n\u003c/div\u003e\n\n\u003cbr/\u003e\n\nNextCloud 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.\n\n![OxiCloud Dashboard](doc/images/Captura%20de%20pantalla%202025-03-23%20230739.png)\n\n\u003c!-- TODO: add animated GIF/demo here --\u003e\n\n---\n\n## OxiCloud vs NextCloud\n\n| Metric | OxiCloud | NextCloud |\n|--------|----------|-----------|\n| **Language** | Rust (compiled, zero-cost abstractions) | PHP (interpreted) |\n| **Docker image** | ~40 MB (Alpine, static binary) | ~1 GB+ (Apache + PHP + modules) |\n| **Idle RAM** | ~30–50 MB | ~250–512 MB |\n| **Cold start** | \u003c 1 s | 5–15 s |\n| **CPU at idle** | ~0 % | 1–5 % (cron, background jobs) |\n| **Min. hardware** | 1 vCPU / 512 MB RAM | 2 vCPU / 2 GB RAM (recommended) |\n| **Concurrent uploads** | Parallel chunked (TUS-like), async I/O | Sequential PHP workers |\n| **File dedup** | SHA-256 content-addressable, ref-counting | None (each user = full copy) |\n| **DB connections** | Dual pool (user + maintenance) | Single pool, background jobs compete |\n| **LTO + PGO** | Fat LTO, codegen-units=1, opt-level=3 | N/A (interpreted) |\n| **Dependencies** | Single binary + PostgreSQL | PHP, Apache/Nginx, Redis, Cron, …  |\n| **WebDAV** | Built-in (RFC 4918, PROPFIND streaming) | Built-in |\n| **CalDAV / CardDAV** | Built-in | Via apps |\n| **WOPI (Office editing)** | Built-in (Collabora / OnlyOffice) | Via apps |\n| **OIDC / SSO** | Built-in (Keycloak, Authentik, …) | Via apps |\n\n\u003e **Note:** NextCloud is a mature, feature-rich ecosystem. OxiCloud targets users who prioritise raw performance, simplicity, and low resource usage over plugin breadth.\n\n---\n\n## Features\n\n### Storage \u0026 Files\n- **Upload / download / organise** — drag-and-drop, multi-file, grid \u0026 list views\n- **Chunked uploads** — TUS-like protocol, parallel chunks, resumable, MD5 integrity\n- **File deduplication** — SHA-256 content-addressable blobs with automatic ref-counting\n- **Adaptive compression** — zstd / gzip selected per MIME type\n- **Trash bin** — soft-delete, restore, auto-purge by retention policy\n- **Favourites \u0026 recent files**\n- **Full-text search** — by name, type, date range, size, recursive subtree (ltree)\n- **MIME magic-byte detection** — `infer` crate, not just extension guessing\n- **Inline preview** — images, PDF, text, audio \u0026 video player modal\n- **Thumbnails \u0026 transcoding** — WebP / AVIF on-the-fly via `image` crate\n\n### Protocols\n- **WebDAV** — RFC 4918, streaming PROPFIND, locking, compatible with all major clients\n- **CalDAV** — calendar sync (Thunderbird, GNOME Calendar, iOS, DAVx⁵, …)\n- **CardDAV** — contacts sync with vCard support\n- **WOPI** — edit Office docs in Collabora Online or OnlyOffice\n- **REST API** — complete JSON API for all operations\n\n### Security \u0026 Auth\n- **JWT authentication** with refresh tokens\n- **Argon2id** password hashing\n- **OIDC / SSO** — Keycloak, Authentik, Authelia, Google, Azure AD…\n- **Role-based access** — admin / user, per-folder permissions\n- **Storage quotas** per user\n- **Shared links** with optional password protection\n\n### Infrastructure\n- **Single binary** — no runtime, no interpreter, no framework overhead\n- **~40 MB Docker image** (Alpine)\n- **Dual DB pool** — dedicated maintenance pool so background tasks never starve user queries\n- **LTO-optimised release** — fat LTO, 1 codegen-unit, `opt-level = 3`, stripped\n- **Write-behind caching** (moka) — sub-millisecond hot reads\n- **112 automated tests** — `cargo test` on every push (CI)\n- **9 languages** — EN, ES, DE, FR, IT, PT, NL, ZH, FA\n\n---\n\n## Quick Start\n\n### Docker (recommended)\n\n```bash\ngit clone https://github.com/DioCrafts/oxicloud.git\ncd oxicloud\n\n# Copy and optionally edit environment\ncp example.env .env\n\ndocker compose up -d\n```\n\nOpen **http://localhost:8086**. That's it.\n\n### From source\n\nRequires **Rust 1.93+** and **PostgreSQL 13+**.\n\n```bash\ngit clone https://github.com/DioCrafts/oxicloud.git\ncd oxicloud\n\n# Configure database\necho \"DATABASE_URL=postgres://user:pass@localhost/oxicloud\" \u003e .env\n\n# Build optimised binary\ncargo build --release\n\n# Start the server (migrations run automatically)\ncargo run --release\n```\n\n---\n\n## Client Setup\n\nOxiCloud speaks standard protocols — any WebDAV / CalDAV / CardDAV client works:\n\n| Client | Protocol | URL |\n|--------|----------|-----|\n| Windows Explorer | WebDAV | `http://host:8086/webdav/` |\n| macOS Finder | WebDAV | `http://host:8086/webdav/` |\n| Nautilus / Dolphin | WebDAV | `dav://host:8086/webdav/` |\n| Thunderbird (calendar) | CalDAV | `http://host:8086/caldav/` |\n| Thunderbird (contacts) | CardDAV | `http://host:8086/carddav/` |\n| DAVx⁵ (Android) | CalDAV + CardDAV | `http://host:8086/` |\n| GNOME Calendar | CalDAV | `http://host:8086/caldav/` |\n| GNOME Contacts | CardDAV | `http://host:8086/carddav/` |\n| Collabora / OnlyOffice | WOPI | See [WOPI docs](doc/wopi-integration.md) |\n\nFor detailed setup guides: [WebDAV](doc/webdav-integration-guide.md) · [CalDAV](doc/caldav-technical-spec.md) · [CardDAV](doc/carddav-technical-spec.md) · [OIDC/SSO](doc/oidc-integration.md)\n\n---\n\n## Architecture\n\nClean / Hexagonal architecture — each layer depends only on the one below:\n\n```\n┌───────────────────────────────────────────────────────────────┐\n│  Interfaces    │ REST API, WebDAV, CalDAV, CardDAV, WOPI      │\n├───────────────────────────────────────────────────────────────┤\n│  Application   │ Use cases, DTOs, port definitions            │\n├───────────────────────────────────────────────────────────────┤\n│  Domain        │ Entities, business rules, repository traits  │\n├───────────────────────────────────────────────────────────────┤\n│  Infrastructure│ PostgreSQL, filesystem, caching, auth        │\n└───────────────────────────────────────────────────────────────┘\n```\n\nSwap the database, add a new protocol, or change auth — without touching business logic.\n\nFor a deep dive: [Internal Architecture](doc/internal-architecture.md) · [Caching](doc/caching-architecture.md) · [DB Transactions](doc/database-transactions.md)\n\n---\n\n## Configuration\n\nAll config via environment variables (see [`example.env`](example.env)):\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `OXICLOUD_STORAGE_PATH` | `./storage` | Root directory for file storage |\n| `OXICLOUD_SERVER_PORT` | `8086` | HTTP listen port |\n| `OXICLOUD_DB_CONNECTION_STRING` | — | PostgreSQL connection string |\n| `OXICLOUD_JWT_SECRET` | random | Token signing key (set in production!) |\n| `OXICLOUD_OIDC_ENABLED` | `false` | Enable OpenID Connect SSO |\n| `OXICLOUD_WOPI_ENABLED` | `false` | Enable Collabora / OnlyOffice editing |\n| `OXICLOUD_ENABLE_AUTH` | `true` | Toggle authentication |\n| `OXICLOUD_ENABLE_TRASH` | `true` | Toggle trash / recycle bin |\n\nFull reference: [`example.env`](example.env) · [Deployment guide](doc/deployment.md) · [OIDC examples](doc/oidc-config-examples.md)\n\n---\n\n## Development\n\n```bash\ncargo build                 # Dev build\ncargo run                   # Run locally\ncargo test --workspace      # 112 tests\ncargo clippy -- -D warnings # Lint (zero warnings policy)\ncargo fmt --all --check     # Format check\nRUST_LOG=debug cargo run    # Debug logging\n```\n\n### Project stats\n\n| Metric | Value |\n|--------|-------|\n| Rust source files | 170 |\n| Lines of code | ~50 000 |\n| Automated tests | 112 |\n| Documentation pages | 35 |\n\n---\n\n## Documentation\n\nExtensive docs live in [`doc/`](doc/):\n\n| Topic | Link |\n|-------|------|\n| Deployment \u0026 Docker | [deployment.md](doc/deployment.md) |\n| WebDAV integration | [webdav-integration-guide.md](doc/webdav-integration-guide.md) |\n| CalDAV / CardDAV | [caldav-technical-spec.md](doc/caldav-technical-spec.md) · [carddav-technical-spec.md](doc/carddav-technical-spec.md) |\n| OIDC / SSO setup | [oidc-integration.md](doc/oidc-integration.md) · [oidc-config-examples.md](doc/oidc-config-examples.md) |\n| WOPI (Office editing) | [wopi-integration.md](doc/wopi-integration.md) |\n| Chunked uploads | [chunked-uploads.md](doc/chunked-uploads.md) |\n| Deduplication | [deduplication.md](doc/deduplication.md) |\n| Search | [search.md](doc/search.md) |\n| Caching architecture | [caching-architecture.md](doc/caching-architecture.md) |\n| Storage quotas | [storage-quotas.md](doc/storage-quotas.md) |\n| Trash / recycle bin | [trash-feature-summary.md](doc/trash-feature-summary.md) |\n| Internationalisation | [i18n.md](doc/i18n.md) |\n| Internal architecture | [internal-architecture.md](doc/internal-architecture.md) |\n\n---\n\n## Roadmap\n\nCheck [TODO-LIST.md](TODO-LIST.md) for the full roadmap. Highlights:\n\n- [ ] File versioning \u0026 diff viewer\n- [ ] End-to-end encryption\n- [ ] Desktop sync client (Rust)\n- [ ] Android / iOS app\n- [ ] OCR \u0026 intelligent tagging\n- [ ] Automated workflows\n\n---\n\n## Contributing\n\nThe project is actively developed. Contributions welcome!\n\nRead [CONTRIBUTING.md](CONTRIBUTING.md) before submitting a PR. Follow the [Code of Conduct](CODE_OF_CONDUCT.md).\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n\n---\n\n## Star History\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://star-history.com/#DioCrafts/OxiCloud\u0026Date\"\u003e\n    \u003cpicture\u003e\n      \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=DioCrafts/OxiCloud\u0026type=Date\u0026theme=dark\" /\u003e\n      \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=DioCrafts/OxiCloud\u0026type=Date\" /\u003e\n      \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/svg?repos=DioCrafts/OxiCloud\u0026type=Date\" style=\"border-radius: 15px; box-shadow: 0 0 30px rgba(0, 217, 255, 0.3);\" /\u003e\n    \u003c/picture\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n---\n\nQuestions? [Open an issue](https://github.com/DioCrafts/OxiCloud/issues). Want to help? PRs welcome.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiocrafts%2Foxicloud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdiocrafts%2Foxicloud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiocrafts%2Foxicloud/lists"}