Releases: openfga/dotnet-sdk
v0.9.1
0.9.1 (2026-01-26)
- feat: add support for streamed list objects (#156)
- feat: add support for an interface on the client (#168)
What's Changed
- Bump Microsoft.Bcl.AsyncInterfaces and 3 others by @dependabot[bot] in #164
- feat(dotnet-sdk): Added support for an interface on the client by @CharlieDigital in #168
- Bump the dependencies group with 5 updates by @dependabot[bot] in #172
- Added a top-level Makefile in dotnet-sdk to simplify running tests and linters by @Abishek-Newar in #149
- feat: add StreamedListObjects support by @daniel-jonathan in #156
- chore(deps): bump the dependencies group with 6 updates by @dependabot[bot] in #169
- chore(deps): bump the dependencies group with 4 updates by @dependabot[bot] in #177
- release: v0.9.1 by @SoulPancake in #175
New Contributors
- @CharlieDigital made their first contribution in #168
- @Abishek-Newar made their first contribution in #149
Full Changelog: v0.9.0...v0.9.1
v0.9.0
0.9.0 (2025-12-09)
Added
- feat: add server-side
BatchCheck()method using/batch-checkAPI endpoint- See Batch Check documentation for usage examples and configuration
Changed
- BREAKING: Existing
BatchCheck()renamed toClientBatchCheck()
Fixed
- fix: ApiToken credentials no longer cause reserved header exception (#146)
Warning
BREAKING CHANGES:
BatchCheck() renamed: The existing client-side batch check method has been renamed from BatchCheck() to ClientBatchCheck(). The BatchCheck() method name is now reserved for the new server-side check which requires OpenFGA server v1.8.0+. If you are using the existing client-side logic, you must update your method calls:
Before:
var response = await client.BatchCheck(checkRequests, options);
After:
var response = await client.ClientBatchCheck(checkRequests, options);
For configuration options and behavior details, see README documentation
v0.8.0
0.8.0 (2025-10-22)
Added:
- feat!: add per-request custom headers support
DefaultHeaderssupport toClientConfigurationfor headers sent with every request- per-request headers support via
Headersproperty on all client options classes IRequestOptionsinterface andRequestOptionsclass for API-level header supportIClientRequestOptionsinterface andClientRequestOptionsclass for client-level header support- add header validation to prevent overriding of reserved headers
- feat: add write conflict resolution options
ConflictOptionsto control behavior for duplicate writes and missing deletesOnDuplicateWritesoption:Error(default) orIgnorefor handling duplicate tuple writesOnMissingDeletesoption:Error(default) orIgnorefor handling missing tuple deletes- Available in
ClientWriteOptions.Conflictproperty
- feat: add Retry-After header support for rate limiting
- Retry logic now respects
Retry-Afterheader from HTTP 429 responses - Falls back to exponential backoff when Retry-After header is missing or invalid
- Retry logic now respects
Warning
BREAKING CHANGES:
-
OpenFgaApi methods: All API methods now accept an
IRequestOptions? optionsparameter. If you are using the low-levelOpenFgaApidirectly, you may need to update your calls:Before:
await api.Check(storeId, body, cancellationToken);
After:
var options = new RequestOptions { Headers = new Dictionary<string, string> { { "X-Custom-Header", "value" } } }; await api.Check(storeId, body, options, cancellationToken);
-
ClientRequestOptions renamed: The base client request options interface has been renamed from
ClientRequestOptionstoIClientRequestOptionsto better follow .NET naming conventions. A concreteClientRequestOptionsclass is now also available. If you were casting to or implementing this interface, update your code:Before:
var options = obj as ClientRequestOptions;
After:
var options = obj as IClientRequestOptions;
Note: If you are using the high-level OpenFgaClient, no changes are required to your existing code. The new headers functionality is additive via the existing options parameters.
v0.7.0
0.7.0 (2025-10-01)
- feat!: add support for .NET Standard 2.0, .NET 8.0 and .NET 9.0. See SUPPORTED_FRAMEWORKS.md for more.
Note
As of this release, we're publishing the symbols package to Nuget to help with debugging if needed.
Warning
BREAKING CHANGES:
- While we have dropped .NET 6.0 as a target framework, the SDK now supports .NET Standard 2.0 - which means it can still be used in .NET 6.0 projects.
- We have updated the underlying OpenAPI generator to a newer version, which has caused some changes in the generated code. Below is a summary of the changes:
| Old Name | New Name | Affected Models |
|---|---|---|
| _Nodes | VarNodes | Nodes (and related constructors/references) |
| _Users | VarUsers | Users (and related constructors/references) |
| _base | VarBase | Difference, UsersetTreeDifference |
| _object | VarObject | CheckRequestTupleKey, ExpandRequestTupleKey, TupleKey, TupleKeyWithoutCondition, FgaObject, ObjectRelation, ReadRequestTupleKey, User |
| _this | VarThis | Userset |
| UNSPECIFIED | TYPENAMEUNSPECIFIED | TypeName (and other members in this enum) |
| Old Enum Value | New Enum Value | Affected Enum |
|---|---|---|
| WRITE | TUPLEOPERATIONWRITE | TupleOperation |
| DELETE | TUPLEOPERATIONDELETE | TupleOperation |
What's Changed
- chore: tidy up ClientBatchOptions and ClientListRetationsOptions by @rhamzeh in #128
- feat: support .NET Standard 2.0 by @rhamzeh in #122
- chore(deps): bump the dependencies group with 2 updates by @dependabot[bot] in #130
- release: v0.7.0 by @rhamzeh in #129
Full Changelog: v0.6.0...v0.7.0
v0.6.0
0.6.0 (2025-09-30)
- feat: add support for
start_timeparameter inReadChangesendpoint - feat: update API definitions
- feat: support assertions context and contextual tuples
- feat: support contextual tuples in
Expand - feat!: support passing in name to filter in
ListStores - fix: remove dependency on OpenTelemetry.Api (#100) - thanks @m4tchl0ck
- fix: limit default retries to
3from15(openfga/sdk-generator#420) - thanks @ovindu-a - fix:
ListRelationsshould not swallow errors - chore(docs): replace readable names with uuid to discourage storing PII in OpenFGA (openfga/sdk-generator#433) - thanks @sccalabr
Warning
BREAKING CHANGES:
- The
ListStoresmethod now accepts a body parameter with an optionalNameto filter the stores. This is a breaking change as it changes the method contract to allow passing in a body with the name.
What's Changed
- chore(deps): bump codecov/codecov-action from 4.5.0 to 4.6.0 in the dependencies group by @dependabot[bot] in #80
- chore(deps): bump the dependencies group with 3 updates by @dependabot[bot] in #81
- chore: sync sdk-generator changes by @ewanharris in #84
- chore(deps): bump the dependencies group with 2 updates by @dependabot[bot] in #85
- chore(deps): bump the dependencies group across 1 directory with 3 updates by @dependabot[bot] in #88
- chore(deps): bump the dependencies group across 1 directory with 4 updates by @dependabot[bot] in #90
- chore(deps): bump the dependencies group with 3 updates by @dependabot[bot] in #91
- chore: update the example to call client BatchCheck, ListRelations/Objects/Users by @rhamzeh in #93
- chore(deps): bump the dependencies group with 2 updates by @dependabot[bot] in #96
- chore(deps): bump the dependencies group with 2 updates by @dependabot[bot] in #97
- chore: remove dependecy to OpenTelemetry.Api by @m4tchl0ck in #100
- chore(deps): bump the dependencies group with 2 updates by @dependabot[bot] in #103
- chore: sync back sdk generator changes by @rhamzeh in #102
- feat: support nuget prereleases by @ryanpq in #109
- chore(deps): bump codecov/codecov-action from 5.4.0 to 5.4.2 in the dependencies group by @dependabot[bot] in #105
- Update SECURITY-INSIGHTS by @aaguiarz in #111
- chore(ci): remove semgrep workflow by @rhamzeh in #112
- chore(ci): create scorecard.yml by @aaguiarz in #113
- chore(docs): add scorecard, deepwiki and socket.dev badges by @aaguiarz in #118
- chore: update SECURITY-INSIGHTS by @aaguiarz in #117
- ci: update dependabot config by @evansims in #114
- chore(deps): bump the dependencies group with 4 updates by @dependabot[bot] in #115
- chore(deps): bump the dependencies group across 1 directory with 2 updates by @dependabot[bot] in #119
- chore: sync generator at api@0ac19aa by @rhamzeh in #120
- release: v0.6.0 by @rhamzeh in #125
New Contributors
- @m4tchl0ck made their first contribution in #100
- @ryanpq made their first contribution in #109
Full Changelog: v0.5.1...v0.6.0
v0.7.0-alpha.1
- feat: refactor to support .NET Standard 2.0
- feat: add support for
start_timeparameter inReadChangesendpoint - feat: update API definitions
- feat: support assertions context and contextual tuples
- feat: support contextual tuples in
Expand - feat!: support passing in name to filter in
ListStores - fix: remove dependency on OpenTelemetry.Api (#100) - thanks @m4tchl0ck
- fix: limit default retries to
3from15(openfga/sdk-generator#420) - thanks @ovindu-a - fix:
ListRelationsshould not swallow errors - chore(docs): replace readable names with uuid to discourage storing PII in OpenFGA (openfga/sdk-generator#433) - thanks @sccalabr
Warning
BREAKING CHANGES:
- The
ListStoresmethod now accepts a body parameter with an optionalNameto filter the stores. This is a breaking change as it changes the method contract to allow passing in a body with the name.
v0.5.1
0.5.1 (2024-09-10)
- feat: export OpenTelemetry metrics. Refer to the OpenFGA .NET SDK OpenTelemetry documentation for more.
v0.5.0
0.5.0 (2024-08-28)
- feat: support consistency parameter (#70)
- Note: To use this feature, you need to be running OpenFGA v1.5.7+ with the experimental flag
enable-consistency-paramsenabled. See the v1.5.7 release notes for details.%0A
v0.4.0
0.4.0 (2024-06-14)
- chore!: remove excluded users from ListUsers response
BREAKING CHANGE:
This version removes the ExcludedUsers field from the ListUsersResponse and ClientListUsersResponse classes, for more details see the associated API change.