lgwks_std — zero-config primitives that replace a dozen crates
The standard library gets you 90% of the way. This crate is the last 10% — hex, base64, timestamps, UUIDs, hashing, glob matching, regex, JSON, HTTP, tracing, async — as single-import, zero-config calls, each behind one audited dependency stack. No transitive surprises, no feature flag archaeology.
Pick exactly what you need. The default build is core plus trace; every
other capability is one feature with one vetted stack beneath it.
trace is default-on because the estate's PRINTS rule forbids println! in
library code and names tracing as the replacement — a rule that names an
unavailable facility is not a rule. It costs four small crates
(tracing, tracing-core, pin-project-lite, once_cell), with no proc
macro and no syn. Want a genuinely zero-dependency build?
That is the only configuration in which this crate pulls nothing at all, and it
is measured, not asserted: cargo tree -p lgwks_std --no-default-features --features core -e normal prints one line — lgwks_std itself.
Package lgwks_std (underscore) lives in directory crates/lgwks-std
(hyphen): cargo add lgwks_std then use lgwks_std::....
Install
Usage
// Core — zero external deps, always available
use ;
let digest = encode;
let now = now_rfc3339;
let encoded = encode;
let matches = matches;
// Opt-in features — each adds exactly one vetted dependency
use Uuid; // feature = "random"
use hash; // feature = "hash"
use Regex; // feature = "pattern"
use json; // feature = "json"
let id = new_v4.expect;
let blake3 = blake3;
let re = new.expect;
let point: Point = from_str.expect;
The
#[serde(crate = ...)]line is required, not optional.serde's derive macro resolves a crate namedserde; the gate forbids consumers from declaringserdedirectly (it is owned bylgwks_std), so the attribute points the expansion at the re-export instead. If the compiler sayscannot find - serde in this scope, add the attribute — do NOTcargo add serde;lgwks-deps checkwill refuse that edge.
Feature map
[]
= "0.6" # core only, zero deps
= { = "0.6", = ["hash", "json"] } # pick what you need
= { = "0.6", = ["full"] } # everything
| Feature | Modules | What it adds | External deps |
|---|---|---|---|
core (default) |
encoding, fs, glob, hex, leb128, retry, task, time | — | 0 |
random |
random, id | UUID v4, OS entropy | getrandom |
hash |
hash | BLAKE3 content-addressable hashing | blake3 |
pattern |
pattern | Linear-time compiled regex | regex |
json |
json | JSON serialization | serde, serde_json |
ron |
ron | Rusty Object Notation | serde, ron |
wire |
wire | Zero-copy binary serialization | rkyv |
http |
http | Blocking HTTPS client (rustls-only TLS) | ureq, iri-string |
online |
online | TCP reachability probing | none |
fs-raw |
fs | Bytes available on a filesystem, unprivileged | rustix |
full |
all of the above | — | all of the above |
Module reference
| Module | What it does | Replaces |
|---|---|---|
encoding |
Base64 and percent-encoding | base64, percent-encoding |
fs |
Recursive directory walking with sandbox enforcement | walkdir |
glob |
Shell-style glob matching (DP algorithm, O(M*N)) | glob |
hex |
Hex encode and decode | hex |
leb128 |
LEB128 variable-length integer encoding | — |
retry |
Retry budgets: attempts, exponential backoff with caller jitter, deadlines | — |
task |
Single-threaded executor: block_on, concurrent join_all, off-thread spawn_blocking |
— |
time |
RFC 3339 timestamps, calendar math | chrono, time |
random |
OS entropy via getrandom |
getrandom |
id |
UUID v4 generation and parsing | uuid |
hash |
BLAKE3 content-addressable hashing | blake3 |
pattern |
Compiled regex matching (linear-time guarantee) | regex |
json |
JSON encoding and decoding via serde | serde_json |
ron |
RON encoding and decoding via serde | ron |
wire |
Zero-copy binary wire serialization via rkyv | rkyv |
http |
Blocking HTTP GET/POST with strict URL validation | ureq, iri-string |
online |
TCP reachability probing, zero-dep | — |
Dependency philosophy
Every direct dependency is a vetted leaf or single-purpose stack registered by
semantic capability and owner. lgwks-deps check audits authored edges from
Cargo metadata; Cargo.lock preserves the exact transitive provenance.
- blake3 — 3 zero-dep leaves (arrayvec, cfg-if, constant_time_eq)
- regex — 4 BurntSushi-internal crates, zero external deps
- serde — derive stack (proc-macro2, quote, syn)
- serde_json — 2 leaves beyond serde (itoa, ryu)
- ron — 1 leaf beyond serde (bitflags)
- rkyv — 5 djkoloski crates, zero external deps
- getrandom — zero deps in std-only mode
- ureq — blocking HTTP client, rustls-only TLS stack plus small leaves
- iri-string — zero-dep URI validation leaf at default features
- rustix — safe POSIX syscall surface for the
fs-rawprimitive; Unix-only, optional - tracing — 4 crates (
tracing,tracing-core,pin-project-lite,once_cell), no proc macro becauseattributesis off. Default-on: the PRINTS rule forbidsprintln!in library code and namestracingas the replacement, so the facility has to be reachable.
core alone carries zero external dependencies; the default build is core
plus trace. You choose what you pull in; every other feature flag is one
capability, one stack, no surprises.
Minimum supported Rust version
Rust 1.98.0. The MSRV moves forward only when code or dependency requirements demand it.
License
Apache-2.0 — Copyright 2026 Logical Works Incorporated