← Home

Open source update

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 🙏

- Peter Taoussanis

2025 May - Jun

Hello from sunny Berlin! 👋 🐝 🫶

Recent work

Introducing Trove

First up, a new micro library! It’s called Trove, and it’s basically a modern minimal (~100 loc) tools.logging that adds support for ClojureScript, structured logging and filtering.

Who’s this for?

Mostly library authors that want to do library-level logging without forcing a particular logging library on their users.

Authors could use tools.logging, but that doesn’t support ClojureScript, structured logging, or the kind of data-oriented filtering possible with structured logging.

Motivation

With Telemere now stable, I wanted to start updating libraries like Sente and Carmine to support structured logging.

Trove basically allows me to do this without forcing anyone to update if they’d rather stick with Timbre or use an alternative like μ/log.

Why structured logging?

Traditional logging is string oriented. Program state is captured at the logging callsite, then generally formatted into a message string or serialized into something like EDN/JSON before hitting the rest of the logging pipeline (filters → middleware → handlers).

Structured logging is data oriented. Program state is captured at the logging callsite, then retained as-is through the rest of the logging pipeline (filters → middleware → handlers).

The data-oriented approach means that:

  • No expensive formatting or serialization are needed.
  • Exact data types and (nested) data structures are losslessly retained throughout the logging pipeline.

The latter matters! It means that it’s easy and cheap to build a rich pipeline that can do data-oriented filtering, analytics, aggregations, transformations, and final handling (e.g. your DB or log aggregator might itself support rich types).

Clojure loves plain data and offers a rich set of data types, structures, and tools. Structured logging takes advantage of this. It’s essentially the extension of the data-first principle to the way we instrument our programs.

A big Sente update

Sente has a major new pre-release out.

There’s a lot of significant improvements in here. Some highlights include:

  • Added support for upcoming high-speed binary serialization
  • Added support for compression
  • A smaller dependency
  • Improved reliability under heavy load
  • Pluggable logging (via Trove)
  • Many other small fixes and improvements

Tufte v3 final

Tufte’s official v3 release is out.

There’s many big improvements, including many new features shared with Telemere, and new handlers for Telemere and Trove.

Other stuff

Other misc releases include:

Upcoming work

Next couple months I expect to focus on:

  • Getting Sente v1.21 final released, ideally with an official binary serialization mode
  • Getting Tempel v1 final released (sorry about the delays!)
  • Getting http-kit updated (lots of cool stuff pending there)

Cheers everyone! :-)