init_static 0.5.2

A Rust library for explicit static initialization.
Documentation

init_static

Crates.io Documentation

A Rust library for explicit static initialization.

Overview

init_static provides a macro similar to lazy_static, but with explicit initialization control. This means you decide when your statics are initialized, rather than having them lazily evaluate on first use.

Unlike lazy_static, init_static uses std::sync::OnceLock internally and does not initialize your static values automatically. Instead, it gathers your initialization functions at compile-time using linkme, and provides a function to run them all at once early in your program (for example, inside main()).

Compare to lazy_static

Feature lazy_static init_static
Initialization Implicit (on first use) Explicit (init_static() call)
Result support Not supported Supported
Async support Not supported Supported
Early failure No (fail at runtime) Yes (optional, before app starts)

Installation

Add this to your Cargo.toml:

[dependencies]
init_static = { version = "0.5" }

Example

use init_static::init_static;

init_static! {
    static VALUE: u32 = "42".parse()?;
}

#[tokio::main]
async fn main() {
    init_static().await.unwrap();
    println!("{}", *VALUE);
}