MCPcopy Index your code
hub / github.com/cockroachdb/errors

github.com/cockroachdb/errors @v1.14.0

repository ↗ · DeepWiki ↗ · release v1.14.0 ↗ · + Follow
1,295 symbols 3,950 edges 126 files 446 documented · 34% 13 cross-repo links updated 2d agov1.14.0 · 2026-06-18★ 2,43219 open issues
README

cockroachdb/errors: Go errors with network portability

This library aims to be used as a drop-in replacement to github.com/pkg/errors and Go's standard errors package. It also provides network portability of error objects, in ways suitable for distributed systems with mixed-version software compatibility.

It also provides native and comprehensive support for PII-free details and an opt-in Sentry.io reporting mechanism that automatically formats error details and strips them of PII.

See also the design RFC.

Build Status Go Reference

Table of contents:

Features

Feature Go's <1.13 errors github.com/pkg/errors Go 1.13 errors/xerrors cockroachdb/errors
error constructors (New, Errorf etc)
error causes (Cause / Unwrap)
cause barriers (Opaque / Handled)
errors.As(), errors.Is()
automatic error wrap when format ends with : %w
standard wrappers with efficient stack trace capture
transparent protobuf encode/decode with forward compatibility
errors.Is() recognizes errors across the network
comprehensive support for PII-free reportable strings
support for both Cause() and Unwrap() go#31778
standard error reports to Sentry.io
wrappers to denote assertion failures
wrappers with issue tracker references
wrappers for user-facing hints and details
wrappers to attach secondary causes
wrappers to attach logtags details from context.Context
errors.FormatError(), Formatter, Printer (under construction)
errors.SafeFormatError(), SafeFormatter
wrapper-aware IsPermission(), IsTimeout(), IsExist(), IsNotExist()

"Forward compatibility" above refers to the ability of this library to recognize and properly handle network communication of error types it does not know about, for example when a more recent version of a software package sends a new error object to another system running an older version of the package.

How to use

  • construct errors with errors.New(), etc as usual, but also see the other error leaf constructors below.
  • wrap errors with errors.Wrap() as usual, but also see the other wrappers below.
  • test error identity with errors.Is() as usual. Unique in this library: this works even if the error has traversed the network! Also, errors.IsAny() to recognize two or more reference errors.
  • replace uses of os.IsPermission(), os.IsTimeout(), os.IsExist() and os.IsNotExist() by their analog in sub-package oserror so that they can peek through layers of wrapping.
  • access error causes with errors.UnwrapOnce() / errors.UnwrapAll() (note: errors.Cause() and errors.Unwrap() also provided for compatibility with other error packages).
  • encode/decode errors to protobuf with errors.EncodeError() / errors.DecodeError().
  • extract PII-free safe details with errors.GetSafeDetails().
  • extract human-facing hints and details with errors.GetAllHints()/errors.GetAllDetails() or errors.FlattenHints()/errors.FlattenDetails().
  • produce detailed Sentry.io reports with errors.BuildSentryReport() / errors.ReportError().
  • implement your own error leaf types and wrapper types:
  • implement the error and errors.Wrapper interfaces as usual.
  • register encode/decode functions: call errors.Register{Leaf,Wrapper}{Encoder,Decoder}() in a init() function in your package.
  • implement Format() that redirects to errors.FormatError().
  • see the section Building your own error types below.

What comes out of an error?

Error detail Error() and format %s/%q/%v format %+v GetSafeDetails() Sentry report via ReportError()
main message, eg New() visible visible yes (CHANGED IN v1.6) full (CHANGED IN v1.6)
wrap prefix, eg WithMessage() visible (as prefix) visible yes (CHANGED IN v1.6) full (CHANGED IN v1.6)
stack trace, eg WithStack() not visible simplified yes full
hint , eg WithHint() not visible visible no type only
detail, eg WithDetail() not visible visible no type only
assertion failure annotation, eg WithAssertionFailure() not visible visible no type only
issue links, eg WithIssueLink(), UnimplementedError() not visible visible yes full
safe details, eg WithSafeDetails() not visible visible yes full
telemetry keys, eg. WithTelemetryKey() not visible visible yes full
secondary errors, eg. WithSecondaryError(), CombineErrors() not visible visible redacted, recursively redacted, recursively
barrier origins, eg. Handled() not visible visible redacted, recursively redacted, recursively
error domain, eg. WithDomain() not visible visible yes full
context tags, eg. WithContextTags() not visible visible keys visible, values redacted keys visible, values redacted

Available error leaves

