{"id":13681900,"url":"https://github.com/taoensso/sente","last_synced_at":"2025-12-12T01:10:08.467Z","repository":{"id":14344884,"uuid":"17054460","full_name":"taoensso/sente","owner":"taoensso","description":"Realtime web comms library for Clojure/Script","archived":false,"fork":false,"pushed_at":"2025-04-07T10:02:33.000Z","size":1622,"stargazers_count":1757,"open_issues_count":19,"forks_count":194,"subscribers_count":47,"default_branch":"master","last_synced_at":"2025-04-23T17:19:43.559Z","etag":null,"topics":["ajax","async","clojure","clojurescript","edn","epl","http-kit","taoensso","transit","websockets"],"latest_commit_sha":null,"homepage":"https://www.taoensso.com/sente","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"epl-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/taoensso.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":"FUNDING.yml","license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"ptaoussanis","custom":"https://www.taoensso.com/clojure"}},"created_at":"2014-02-21T11:30:04.000Z","updated_at":"2025-04-12T05:55:03.000Z","dependencies_parsed_at":"2023-07-30T02:43:26.121Z","dependency_job_id":"7ef0b9b3-9f14-4a9f-bee7-1ea28db0730f","html_url":"https://github.com/taoensso/sente","commit_stats":null,"previous_names":["taoensso/sente","ptaoussanis/sente"],"tags_count":60,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taoensso%2Fsente","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taoensso%2Fsente/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taoensso%2Fsente/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taoensso%2Fsente/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/taoensso","download_url":"https://codeload.github.com/taoensso/sente/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253766117,"owners_count":21960847,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ajax","async","clojure","clojurescript","edn","epl","http-kit","taoensso","transit","websockets"],"created_at":"2024-08-02T13:01:37.541Z","updated_at":"2025-12-12T01:10:08.256Z","avatar_url":"https://github.com/taoensso.png","language":"Clojure","funding_links":["https://github.com/sponsors/ptaoussanis","https://www.taoensso.com/clojure"],"categories":["Clojure","\u003ca name=\"Clojure\"\u003e\u003c/a\u003eClojure"],"sub_categories":[],"readme":"\u003ca href=\"https://www.taoensso.com/clojure\" title=\"More stuff by @ptaoussanis at www.taoensso.com\"\u003e\u003cimg src=\"https://www.taoensso.com/open-source.png\" alt=\"Taoensso open source\" width=\"340\"/\u003e\u003c/a\u003e  \n[**API**][cljdoc docs] | [**Wiki**][GitHub wiki] | [Latest releases](#latest-releases) | [Slack channel][]\n\n# Sente\n\n### Realtime web comms library for Clojure/Script\n\n**Sente** is a small client+server library that makes it easy to build **realtime web applications** with Clojure + ClojureScript.\n\nLoosely inspired by [Socket.IO](https://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**.\n\n\u003cimg width=\"600\" src=\"../../raw/master/hero.jpg\"/\u003e\n\n\u003e **Sen-te** (先手) is a Japanese [Go](https://en.wikipedia.org/wiki/Go_(game)) term used to describe a play with such an overwhelming follow-up that it demands an immediate response, leaving its player with the initiative.\n\n## Latest release/s\n\n- `2024-12-31` `v1.20.0` (dev): [release info](../../releases/tag/v1.20.0)\n\n[![Main tests][Main tests SVG]][Main tests URL]\n[![Graal tests][Graal tests SVG]][Graal tests URL]\n\nSee [here][GitHub releases] for earlier releases.\n\n## Why Sente?\n\n- **Bidirectional a/sync comms** over **WebSockets** with **auto Ajax fallback**\n- **It just works**: auto keep-alive, buffering, protocol selection, reconnects\n- **Efficient design** with auto event batching for low-bandwidth use, even over Ajax\n- Send **arbitrary Clojure vals** over [edn](https://github.com/edn-format/edn) or [Transit](https://github.com/cognitect/transit-clj) (JSON, MessagePack, etc.)\n- Tiny, easy-to-use [API](../../wiki/1-Getting-started#usage)\n- Support for users simultaneously connected with **multiple clients** and/or devices\n- Realtime info on **which users are connected**, and over which protocols\n- Standard **Ring security model**: auth as you like, HTTPS when available, CSRF support, etc.\n- Support for [several popular web servers](../../tree/master/src/taoensso/sente/server_adapters), [easily extended](../../blob/master/src/taoensso/sente/interfaces.cljc) to other servers.\n\n### Capabilities\n\nProtocol   | client\u003eserver  | client\u003eserver + ack/reply | server\u003euser push\n---------- | -------------- | ------------------------- | ----------------\nWebSockets | ✓ (native)    | ✓ (emulated)              | ✓ (native)\nAjax       | ✓ (emulated)  | ✓ (native)                | ✓ (emulated)\n\nSo 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).\n\n## Documentation\n\n- [Wiki][GitHub wiki] (getting started, usage, etc.)\n- API reference: [cljdoc][cljdoc docs], [Codox][Codox docs]\n\n## Funding\n\nYou can [help support][sponsor] continued work on this project, thank you!! 🙏\n\n## License\n\nCopyright \u0026copy; 2012-2024 [Peter Taoussanis][].  \nLicensed under [EPL 1.0](LICENSE.txt) (same as Clojure).\n\n\u003c!-- Common --\u003e\n\n[GitHub releases]: ../../releases\n[GitHub issues]:   ../../issues\n[GitHub wiki]:     ../../wiki\n[Slack channel]: https://www.taoensso.com/sente/slack\n\n[Peter Taoussanis]: https://www.taoensso.com\n[sponsor]:          https://www.taoensso.com/sponsor\n\n\u003c!-- Project --\u003e\n\n[Codox docs]:  https://taoensso.github.io/sente/\n[cljdoc docs]: https://cljdoc.org/d/com.taoensso/sente/CURRENT/api/taoensso.sente\n\n[Clojars SVG]: https://img.shields.io/clojars/v/com.taoensso/sente.svg\n[Clojars URL]: https://clojars.org/com.taoensso/sente\n\n[Main tests SVG]:  https://github.com/taoensso/sente/actions/workflows/main-tests.yml/badge.svg\n[Main tests URL]:  https://github.com/taoensso/sente/actions/workflows/main-tests.yml\n[Graal tests SVG]: https://github.com/taoensso/sente/actions/workflows/graal-tests.yml/badge.svg\n[Graal tests URL]: https://github.com/taoensso/sente/actions/workflows/graal-tests.yml\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaoensso%2Fsente","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftaoensso%2Fsente","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaoensso%2Fsente/lists"}