NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #1146 most downloaded on crates.io
An extensible Statsd client for Rust
Last release 5 months ago
11 Apr 2026
Release timing varies
gaps range from 2 weeks to 1.1 years
Nearly every release is documented
notes for 52 of 52 stable releases
2 versions withdrawn
withdrawn after publishing
11 years old
54 releases · first in 2015
Allow UDP sinks (UdpMetricSink, BufferedUdpMetricSink) to be configured to periodically re-resolve the hostname of the server that metrics are being s
UdpMetricSink, BufferedUdpMetricSink) to be configured
to periodically re-resolve the hostname of the server that metrics are being
sent to. Examples of this can be found in documentation for each sink,
the README, or examples directory.Fix an issue with BufferedUdpMetricSink stats not being updated per #227. Thanks to @danielnorberg for this contribution.
BufferedUdpMetricSink stats not being updated per
#227. Thanks to @danielnorberg
for this contribution.One column per quarter.
Fix an issue with MultiLineWriter where buffering could cause metrics to be emitted out of order per #218. Thanks to @dwhjames for this fix.
MultiLineWriter where buffering could cause metrics to
be emitted out of order per #218.
Thanks to @dwhjames for this fix.replace_writer method to MultiLineWriter to allow broken writers to
be replaced (such as connection oriented writers like TCP streams)
per #215.
Thanks to @dwhjames for this contribution.Add support for Datadog Statsd extensions sample rates, container IDs, and explicit timestamps per #211. Thanks to @iksaif for this contribution.
Make the previously internal MultiLineWriter and SocketStats structs available from the cadence::ext module per #206. These can be useful when creatin
MultiLineWriter and SocketStats structs
available from the cadence::ext module per #206.
These can be useful when creating custom MetricSink implementations.
Thanks to @mlowicki for this contribution.Add support for using u64, i32, and u32 types as counters per #201. Thanks to @James-Bartman for this contribution.
u64, i32, and u32 types as counters per
#201. Thanks to @James-Bartman
for this contribution.MetricSink::stats() method to the MetricSink interface to allow
sinks to expose low-level network telemetry per #203.
Thanks to @mlowicki for this contribution.StatsdClient::flush() method to the client to allow time-sensitive
metrics to be flushed sooner than they otherwise might be per
#200. Thanks to @James-Bartman
for this contribution;Version bump for 1.2.0 release
Version bump for 1.2.0 release (#198)
QueuingMetricSinkBuilder to allow an error handler to be set for
the wrapped MetricSink implementation per #195.
Thanks to @mlowicki for this contribution.Update crossbeam-channel dependency to 0.5.11.
crossbeam-channel dependency to 0.5.11.1.60 from 1.56.MetricSink::flush() implementation to QueuingMetricSink per
#191. Thanks to @mlowicki
for this contribution.Remove deprecated StatsdClient::from_udp_host method and Compat trait per #181. These methods have been deprecated since v0.26. See MIGRATION.md for m…
StatsdClient::from_udp_host method and Compat trait per
#181. These methods have been
deprecated since v0.26. See MIGRATION.md for more information.Changelog and version bumps for 0.29.1
Changelog and version bumps for 0.29.1
Add support for "default tags" that can be added to a StatsdClient when creating it using the builder per #172. Default tags will be automatically add
StatsdClient when creating
it using the builder per #172.
Default tags will be automatically added to all metrics emitted by the client.
Thanks to @look for this contribution.Breaking change - Add support for packed values which allows multiple values to be sent as a single metric for histogram, distribution, and timer type…
Vec<T> for histogram, distribution, and timer
methods. Note that this feature is a Datadog extension and so may not be supported
by your server. It is supported by versions >=v6.25.0 && <v7.0.0 or >=v7.25.0
of the Datadog agent. Thanks to @Jason8Ni for this contribution.Breaking change - StatsdClient no longer implements the Clone trait due to now using Box internally instead of Arc per #163. Where StatsdClient was .c…
StatsdClient no longer implements the Clone trait
due to now using Box internally instead of Arc per
#163. Where StatsdClient
was .clone()'d previously, it should now be wrapped with an Arc to enable
it to be cloned.Breaking change - Client traits are now generic across supported types of values #132. This change should be source-compatible in most cases for users…
prelude module. Type-specific deprecated methods have been moved to a new
Compat trait to ease this migration. This trait and its implementation will
be removed in a future release. See MIGRATION.md for more
information.f64 values for histogram and distribution metric types per
#131.Breaking change - Added support for DataDog distribution metric types per #125 thanks to @duarten.
Breaking change - Added support for DataDog distribution metric types per #125 thanks to @duarten.
Breaking change - Rewrite SpyMetricSink and BufferedSpyMetricSink
introduced in 0.22.0 to use channels for making written metrics available
instead of shared Write implementation wrapped with a Mutex. The newly
changed sinks now return a crossbeam_channel::Receiver<Vec<u8>> instance
from their constructors that callers can use to read any metrics written by
the sink. This avoids accidental cases of mutex poisoning
which can happen when the Mutex is held when an assertion fails as part of
a test per #124.
Examples of how to use the newly rewritten sinks can be found in:
Breaking change - Remove unsafe uses of static mut used for global state
related to macros which caused undefined behavior per
#129 thanks to @parasyte.
A consequence of this that cadence_macros::set_global_default and
cadence_macros::get_global_default now only accept instances of StatsdClient,
not the trait MetricClient.
cadence-macros yanked due to causing undefined behavior #129
cadence-macros yanked due to causing undefined behavior #129
cadence crate will continue to
contain the primary client and API. The cadence-macros crate contains
convenience macros for removing some boilerplate required to emit metrics
per #114.MultilineWriter (used by buffered sinks) to honor the Write::write
contract per #117.Breaking change - Add method to emit f64 types as gauges per #106.
Add new SpyMetricSink and BufferedSpyMetricSink to allow inspecting metrics sent by Cadence as part of integration testing an application per #103.
SpyMetricSink and BufferedSpyMetricSink to allow inspecting
metrics sent by Cadence as part of integration testing an application per
#103.Minor documentation improvements.
Add a .flush() method to the MetricSink trait to allow applications to flush metrics out-of-band per #100.
.flush() method to the MetricSink trait to allow applications to
flush metrics out-of-band per #100.Breaking change - The Histogrammed trait now includes methods for sending Duration objects, converted to nanoseconds, as histogram values.
QueuingMetricSink can now be created with a fixed queue size using the
::with_capacity() constructor. This allows users to limit the amount of
memory used by sending metrics (in case the wrapped sink can't keep up with
the rate of metrics being sent due to to some sort of error).crossbeam_channel to version 0.4.0+;Histogrammed trait now includes methods for sending
Duration objects, converted to nanoseconds, as histogram values.QueuingMetricSink::panics() method now returns
a u64, not a usize.Minor documentation improvements.
Deprecate the StatsdClient::from_udp_host constructor which will be removed in a future release. Users are encouraged to use the ::from_sink() and ::b…
UnixMetricSink
and BufferedUnixMetricSink per #86
thanks to Daniel Smith.StatsdClient::from_udp_host constructor which will be removed
in a future release. Users are encouraged to use the ::from_sink() and ::builder()
constructors instead.examples directory) are now available under
the CC0
agreement (basically public domain even in countries with no such concept).Breaking change - Update Cadence to build with Rust 2018 per #82. Note that Cadence should still work fine with Rust 2015 code bases as well as Rust 2…
., now an empty prefix results in just
the bare metric key.…to submit a metric by about 50%. This is a non-breaking change.
MsQueue with channels from the
crossbeam_channel crate per #79.
This change improves performance of the QueuingMetricSink, reducing
the time taken to submit a metric by about 50%. This is a non-breaking
change.Nothing published for this version
Breaking change - Require that all sinks and error handlers used with StatsdClient are panic safe, that is, they implement RefUnwindSafe per #77. Note…
StatsdClient are panic safe, that is, they implement RefUnwindSafe per
#77. Note that all sinks
included with Cadence are panic safe so this shouldn't be much of a change
for many users. See also Rust #54768
for more information about the reasoning for the change.Update Cadence crate to forbid any uses of unsafe {} code.
unsafe {} code.Breaking change - Add support for Set metric types. Sets can be used to count the number of unique occurences of an event. Per #62.
Set metric types. Sets can be used
to count the number of unique occurences of an event. Per
#62.crossbeam to the latest version (0.3.2).Breaking change - Rename the MetricBuilder::send() method to MetricBuilder::try_send() and create a new .send() method that discards successful result…
MetricBuilder::send() method to
MetricBuilder::try_send() and create a new .send() method that discards
successful results and invokes a custom handler for error results. Handlers
can be set by using a builder via the StatsdClient::builder() method.
Per #65.Warn when MetricBuilder instances aren't used when adding tags to metrics per #63.
MetricBuilder instances aren't used when adding tags to metrics
per #63.Minor documentation improvements.
Breaking change - Added _with_tags method variants to all traits for emitting metrics (Counted, Timed, Gauged, Metered, Histogrammed) per #41. These m…
_with_tags method variants to all traits for
emitting metrics (Counted, Timed, Gauged, Metered, Histogrammed)
per #41. These methods will
return a MetricBuilder instance that can be used to add
Datadog style tags to
metrics. Tags are an extension so they may not be supported by all Statsd
servers.Metric trait (which is used by each type of metric object for returning
a &str representation of itself) is now part of the public API.Fix off-by-one bug in underlying functionality for BufferedUdpSink that would have caused extra writes to the UDP socket per #59.
BufferedUdpSink
that would have caused extra writes to the UDP socket per
#59.Minor documentation improvements and code cleanup.
Add new time_duration method to Timed trait per #48. This allows users to record timings using the Duration struct from the standard library.
Breaking change - Remove deprecated AsyncMetricSink per #47. Users are encouraged to switch to QueuingMetricSink instead. QueuingMetricSink has simila…
AsyncMetricSink per
#47. Users are encouraged to
switch to QueuingMetricSink instead. QueuingMetricSink has similar performance,
emits metrics asynchronously in another thread, and has a more ergonomic signature
(not requiring a generic parameter for the wrapped sink).T from the StatsdClient per
#45. Instead of requiring all users
of the client to care about the MetricSink implementation, put it behind an Arc
pointer in the client and remove the type T from the signature. This makes the
client easier to use and share between threads.Arc inside various sinks per #35.Breaking change - Remove deprecated ConsoleMetricSink and LoggingMetricSink per #46. Users wishing to still use these sinks are encouraged to copy the…
ConsoleMetricSink and LoggingMetricSink
per #46. Users wishing to still use
these sinks are encouraged to
copy the code
into their own projects or use Cadence version 0.9.1 until they migrate away from them.AsyncMetricSink per #34.
Anyone still using AsyncMetricSink is encouraged to switch to QueuingMetricSink
instead. Performance should be comparable but QueuingMetricSink can be shared
between threads without requiring a .clone().Change deprecation version of LoggingMetricSink and ConsoleMetricSink to 0.10.0.
LoggingMetricSink and ConsoleMetricSink to 0.10.0.Deprecate LoggingMetricSink per #32.
* Internal code cleanup per #29.
* Minor documentation fixes.
Add new BufferedUdpMetricSink implementation of a MetricSink that buffers multiple metrics before sending then in a single network operation per #18.
BufferedUdpMetricSink implementation of a MetricSink that
buffers multiple metrics before sending then in a single network operation
per #18.AsyncMetricSink implementation of a MetricSink that wraps
another sink and sends metrics asynchronously using a thread pool per
#23.Clone trait for all builtin sinks for easier use with multiple
threads, specifically the AsyncMetricSink per
#24.Add new MetricClient trait implemented by StatsdClient that encompasses all of the other traits for emitting metrics (Counted, Timed, Gauged, and Mete
MetricClient trait implemented by StatsdClient that encompasses
all of the other traits for emitting metrics (Counted, Timed, Gauged,
and Metered) so that users can refer to a single type when used with
generics or behind a pointer per #20.Change Cadence to be dual licensed under Apache and MIT licenses per #12.
MetricSink trait per
#13.StatsdClient::from_udp_host to be created in non-blocking mode by default
per #14. While this does
change previous behavior, users of the library shouldn't notice much of
a change. In instances where the caller would have blocked before, they
will get a MetricError wrapping an io::Error (with an ErrorKind of
WouldBlock). Users wishing to restore the old behavior can do so by
creating a custom instance of UdpMetricSink. Thanks to the
Tikv team for the inspiration.Increase test coverage per #10.
Remove debug! call in internal StatsdClient call to cut down on log noise per #7.
debug! call in internal StatsdClient call to cut down on log
noise per #7.Breaking change - Rename the constructor of UdpMetricSink from new to from to better match Rust naming conventions for conversion constructors.
UdpMetricSink from new
to from to better match Rust naming conventions for conversion constructors.Change name of method for getting metric &str representation. The old name implied that the instance was consumed which it was not.
&str representation. The old name
implied that the instance was consumed which it was not.cadence::prelude module for easy import of Counted, Timed,
Gauged, and Metered traits via a glob import. Fixes
#4.Change LoggingMetricSink log target to cadence::metrics.
Nothing published for this version
Change Cadence from MIT license to Apache-2.0 for better compatibility with BSD and GPLv3 licensed code.
Remove unused development dependency.
Hash trait to assorted metric types (Counter, Timer, Gauge, Meter).* Initial release.
Your coding agent can read these notes before it upgrades. Set up the MCP server →