# jspecify/jspecify

An artifact of fully-specified annotations to power static-analysis checks, beginning with nullness analysis.

Repository: https://github.com/jspecify/jspecify
Canonical: https://ross.abutalabs.com/products/jspecify
Homepage: https://jspecify.dev
Language: Java
License: Apache-2.0
License Family: permissive
Topics: java, static-analysis, kotlin, android, annotations, bugfinding, jvm-languages, null, nullability-analysis, standard-library
Last push: 2026-09-02T01:36:40+00:00

## Health v2 (maintenance only)
Score: 87/100 (v2, computed 2026-09-03T02:20:16.233290+00:00)
- activity 100, release rhythm 63, longevity 100
- inputs: {"age_days": 2907, "days_push": 1, "days_rel": 35, "gap_med": null, "n_releases_24m": 1}
- flags: none
- formula: round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)

## Adoption (not part of the score)
Stars 1137, forks 43 (observed 2026-09-03T02:15:13.239563+00:00)

## What it is
JSpecify is a standard, tool-neutral set of Java annotations with precisely specified semantics for powering static analysis, currently focused on nullness analysis. It is developed by consensus of major JVM stakeholders (Google, JetBrains, Oracle, Sonar, and others) so library owners can annotate once and support many analysis tools.

## Use cases
- annotate Java APIs with nullability so tools can catch NullPointerExceptions
- standardize nullness annotations across libraries instead of picking one tool's annotations
- make Kotlin and Java interop nullness-safe on the JVM
- build static analysis or bug-finding tools against a shared nullness spec
- document whether a type usage can be null in a machine-readable way

## When to choose
- you maintain a Java/JVM library and want tool-independent nullness annotations
- you want consistent nullness semantics across Error Prone, NullAway, IntelliJ, Sonar, and Kotlin
- you are building a static analysis tool for JVM languages and want a standard to implement

## When to avoid
- you need annotations for kinds of static analysis beyond nullness, which JSpecify does not yet cover
- your toolchain only supports a single vendor's annotation set and you cannot adopt new dependencies
- you work outside the JVM ecosystem

## Facets
- artifact type: library
- maturity: stable
- function: type-system, developer-tools
- domain: programming-languages, developer-tools
- platform: jvm
- tags: nullness-analysis, static-analysis, annotations, jvm-languages, tool-neutral, android

## Member repositories
- jspecify/jspecify (main) score 87

## Provenance
- Observed fields: from GitHub, fetched 2026-09-03T02:15:13.239563+00:00.
- Health v2: computed from the inputs above; adoption is never an input.
- Inferred fields (summary, facets, guidance): AI-extracted, prompt v1, taxonomy v1, on 2026-08-30T06:36:47.586889+00:00, confidence not recorded.
  - readme: https://github.com/jspecify/jspecify (fetched 2026-09-03T02:15:13.239563+00:00, sha 9a855f10c823)
  - homepage: https://jspecify.dev (fetched 2026-08-29T12:41:45.497789+00:00, sha a630ba450dea)
  - site_page: https://jspecify.dev/about (fetched 2026-08-29T12:41:45.510346+00:00, sha c2bd1eddcf46)
  - site_page: https://jspecify.dev/docs/start-here (fetched 2026-08-29T12:41:45.512677+00:00, sha a13d01767b31)
  - site_page: https://jspecify.dev/docs/api/org/jspecify/annotations/package-summary.html (fetched 2026-08-29T12:41:45.514933+00:00, sha a563c0421850)
  - site_page: https://jspecify.dev/docs/user-guide (fetched 2026-08-29T12:41:45.517027+00:00, sha bad8f0380e48)
  - site_page: https://jspecify.dev/docs/spec (fetched 2026-08-29T12:41:45.519633+00:00, sha 9311a9829e0f)
- Data as of 2026-08-30T08:39:29.467469+00:00.
