anyhow

Flexible, idiomatic error handling for Rust applications with a single concrete error type.

Library
Cargo
v1.0.104
6,685 stars
Apache License 2.0

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
67 /100 Good
Development Activity 52
Maintenance 64
Community 52
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
93 /100 Excellent
Architecture 92
Code Quality 95
Innovation 94
Learning Curve 90

anyhow provides anyhow::Error, a trait-object-based error type that makes error handling in Rust application code effortless. Instead of defining bespoke error enums for every fallible function, you return anyhow::Result<T> and let the ? operator propagate any error that implements std::error::Error.

Beyond simple propagation, anyhow lets you attach human-readable context to errors, automatically captures backtraces on recent Rust versions, and supports downcasting back to concrete error types when you need to branch on the underlying cause. It works in both std and no_std environments and pairs naturally with thiserror for library-defined error types.

What You Get

  • A single anyhow::Error type and anyhow::Result<T> alias that absorb any std::error::Error via the ? operator
  • The Context / with_context API for attaching descriptive, low-overhead context to errors as they propagate
  • The anyhow! and bail! macros for constructing and early-returning ad-hoc errors with format-string interpolation
  • Automatic backtrace capture (Rust >= 1.65) and downcasting back to concrete error types by value or reference
  • no_std support (with a global allocator) exposing nearly the same API surface

Common Use Cases

  • Returning errors from application main, CLI tools, and glue code without defining custom error enums
  • Adding context to low-level errors so failures are debuggable (“Failed to read config from …”)
  • Propagating heterogeneous errors from many libraries through one uniform result type
  • Inspecting or branching on a root cause via downcasting when specific handling is required

Under The Hood

Architecture — The crate centers on a single Error type (src/error.rs) that is a thin, pointer-width wrapper around a heap-allocated ErrorImpl reached through custom fat/thin pointer machinery in src/ptr.rs (Own, Ref, Mut), letting one word carry the error plus a vtable of type-erased operations (display, debug, downcast, backtrace). src/context.rs implements the Context trait that layers messages onto the cause chain, src/chain.rs provides iteration over the Caused by: sources, src/fmt.rs renders the chain and backtrace, and src/backtrace.rs gates capture behind Rust-version and feature cfgs. Tech Stack — Pure Rust (edition 2021, MSRV 1.68), zero required runtime dependencies, with a build.rs probe that feature-detects compiler capabilities (core error trait, generic member access, backtrace support) and sets cfgs so the same source compiles across a wide range of toolchains and std/no_std. Dev-only dependencies (thiserror, trybuild, rustversion, syn, futures) exist purely for the test suite. Code Quality — Exceptionally high: 14 integration test files under tests/ cover downcasting, context, ffi, boxed conversion, fmt, macros, source chains, and drop behavior, plus trybuild compile-fail UI tests that pin exact error messages. The code is unsafe-heavy by necessity (manual pointer tagging) but tightly encapsulated behind safe APIs and maintained by a single expert author with meticulous cfg discipline. API Design — Best-in-class developer experience: getting started needs only use anyhow::Result and the ? operator, context is one .context("...") call away, and the anyhow!/bail! macros read naturally. Documentation is thorough with runnable doctests on every public item, and the API deliberately mirrors familiar Result/Error idioms so the learning curve is minimal.

Used by 50 apps in this directory

TypeScript
74%
Apache 2.0

Fern

Developer Tools

3,822

Fern turns a single OpenAPI, AsyncAPI, or Protobuf definition into type-safe SDKs for nine languages and a hosted API documentation site, all from one CLI and one source of truth.

View details
90
Repo Health
86
Technical
66
Dependency
Built with
TypeScript 74%
Updated 6 days ago
Elixir
64%
Apache 2.0

Firezone

Networking · Security

9,123

Enterprise-grade zero-trust access platform built on WireGuard® that replaces legacy VPNs with peer-to-peer, identity-aware secure tunnels.

View details
90
Repo Health
85
Technical
79
Dependency
Built with
Elixir 64%
Rust 26%
Updated 6 days ago
Rust
99%
Other

Fluree DB

Databases

475

A temporal, verifiable graph database with git-like branching, integrated vector/text/geo search, and RDF/SPARQL/JSON-LD/openCypher support — benchmarked at 10.4x faster than the next database on the full Wikidata dump.

View details
87
Repo Health
74
Technical
65
Dependency
Built with
Rust 99%
Updated 6 days ago
Rust
60%
MIT

Handy

Productivity · Voice AI

34,484

Free, offline, open-source speech-to-text that pastes directly into any app on Windows, macOS, and Linux.

View details
88
Repo Health
78
Technical
71
Dependency
Built with
Rust 60%
TypeScript 30%
Updated 6 days ago
Rust
37%
Other

Hook0

Devops

1,504

Open-source Webhooks-as-a-Service: deliver events to your users with auto-retry, signed payloads, and a real-time subscriber dashboard — all without building the infrastructure yourself.

View details
84
Repo Health
82
Technical
69
Dependency
Built with
Rust 37%
TypeScript 12%
Updated 1 weeks ago
Go
69%
MIT

hoop

Monitoring · Security

836

A wire-protocol gateway that enforces data masking, command blocking, approval workflows, and full session recording for engineers and AI agents accessing production infrastructure.

View details
86
Repo Health
80
Technical
64
Dependency
Built with
Go 69%
Clojure 13%
Updated 6 days ago
TypeScript
62%
EPL-2.0

Huly Platform

Collaboration · Project Management · Team Chat

27,978

Open-source all-in-one workspace that replaces Linear, Jira, Slack, and Notion for product and engineering teams.

View details
90
Repo Health
86
Technical
62
Dependency
Built with
TypeScript 62%
Svelte 34%
Updated 1 weeks ago
Rust
72%
Other

iii

Developer Tools · Devops

18,854

Compose, extend, and observe every backend service in real time using three primitives: Workers, Functions, and Triggers.

View details
87
Repo Health
85
Technical
65
Dependency
Built with
Rust 72%
TypeScript 16%
Updated 1 weeks ago
Rust
96%
Apache 2.0

InfluxDB

Analytics · Databases

31,779

Open-source time-series database built for real-time ingest, fast SQL queries, and embedded Python automation — powered by Apache Arrow and Parquet.

View details
80
Repo Health
76
Technical
72
Dependency
Built with
Rust 96%
Updated 1 weeks ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers