Sente
Realtime web comms library for Clojure/Script
Install / Use
/learn @taoensso/SenteREADME
<a href="https://www.taoensso.com/clojure" title="More stuff by @ptaoussanis at www.taoensso.com"><img src="https://www.taoensso.com/open-source.png" alt="Taoensso open source" width="340"/></a>
API | Wiki | Slack | Latest release: v1.21.0 (2025-11-04)
Sente
Realtime web comms library for Clojure/Script
Sente is a small client+server library that makes it easy to build realtime web applications with Clojure + ClojureScript.
Loosely inspired by Socket.IO, it uses core.async, WebSockets, and Ajax under the hood to provide a simple high-level API that enables reliable, high-performance, bidirectional communications.
<img width="600" src="../../raw/master/hero.jpg"/>Sen-te (先手) is a Japanese Go term used to describe a play with such an overwhelming follow-up that it demands an immediate response, leaving its player with the initiative.
See here for earlier releases.
Why Sente?
- Bidirectional a/sync comms over WebSockets with auto Ajax fallback
- It just works: auto keep-alive, buffering, protocol selection, reconnects
- Efficient design with auto event batching for low-bandwidth use, even over Ajax
- Send arbitrary Clojure vals with high-speed binary serialization (v1.21+)
- Tiny, easy-to-use API
- Support for users simultaneously connected with multiple clients and/or devices
- Realtime info on which users are connected, and over which protocols
- Standard Ring security model: auth as you like, HTTPS when available, CSRF support, etc.
- Support for diverse web servers to others
- Support for diverse transmission formats, easily extended to others
Capabilities
| Protocol | client>server | client>server + ack/reply | server>user push | | ---------- | ------------- | ------------------------- | ---------------- | | WebSockets | ✓ (native) | ✓ (emulated) | ✓ (native) | | Ajax | ✓ (emulated) | ✓ (native) | ✓ (emulated) |
So you can ignore the underlying protocol and deal directly with Sente's unified API that exposes the best of both WebSockets (bidirectionality + performance) and Ajax (optional ack/reply).
Documentation
- Wiki (getting started, usage, etc.)
- API reference via cljdoc
- Support via Slack or GitHub issues
Funding
You can help support continued work on this project and others, thank you!! 🙏
License
Copyright © 2012-2025 Peter Taoussanis.
Licensed under EPL 1.0 (same as Clojure).
