Skip to content

Releases: openfga/dotnet-sdk

v0.9.1

02 Feb 14:41
v0.9.1
7b857b7

Choose a tag to compare

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

New Contributors

Full Changelog: v0.9.0...v0.9.1

v0.9.0

09 Dec 17:30
v0.9.0
d029937

Choose a tag to compare

0.9.0 (2025-12-09)

Added

  • feat: add server-side BatchCheck() method using /batch-check API endpoint

Changed

  • BREAKING: Existing BatchCheck() renamed to ClientBatchCheck()

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

22 Oct 20:06
v0.8.0
52546d7

Choose a tag to compare

0.8.0 (2025-10-22)

Added:

  • feat!: add per-request custom headers support
    • DefaultHeaders support to ClientConfiguration for headers sent with every request
    • per-request headers support via Headers property on all client options classes
    • IRequestOptions interface and RequestOptions class for API-level header support
    • IClientRequestOptions interface and ClientRequestOptions class for client-level header support
    • add header validation to prevent overriding of reserved headers
  • feat: add write conflict resolution options
    • ConflictOptions to control behavior for duplicate writes and missing deletes
    • OnDuplicateWrites option: Error (default) or Ignore for handling duplicate tuple writes
    • OnMissingDeletes option: Error (default) or Ignore for handling missing tuple deletes
    • Available in ClientWriteOptions.Conflict property
  • feat: add Retry-After header support for rate limiting
    • Retry logic now respects Retry-After header from HTTP 429 responses
    • Falls back to exponential backoff when Retry-After header is missing or invalid

Warning

BREAKING CHANGES:

  • OpenFgaApi methods: All API methods now accept an IRequestOptions? options parameter. If you are using the low-level OpenFgaApi directly, 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 ClientRequestOptions to IClientRequestOptions to better follow .NET naming conventions. A concrete ClientRequestOptions class 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

01 Oct 20:02
v0.7.0
65a38bc

Choose a tag to compare

0.7.0 (2025-10-01)

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

30 Sep 19:15
v0.6.0
0b57734

Choose a tag to compare

0.6.0 (2025-09-30)

  • feat: add support for start_time parameter in ReadChanges endpoint
  • 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 3 from 15 (openfga/sdk-generator#420) - thanks @ovindu-a
  • fix: ListRelations should 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 ListStores method now accepts a body parameter with an optional Name to 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

Full Changelog: v0.5.1...v0.6.0

v0.7.0-alpha.1

05 Jun 20:26

Choose a tag to compare

v0.7.0-alpha.1 Pre-release
Pre-release
  • feat: refactor to support .NET Standard 2.0
  • feat: add support for start_time parameter in ReadChanges endpoint
  • 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 3 from 15 (openfga/sdk-generator#420) - thanks @ovindu-a
  • fix: ListRelations should 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 ListStores method now accepts a body parameter with an optional Name to 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

10 Sep 21:06
v0.5.1
ba3c108

Choose a tag to compare

0.5.1 (2024-09-10)

v0.5.0

28 Aug 22:10
v0.5.0
02bbc98

Choose a tag to compare

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-params enabled. See the v1.5.7 release notes for details.%0A

v0.4.0

28 Aug 19:46
v0.4.0
85bcbfa

Choose a tag to compare

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.

v0.3.2

30 Apr 19:55
v0.3.2
cc110af

Choose a tag to compare

0.3.2 (2024-04-30)

  • feat: support the ListUsers endpoint (#57)
  • feat: add retries to client credential requests (#51)
  • feat: add support for modular models metadata (#53)