A static type checker for Ruby that supports gradual typing through explicit type annotations and signatures.
Steep is a static type checker for Ruby that enables developers to add type safety to their Ruby projects through gradual typing. It requires writing type signatures in RBS files and adding annotations in Ruby code, then checks for type inconsistencies without inferring types automatically. This helps catch errors early in development while allowing incremental adoption across a codebase.
Ruby developers working on medium to large codebases who want to introduce type safety without rewriting their entire application, and teams seeking to improve code reliability and maintainability.
Developers choose Steep because it supports gradual typing—letting them add types incrementally—and integrates seamlessly with existing Ruby workflows through Rake tasks and IDE support, unlike more invasive type systems.
Static type checker for Ruby
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Allows incremental type checking by targeting specific parts of the codebase in the Steepfile, enabling teams to adopt types without a full rewrite.
Supports generics like Hash[String, String], union types, and nullable types in RBS files, providing robust type declarations for complex Ruby code.
Implements LSP for editors like VSCode and Vim, and offers configurable Rake tasks for build process integration, enhancing developer workflow.
Includes the rbs prototype command to generate initial type signatures from existing Ruby code, reducing the initial effort to adopt type checking.
Requires writing and maintaining separate RBS files and in-code annotations like @dynamic, which can be time-consuming and error-prone for large codebases.
Steep does not infer types from Ruby code, necessitating explicit declarations for all typed methods and variables, unlike some alternatives.
Involves managing Steepfile configurations, signature directories, and dealing with incomplete prototype outputs, as noted in the README's examples.