API | Wiki | Latest releases | Slack channel
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.
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.
2023-08-30
v1.19.2
(stable): release info2024-10-28
v1.20.0-RC1
(dev): release info
See here for earlier releases.
- 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 over edn or Transit (JSON, MessagePack, etc.)
- 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 several popular web servers, easily extended to other servers.
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).
You can help support continued work on this project, thank you!! 🙏
Copyright © 2012-2024 Peter Taoussanis.
Licensed under EPL 1.0 (same as Clojure).