whereat
Know where the bug is at() — without panic!, debuginfo, or overhead. Replace ? with .at()? in your call tree for beautiful, async-friendly stacktraces with GitHub links.
Essential Features
Clean, minimal, and focused on content
Zero Ok-Path Cost
No heap allocation, no work, no overhead when your code succeeds. Tracing only happens when errors propagate.
Tiny sizeof
At<E> is sizeof(E) + 8 bytes. One pointer for a boxed trace. Your error enum stays the same size it was, plus a pointer.
100x Faster Than Backtrace
18ns per frame vs 2,500ns+ for backtrace/anyhow with RUST_BACKTRACE=1. Captures file:line:col at compile time via #[track_caller].
no_std Compatible
Works with core + alloc. No std required. Use it in embedded, WASM, or anywhere you need error context without a full standard library.
Cross-Crate Tracing
at!() and at_crate!() macros capture crate metadata for GitHub, GitLab, Gitea, and Bitbucket links. See exactly which crate each frame came from.
Works With Everything
Compatible with plain enums, structs, thiserror, anyhow, or any type with Debug. No changes to your error types required.
Quick Start
Add whereat to your project and start tracing errors.
[dependencies]
whereat = "0.1"
[dependencies]
whereat = "0.1"
# In lib.rs:
# whereat::define_at_crate_info!();
Start Tracing Errors
whereat is lightweight, production-ready, and works with any error type you already have.
Read the Docs