# The Checker Framework

Are you tired of null pointer exceptions, unintended side effects, SQL injections, concurrency errors, mistaken equality tests, and other run-time errors that appear during testing or in the field?

The Checker Framework enhances Java's type system to make it more powerful and useful. This lets software developers detect and prevent errors in their Java programs. The Checker Framework includes compiler plug-ins ("checkers") that find bugs or verify their absence. It also permits you to write your own compiler plug-ins.

Quick start: go directly to the Installation instructions and tutorial.

- Download: checker-framework-3.0.1.zip (2 Dec 2019); includes source, platform-independent binary, tests, and documentation.
  Then, see the installation instructions and tutorial.
- Documentation:
  - Checker Framework Manual (HTML)
  - Checker Framework Manual (PDF)
  - Installation instructions
    or, try it without installation at the Checker Framework Live Demo webpage
  - Tutorial with Nullness Checker, Regex Checker, and Tainting checker
    (There is also an older external Nullness Checker tutorial whose setup information is out of date.)
  - FAQ (Frequently Asked Questions with answers)
  - Javadoc API documentation
  - Changelog
- Source code repository (at GitHub): https://github.com/typetools/checker-framework/
  The Checker Framework Manual contains instructions on building from source.
  Also see the Developer manual.
- Inference tools automatically add annotations to your code, making it even easier to start using the checkers. The Checker Framework manual contains a list of inference tools.
- Optional related tools:
  - The Annotation File Utilities extract annotations from, and write annotations to, `.java` and `.class` files. It also provides a representation (called an “annotation file”) for annotations that is outside the source code or the `.class` file. The tools support both Java 5 declaration annotations and Java 8 type annotations.
    - annotation-tools-3.9.3.zip (02 Dec 2019)
    - source code repository
    - Documentation is included in the zip archive and in the repository.
- Archive of previous releases of the Checker Framework
- Research papers: See the Checker Framework manual

## Support and community

If you have a question, then first see whether your question is answered in one of the manuals listed under Documentation below. If none of those documents answers your question, then use one of the mailing lists.

### Documentation

- Checker Framework Manual (PDF, HTML)
- Installation instructions
  or, try it without installation at the Checker Framework Live Demo webpage
- Tutorial Other tutorials:
  - Nullness Checker tutorial (external site, setup information is out of date)
- FAQ (Frequently Asked Questions with answers)
- Javadoc API documentation
- Changelog

### Bug reports

If you encounter a problem, please submit a bug report so that we can fix it. To submit a bug report, read these instructions, and then use the Checker Framework issue tracker.

### Mailing lists

We welcome questions, suggestions, patches, reports about case studies, and other contributions. Please let us know how we can improve the Checker Framework!

- checker-framework-discuss: for general discussion about the Checker Framework for building pluggable type systems (view archives, view old archives)
- checker-framework-dev: to reach the developers who maintain and extend the Checker Framework (view archives, view old archives)

You can also use the mailing lists to give help. Here are just a few examples:

- Respond to questions.
- Report problems (in the implementation or the documentation) or request features.
- Write code, then share your bug fixes, new features, compiler plug-ins, or other improvements.
- Make suggestions regarding the specification.

Another way to help is to tell your friends and colleagues about the usefulness and practicality of type annotations, or to report your successes to the mailing lists.

Last updated: 2 Dec 2019