--- title: "1.31.0 — Responsive realtime sockets, connection recovery, and safer chat moderation" description: "Realtime logins stay responsive with many open sockets, WebSocket database work recovers cleanly after database restarts, and chat moderation catches evasions while avoiding common false positives." date: "2026-09-28" tags: ["release"] canonical: "https://django-mojo.sitesmojo.com/changelog/1-31-0/" --- Realtime logins stay responsive with many open sockets, WebSocket database work recovers cleanly after database restarts, and chat moderation catches evasions while avoiding common false positives. ## Key changes - Realtime pub/sub now waits directly on async Redis instead of consuming shared worker threads, so logins, hooks and permission checks remain responsive with many sockets open. `REDIS_PUBSUB_MAX_CONN` sets the pub/sub connection cap for each worker event loop. - WebSocket authentication, hooks and permission checks now discard dead or expired database connections around each call, so a database restart or failover affects at most the work already in flight. - Chat moderation now matches blocked terms as whole words, handles obfuscated terms more accurately, and validates allowed link hosts without trusting lookalike addresses. Groups can set their own hide level and allowed domains, while slurs remain hidden.