PackageTrack
Sign in Get early access

fugit

Time library for embedded targets with ease-of-use and performance first.

0.5.0 5.4M downloads/mo #4373 most downloaded on crates.io korken89/fugit

What this package is like to depend on

Last release 8 days ago

15 Aug 2026

Ships unpredictably

gaps range from 2 weeks to 2.4 years

Rarely documented

notes for 2 of 14 stable releases

5 versions withdrawn

withdrawn after publishing

5 years old

19 releases · first in 2021

4 releases in the last 12 months

see the full history below

Release timeline

19 releases · Oct 2021 to Aug 2026
2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 19
  1. 0.5.0 15 Aug 2026
    Release notes

    Added

    • 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 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 }.

    Fixed

    • Issue #84: Instant comparison no longer reports Equal for instants that are not equal.
    • Cross-base operations on u32 storage truncated their u64 conversion constants, panicking with a divide-by-zero or returning silently wrong results.

    Breaking Changes

    • BREAKING: Operations between time bases differing by more than the storage type's maximum are now a compile-time error. Only u32 storage with a base ratio above u32::MAX is affected.
    • BREAKING: Issue #83: wrapping instants are no longer Ord, that compare is not transitive. PartialOrd is kept, so <, >, <= and >= are unaffected. Monotonic instants are Ord.
    • BREAKING: Issue #84: on wrapping instants 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.
    • BREAKING: Rename checked_sub_duration to convert_sub_duration and checked_add_duration to convert_add_duration with improved docs.
    • BREAKING: 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>.
    • BREAKING: The TimerInstant, TimerInstantU32 and TimerInstantU64 aliases are replaced by WrappingTimerInstant, WrappingTimerInstantU32 and WrappingTimerInstantU64.
    • BREAKING: 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.
    Open source →
  2. 0.4.0 06 May 2026
    Release notes

    Added

    • Duration::ZERO and Duration::MAX constants
    • Duration::checked_mul, checked_div, div_ceil methods
    • Duration::saturating_add, saturating_sub, saturating_mul methods
    • Duration::from_secs_f32 and from_secs_f64 constructors with rounding
    • Duration::as_secs_f32 and as_secs_f64 conversions
    • Support for picosecond-level precision (enabled by u64 const generics)
    • picos() shorthand method to ExtU32, ExtU64, ExtU32Ceil, and ExtU64Ceil traits
    • Duration::from_picos, as_picos, from_picos_at_least methods
    • PicosDuration<T>, PicosDurationU32, PicosDurationU64 aliases
    • Gigahertz<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)
    • Conversion to/from core::time::Duration

    Fixed

    • Issue #50: Rate conversions now use half-up rounding instead of truncating for better accuracy
    • Issue #53: Overflow detection in shorthand conversions (e.g., NanosDurationU32.minutes())
    • Added #[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.
    • Documentation clarifications across 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.
    • The 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.

    Changed

    • Modernized CI
    • Updated gcd dependency to 2.3
    • Updated defmt dependency to 1.0

    Breaking Changes

    • BREAKING: Duration::const_try_from now rounds-to-nearest, before it was truncating
    • BREAKING: Standardized API naming conventions
      • Constructors now use from_* prefix (e.g., from_ticks, from_rate)
      • Getters now use to_* or as_* prefix (e.g., to_rate, as_ticks)
    • BREAKING: Changed NOM and DENOM const generic parameters from u32 to u64 across all types (Duration, Rate, Instant)
      • This enables support for higher precision time units (e.g., picoseconds with denominator 1_000_000_000_000)
      • Type aliases with FREQ_HZ parameters now use u64 instead of u32
      • Compile-time calculations use u128 intermediates with overflow checks, but results are guaranteed to fit in u64 for embedded compatibility
    Open source →
  3. 0.3.9 11 Nov 2025

    Nothing published for this version

  4. 0.3.8 11 Nov 2025 withdrawn
    Release notes

    Added

    • Optional serde support
    • Optional postcard max size support

    Fixed

    Changed

    Open source →
  5. 0.3.7 06 Jun 2023

    Nothing published for this version

  6. 0.3.6 23 Jun 2022

    Nothing published for this version

  7. 0.3.5 14 Feb 2022

    Nothing published for this version

  8. 0.3.4 14 Feb 2022 withdrawn
    Release notes

    Added

    • Add Div implementation for Duration and Rate
    • Add nanos() methods and NanosDuration aliases alongside other units.
    • Implement AddAssign and SubAssign for Instant and Duration, and MulAssign and DivAssign for Duration.
    • Add 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.
    • Support for Rate (Hertz, Kilohertz, ...)

    Fixed

    Changed

    Open source →
  9. 0.3.3 25 Dec 2021

    Nothing published for this version

  10. 0.3.2 19 Dec 2021

    Nothing published for this version

  11. 0.3.1 13 Dec 2021 withdrawn

    Nothing published for this version

  12. 0.3.0 01 Nov 2021 withdrawn

    Nothing published for this version

  13. 0.2.1 31 Oct 2021

    Nothing published for this version

  14. 0.2.0 31 Oct 2021 withdrawn

    Nothing published for this version

  15. 0.1.4 31 Oct 2021

    Nothing published for this version

  16. 0.1.3 31 Oct 2021

    Nothing published for this version

  17. 0.1.2 31 Oct 2021

    Nothing published for this version

  18. 0.1.1 29 Oct 2021

    Nothing published for this version

  19. 0.1.0 28 Oct 2021

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive