Voice Messages
- Added custom AudioPlayer with waveform visualiser, seek bar, and volume slider — replacing the default browser audio element
- Added voice message recording directly in the DM composer with a hold-to-record interface
- Voice messages support an optional auto-delete timer (30 min · 3 days · 7 days · 14 days · 30 days) shown as an expiry clock badge on the player
- Fixed AudioPlayer showing
Infinity:NaN for webm duration on load
- Fixed waveform disappearing and seek/waveform misalignment
- Fixed
AudioContext double-close errors in both the player and recorder
- Fixed
voice_expires_at always arriving as null for file-attachment DMs and not reaching clients
- Waveform progress is now smoothed with
requestAnimationFrame
Server List — Sorting & Folders
- Servers in the sidebar can now be drag-and-drop reordered
- Servers can be grouped into folders — click a folder to expand/collapse its servers
- Sort order and folder layout persist across sessions
DM Retention
- Fixed retention changes not being applied to existing messages — messages older than the new retention window are now deleted immediately when both users accept a change
- Remaining messages have their expiry recalculated as
created_at + new_retention, anchored to send time rather than acceptance time
- Fixed messages deleted by retention briefly flashing before disappearing — stale IndexedDB entries are now evicted after the server response
- Fixed DM messages loading out of chronological order for ~1 second on open — IndexedDB results are now sorted by
createdAt before display
DM — Other Fixes
- Fixed message duplication when the sender has multiple clients open simultaneously
- Replaced browser
confirm() with a styled ConfirmDialog for DM message deletion
- Fixed 429 rate-limit storm on socket reconnect —
loadMessages is now deduplicated per conversation; DM rate limit raised to 300 req/min
Personal Roles
- Added Personal Roles Manager accessible from the Friends List header — create and manage cosmetic roles visible across all servers
Performance & Caching
- Server icons, banners, and profile pictures are now cached by the browser for 7 days — eliminates redundant re-downloads on every page load
- Hashed JS/CSS assets (
/app/assets/) now served with immutable, max-age=1y
- Fixed
index.html being cached by browsers/CDN — it is now served with no-store, preventing stale chunk-hash references after a deploy that caused module load failures
Settings — Cat Cache
- Added Cat Cache section under Content & Social settings — shows all browser-cached images grouped by Avatars, Banners, User Generated Content, and System Images
- Click any thumbnail to view it full-size
- Purge All button force-refetches every cached image and updates the display immediately
Landing Page & Invite
- Added a public invite landing page at the server root — shows server name, member count, banner, and a Join button
- Landing page now uses a full-page blurred banner background matching the in-app invite style
- Added CatRealm favicon and matched background gradient to the client invite page
Pterodactyl Egg
- Switched startup to a Node bootstrap script — resolves native module (better-sqlite3) compatibility in musl containers
- Fixed flat
.env generation and SERVER_URL auto-update on SSL toggle
- Fixed
AUTO_UPDATE_RESTART_ON_START defaulting to false
- Env file is now backed up before egg reinstall; duplicate startup logs and premature exits resolved