Updates
silicon-iam-client compares its compiled version with the newest stable release on
crates.io and maintains the consuming Cargo project's lockfile. The policy is automatic by
default and explicitly opt-out.
What automatic means for a Rust library
Code already compiled into a running process cannot be replaced safely. After an IAM request
finishes and its response has been decoded, the client checks crates.io if it has never
attempted a check or its last attempt was at least one hour ago. No idle timer or daemon runs;
another completed request triggers the next due check. If a newer stable release exists, it finds the
nearest Cargo.toml at or above the process working directory and runs the equivalent
of:
cargo update --manifest-path /path/to/Cargo.toml \
-p silicon-iam-client --precise <latest-version>
The current process completes with its compiled version. The next Cargo build uses the updated lockfile. This avoids making the false promise that a Rust library can hot-swap itself.
Opt out
let client = Client::builder("https://backend.iam.teamofsilicons.com")?
.auto_update(false)
.build()?;
Or disable it for one deployment without rebuilding:
SILICON_IAM_CLIENT_AUTO_UPDATE=false ./your-application
Values 0, false, no, and off disable the updater.
The default is automatic. When an application starts outside its source directory, select the
manifest explicitly with .update_manifest("/path/to/Cargo.toml").
Observe the result
After an IAM call, client.update_status() reports the latest result: Current,
Updated, Disabled, NoCargoProject, or Failed.
A registry timeout, absent manifest, incompatible version constraint, or failed Cargo command
never changes the IAM request's result. The registry check has a three-second timeout.
One client and its clones share an in-memory last-attempt time with only one check running at a
time; concurrent requests do not wait for another request's check. The request performing due
maintenance waits for it before returning, without changing its IAM result. Failed or cancelled
attempts retain the hourly throttle. Cancellation releases the single-flight slot; a Cargo
operation already started retains the slot until it finishes on a blocking worker. Separately
constructed clients have independent schedules, and restarting the process resets that
in-memory state. There is no maintenance while the client is idle.