web-time

Crates.io Version Live Build Status Docs.rs Documentation Main Documentation

Description

Complete drop-in replacement for [std::time] that works in the browser.

Currently [Instant] and [SystemTime] will simply panic when using the wasm32-unknown-unknown target. This implementation uses [Performance.now()] to offer a drop-in replacement that works in the browser.

At the same time the library will simply re-export [std::time] when not using the wasm32-unknown-unknown target and will also not pull in any dependencies.

Additionally, if compiled with target-feature = "atomics" it will synchronize the timestamps to account for different context's, like web workers. See [Performance.timeOrigin] for more information.

Target

This library specifically targets browsers, that support [Performance.now()], with the wasm32-unknown-unknown target. Emscripten is not supported. WASI doesn't require support as it has it's own native API to deal with [std::time].

Furthermore it depends on [wasm-bindgen], which is required. This library will continue to depend on it until a viable alternative presents itself, in which case multiple ecosystems could be supported.

Note

Currently a known bug is affecting browsers on operating system other then Windows. This bug prevents [Instant] from continuing to tick when the context is asleep. This doesn't necessarily conflict with Rusts requirements of [Instant], but might still be unexpected.

See the MDN documentation on this for more information.

Usage

You can simply import the types you need: ```rust use web_time::{Instant, SystemTime};

let now = Instant::now(); let time = SystemTime::now(); ```

MSRV

As this library heavily relies on [wasm-bindgen] the MSRV depends on it. At the point of time this was written the MSRV is 1.56.

Alternatives

instant Crates.io is a popular alternative! However the API it implements doesn't match [std::time] exactly.

Changelog

See the [CHANGELOG] file for details.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.