OxiCloud v0.5.2
A substantial release focused on deep performance optimizations, internationalization expansion, and UI/UX refinements across the entire stack.
Performance (Backend)
- UUID native migration — All user/session/auth IDs moved from
VARCHAR(36)to native PostgreSQLUUID, eliminating UUID-String round-trips across the storage layer - BLAKE3 mmap + rayon — File hashing now uses memory-mapped I/O with parallel processing, achieving zero heap allocation
- Async dedup path — Replaced blocking
Path::exists()with asynctry_exists()in the deduplication hot path - Zero-alloc DTO conversion —
FiletoFileDtoviainto_parts()ownership transfer eliminates intermediate allocations - SQL parser optimization — Eliminated
Vec<char>allocation insplit_sql_statements - HTTP compression — Enabled gzip + Brotli with a smart content-type predicate
- target-cpu=native — SIMD-optimized BLAKE3 and image processing via
.cargo/config.toml - OnceLock for env vars —
Arc<CurrentUser>in auth middleware, pre-computed query lowercase - Eliminated redundant PG round-trip for
blob_hashafter image upload
Performance (Frontend)
- Build-time asset pipeline —
build.rswith oxc (JS minifier) + LightningCSS for optimized static assets - Photos append-only render — Eliminates full DOM rebuild on scroll
- Thumbnail optimization — Switched from WebP to JPEG q=80 for faster encoding; cache-first + ETag 304 eliminates DB queries on GET
- Denormalized
media_sort_date+ pre-scaled video thumbnails
Features
- Client-side video thumbnails — Generated in-browser without ffmpeg dependency
- i18n expansion to 14 locales — Added Hindi, Arabic, Russian, Japanese, Korean
- Admin panel i18n — 117 translation keys, confirm modal replacing
confirm(), animated tab switching, removed all inline event handlers - Profile page i18n — 58 translation keys with
data-i18nattributes - Files empty state — Shows friendly message when a folder is empty (translated in all 14 locales)
Bug Fixes
- Auth race condition — Resolved files not loading on initial visit
- Grid/List view header — List header no longer incorrectly appears in grid mode on login
- Login page rendering — Fixed
.hiddenCSS specificity issue that caused blank login page - View switching — Proper
classList.toggle("hidden")sync across all navigation functions - CSP compliance — Added
blob:toframe-srcandmedia-srcfor PDF/video viewing; restored removal of inline handlers in admin - Thumbnail cleanup — Thumbnails now deleted when files are permanently removed
- CSRF headers — Added to video thumbnail PUT requests
- SQL schema — Added
DROP TRIGGER IF EXISTSbeforeCREATE TRIGGER - UUID SQL casts — Added
::uuid/::textcasts in storage repos for UUID columns
UI/UX
- Files grid cards stretch to full width (matching photos view)
- Card border/shadow style unified between Files and Photos
- Fixed i18n
safeT()shadowing bug andtranslationsLoadedtiming
Full Changelog: v0.5.1...v0.5.2
What's Changed
- fix(auth): resolve race condition causing files not to load on initial visit by @jaredwolff in #178
- Fix(admin.html): restore theme-init.js and remove inline event handlers by @vhsdream in #181
New Contributors
Full Changelog: v0.5.1...v0.5.2