Skip to content

Commit d99355e

Browse files
author
Bart Koelman
authored
Added versioning policy (#1018)
1 parent 379dfc8 commit d99355e

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ public class Startup
8585
## Compatibility
8686

8787
A lot of changes were introduced in v4. The following chart should help you pick the best version, based on your environment.
88+
See also our [versioning policy](./VERSIONING_POLICY.md).
8889

8990
| .NET Version | EF Core Version | JsonApiDotNetCore Version |
9091
| ----------------- | --------------- | ------------------------- |

VERSIONING_POLICY.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# JsonApiDotNetCore versioning policy
2+
3+
Basically, we strive to adhere to [semantic versioning](https://semver.org/).
4+
5+
However, we believe that our userbase is still small enough to allow for some flexibility in _minor_ updates, see below.
6+
7+
## Major updates
8+
9+
For breaking changes in _major_ updates, we intend to list the ones that may affect user code or the clients of an API in our release notes. We also include important changes between versions in our published documentation.
10+
11+
## Minor updates
12+
13+
We **WILL NOT** introduce breaking changes in _minor_ updates on our common extensibility points such as controllers, resource services, resource repositories, resource definitions, and `Identifiable` as well as common annotations such as `[Attr]`, `[HasOne]`, `[HasMany]`, and `[HasManyThrough]`. The same applies to the URL routes, JSON structure of request/response bodies, and query string syntax.
14+
15+
In previous versions of JsonApiDotNetCore, almost everything was public. While that makes customizations very easy for users, it kinda puts us in a corner: nearly every change would require a new major version. Therefore we try to balance between adding new features to the next _minor_ version or postpone them to the next _major_ version. This means we **CAREFULLY CONSIDER** if we can prevent breaking changes in _minor_ updates to signatures of "pubternal" types (public types in `Internal` namespaces), as well as exposed types of which we believe users are unlikely to have taken a direct dependency on. One example would be to inject an additional dependency in the constructor of a not-so-well-known class, such as `IncludedResourceObjectBuilder`. In the unlikely case that a user has taken a dependency on this class, the compiler error message is clear and the fix is obvious and easy. We may introduce binary breaking changes (such as adding an optional constrcutor parameter to a custom exception type), which requires users to recompile their existing code.
16+
17+
Our goal is to try to minimize such breaks and require only a recompile of existing API projects. This also means that we'll need to publish an updated release for [JsonApiDotNetCore.MongoDb](https://github.com/json-api-dotnet/JsonApiDotNetCore.MongoDb) when this happens.
18+
19+
We may also correct error messages in _minor_ updates.
20+
21+
## Backports
22+
23+
When users report that they are unable to upgrade as a result of breaking changes in a _minor_ version, we're willing to consider backporting fixes they need to an earlier _minor_ version.

0 commit comments

Comments
 (0)