Gradual static type checker for Ruby, originally created by Stripe. Provides type signatures, runtime checks, and IDE integration. Configured per file via `# typed: false | true | strict` (plus deprecated `strong`); `strict` requires a signature on every method. Features include signatures written with `extend T::Sig` + `sig { params(...).returns(...) }`, escape hatches (T.unsafe, T.must, T.cast, T.let), generics via `type_parameters`, and a special block-type syntax. Supports RBI sidecar files describing signatures without touching implementations (used for untyped gems and metaprogrammed code). Has an experimental `requires_ancestor` feature (strongly recommended) that lets a module declare it must be included in a particular class. Runtime checking can be enabled/disabled globally; signatures are erased with no overhead at startup, but type assertions remain in the bytecode and can't be optimized by YJIT. Sorbet is written in C++, which limits community contributions. Rafael Zamaris's team is experimenting with Sorbet in Spree to type service-object interfaces so IDEs (RubyMine, VS Code) highlight incorrect DI overrides; Erwin Kroon's GitHub team uses Sorbet on a 10-year-old codebase for safer refactoring. Trade-offs: introducing types to existing meta-programmed/monkey-patched code is hard; it's less popular than other ecosystems; open-ended options-hash arguments are hard to type; over-reliance on T.unsafe/T.cast adds overhead without static guarantees.