OpenFGA v1.10.0 Release Notes - 2025-09-11
New Features
- Allow Ignoring Duplicate Writes in Write API https://github.com/openfga/roadmap/issues/79
Added
- Make number of querying goroutines in experimental reverse_expand configurable via
resolveNodeBreadthLimit
. #2652 - ~Add microsecond latency numbers and datastore query count in shadow check resolver.~ #2658 ( reverted )
- Add
NewWithDB
support for sqlite storage. #2679 - Add planner for selecting check resolution strategies based on runtime statistics, behind the
enable-check-optimization
flag. #2624 - Add
server.WithShadowCheckCacheEnabled
to enable creation of a separate cache for shadow check resolver. #2683 - Run weight 2 optimization for cases where there are more than 1 directly assignable userset. #2684
Changed
- Make experimental reverse_expand behave the same as old reverse_expand in case of timeouts. #2649
- Breaking: Changes to storage interface
NOTE The following breaking changes are related to the storage interface. If you are not implementing a storage adapter, then these changes should not impact your usage of OpenFGA.
- Changed the
RelationshipTupleWriter
datastore interface to accept variadic write options (opts ...TupleWriteOption
) to customize behavior on duplicate inserts and missing deletes. #2663 Implementers must update theWrite
method signature to includeopts ...TupleWriteOption
. Defaults preserve prior behavior (error on duplicates and on missing deletes). Example:Write(ctx, store, deletes, writes, storage.WithOnDuplicateInsert(storage.OnDuplicateInsertIgnore))
Fixed
- Fixed bug in how experimental ReverseExpand support for ttus with multiple parents in the intersection and exclusion for list objects. #2691
- Improve performance by allowing weight 2 optimization if the directly assignable userset types are of different types. #2645
- Update ListObjects' check resolver to use correct environment variable. #2653
- !!REQUIRES MIGRATION!! Collation specification for queries dependent on sort order. #2661
- PostgreSQL is non-disruptive.
- MySQL requires a shared lock on the tuple table during the transaction.
Shout outs
- @le-yams made their contribution in https://github.com/openfga/openfga/pull/2593 which gave inspiration and a push to implement Duplicate Writes https://github.com/openfga/roadmap/issues/79 PR https://github.com/openfga/openfga/pull/2663
New Contributors
- @vikrantgupta25 made their first contribution in https://github.com/openfga/openfga/pull/2679
Full Changelog: https://github.com/openfga/openfga/compare/v1.9.5...v1.10.0
- perf: weight 2 allows more than multiple usersets with different types by @adriantam in https://github.com/openfga/openfga/pull/2645
- fix: Allow experimental reverse_expand to return partial results on timeout by @justincoh in https://github.com/openfga/openfga/pull/2649
- chore(deps): bump the dependencies group across 1 directory with 4 updates by @dependabot[bot] in https://github.com/openfga/openfga/pull/2646
- chore(deps): bump grpc-ecosystem/grpc-health-probe from v0.4.39 to v0.4.40 in the dependencies group by @dependabot[bot] in https://github.com/openfga/openfga/pull/2640
- chore: refactor userset by @elbuo8 in https://github.com/openfga/openfga/pull/2642
- feat: update experimental ListObjects max querying goroutines by @justincoh in https://github.com/openfga/openfga/pull/2652
- fix: use the correct configuration variable for list objects check resolver by @justincoh in https://github.com/openfga/openfga/pull/2653
- chore(deps): bump github.com/go-viper/mapstructure/v2 from 2.3.0 to 2.4.0 by @dependabot[bot] in https://github.com/openfga/openfga/pull/2654
- chore: Benchmarks for ListObjects by @justincoh in https://github.com/openfga/openfga/pull/2584
- chore: fix config schema by @rhamzeh in https://github.com/openfga/openfga/pull/2657
- chore: remove noisy logger in reverse expand by @justincoh in https://github.com/openfga/openfga/pull/2656
- add latency and query count numbers in shadow check resolver by @justincoh in https://github.com/openfga/openfga/pull/2658
- fix: perform check validation as first step by @sergiught in https://github.com/openfga/openfga/pull/2670
- feat(storage): add support for NewWithDB in sqlite by @vikrantgupta25 in https://github.com/openfga/openfga/pull/2679
- chore(deps): bump the dependencies group across 1 directory with 3 updates by @dependabot[bot] in https://github.com/openfga/openfga/pull/2680
- feat: query planner by @elbuo8 in https://github.com/openfga/openfga/pull/2624
- feat: add WithShadowCheckCacheEnabled server option by @justincoh in https://github.com/openfga/openfga/pull/2683
- fix: promote previous experimental code outside of flag by @elbuo8 in https://github.com/openfga/openfga/pull/2684
- create codeql.yml by @senojj in https://github.com/openfga/openfga/pull/2682
- feat: duplicate writes (SQL only) by @cikasfm in https://github.com/openfga/openfga/pull/2663
- chore: remove dead code by @elbuo8 in https://github.com/openfga/openfga/pull/2687
- feat: hook up on_duplicate write to API by @adriantam in https://github.com/openfga/openfga/pull/2681
- fix: in-memory condition context not checked correctly for write by @adriantam in https://github.com/openfga/openfga/pull/2694
- chore: batch statements for write by @cikasfm in https://github.com/openfga/openfga/pull/2692
- chore: planner and shadow resolver fixes by @elbuo8 in https://github.com/openfga/openfga/pull/2695
- Add support for TTUs with multiple parents in LO intersection and exclusion by @yissellokta in https://github.com/openfga/openfga/pull/2691
- chore(deps): bump the dependencies group across 1 directory with 24 updates by @dependabot[bot] in https://github.com/openfga/openfga/pull/2688
- chore(deps): bump the dependencies group with 5 updates by @dependabot[bot] in https://github.com/openfga/openfga/pull/2689
- fix collation to always use byte-wise ordering by @senojj in https://github.com/openfga/openfga/pull/2661
- fix: flaky TestConstructUserset unit test by @adriantam in https://github.com/openfga/openfga/pull/2700
- release: update changelog for release
v1.10.0
by @cikasfm in https://github.com/openfga/openfga/pull/2699