# unthrown > Explicit errors as values A small, focused Result type with a separate defect channel for the unexpected — and qualification enforced at every boundary. ## Table of Contents ### Tutorial - [Getting started](/unthrown/tutorial/getting-started.md) - [Crossing an async boundary](/unthrown/tutorial/crossing-an-async-boundary.md) ### How-to guides - [Upgrade from 4.x to 5.0](/unthrown/how-to/upgrade-to-v5.md) - [Migrate from try/catch](/unthrown/how-to/migrate-from-try-catch.md) - [Migrate from neverthrow](/unthrown/how-to/migrate-from-neverthrow.md) - [Migrate from Boxed](/unthrown/how-to/migrate-from-boxed.md) - [Qualify a boundary](/unthrown/how-to/qualify-a-boundary.md) - [Model errors](/unthrown/how-to/model-errors.md) - [Sequence dependent steps with do-notation](/unthrown/how-to/sequence-dependent-steps.md) - [Combine parallel results](/unthrown/how-to/combine-parallel-results.md) - [Handle results at the edge](/unthrown/how-to/handle-results-at-the-edge.md) - [Validate with Standard Schema](/unthrown/how-to/validate-with-standard-schema.md) - [Use with Prisma](/unthrown/how-to/use-with-prisma.md) - [Use with Drizzle](/unthrown/how-to/use-with-drizzle.md) - [Use with oRPC](/unthrown/how-to/use-with-orpc.md) - [Test with Vitest](/unthrown/how-to/test-with-vitest.md) - [Lint your codebase](/unthrown/how-to/lint-your-codebase.md) - [Interoperate with other libraries](/unthrown/how-to/interoperate-with-libraries.md) ### Reference - [Combinator reference](/unthrown/reference/combinators.md) - [Result & AsyncResult surface](/unthrown/reference/result-surface.md) - [Glossary](/unthrown/reference/glossary.md) - [API Reference](/unthrown/api.md) ### Explanation - [Why unthrown?](/unthrown/explanation/why-unthrown.md) - [The Defect Channel](/unthrown/explanation/the-defect-channel.md) - [Qualification at the boundary](/unthrown/explanation/qualification.md) - [The async model](/unthrown/explanation/async-model.md) - [Exhaustive error matching](/unthrown/explanation/exhaustive-error-matching.md) - [Comparison](/unthrown/explanation/comparison.md) - [Design decisions](/unthrown/explanation/design-decisions.md) ### API Reference - [API Reference](/unthrown/api.md) - [unthrown](/unthrown/api/core.md) - [@unthrown/vitest](/unthrown/api/vitest.md) - [@unthrown/effect](/unthrown/api/effect.md) - [@unthrown/neverthrow](/unthrown/api/neverthrow.md) - [@unthrown/boxed](/unthrown/api/boxed.md) - [@unthrown/standard-schema](/unthrown/api/standard-schema.md) - [@unthrown/prisma](/unthrown/api/prisma.md) - [@unthrown/drizzle](/unthrown/api/drizzle.md) - [@unthrown/orpc](/unthrown/api/orpc.md) ### Examples - [Examples](/unthrown/examples.md): Small runnable packages — code that compiles and is covered by tests, unlike the snippets in the guide. - [Checkout domain example](/unthrown/examples/checkout-domain.md): Errors as values in a small checkout domain — a TaggedError union, Do/bind sequencing, and the defect channel, in a package that compiles and is tested. - [Checkout persistence example](/unthrown/examples/checkout-persistence.md): Storing and reading a checkout with @unthrown/prisma — a read that infers E = never, and a write that carries only the P-codes a caller would branch on. - [Checkout API example](/unthrown/examples/checkout-api.md): Serving placeOrder over oRPC with @unthrown/orpc — an exhaustive mapErrCases at the edge, no try/catch, and a provider outage that collapses to INTERNAL_SERVER_ERROR instead of an unhandled rejection. - [Existing error types example](/unthrown/examples/existing-errors.md): Adopting unthrown in a codebase that already models its domain errors — a kind-discriminated class hierarchy, a plain code union, and untagged third-party classes, with no TaggedError anywhere. ### Other - [client](/unthrown/api/orpc/client.md) - [extensions/result](/unthrown/api/orpc/extensions.result.md) - [index](/unthrown/api/drizzle/index-1.md) - [node-postgres](/unthrown/api/drizzle/node-postgres.md) - [server](/unthrown/api/orpc/server.md)