An error leaf is an object that implements the error interface, but does not refer to another error via a Unwrap() or Cause() method.

  • New(string) error, Newf(string, ...interface{}) error, Errorf(string, ...interface{}) error: leaf errors with message
  • when to use: common error cases.
  • what it does: also captures the stack trace at point of call and redacts the provided message for safe reporting.
  • how to access the detail: Error(), regular Go formatting. Details in Sentry report.
  • see also: Section Error composition below. errors.NewWithDepth() variants to customize at which call depth the stack trace is captured.

  • AssertionFailedf(string, ...interface{}) error, NewAssertionFailureWithWrappedErrf(error, string, ...interface{}) error: signals an assertion failure / programming error.

  • when to use: when an invariant is violated; when an unreachable code path is reached.
  • what it does: also captures the stack trace at point of call, redacts the provided strings for safe reporting, prepares a hint to inform a human user.
  • how to access the detail: IsAssertionFailure()/HasAssertionFailure(), format with %+v, Safe details included in Sentry reports.
  • see also: Section Error composition below. errors.AssertionFailedWithDepthf() variant to customize at which call depth the stack trace is captured.

  • Handled(error) error, Opaque(error) error, HandledWithMessage(error, string) error: captures an error cause but make it invisible to Unwrap() / Is().

  • when to use: when a new error occurs while handling an error, and the original error must be "hidden".
  • what it does: captures the cause in a hidden field. The error message is preserved unless the ...WithMessage() variant is used.
  • how to access the detail: format with %+v, redacted details reported in Sentry reports.

  • UnimplementedError(IssueLink, string) error: captures a message string and a URL reference to an external resource to denote a feature that was not yet implemented.

  • when to use: to inform (human) users that some feature is not implemented yet and refer them to some external resource.
  • what it does: captures the message, URL and detail in a wrapper. The URL and detail are considered safe for reporting.
  • how to access the detail: errors.GetAllHints(), errors.FlattenHints(), format with %+v, URL and detail included in Sentry report (not the message).
  • see also: errors.WithIssueLink() below for errors that are not specifically about unimplemented features.

Available wrapper constructors

An error wrapper is an object that implements the error interface, and also refers to another error via an Unwrap() (preferred) and/or Cause() method.

All wrapper constructors can be applied safely to a nil error: they behave as no-ops in this case:

// The following:
// if err := foo(); err != nil {
//    return errors.Wrap(err, "foo")
// }
// return nil
//
// is not needed. Instead, you can use this:
return errors.Wrap(foo(), "foo")
  • Wrap(error, string) error, Wrapf(error, string, ...interface{}) error:
  • when to use: on error return paths.
  • what it does: combines WithMessage(), WithStack(), WithSafeDetails().
  • how to access the d

Extension points exported contracts — how you extend this code

Wrapper (Interface)
Wrapper is the type of an error wrapper. [43 implementers]
errutil_api.go
Formatter (Interface)
A Formatter formats error messages. NB: Consider implementing SafeFormatter instead. This will ensure that error displa [18 …
errbase/formatter.go
SafeDetailer (Interface)
SafeDetailer is an interface that can be implemented by errors that can provide PII-free additional strings suitable for [14 …
errbase/safe_details.go
ErrorHinter (Interface)
ErrorHinter is implemented by types that can provide user-informing detail strings. This is implemented by withHint here [4 …
hintdetail/hintdetail.go
TypeKeyMarker (Interface)
TypeKeyMarker can be implemented by errors that wish to extend their type name as seen by GetTypeKey(). Note: the key m [2 …
errbase/encode.go
StackTraceProvider (Interface)
StackTraceProvider is a provider of StackTraces. This is, intendedly, defined to be implemented by pkg/errors.stack.
errbase/format_error.go
SafeFormatter (Interface)
SafeFormatter is implemented by error leaf or wrapper types that want to separate safe and non-safe information when pri [25 …
errbase/formatter.go
ErrorDetailer (Interface)
ErrorDetailer is implemented by types that can provide user-informing detail strings. This is implemented by withDetail [1 …
hintdetail/hintdetail.go

Core symbols most depended-on inside this repo

Check
called by 265
testutils/simplecheck.go
Is
called by 148
markers/markers.go
CheckStringEqual
called by 80
testutils/simplecheck.go
GetTypeKey
called by 77
errbase/encode.go
Run
called by 70
testutils/simplecheck.go
CheckEqual
called by 64
testutils/simplecheck.go
DecodeError
called by 54
errbase/decode.go
Printf
called by 51
errbase/formatter.go

Shape

Method 620
Function 531
Struct 120
Interface 14
TypeAlias 7
FuncType 3

Languages

Go100%

Modules by API surface

errorspb/errors.pb.go131 symbols
fmttests/format_error_test.go93 symbols
markers/markers_test.go65 symbols
grpc/echoer.pb.go46 symbols
errbase/format_error.go38 symbols
errorspb/tags.pb.go35 symbols
errutil/redactable.go26 symbols
errutil_api.go24 symbols
errbase/encode.go23 symbols
markers/markers.go22 symbols
markers/internal/unknown.pb.go20 symbols
exthttp/ext_http.pb.go20 symbols

Dependencies from manifests, versioned

github.com/cockroachdb/datadrivenv1.0.2 · 1×
github.com/cockroachdb/logtagsv0.0.0-2023011820175 · 1×
github.com/cockroachdb/redactv1.1.5 · 1×
github.com/getsentry/sentry-gov0.46.0 · 1×
github.com/gogo/googleapisv1.4.1 · 1×
github.com/gogo/statusv1.1.0 · 1×
github.com/hydrogen18/memlistenerv1.0.0 · 1×
github.com/kr/prettyv0.3.1 · 1×
github.com/kr/textv0.2.0 · 1×

For agents

$ claude mcp add errors \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact