A big thanks to Clojurists Together, Nubank, and other sponsors of my open source work! I realise that it’s a tough time for a lot of folks and businesses lately, and that sponsorships aren’t always easy 🙏
Hi folks! 👋 Will try keep today’s update brief.
(Sente is a realtime web comms library for Clojure/Script)
Sente v1.21.0-RC1 is out now. v1.21 is a big release with improved performance, improved reliability, improved logging (via Trove) and new high-speed binary serialization that supports Clojure’s rich data types.
The binary serialization is still marked as experimental to be safe, though I have it running in production myself. This is a nice improvement, especially for folks with larger payloads and/or with mobile users that might be sensitive to network speed/limits.
To try the new serialization: just give
(taoensso.sente.packers.msgpack/get-packer)
to your client
and server
constructor calls. No extra deps needed.
(Truss is a micro toolkit for Clojure/Script errors)
Truss v2.2.0 is out now with some usability improvements, and a new demo video to show what the library can do. In short: the goal is to help improve the Clojure/Script error experience. Almost all of my Clojure/Script code uses Truss in some way.
The video should be a decent starting point if you’re not familiar with Truss.
Trove is a modern logging facade for Clojure/Script. Telemere is the successor to Timbre.
Trove v1.0 final and Telemere v1.1.0 are out now with some usability improvements.
How do these libraries relate?
Trove is intended for library authors that want to emit rich logging (incl. un/structured logging) without forcing their users to adopt any particular backend (like Telemere, Timbre, μ/log, tools.logging, SLF4J, etc.).
Telemere is intended for general users that want to emit rich logging (incl. un/structured logging) from their own applications.
The two share the same map-oriented logging API:
:level :info, :id :auth/login, :data {:user-id 1234}, :msg "User logged in!"})
(trove/log! {:level :info, :id :auth/login, :data {:user-id 1234}, :msg "User logged in!"}) (telemere/log! {
Both support traditional and structured logging:
A data-oriented pipeline can make a huge difference - supporting easier filtering, transformation, and analysis. It’s also usually faster, since you only pay for serialization if/when you need it. In a lot of cases you can avoid serialization altogether if your final target (DB, etc.) supports the relevant types.
So the structured (data-oriented) approach is inherently more flexible, faster, and well suited to the tools and idioms offered by Clojure and ClojureScript.
Other misc releases included:
As usual please see the linked release notes for details.
Next couple months I expect my focus to include Tempel and likely Carmine, both of which are long overdue for some love :-)
Cheers everyone!