| .github/workflows | ||
| bb | ||
| doc | ||
| resources/signal-docstrings | ||
| slf4j | ||
| src/taoensso | ||
| test/taoensso | ||
| wiki | ||
| .gitignore | ||
| bb.edn | ||
| CHANGELOG.md | ||
| examples.cljc | ||
| FUNDING.yml | ||
| LICENSE.txt | ||
| project.clj | ||
| README.md | ||
| sampling.svg | ||
| SECURITY.md | ||
| signal-flowchart.svg | ||
| telemere.fig | ||

Documentation | Latest releases | Get support
Telemere
Structured telemetry library for Clojure/Script
This library is still under development!!
Telemere is an upcoming next-generation observability toolkit for capturing all kinds of un/structured information in your running Clojure and ClojureScript programs.
It offers a simple, clean, unified API that covers: logging, events, performance measurement, tracing, etc.
Taking full advantage of Clojure's unique macro and interop capabilities, Telemere represents the refinement and culmination of ideas brewing for 10+ years in Timbre, Tufte, Truss, etc.
Latest release/s
- Stable release: coming ~Apr 2024
v1.0.0-SNAPSHOT(dev): release info (for early adopters)
See here for earlier releases.
Why Telemere?
- Simple, lightweight API that's easy to use, easy to configure, and deeply flexible.
- An unmatched logging experience designed to scale comfortably from the smallest disposable code, to the most massive production applications.
- Easy integration with the tooling of your choice, including first-class out-the-box interop with OpenTelemetry, SLF4J v2, clojure.tools.logging, and Tufte.
- Hyper-optimized and blazing fast, see performance.
- Expressive per-call and per-handler filtering at both runtime and compile-time.
- Easily filter by namespace and id pattern, level, level by namespace pattern, etc.
- Support for auto sampling, rate-limiting, and back-pressure monitoring.
- Support for fully configurable a/sync dispatch (blocking, dropping, sliding, etc.).
- Sensible defaults to make getting started fast and easy.
- Extensive beginner-oriented documentation, docstrings, examples, etc.
Video demo
See for intro and usage: (TODO: coming later)
Quick example
;; TODO: coming later
Observability tips
See here for general advice re: building and maintaining highly observable Clojure/Script systems.
Performance
Telemere is highly optimized and offers terrific performance at any scale:
| Compile-time filtering? | Runtime filtering? | Time? | Trace? | nsecs |
|---|---|---|---|---|
| ✓ (elide) | - | - | - | 0 |
| - | ✓ | - | - | 220 |
| - | ✓ | ✓ | - | 300 |
| - | ✓ | ✓ | ✓ | 730 |
Measurements:
- Are ~nanoseconds per signal call (= milliseconds per 1e6 calls)
- Taken on a 2020 Macbook Pro M1, running OpenJDK 21
- Exclude handler runtime (which depends on handler/s, is usually async)
Tip: Telemere offers extensive per-call and per-handler filtering, sampling, and rate-limiting. Use these to ensure that you're not capturing useless/low-value information in production. See here for more tips!
Documentation
Funding
You can help support continued work on this project, thank you!! 🙏
License
Copyright © 2023-2024 Peter Taoussanis.
Licensed under EPL 1.0 (same as Clojure).