Are you a developer who is tired of null pointer exceptions, SQL injections, concurrency errors, and other errors that appear during testing or in the field? You need a tool that can guarantee the absence of these errors and of many other important bugs. Are you a software architect who wants to implement custom checks that enforce correct usage and prevent errors? You need a framework that supports you in creating a code checker that works at the semantic level. This tutorial is aimed at both audiences. It will teach you about pluggable type-checking and the Checker Framework, an open-source tool that provides more than a dozen checkers that are ready to use, including ones for nullness, formatting, and concurrency. They have found hundreds of bugs in well-tested open source code, including from Oracle, Google, Apache, etc., and even when other tools like FindBugs gave the code a clean bill of health. The Checker Framework also enables you to create your own new pluggable type system. You will leave the tutorial ready to improve your code.