finds.dev← search

// the find

django/channels

★ 6,359 · Python · BSD-3-Clause · updated Aug 2026

Developer-friendly asynchrony for Django

Channels is the official Django extension for WebSockets, long-polling, and other async protocols, letting you write consumers alongside your regular views and models. It's for Django shops that need real-time features (chat, notifications, live dashboards) without leaving the Django ecosystem for something like FastAPI.

Consumers mirror Django's class-based view patterns, so the mental model transfers directly instead of requiring a separate async framework. The channel layer abstraction (in-memory for dev, Redis via channels_redis for production) cleanly decouples routing from transport, and swapping backends is a config change, not a rewrite. Testing utilities (WebsocketCommunicator, ApplicationCommunicator) are built in rather than bolted on, which is rare for async libraries this size. It's a first-party Django project with an actual deprecation policy, not a random third-party package that might vanish.

Maintenance is explicitly best-effort outside security fixes, per the README itself — worth knowing before betting production infrastructure on it. Anything beyond a single process needs Redis as a channel layer, so you're adding an infra dependency the moment you scale past one worker. The sync/async boundary is a real trap: ORM calls inside consumers need database_sync_to_async wrapping, and it's easy to accidentally block the event loop if you forget. Compared to frameworks built async-first (Starlette, FastAPI), Channels still feels like async grafted onto a synchronous core, which shows up in occasional rough edges around middleware and session handling.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →