NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #4517 most downloaded on crates.io
Time library for embedded targets with ease-of-use and performance first.
Last release 1 months ago
07 Sep 2026
Ships unpredictably
gaps range from 2 weeks to 2.4 years
Rarely documented
notes for 3 of 15 stable releases
5 versions withdrawn
withdrawn after publishing
5 years old
20 releases · first in 2021
One column per quarter.
InstantOrd: the comparison interface shared by both instant kinds, with compare, is_before, is_after and is_at_least.
InstantOrd: the comparison interface shared by both instant kinds, with compare,
is_before, is_after and is_at_least.PartialOrd. Use InstantOrd or the
inherent is_before/is_after instead of <, >, <= and >=.The Monotonic instant kind (together with the old Wrapping kind), for timelines that do not wrap. Before, the Instant started to get methods that were
Monotonic instant kind (together with the old Wrapping kind), for timelines that do not
wrap. Before, the Instant started to get methods that were related to Monotonic instants -
this is now split.MonotonicInstant, MonotonicTimerInstant, MonotonicTimerInstantU32 and
MonotonicTimerInstantU64 aliases.Instant::is_before and Instant::is_after, wrap-aware on Wrapping, a plain tick compare on
Monotonic.Instant now implements Hash.Instant's Debug output names the kind: WrappingInstant { ticks: 7 }.Instant comparison no longer reports Equal for instants that are not equal.u32 storage truncated their u64 conversion constants, panicking with
a divide-by-zero or returning silently wrong results.u32 storage with a base ratio above u32::MAX is affected.Ord, that compare is not transitive.
PartialOrd is kept, so <, >, <= and >= are unaffected. Monotonic instants are Ord.const_cmp is replaced by const_partial_cmp,
which returns None for instants exactly half the tick range apart. Monotonic instants keep
const_cmp, where a total order makes it sound.checked_sub_duration to convert_sub_duration and checked_add_duration
to convert_add_duration with improved docs.Instant takes a fourth type parameter naming its timeline kind.
Instant<u32, 1, 1_000> becomes WrappingInstant<u32, 1, 1_000>, or Instant<u32, 1, 1_000, kind::Wrapping>.TimerInstant, TimerInstantU32 and TimerInstantU64 aliases are replaced by
WrappingTimerInstant, WrappingTimerInstantU32 and WrappingTimerInstantU64.duration_since_epoch is removed from wrapping instants, where a fixed epoch is
meaningless. Use Duration::from_ticks(i.as_ticks()) for the old ticks-to-Duration shorthand.Duration::ZERO and Duration::MAX constants
Duration::ZERO and Duration::MAX constantsDuration::checked_mul, checked_div, div_ceil methodsDuration::saturating_add, saturating_sub, saturating_mul methodsDuration::from_secs_f32 and from_secs_f64 constructors with roundingDuration::as_secs_f32 and as_secs_f64 conversionspicos() shorthand method to ExtU32, ExtU64, ExtU32Ceil, and ExtU64Ceil traitsDuration::from_picos, as_picos, from_picos_at_least methodsPicosDuration<T>, PicosDurationU32, PicosDurationU64 aliasesGigahertz<T>, GigahertzU32, GigahertzU64 aliases (the defmt/Display impls already formatted this base as GHz)core::ops::Rem and core::ops::RemAssign trait implementations for Rate and Duration (fixes #41)core::ops::SubAssign for Rate (was missing; asymmetric with Add/AddAssign/Sub)core::time::DurationNanosDurationU32.minutes())#[track_caller] to all panicking functions and operator impls (including *Assign wrappers, Mul/Div/Rem on integers, and the cross-type u32<->u64 ops) so panic locations point at the user's call site.Instant::checked_*_duration, Instant::checked_duration_since, Duration::checked_* / Rate::checked_*, the try_from_*/try_to_* conversions, and the const_partial_cmp/const_eq methods. Several methods previously claimed to "check for overflow" or "check for divide-by-zero" while the actual contract was different (e.g. wrapping ticks, returning None on cross-base conversion overflow).Duration::const_try_from/const_try_into/convert (and the same on Rate) no longer overflow u64 silently when ticks are close to u64::MAX. The rounding step (lh + d/2) / d was replaced with an overflow-free divmod-based form that produces the same rounded result without ever wrapping.Duration::Hz/kHz/MHz, Rate::Hz/kHz/MHz, Rate::to_Hz/to_kHz/to_MHz, Duration::try_from_rate, and Rate::try_from_duration now produce a compile-time error when the conversion constants don't fit the storage type, instead of silently truncating u64 constants on a u32 cast.Duration shorthand methods (as_*, from_*, from_*_at_least) and the Rate::Hz/kHz/MHz/to_Hz/to_kHz/to_MHz family now panic on multiplication overflow instead of silently wrapping in release builds. All gained #[track_caller] so the panic points at the user's call site.gcd dependency to 2.3defmt dependency to 1.0Duration::const_try_from now rounds-to-nearest, before it was truncatingfrom_* prefix (e.g., from_ticks, from_rate)to_* or as_* prefix (e.g., to_rate, as_ticks)NOM and DENOM const generic parameters from u32 to u64 across all types (Duration, Rate, Instant)
FREQ_HZ parameters now use u64 instead of u32Nothing published for this version
Optional postcard max size support
serde supportpostcard max size supportNothing published for this version
Nothing published for this version
Nothing published for this version
Add Div implementation for Duration and Rate
Div implementation for Duration and Ratenanos() methods and NanosDuration aliases alongside other units.to_nanos(), to_micros(), to_millis(), to_secs(), to_minutes(),
and to_hours() methods to Duration<u32, NOM, DENOM> and
Duration<u64, NOM, DENOM> types to easily convert to integer time units.Rate (Hertz, Kilohertz, ...)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →