Releases: jspecify/jspecify
1.0.0
JSpecify 1.0.0 is the first stable release of the only consensus-driven, tool-independent nullness annotations for Java code (with benefits for Kotlin interoperability). Future releases will add annotations for other kinds of static-analysis checks.
Check out our usage page for instructions on how to depend on JSpecify in your project and our guidelines on when to start doing so. Also check out our User Guide.
The 1.0.0 release contains four annotations:
Artifacts
- Javadoc
- Maven Central: org.jspecify:jspecify
Version 1.0.0 of the specification was subsequently released in October. The latest version of the specification, possibly including any future unreleased changes, is available at https://jspecify.dev/docs/spec/.
Changes since version 0.3.0
No code changes, only Javadoc changes and OSGI metadata.
0.3.0
For an introduction to JSpecify, see our Start Here page.
We'll soon post more information about when different tools support our annotations, how to think about adopting the annotations, and what we'll be doing in the coming year.
Changes relative to version 0.3.0-alpha-3
- We have removed the old
org.jspecify.nullnesspackage in favor of the neworg.jspecify.annotationspackage. If you need a release that contains both packages to ease your migration, you can use version 0.3.0-alpha-3.
Additional changes relative to version 0.2.0
- additional annotations:
- expanded Javadoc
- an additional
@Targetfor@NullMarked:MODULE(#245)- Note that this change causes problems for users who build with the javac from JDK8 (#302), at least without workarounds. It is still always safe to build with a newer JDK with flags like
--release 8, and it is generally safe to run under JDK8.
- Note that this change causes problems for users who build with the javac from JDK8 (#302), at least without workarounds. It is still always safe to build with a newer JDK with flags like
Artifacts:
- Javadoc
- Maven Central:
org.jspecify:jspecify
As always, you can reach us at jspecify-discuss@googlegroups.com.
0.3.0-alpha-3
All parts of the project remain under development, and any aspect of naming or design may change before 1.0.0. Do not release libraries using JSpecify annotations at this time.
We may follow this release with a non-alpha 0.3.0 before the holidays.
The only significant changes since version 0.3.0-alpha-2 are:
- Our module now exports both the old
org.jspecify.nullnesspackage and the neworg.jspecify.annotationspackage. This multi-package release is still only a migration aid: We'll be removingorg.jspecify.nullnessbefore publishing a non-alpha 0.3.0 release. @NullUnmarkedis no longer applicable toMODULE(since an unannotated module is treated as null-unmarked already).
Artifacts:
- Javadoc
- Maven Central:
org.jspecify:jspecify
As always, you can reach us at jspecify-discuss@googlegroups.com.
0.3.0-alpha-2
All parts of the project remain under development, and any aspect of naming or design may change before 1.0.0. Do not release libraries using JSpecify annotations at this time.
We may follow this release with a non-alpha 0.3.0 before the holidays.
The major user-visible changes since version 0.3.0-alpha-1 are:
- We've removed
@Implies. - All remaining annotations are moving from
org.jspecify.nullnesstoorg.jspecify.annotations. For this release and the following 0.3.0-alpha-3 only, we're including deprecated copies of the annotations in the old location.
Artifacts:
- Javadoc
- Maven Central:
org.jspecify:jspecify
As always, you can reach us at jspecify-discuss@googlegroups.com.
0.3.0-alpha-1
All parts of the project remain under development, and any aspect of naming or design may change before 1.0.0. Do not release libraries using JSpecify annotations at this time. In particular, we are likely to change the package names before even making a non-alpha 0.3.0 release.
(We are currently making an effort to release a non-alpha 0.3.0 before the holidays.)
The major user-visible changes since version 0.2.0 are:
- additional annotations:
@NonNull@NullUnmarked@Implies(note: subsequently removed in version 0.3.0-alpha-2)
- expanded Javadoc
- an additional
@Targetfor@NullMarked:MODULE(#245)- Note that this change causes problems for users who build with the javac from JDK8 (#302), at least without workarounds. It is still always safe to build with a newer JDK with flags like
--release 8, and it is generally safe to run under JDK8.
- Note that this change causes problems for users who build with the javac from JDK8 (#302), at least without workarounds. It is still always safe to build with a newer JDK with flags like
As always, you can reach us at jspecify-discuss@googlegroups.com.
PGP signing key: BAC30622339994C4
SHA256 for main jar: d6317cc571b531da1ec656c821948d57c782011330e155f8b8abc83d521a6066
0.2.0
All parts of the project remain under development, and any aspect of naming or design may change before 1.0. Do not release libraries using JSpecify annotations at this time.
(But please let us know if you'd like to release libraries that depend on JSpecify annotations! We want to finalize our annotations at just the right time: If we wait unnecessarily long, then users don't get the benefits as soon as they could. But if we don't wait long enough, then we don't give the community enough time to provide feedback. To make the right call, we need to know what different people need.)
Some tool authors and library owners have begun to experiment with JSpecify, including Kotlin support (started in 1.5.20, more heavily tested in 1.5.30).
The milestone contains drafts of:
- a user guide (or see a live version from the main branch, which is displayed with better formatting)
- a spec (live version)
- some sample inputs
- two annotations (Javadoc), available in Maven Central as
org.jspecify:jspecify:0.2.0
The major user-visible changes since version 0.1 are renames:
- Our Java package changed from
org.jspecify.annotationstoorg.jspecify.nullness. - Our declaration annotation changed from
@DefaultNonNullto@NullMarked.
As always, you can reach us at jspecify-discuss@googlegroups.com.
PGP signing key: BAC30622339994C4
SHA256 for main jar: 7da399e8d2be9474406fe7c06904012880e8aa96833adab126119c8d10b7c0ae
0.1
This milestone omits some of the work we've already completed, and we have much more work underway and yet to come. Everything remains not set in stone, and we don't expect tool authors or library owners to adopt 0.1.
The milestone contains: