From 7d6d30a6b82bc3dd44b110a8eb23ddfe76bf55a2 Mon Sep 17 00:00:00 2001 From: Jonathan Norris Date: Thu, 23 Oct 2025 16:48:41 -0400 Subject: [PATCH 01/14] docs: reorganize navigation separating SDKs from other technologies Signed-off-by: Jonathan Norris --- .gitignore | 1 + blog/2022-10-21-hardening-and-1-0-sdks.md | 8 +- .../2023-03-27-feature-flags-if-statements.md | 32 +- blog/2023-12-19-december-update-blog.md | 73 ++-- blog/2024-03-19-accouncing-web-v1.md | 15 +- blog/2024-05-02-react-sdk-release.md | 5 +- blog/2024-09-17-announcing-angular-sdk.md | 6 +- ...2024-12-09-kubecon-wrapped-and-tracking.md | 8 +- blog/2025-03-19-devcycle-march-hackathon.md | 9 +- docs/reference/contributing.md | 1 + .../other-technologies/_category_.json | 6 + docs/reference/other-technologies/cli.mdx | 9 + docs/reference/other-technologies/mcp.mdx | 9 + docs/reference/other-technologies/ofrep.mdx | 9 + .../server => sdks}/_category_.json | 2 + .../client}/_category_.json | 0 .../{technologies => sdks}/client/index.mdx | 0 .../{technologies => sdks}/client/kotlin.mdx | 2 +- .../{technologies => sdks}/client/swift.mdx | 2 +- .../client/web/_category_.json | 0 .../client/web/angular.mdx | 10 +- .../client/web/index.mdx | 65 +++- .../client/web/react.mdx | 8 +- .../{technologies => sdks}/index.mdx | 0 .../sdk-compatibility.mdx | 0 .../client => sdks/server}/_category_.json | 0 .../{technologies => sdks}/server/dart.mdx | 2 +- .../{technologies => sdks}/server/dotnet.mdx | 21 +- .../{technologies => sdks}/server/go.mdx | 10 +- .../{technologies => sdks}/server/index.mdx | 0 .../{technologies => sdks}/server/java.mdx | 10 +- .../server/javascript/_category_.json | 0 .../server/javascript/index.mdx | 86 ++++- .../server/javascript/nestjs.mdx | 4 +- .../{technologies => sdks}/server/php.mdx | 2 +- .../{technologies => sdks}/server/python.mdx | 2 +- .../{technologies => sdks}/server/ruby.mdx | 2 +- .../{technologies => sdks}/server/rust.mdx | 2 +- .../five-minutes-to-feature-flags.md | 2 +- docusaurus.config.ts | 2 +- src/datasets/constants.ts | 2 + src/datasets/sdks/angular.ts | 2 +- src/datasets/sdks/dart.ts | 2 +- src/datasets/sdks/dotnet.ts | 2 +- src/datasets/sdks/go.ts | 2 +- src/datasets/sdks/java.ts | 2 +- src/datasets/sdks/kotlin.ts | 2 +- src/datasets/sdks/nestjs.ts | 2 +- src/datasets/sdks/nodejs.ts | 2 +- src/datasets/sdks/php.ts | 2 +- src/datasets/sdks/python.ts | 2 +- src/datasets/sdks/react.ts | 2 +- src/datasets/sdks/ruby.ts | 2 +- src/datasets/sdks/rust.ts | 2 +- src/datasets/sdks/sdk-compatibility.json | 322 ++++++++++-------- src/datasets/sdks/swift.ts | 2 +- src/datasets/sdks/web.ts | 2 +- 57 files changed, 522 insertions(+), 257 deletions(-) create mode 100644 docs/reference/other-technologies/_category_.json create mode 100644 docs/reference/other-technologies/cli.mdx create mode 100644 docs/reference/other-technologies/mcp.mdx create mode 100644 docs/reference/other-technologies/ofrep.mdx rename docs/reference/{technologies/server => sdks}/_category_.json (56%) rename docs/reference/{technologies => sdks/client}/_category_.json (100%) rename docs/reference/{technologies => sdks}/client/index.mdx (100%) rename docs/reference/{technologies => sdks}/client/kotlin.mdx (99%) rename docs/reference/{technologies => sdks}/client/swift.mdx (99%) rename docs/reference/{technologies => sdks}/client/web/_category_.json (100%) rename docs/reference/{technologies => sdks}/client/web/angular.mdx (98%) rename docs/reference/{technologies => sdks}/client/web/index.mdx (85%) rename docs/reference/{technologies => sdks}/client/web/react.mdx (97%) rename docs/reference/{technologies => sdks}/index.mdx (100%) rename docs/reference/{technologies => sdks}/sdk-compatibility.mdx (100%) rename docs/reference/{technologies/client => sdks/server}/_category_.json (100%) rename docs/reference/{technologies => sdks}/server/dart.mdx (99%) rename docs/reference/{technologies => sdks}/server/dotnet.mdx (97%) rename docs/reference/{technologies => sdks}/server/go.mdx (97%) rename docs/reference/{technologies => sdks}/server/index.mdx (100%) rename docs/reference/{technologies => sdks}/server/java.mdx (98%) rename docs/reference/{technologies => sdks}/server/javascript/_category_.json (100%) rename docs/reference/{technologies => sdks}/server/javascript/index.mdx (85%) rename docs/reference/{technologies => sdks}/server/javascript/nestjs.mdx (97%) rename docs/reference/{technologies => sdks}/server/php.mdx (99%) rename docs/reference/{technologies => sdks}/server/python.mdx (99%) rename docs/reference/{technologies => sdks}/server/ruby.mdx (99%) rename docs/reference/{technologies => sdks}/server/rust.mdx (99%) diff --git a/.gitignore b/.gitignore index a4423338d..999983f46 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ yarn-error.log* .idea .wireit .eslintcache +.cursor diff --git a/blog/2022-10-21-hardening-and-1-0-sdks.md b/blog/2022-10-21-hardening-and-1-0-sdks.md index 8eb37bb59..53aaef6e9 100644 --- a/blog/2022-10-21-hardening-and-1-0-sdks.md +++ b/blog/2022-10-21-hardening-and-1-0-sdks.md @@ -22,7 +22,7 @@ The release includes stable versions the following features: The specification documents associated with these features have been marked as `hardening`, meaning breaking changes are no longer allowed and usage of these features are encouraged in production environments. The release of these SDKs and the stabilization of the specification represent a culmination of efforts by a dedicated group of vendors, practitioners and subject matter experts. -Providers are [already available](https://openfeature.dev/docs/reference/technologies/) for major vendors and popular community projects. +Providers are [already available](https://openfeature.dev/docs/reference/sdks/) for major vendors and popular community projects. It's our hope that the efforts to stabilize the OpenFeature specification and SDKs will lead to more adoption of both OpenFeature and feature flagging in general, and promote a vibrant ecosystem around this increasingly important development pattern. In addition to those mentioned above, experimental features available in the 1.0 SDKs include: @@ -33,7 +33,9 @@ In addition to those mentioned above, experimental features available in the 1.0 ## What's next? -Our goal in the upcoming months will be to harden our existing experimental features. Additionally, we'll work to develop and standardize new capabilities, including: client-side feature flagging, improved cloud native tooling, and implicit transaction-scoped data propagation of contextual attributes. +Our goal in the upcoming months will be to harden our existing experimental features. +Additionally, we'll work to develop and standardize new capabilities, including: client-side feature flagging, improved cloud native tooling, and implicit transaction-scoped data propagation of contextual attributes. Furthermore, we're working on SDKs for additional languages, including [PHP](https://github.com/open-feature/php-sdk), [Python](https://github.com/open-feature/python-sdk), and [Ruby](https://github.com/open-feature/ruby-sdk). -If you're interested in contributing or learning more about OpenFeature, please join our expanding and friendly community. Visit our [GitHub](https://github.com/open-feature), join the [OpenFeature slack channel](https://cloud-native.slack.com/archives/C0344AANLA1) on the CNCF Slack instance, or hop into our [bi-weekly community meeting](https://github.com/open-feature/community#meetings-and-events). +If you're interested in contributing or learning more about OpenFeature, please join our expanding and friendly community. +Visit our [GitHub](https://github.com/open-feature), join the [OpenFeature slack channel](https://cloud-native.slack.com/archives/C0344AANLA1) on the CNCF Slack instance, or hop into our [bi-weekly community meeting](https://github.com/open-feature/community#meetings-and-events). diff --git a/blog/2023-03-27-feature-flags-if-statements.md b/blog/2023-03-27-feature-flags-if-statements.md index 5f48b2980..201362da6 100644 --- a/blog/2023-03-27-feature-flags-if-statements.md +++ b/blog/2023-03-27-feature-flags-if-statements.md @@ -11,7 +11,8 @@ draft: false Most feature flag explainers begin by explaining that feature flags are equivalent to environment variables. -While that’s true (to a point), feature flags wouldn’t be as versatile or as popular as they are, if that’s all they were. Indeed, you wouldn’t need a feature flag – you could easily achieve the same thing with an environment variable. +While that’s true (to a point), feature flags wouldn’t be as versatile or as popular as they are, if that’s all they were. +Indeed, you wouldn’t need a feature flag – you could easily achieve the same thing with an environment variable. @@ -26,28 +27,37 @@ if isPremiumMember { return v1 } ``` + Now try modeling this in code: + - If user is premium and located in Europe = v2 (purple) - If user is premium and located in the US = v3 (red) - If user is premium and located in Australia = v4 (orange) - Everyone else gets v1 (green) -That’s 2 variables. Imagine how many variations a real system has. Now imagine trying to update these conditions in real time, without a redeployment. +That’s 2 variables. +Imagine how many variations a real system has. +Now imagine trying to update these conditions in real time, without a redeployment. The real power of feature flags: -- Simple or complex: Flag rules can be as simple or as complex as you wish. This makes getting started easy with plenty of room to grow and expand. -- Separation of concerns: Feature flags allow a deployment without a release. All new features are placed behind flags and those flags are disabled during deployment. +- Simple or complex: Flag rules can be as simple or as complex as you wish. + This makes getting started easy with plenty of room to grow and expand. +- Separation of concerns: Feature flags allow a deployment without a release. + All new features are placed behind flags and those flags are disabled during deployment. - Shortcut to continuous delivery: If you can deploy anything at any time with zero risk, why not do it? - Separation of responsibilities: Product managers take responsibility for feature flags, leaving DevOps teams to deal with their area of responsibility. ## So, are Feature Flags if Statements? -No, feature flagging is so much more powerful and dynamic than environment variables or if statements. But if you’re already using if statements, you already have enough knowledge to take your environment variables and if statements to the next level with feature flags. + +No, feature flagging is so much more powerful and dynamic than environment variables or if statements. +But if you’re already using if statements, you already have enough knowledge to take your environment variables and if statements to the next level with feature flags. If you’re stuck on the environment variable + if statement metaphor, feature flags are a very flexible if statement that you can **target**, **update**, **toggle** and **gain observability over**, in **real time** without a **re-deployment**. ## Where Do I Start? + Start with the OpenFeature hands-on tutorials. These tutorials are provided by Killercoda, a third-party in-browser learning platform. @@ -55,18 +65,22 @@ These tutorials are provided by Killercoda, a third-party in-browser learning pl All tutorials are free to use and the [tutorial source code is open](https://github.com/open-feature/killercoda). ### 1: OpenFeature Demo + Never encountered feature flags? This is the 30,000ft view showing the power and versatility of feature flags. [Start here](https://killercoda.com/open-feature/scenario/openfeature-demo). ### 2: An Open Source Feature Flag Backend + Decided to adopt feature flags? You will need a flag "backend" evaluation engine. -Any open source tool or vendor can support OpenFeature and many do. Check the [technologies section](https://openfeature.dev/docs/reference/technologies/) to see what tools and vendors are supported in your language. +Any open source tool or vendor can support OpenFeature and many do. +Check the [technologies section](https://openfeature.dev/docs/reference/sdks/) to see what tools and vendors are supported in your language. -If you don't already use a flag evaluation system, flagd is a good place to start without having to code your own backend solution. Try the [flagd demo on killercoda](https://killercoda.com/open-feature/scenario/flagd-demo). +If you don't already use a flag evaluation system, flagd is a good place to start without having to code your own backend solution. +Try the [flagd demo on killercoda](https://killercoda.com/open-feature/scenario/flagd-demo). ### 3. Instrument Your Application @@ -77,8 +91,10 @@ Your application must now be modified to interact with your chosen flag evaluati The [Five minutes to feature flags](https://killercoda.com/open-feature/scenario/five-minutes-to-feature-flags) tutorial walks through how to do this. ### 4: Feature Flags on Kubernetes? + Are you Kubernetes-native and want to manage and use feature flags entirely on Kubernetes? Any open source or vendor tool which offers OpenFeature compliant k8s feature flagging will work. -The [Operator tutorial](https://killercoda.com/open-feature/scenario/openfeature-operator-demo) shows one option, using flagd. Flagd leverages Custom Resources to manage feature flags via GitOps and make feature flags available to your pods via annotations. \ No newline at end of file +The [Operator tutorial](https://killercoda.com/open-feature/scenario/openfeature-operator-demo) shows one option, using flagd. +Flagd leverages Custom Resources to manage feature flags via GitOps and make feature flags available to your pods via annotations. diff --git a/blog/2023-12-19-december-update-blog.md b/blog/2023-12-19-december-update-blog.md index ad0149305..b68388957 100644 --- a/blog/2023-12-19-december-update-blog.md +++ b/blog/2023-12-19-december-update-blog.md @@ -10,9 +10,11 @@ draft: false ## December 2023 Update -Hello OpenFeature Community 👋 +Hello OpenFeature Community 👋 -Happy holidays and a very happy new year in the coming weeks! There’s a lot happening as we wind down the year, so keep reading! As always, we thank you for your continued support and contributions and look forward to an exciting new year in 2024! +Happy holidays and a very happy new year in the coming weeks! +There’s a lot happening as we wind down the year, so keep reading! +As always, we thank you for your continued support and contributions and look forward to an exciting new year in 2024! @@ -20,79 +22,94 @@ Happy holidays and a very happy new year in the coming weeks! There’s a lot ha -🤩 We are ecstatic to announce that the Cloud Native Computing Foundation’s Technical Oversight Committee has promoted OpenFeature to Incubating project status! 🎉 Many thanks to our wonderful community of maintainers, contributors, and users! 🙏 ✨ +🤩 We are ecstatic to announce that the Cloud Native Computing Foundation’s Technical Oversight Committee has promoted OpenFeature to Incubating project status! 🎉 Many thanks to our wonderful community of maintainers, contributors, and users! 🙏 ✨ 📰 [Read more about incubation and the future of OpenFeature here.](https://www.cncf.io/?p=98784) ### New & Notable -#### Governance Committee Elections! +#### Governance Committee Elections -We’re happy to announce the OpenFeature Governance Committee Elections are now open! 🗳️ At this time we’re inviting all [OpenFeature GitHub Org Members, Approvers, and Maintainers](https://github.com/orgs/open-feature/people) to review the list of [candidates](https://github.com/open-feature/community/blob/main/Elections/2023/Candidates.md), then cast your vote for 4 current committee members (with 1 year term) and 3 new candidates (via [helios](https://vote.heliosvoting.org/) using your GitHub account). +We’re happy to announce the OpenFeature Governance Committee Elections are now open! 🗳️ At this time we’re inviting all [OpenFeature GitHub Org Members, Approvers, and Maintainers](https://github.com/orgs/open-feature/people) to review the list of [candidates](https://github.com/open-feature/community/blob/main/Elections/2023/Candidates.md), then cast your vote for 4 current committee members (with 1 year term) and 3 new candidates (via [helios](https://vote.heliosvoting.org/) using your GitHub account). + +Voting period is open through January 31, 2024. +For more information on the election process, please see the following: -Voting period is open through January 31, 2024. For more information on the election process, please see the following: * [2023 OpenFeature GC Elections GitHub Issue](https://github.com/open-feature/community/issues/262) -* [2023 OpenFeature GC Election Process](https://github.com/open-feature/community/blob/main/Elections/2023/Election-Guidelines.md) +* [2023 OpenFeature GC Election Process](https://github.com/open-feature/community/blob/main/Elections/2023/Election-Guidelines.md) * [2023 OpenFeature GC Candidates](https://github.com/open-feature/community/blob/main/Elections/2023/Candidates.md) -#### SDK Compatibility Overview +#### SDK Compatibility Overview -You can now see the status and supported features of the OpenFeature SDKs in a simplified visual matrix for both Server-side and Client-side SDKs. Check it out [here](https://openfeature.dev/docs/reference/technologies/sdk-compatibility). +You can now see the status and supported features of the OpenFeature SDKs in a simplified visual matrix for both Server-side and Client-side SDKs. +Check it out [here](https://openfeature.dev/docs/reference/sdks/sdk-compatibility). #### OpenFeature Remote Evaluation Protocol -The OpenFeature Remote Evaluation Protocol is an initiative that focuses on defining a vendor-agnostic mechanism for performing flag evaluation over a network. For more information, please refer to the [meeting notes](https://docs.google.com/document/d/1pp6t2giTcdEdVAri_2B1Z6Mv8mHhvtZT1AmkPV9K7xQ/edit#bookmark=kix.koqus874gx4n) from the initial Special Interest Group (SIG) meeting, or the [GitHub Discussion](https://github.com/orgs/open-feature/discussions/249).  +The OpenFeature Remote Evaluation Protocol is an initiative that focuses on defining a vendor-agnostic mechanism for performing flag evaluation over a network. +For more information, please refer to the [meeting notes](https://docs.google.com/document/d/1pp6t2giTcdEdVAri_2B1Z6Mv8mHhvtZT1AmkPV9K7xQ/edit#bookmark=kix.koqus874gx4n) from the initial Special Interest Group (SIG) meeting, or the [GitHub Discussion](https://github.com/orgs/open-feature/discussions/249). -##### Survey  +##### Survey -If you are familiar with the architecture of a particular feature flagging solution [please participate in this survey](https://forms.gle/Gz2AaMdMaAXgFZB57). It aims to understand what's important to existing projects and vendors so that we can incorporate the feedback into the OpenFeature specification.  +If you are familiar with the architecture of a particular feature flagging solution [please participate in this survey](https://forms.gle/Gz2AaMdMaAXgFZB57). +It aims to understand what's important to existing projects and vendors so that we can incorporate the feedback into the OpenFeature specification. ### Contributing -We welcome contributors of all kinds! Please visit us on [GitHub](https://github.com/open-feature), check out our [Contributing Guidelines](https://github.com/open-feature/.github/blob/main/CONTRIBUTING.md) and [Contributor Ladder](https://github.com/open-feature/community/blob/main/CONTRIBUTOR_LADDER.md), and if you're ready to dive-in here's a collection of [Good First Issues](https://github.com/issues?q=is%3Aopen+is%3Aissue+archived%3Afalse+label%3A%22good+first+issue%22+user%3Aopen-feature+)! +We welcome contributors of all kinds! +Please visit us on [GitHub](https://github.com/open-feature), check out our [Contributing Guidelines](https://github.com/open-feature/.github/blob/main/CONTRIBUTING.md) and [Contributor Ladder](https://github.com/open-feature/community/blob/main/CONTRIBUTOR_LADDER.md), and if you're ready to dive-in here's a collection of [Good First Issues](https://github.com/issues?q=is%3Aopen+is%3Aissue+archived%3Afalse+label%3A%22good+first+issue%22+user%3Aopen-feature+)! #### Roadmap 🛣️ -If you'd like to see what we're working on and what we've got planned, please check out the [OpenFeature Roadmap here](https://github.com/orgs/open-feature/projects/1/views/1).  + +If you'd like to see what we're working on and what we've got planned, please check out the [OpenFeature Roadmap here](https://github.com/orgs/open-feature/projects/1/views/1). #### Shout Outs 👏 -🥇 We’d like to make a special shout out and huge thank you to the newest member of our [Technical Committee](https://openfeature.dev/community/tech-committee-charter/), Lukas Reining! 🎉    -Lukas is an IT Consultant at [Codecentric](https://www.codecentric.de/datenschutzerklaerung) and is also a Maintainer of the [OpenFeature JavaScript SDK](https://github.com/open-feature/js-sdk/tree/main). His interest in OpenFeature began when his team was evaluating feature flagging solutions for one of their projects. OpenFeature helped them try out different solutions and even shift later.   +🥇 We’d like to make a special shout out and huge thank you to the newest member of our [Technical Committee](https://openfeature.dev/community/tech-committee-charter/), Lukas Reining! 🎉 + +Lukas is an IT Consultant at [Codecentric](https://www.codecentric.de/datenschutzerklaerung) and is also a Maintainer of the [OpenFeature JavaScript SDK](https://github.com/open-feature/js-sdk/tree/main). +His interest in OpenFeature began when his team was evaluating feature flagging solutions for one of their projects. +OpenFeature helped them try out different solutions and even shift later.   “Feature flagging is a great technique for teams and organizations, and OpenFeature has the potential to help get the most value out of this.”   You can find Lukas on [GitHub](https://github.com/lukas-reining) and [Twitter](https://twitter.com/luku1806).   -#### Join the OpenFeature Org on GitHub! +#### Join the OpenFeature Org on GitHub -If you’re a contributing member, but haven’t joined the [OpenFeature Project Org](https://github.com/open-feature) yet, we’d like to invite you to do so (this also means you can vote in the GC elections)! Here’s how: +If you’re a contributing member, but haven’t joined the [OpenFeature Project Org](https://github.com/open-feature) yet, we’d like to invite you to do so (this also means you can vote in the GC elections)! +Here’s how: -* Please read through our [Contributor Ladder](https://github.com/open-feature/community/blob/main/CONTRIBUTOR_LADDER.md)  -* Open an issue in the [Community Repo](https://github.com/open-feature/community), using this [Organization Membership Request Template](https://github.com/open-feature/community/issues/new?assignees=%40open-feature%2Fmaintainers&labels=area%2Fgithub-membership&projects=&template=membership.md&title=REQUEST%3A+New+membership+for+%3Cyour-GH-handle%3E).  +* Please read through our [Contributor Ladder](https://github.com/open-feature/community/blob/main/CONTRIBUTOR_LADDER.md) +* Open an issue in the [Community Repo](https://github.com/open-feature/community), using this [Organization Membership Request Template](https://github.com/open-feature/community/issues/new?assignees=%40open-feature%2Fmaintainers&labels=area%2Fgithub-membership&projects=&template=membership.md&title=REQUEST%3A+New+membership+for+%3Cyour-GH-handle%3E). ### Upcoming Events & Recent Talks #### Events 🗓️ -Join us on the [CNCF OpenFeature Community Chapter](https://community.cncf.io/openfeature/). This is where we will list all our upcoming events & meetings with details on how to join. Upcoming meetings:  +Join us on the [CNCF OpenFeature Community Chapter](https://community.cncf.io/openfeature/). +This is where we will list all our upcoming events & meetings with details on how to join. +Upcoming meetings: -* [December 21 @ 10am ET / 4pm CET – OpenFeature Community Meeting](https://community.cncf.io/events/details/cncf-openfeature-presents-openfeature-community-meeting-2023-12-21/)  +* [December 21 @ 10am ET / 4pm CET – OpenFeature Community Meeting](https://community.cncf.io/events/details/cncf-openfeature-presents-openfeature-community-meeting-2023-12-21/) * [January 4, 2024 @ 10am ET / 4pm CET – OpenFeature Community Meeting](https://community.cncf.io/events/details/cncf-openfeature-presents-openfeature-community-meeting-2024-01-04/)   -* [January 18, 2024 @ 10am ET / 4pm CET – OpenFeature Community Meeting](https://community.cncf.io/events/details/cncf-openfeature-presents-openfeature-community-meeting-2024-01-18/)  +* [January 18, 2024 @ 10am ET / 4pm CET – OpenFeature Community Meeting](https://community.cncf.io/events/details/cncf-openfeature-presents-openfeature-community-meeting-2024-01-18/) #### Recent Talks 📺 * [Cloud Native Islamabad Workshop: A Guided Tour of OpenFeature by Saim Safdar & Adam Gardner](https://www.youtube.com/live/C19YGf0t-2g?feature=shared) * [KubeCon Europe 2023: Building a Kubernetes Experimentation Platform with OpenFeature; Enabling Organizations to Put Theory into Practice by Alex Jones](https://youtu.be/hlvoJhMx2HU?feature=shared) -* [CNCF on-demand Webinar: An Introduction to Feature Flagging & OpenFeature by Adam Gardner](https://youtu.be/LTvTr6kp53Y?feature=shared)  -* [St Louis Go Meetup: OpenFeature: Revolutionizing Feature Management by James Carr](https://www.youtube.com/live/Mhd2VEul-To?feature=shared&t=281)  -* [Swiss CloudNative Day: OpenFeature - Managing Feature Flags by Robin Wyss & Nicola Roten](https://youtu.be/EJI3ODhh8Y8?feature=shared)  +* [CNCF on-demand Webinar: An Introduction to Feature Flagging & OpenFeature by Adam Gardner](https://youtu.be/LTvTr6kp53Y?feature=shared) +* [St Louis Go Meetup: OpenFeature: Revolutionizing Feature Management by James Carr](https://www.youtube.com/live/Mhd2VEul-To?feature=shared&t=281) +* [Swiss CloudNative Day: OpenFeature - Managing Feature Flags by Robin Wyss & Nicola Roten](https://youtu.be/EJI3ODhh8Y8?feature=shared) * [AppDeveloperCon 2023: Build Progressive Delivery and Safety Into Your Apps with Feature Flags by Adam Gardner](https://youtu.be/D9kzXExhLfY?feature=shared) ### 💬 Connect with Us! 🤝 -[Subscribe to our low traffic CNCF Mailing List](https://lists.cncf.io/g/cncf-openfeature-project) to stay up to date on project announcements, events, and more!  +[Subscribe to our low traffic CNCF Mailing List](https://lists.cncf.io/g/cncf-openfeature-project) to stay up to date on project announcements, events, and more! -💬 Chat with us on [CNCF Slack](https://cloud-native.slack.com/) in the [#openfeature channel](https://cloud-native.slack.com/archives/C0344AANLA1). If you are not part of the CNCF slack workspace already, you can [get an invite here](https://communityinviter.com/apps/cloud-native/cncf). You can also follow us on all the socials: [Twitter](http://twitter.com/OpenFeature) | [LinkedIn](https://www.linkedin.com/company/openfeature/) | [YouTube](https://www.youtube.com/channel/UCXSFt-dT2HORGXz1-ksxtxw) +💬 Chat with us on [CNCF Slack](https://cloud-native.slack.com/) in the [#openfeature channel](https://cloud-native.slack.com/archives/C0344AANLA1). +If you are not part of the CNCF slack workspace already, you can [get an invite here](https://communityinviter.com/apps/cloud-native/cncf). +You can also follow us on all the socials: [Twitter](http://twitter.com/OpenFeature) | [LinkedIn](https://www.linkedin.com/company/openfeature/) | [YouTube](https://www.youtube.com/channel/UCXSFt-dT2HORGXz1-ksxtxw) diff --git a/blog/2024-03-19-accouncing-web-v1.md b/blog/2024-03-19-accouncing-web-v1.md index 424ccce4f..277f13b7e 100644 --- a/blog/2024-03-19-accouncing-web-v1.md +++ b/blog/2024-03-19-accouncing-web-v1.md @@ -8,7 +8,7 @@ tags: [release, client, spec, specification, web, mobile, sdk, react] draft: false --- -We are excited to announce the availability of the [OpenFeature Web SDK v1](/docs/reference/technologies/client/web/). +We are excited to announce the availability of the [OpenFeature Web SDK v1](/docs/reference/sdks/client/web/). The Web SDK represents a culmination of years of research and industry consensus. It was built from the ground up to be performant, powerful, and flexible while providing broad support for your favorite feature management tool or in-house solution. @@ -25,7 +25,8 @@ The web framework ecosystem is massive and constantly evolving, it’s more impo ## Web vs Server At first glance, using a feature flag on the web may appear similar to server-side usage. -In many cases, this is true! However, there are subtle, yet important differences. +In many cases, this is true! +However, there are subtle, yet important differences. In OpenFeature, we have distilled these two different approaches down to static and dynamic context paradigms. The static context paradigm is commonly used on a client, and it’s the paradigm supported by the Web SDK. The rationale for introducing this paradigm can be found in our [Catering to the client-side](/blog/catering-to-the-client-side/) blog. @@ -47,12 +48,12 @@ This moves responsibility to the SDK instead of the provider author, making prov ## What's next? The Web SDK is great on its own but becomes even more powerful and user-friendly when leveraging framework-specific functionality. -The [React SDK](/docs/reference/technologies/client/web/react/) is an excellent example of this. +The [React SDK](/docs/reference/sdks/client/web/react/) is an excellent example of this. It abstracts the implementation details of supporting features like automatic component re-rendering and [built-in suspense](https://react.dev/reference/react/Suspense) support. We plan to support many more frameworks, including Angular, Vue, and Svelte. While this post is focused on the Web SDK, we haven’t forgotten about mobile. -Our friends at Spotify recently donated an initial [Kotlin](/docs/reference/technologies/client/kotlin/) and [Swift](/docs/reference/technologies/client/swift/) SDK. +Our friends at Spotify recently donated an initial [Kotlin](/docs/reference/sdks/client/kotlin/) and [Swift](/docs/reference/sdks/client/swift/) SDK. These comprise the primary technologies in the mobile space, and in concert with the Web SDK, cover the majority of client platforms. Finally, OpenFeature has been hard at work defining the [OpenFeature Remote Evaluation Protocol (OFREP)](https://github.com/open-feature/protocol). @@ -61,7 +62,9 @@ This initiative aims to standardize how feature flags can be evaluated over a ne ## Get involved OpenFeature is comprised of feature flag experts and enthusiasts. -If you'd like to [get involved](https://github.com/open-feature/community), don't be shy! Join a community call, or join the #OpenFeature [CNCF Slack](https://slack.cncf.io/) channel, and help us build a great open standard that benefits the industry. +If you'd like to [get involved](https://github.com/open-feature/community), don't be shy! +Join a community call, or join the #OpenFeature [CNCF Slack](https://slack.cncf.io/) channel, and help us build a great open standard that benefits the industry. -The [Web SDK](https://openfeature.dev/docs/reference/technologies/client/web/) is available now. Give it a shot and let us know how it goes. +The [Web SDK](https://openfeature.dev/docs/reference/sdks/client/web/) is available now. +Give it a shot and let us know how it goes. We can’t wait to see what you build! diff --git a/blog/2024-05-02-react-sdk-release.md b/blog/2024-05-02-react-sdk-release.md index d8a2f4c98..4ecd9ba39 100644 --- a/blog/2024-05-02-react-sdk-release.md +++ b/blog/2024-05-02-react-sdk-release.md @@ -8,7 +8,7 @@ tags: [react, client, sdk, web, javascript, typescript] draft: false --- -We're stoked to announce the first release of the [@openfeature/react-sdk](/docs/reference/technologies/client/web/react)! +We're stoked to announce the first release of the [@openfeature/react-sdk](/docs/reference/sdks/client/web/react)! This SDK is a distribution of our SDK for the web with extensions to support idiomatic React development and features. This blog highlights a few of these, with a few implementation details for the real React nerds. 🤓 @@ -60,6 +60,7 @@ function MyPage() { ); } ``` + Additionally, some feature flag solutions support realtime updates when flag configurations themselves are changed and the bound provider emits a [PROVIDER_CONFIGURATION_CHANGED](https://openfeature.dev/specification/types#provider-events) event. The React SDK also supports re-rendering in these cases so that a change in a flag definition immediately reflects those changes in the user interface. Both of these features can be disabled per-flag, or for the scope of the [context provider](#context-provider). @@ -115,4 +116,4 @@ Any OpenFeature provider built to support the web SDK can also be used with the We have a few enhancements in mind, particularly around mutating evaluation context and an API that provides components (in addition to hooks), but we're excited to get feedback from the community on what we've built so far! If you're a React dev (or you're just looking for an excuse to familiarize yourself with the library) take the OpenFeature React SDK for a spin and let us know how it goes! -You can play around with our test app [here](https://github.com/open-feature/react-test-app) to familiarize yourself with some of the features. \ No newline at end of file +You can play around with our test app [here](https://github.com/open-feature/react-test-app) to familiarize yourself with some of the features. diff --git a/blog/2024-09-17-announcing-angular-sdk.md b/blog/2024-09-17-announcing-angular-sdk.md index d1e91ce55..8f4b4d303 100644 --- a/blog/2024-09-17-announcing-angular-sdk.md +++ b/blog/2024-09-17-announcing-angular-sdk.md @@ -9,7 +9,7 @@ tags: [angular, ng, sdk, ts, js, javascript, web] draft: false --- -We are excited to unveil the first official release of the [@openfeature/angular-sdk](/docs/reference/technologies/client/web/angular)! 🚀 +We are excited to unveil the first official release of the [@openfeature/angular-sdk](/docs/reference/sdks/client/web/angular)! 🚀 This SDK extends OpenFeature capabilities to Angular applications, with a focus on Angular's unique patterns and practices. In this post, we’ll walk you through some of the standout features and how they integrate seamlessly with Angular development. @@ -22,7 +22,7 @@ In this post, we’ll walk you through some of the standout features and how the ### Angular Module System Integration The Angular SDK exports a module that allows you to configure your [OpenFeature provider](https://openfeature.dev/docs/reference/concepts/provider) using Angular constructs. -You can set your default provider, and optionally configure additional providers for other domains. +You can set your default provider, and optionally configure additional providers for other domains. Besides configuring your provider, you'll also need to use the `OpenFeatureModule` in order to utilize the other features of the SDK. ```ts @@ -123,4 +123,4 @@ Any OpenFeature provider built to support the web SDK can also be used with the We’re eager to expand the Angular SDK’s capabilities with future updates! If you're an Angular developer or interested in exploring how feature flags can enhance your applications, we encourage you to try out the OpenFeature Angular SDK. -Happy coding! 🎉 \ No newline at end of file +Happy coding! 🎉 diff --git a/blog/2024-12-09-kubecon-wrapped-and-tracking.md b/blog/2024-12-09-kubecon-wrapped-and-tracking.md index d42ea9d39..ac4c05f5c 100644 --- a/blog/2024-12-09-kubecon-wrapped-and-tracking.md +++ b/blog/2024-12-09-kubecon-wrapped-and-tracking.md @@ -9,7 +9,8 @@ tags: [tracking, specification, experimentation, spec, kubecon, cncf] draft: false --- -Hello from the OpenFeature community! This post is a double-feature of sorts: we'll be wrapping up our time at KubeCon NA 2024 as well as talking about our latest SDK feature: [✨ _tracking events_ ✨](/blog/kubecon-wrapped-and-tracking#robust-experimentation-support-with-tracking-events). +Hello from the OpenFeature community! +This post is a double-feature of sorts: we'll be wrapping up our time at KubeCon NA 2024 as well as talking about our latest SDK feature: [✨ _tracking events_ ✨](/blog/kubecon-wrapped-and-tracking#robust-experimentation-support-with-tracking-events). @@ -47,12 +48,13 @@ The new [Tracking API](/specification/sections/tracking) defines interfaces and In fact, if your vendor or home-grown feature flag solution doesn't support equivalent functionality, [hooks](/specification/sections/hooks) and tracking compose a flexible solution to associate flag evaluations with usage data, regardless of whatever customer data platform or telemetry backend you use. For more information, see [tracking concepts](/docs/reference/concepts/tracking). -These enhancements were brought to you by the hard work of many feature flag vendors, enterprises, and subject matter experts... Thanks to all who helped! +These enhancements were brought to you by the hard work of many feature flag vendors, enterprises, and subject matter experts... +Thanks to all who helped! ### Implementations and Future Plans Tracking event functionality is already implemented in our React, Javascript, Java, and Go SDKs, with more on the way. -For an up-to-date list of implementations, check out the [SDK Compatibility Overview](/docs/reference/technologies/sdk-compatibility). +For an up-to-date list of implementations, check out the [SDK Compatibility Overview](/docs/reference/sdks/sdk-compatibility). Download the latest release in your language of choice and try it out! diff --git a/blog/2025-03-19-devcycle-march-hackathon.md b/blog/2025-03-19-devcycle-march-hackathon.md index 1ae254666..7af42f8ff 100644 --- a/blog/2025-03-19-devcycle-march-hackathon.md +++ b/blog/2025-03-19-devcycle-march-hackathon.md @@ -21,7 +21,8 @@ Let's take a closer look at how our team hacked, what we learned, and why these ### OpenFeature Remote Evaluation Protocol with Cloudflare Workers -At DevCycle, we were an early supporters of the [OpenFeature Remote Evaluation Protocol (OFREP)](https://openfeature.dev/specification/appendix-c), and long-time users of [Cloudflare Workers](https://developers.cloudflare.com/workers/). Naturally, we were curious if we could use the OFREP API as a bridge interface to better support Feature Flags in these edge environments. +At DevCycle, we were an early supporters of the [OpenFeature Remote Evaluation Protocol (OFREP)](https://openfeature.dev/specification/appendix-c), and long-time users of [Cloudflare Workers](https://developers.cloudflare.com/workers/). +Naturally, we were curious if we could use the OFREP API as a bridge interface to better support Feature Flags in these edge environments. As one of our hackathon projects, Elliot from our team built a [DevCycle OFREP Worker](https://github.com/DevCycleHQ-Sandbox/OFREP-bucketing-worker), which we could publish for customers to run in their own environment. This worker can use a [service binding](https://developers.cloudflare.com/workers/runtime-apis/bindings/service-bindings/) to bind this worker to any of their own internal workers. @@ -164,9 +165,9 @@ Our goal is to provide OpenFeature support across all DevCycle SDKs, with only N ### Dogfooding OpenFeature SDK Nest.js SDK + Providers -In the spirit of dogfooding OpenFeature and our own Providers, Kaushal from our team took up the task of updating the usage of DevCycle's Nest.js SDK in our main API service to use the [OpenFeature Nest.js SDK](https://openfeature.dev/docs/reference/technologies/server/javascript/nestjs/) with [DevCycle's Nest.js Provider](https://docs.devcycle.com/sdk/server-side-sdks/nestjs/nestjs-openfeature). +In the spirit of dogfooding OpenFeature and our own Providers, Kaushal from our team took up the task of updating the usage of DevCycle's Nest.js SDK in our main API service to use the [OpenFeature Nest.js SDK](https://openfeature.dev/docs/reference/sdks/server/javascript/nestjs/) with [DevCycle's Nest.js Provider](https://docs.devcycle.com/sdk/server-side-sdks/nestjs/nestjs-openfeature). -To accomplish this, we introduced a wrapper service that used a single instance of the OpenFeature Client, making it accessible across our Nest.js service. +To accomplish this, we introduced a wrapper service that used a single instance of the OpenFeature Client, making it accessible across our Nest.js service. This straightforward migration allowed the OpenFeature Client to replace any existing calls to DevCycle's SDK. One of the key takeaways from this project was realizing how much our API development relied on Nest.js decorators, which simplified our feature flagging of API endpoints: @@ -186,7 +187,7 @@ Dogfooding the OpenFeature SDKs and our own providers was a valuable learning ex - **Evaluation Reasons for SDKs** – Enhancing our SDKs with evaluation reasons, bringing us closer to full OpenFeature spec compliance. - **Feature Flag Observability** – Improving insights into how feature flags impact performance and decision-making. -- **Add Tracking support to more SDKs** - [OpenFeature SDK Tracking Support](https://openfeature.dev/docs/reference/technologies/sdk-compatibility#server-side-sdks) +- **Add Tracking support to more SDKs** - [OpenFeature SDK Tracking Support](https://openfeature.dev/docs/reference/sdks/sdk-compatibility#server-side-sdks) - **Multi-Provider Expansion** – Bringing multi-provider support to more languages. And many more! diff --git a/docs/reference/contributing.md b/docs/reference/contributing.md index be398dc4b..b459ad07c 100644 --- a/docs/reference/contributing.md +++ b/docs/reference/contributing.md @@ -1,6 +1,7 @@ --- id: contributing title: Contributing +sidebar_position: 5 --- ## Providing Feedback diff --git a/docs/reference/other-technologies/_category_.json b/docs/reference/other-technologies/_category_.json new file mode 100644 index 000000000..f45bdc373 --- /dev/null +++ b/docs/reference/other-technologies/_category_.json @@ -0,0 +1,6 @@ +{ + "label": "Other Technologies", + "position": 4, + "collapsible": true, + "collapsed": false +} \ No newline at end of file diff --git a/docs/reference/other-technologies/cli.mdx b/docs/reference/other-technologies/cli.mdx new file mode 100644 index 000000000..5bef6000d --- /dev/null +++ b/docs/reference/other-technologies/cli.mdx @@ -0,0 +1,9 @@ +--- +title: CLI +sidebar_label: CLI +--- + +# OpenFeature CLI + +Content coming soon. + diff --git a/docs/reference/other-technologies/mcp.mdx b/docs/reference/other-technologies/mcp.mdx new file mode 100644 index 000000000..bb6e09940 --- /dev/null +++ b/docs/reference/other-technologies/mcp.mdx @@ -0,0 +1,9 @@ +--- +title: MCP +sidebar_label: MCP +--- + +# Model Context Protocol (MCP) + +Content coming soon. + diff --git a/docs/reference/other-technologies/ofrep.mdx b/docs/reference/other-technologies/ofrep.mdx new file mode 100644 index 000000000..03688d68c --- /dev/null +++ b/docs/reference/other-technologies/ofrep.mdx @@ -0,0 +1,9 @@ +--- +title: OFREP +sidebar_label: OFREP +--- + +# OpenFeature Remote Evaluation Protocol (OFREP) + +Content coming soon. + diff --git a/docs/reference/technologies/server/_category_.json b/docs/reference/sdks/_category_.json similarity index 56% rename from docs/reference/technologies/server/_category_.json rename to docs/reference/sdks/_category_.json index d94fdaeef..98af3cb03 100644 --- a/docs/reference/technologies/server/_category_.json +++ b/docs/reference/sdks/_category_.json @@ -1,4 +1,6 @@ { + "label": "SDKs", + "position": 3, "collapsible": true, "collapsed": false } \ No newline at end of file diff --git a/docs/reference/technologies/_category_.json b/docs/reference/sdks/client/_category_.json similarity index 100% rename from docs/reference/technologies/_category_.json rename to docs/reference/sdks/client/_category_.json diff --git a/docs/reference/technologies/client/index.mdx b/docs/reference/sdks/client/index.mdx similarity index 100% rename from docs/reference/technologies/client/index.mdx rename to docs/reference/sdks/client/index.mdx diff --git a/docs/reference/technologies/client/kotlin.mdx b/docs/reference/sdks/client/kotlin.mdx similarity index 99% rename from docs/reference/technologies/client/kotlin.mdx rename to docs/reference/sdks/client/kotlin.mdx index b57e6a0c3..8d6210806 100644 --- a/docs/reference/technologies/client/kotlin.mdx +++ b/docs/reference/sdks/client/kotlin.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from kotlin-sdk. Edits should be made here: https://github.com/open-feature/kotlin-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Mon Oct 06 2025 08:10:45 GMT+0000 (Coordinated Universal Time) +Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/technologies/client/swift.mdx b/docs/reference/sdks/client/swift.mdx similarity index 99% rename from docs/reference/technologies/client/swift.mdx rename to docs/reference/sdks/client/swift.mdx index b209a9f36..f0f82251d 100644 --- a/docs/reference/technologies/client/swift.mdx +++ b/docs/reference/sdks/client/swift.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from swift-sdk. Edits should be made here: https://github.com/open-feature/swift-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Mon Oct 06 2025 08:10:45 GMT+0000 (Coordinated Universal Time) +Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/technologies/client/web/_category_.json b/docs/reference/sdks/client/web/_category_.json similarity index 100% rename from docs/reference/technologies/client/web/_category_.json rename to docs/reference/sdks/client/web/_category_.json diff --git a/docs/reference/technologies/client/web/angular.mdx b/docs/reference/sdks/client/web/angular.mdx similarity index 98% rename from docs/reference/technologies/client/web/angular.mdx rename to docs/reference/sdks/client/web/angular.mdx index 0c17144a6..d7ba3af67 100644 --- a/docs/reference/technologies/client/web/angular.mdx +++ b/docs/reference/sdks/client/web/angular.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Mon Oct 06 2025 08:10:45 GMT+0000 (Coordinated Universal Time) +Last updated at Thu Oct 23 2025 10:35:33 GMT-0400 (Eastern Daylight Time) -->

@@ -18,8 +18,8 @@ Last updated at Mon Oct 06 2025 08:10:45 GMT+0000 (Coordinated Universal Time) Specification - - Release + + Release
@@ -34,9 +34,9 @@ Last updated at Mon Oct 06 2025 08:10:45 GMT+0000 (Coordinated Universal Time) ## Overview The OpenFeature Angular SDK adds Angular-specific functionality to -the [OpenFeature Web SDK](/docs/reference/technologies/client/web). +the [OpenFeature Web SDK](/docs/reference/sdks/client/web). -In addition to the features provided by the [web sdk](/docs/reference/technologies/client/web), capabilities include: +In addition to the features provided by the [web sdk](/docs/reference/sdks/client/web), capabilities include: - [Overview](#overview) - [Quick start](#quick-start) diff --git a/docs/reference/technologies/client/web/index.mdx b/docs/reference/sdks/client/web/index.mdx similarity index 85% rename from docs/reference/technologies/client/web/index.mdx rename to docs/reference/sdks/client/web/index.mdx index dc868d7f4..df712c935 100644 --- a/docs/reference/technologies/client/web/index.mdx +++ b/docs/reference/sdks/client/web/index.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Mon Oct 06 2025 08:10:45 GMT+0000 (Coordinated Universal Time) +Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) -->

@@ -18,8 +18,8 @@ Last updated at Mon Oct 06 2025 08:10:45 GMT+0000 (Coordinated Universal Time) Specification - - Release + + Release
@@ -52,7 +52,7 @@ npm install --save @openfeature/web-sdk ``` > [!TIP] -> This SDK is designed to run in the browser. If you're interested in server support, check out the [Node.js SDK](/docs/reference/technologies/server/javascript/). +> This SDK is designed to run in the browser. If you're interested in server support, check out the [Node.js SDK](/docs/reference/sdks/server/javascript/). #### yarn @@ -142,6 +142,63 @@ Once the provider has been registered, the status can be tracked using [events]( In some situations, it may be beneficial to register multiple providers in the same application. This is possible using [domains](#domains), which is covered in more detail below. +#### Multi-Provider + +The Multi-Provider allows you to use multiple underlying providers as sources of flag data for the OpenFeature web SDK. When a flag is being evaluated, the Multi-Provider will consult each underlying provider it is managing in order to determine the final result. Different evaluation strategies can be defined to control which providers get evaluated and which result is used. + +The Multi-Provider is a powerful tool for performing migrations between flag providers, or combining multiple providers into a single feature flagging interface. For example: + +- **Migration**: When migrating between two providers, you can run both in parallel under a unified flagging interface. As flags are added to the new provider, the Multi-Provider will automatically find and return them, falling back to the old provider if the new provider does not have the flag. +- **Multiple Data Sources**: The Multi-Provider allows you to seamlessly combine many sources of flagging data, such as environment variables, local files, database values and SaaS hosted feature management systems. + +```ts +import { MultiProvider } from '@openfeature/web-sdk'; + +const multiProvider = new MultiProvider([ + { provider: new ProviderA() }, + { provider: new ProviderB() } +]); + +await OpenFeature.setProviderAndWait(multiProvider); + +const client = OpenFeature.getClient(); +console.log(client.getBooleanDetails("my-flag", false)); +``` + +By default, the Multi-Provider will evaluate all underlying providers in order and return the first successful result. If a provider indicates it does not have a flag (FLAG_NOT_FOUND error code), then it will be skipped and the next provider will be evaluated. + +##### Evaluation Strategies + +The Multi-Provider comes with three strategies out of the box: + +- **FirstMatchStrategy** (default): Evaluates all providers in order and returns the first successful result. Providers that indicate FLAG_NOT_FOUND error will be skipped and the next provider will be evaluated. +- **FirstSuccessfulStrategy**: Evaluates all providers in order and returns the first successful result. Any error will cause that provider to be skipped. +- **ComparisonStrategy**: Evaluates all providers sequentially. If every provider returns a successful result with the same value, then that result is returned. Otherwise, the result returned by the configured "fallback provider" will be used. + +```ts +import { MultiProvider, FirstSuccessfulStrategy } from '@openfeature/web-sdk'; + +const multiProvider = new MultiProvider( + [ + { provider: new ProviderA() }, + { provider: new ProviderB() } + ], + new FirstSuccessfulStrategy() +); +``` + +##### Tracking Support + +The Multi-Provider supports tracking events across multiple providers, allowing you to send analytics events to all configured providers simultaneously: + +```ts +// Tracked events will be sent to all providers by default +client.track('user-conversion', { + value: 99.99, + currency: 'USD' +}); +``` + ### Flag evaluation flow When a new provider is added to OpenFeature client the following process happens: diff --git a/docs/reference/technologies/client/web/react.mdx b/docs/reference/sdks/client/web/react.mdx similarity index 97% rename from docs/reference/technologies/client/web/react.mdx rename to docs/reference/sdks/client/web/react.mdx index 09a753ccb..20896d678 100644 --- a/docs/reference/technologies/client/web/react.mdx +++ b/docs/reference/sdks/client/web/react.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Mon Oct 06 2025 08:10:45 GMT+0000 (Coordinated Universal Time) +Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) -->

@@ -33,9 +33,9 @@ Last updated at Mon Oct 06 2025 08:10:45 GMT+0000 (Coordinated Universal Time) ## Overview -The OpenFeature React SDK adds React-specific functionality to the [OpenFeature Web SDK](/docs/reference/technologies/client/web). +The OpenFeature React SDK adds React-specific functionality to the [OpenFeature Web SDK](/docs/reference/sdks/client/web). -In addition to the feature provided by the [web sdk](/docs/reference/technologies/client/web), capabilities include: +In addition to the feature provided by the [web sdk](/docs/reference/sdks/client/web), capabilities include: - [Overview](#overview) - [Quick start](#quick-start) @@ -283,7 +283,7 @@ This can be disabled in the hook options (or in the [OpenFeatureProvider](#openf The tracking API allows you to use OpenFeature abstractions and objects to associate user actions with feature flag evaluations. This is essential for robust experimentation powered by feature flags. -For example, a flag enhancing the appearance of a UI component might drive user engagement to a new feature; to test this hypothesis, telemetry collected by a [hook](/docs/reference/technologies/client/web/#hooks) or [provider](/docs/reference/technologies/client/web/#providers) can be associated with telemetry reported in the client's `track` function. +For example, a flag enhancing the appearance of a UI component might drive user engagement to a new feature; to test this hypothesis, telemetry collected by a [hook](/docs/reference/sdks/client/web/#hooks) or [provider](/docs/reference/sdks/client/web/#providers) can be associated with telemetry reported in the client's `track` function. The React SDK includes a hook for firing tracking events in the `` context in use: diff --git a/docs/reference/technologies/index.mdx b/docs/reference/sdks/index.mdx similarity index 100% rename from docs/reference/technologies/index.mdx rename to docs/reference/sdks/index.mdx diff --git a/docs/reference/technologies/sdk-compatibility.mdx b/docs/reference/sdks/sdk-compatibility.mdx similarity index 100% rename from docs/reference/technologies/sdk-compatibility.mdx rename to docs/reference/sdks/sdk-compatibility.mdx diff --git a/docs/reference/technologies/client/_category_.json b/docs/reference/sdks/server/_category_.json similarity index 100% rename from docs/reference/technologies/client/_category_.json rename to docs/reference/sdks/server/_category_.json diff --git a/docs/reference/technologies/server/dart.mdx b/docs/reference/sdks/server/dart.mdx similarity index 99% rename from docs/reference/technologies/server/dart.mdx rename to docs/reference/sdks/server/dart.mdx index 4734b37e3..d086a6f14 100644 --- a/docs/reference/technologies/server/dart.mdx +++ b/docs/reference/sdks/server/dart.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from dart-server-sdk. Edits should be made here: https://github.com/open-feature/dart-server-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Mon Oct 06 2025 08:10:45 GMT+0000 (Coordinated Universal Time) +Last updated at Thu Oct 23 2025 10:35:33 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/technologies/server/dotnet.mdx b/docs/reference/sdks/server/dotnet.mdx similarity index 97% rename from docs/reference/technologies/server/dotnet.mdx rename to docs/reference/sdks/server/dotnet.mdx index 225d25dd4..9578546b0 100644 --- a/docs/reference/technologies/server/dotnet.mdx +++ b/docs/reference/sdks/server/dotnet.mdx @@ -10,13 +10,13 @@ This content has been automatically generated from dotnet-sdk. Edits should be made here: https://github.com/open-feature/dotnet-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Mon Oct 06 2025 08:10:45 GMT+0000 (Coordinated Universal Time) +Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) --> [![Specification](https://img.shields.io/static/v1?label=specification&message=v0.8.0&color=yellow&style=for-the-badge)](https://github.com/open-feature/spec/releases/tag/v0.8.0) [ -![Release](https://img.shields.io/static/v1?label=release&message=v2.8.1&color=blue&style=for-the-badge) -](https://github.com/open-feature/dotnet-sdk/releases/tag/v2.8.1) +![Release](https://img.shields.io/static/v1?label=release&message=v2.9.0&color=blue&style=for-the-badge) +](https://github.com/open-feature/dotnet-sdk/releases/tag/v2.9.0) [![Slack](https://img.shields.io/badge/slack-%40cncf%2Fopenfeature-brightgreen?style=flat&logo=slack)](https://cloud-native.slack.com/archives/C0344AANLA1) [![Codecov](https://codecov.io/gh/open-feature/dotnet-sdk/branch/main/graph/badge.svg?token=MONAVJBXUJ)](https://codecov.io/gh/open-feature/dotnet-sdk) @@ -442,10 +442,12 @@ Built a new hook? [Let us know](https://github.com/open-feature/openfeature.dev/ ### Multi-Provider > [!NOTE] -> The Multi-Provider feature is currently experimental. Hooks and events are not supported at the moment. +> The Multi-Provider feature is currently experimental. The Multi-Provider enables the use of multiple underlying feature flag providers simultaneously, allowing different providers to be used for different flag keys or based on specific evaluation strategies. +The Multi-Provider supports provider hooks and executes them in accordance with the OpenFeature specification. Each provider's hooks are executed with context isolation, ensuring that context modifications by one provider's hooks do not affect other providers. + #### Basic Usage ```csharp @@ -523,23 +525,20 @@ The Multi-Provider supports two evaluation modes: #### Limitations -- **Hooks are not supported**: Multi-Provider does not currently support hook registration or execution -- **Events are not supported**: Provider events are not propagated from underlying providers -- **Experimental status**: The API may change in future releases +- **Experimental status**: The API may change in future releases For a complete example, see the [AspNetCore sample](https://github.com/open-feature/dotnet-sdk/blob/main/samples/AspNetCore/README.md) which demonstrates Multi-Provider usage. ### Dependency Injection > [!NOTE] -> The OpenFeature.DependencyInjection and OpenFeature.Hosting packages are currently experimental. They streamline the integration of OpenFeature within .NET applications, allowing for seamless configuration and lifecycle management of feature flag providers using dependency injection and hosting services. +> The OpenFeature.Hosting package is currently experimental. The Hosting package streamlines the integration of OpenFeature within .NET applications, allowing for seamless configuration and lifecycle management of feature flag providers using dependency injection and hosting services. #### Installation -To set up dependency injection and hosting capabilities for OpenFeature, install the following packages: +To set up dependency injection and hosting capabilities for OpenFeature, install the following package: ```sh -dotnet add package OpenFeature.DependencyInjection dotnet add package OpenFeature.Hosting ``` @@ -552,7 +551,6 @@ For a basic configuration, you can use the InMemoryProvider. This provider is si ```csharp builder.Services.AddOpenFeature(featureBuilder => { featureBuilder - .AddHostedFeatureLifecycle() // From Hosting package .AddInMemoryProvider(); }); ``` @@ -574,7 +572,6 @@ builder.Services.AddOpenFeature(featureBuilder => { ```csharp builder.Services.AddOpenFeature(featureBuilder => { featureBuilder - .AddHostedFeatureLifecycle() .AddContext((contextBuilder, serviceProvider) => { /* Custom context configuration */ }) .AddHook((serviceProvider) => new LoggingHook( /* Custom configuration */ )) .AddHook(new MetricsHook()) diff --git a/docs/reference/technologies/server/go.mdx b/docs/reference/sdks/server/go.mdx similarity index 97% rename from docs/reference/technologies/server/go.mdx rename to docs/reference/sdks/server/go.mdx index dcedcaf92..d3b1c7b70 100644 --- a/docs/reference/technologies/server/go.mdx +++ b/docs/reference/sdks/server/go.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from go-sdk. Edits should be made here: https://github.com/open-feature/go-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Mon Oct 06 2025 08:10:45 GMT+0000 (Coordinated Universal Time) +Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) -->

@@ -114,7 +114,8 @@ openfeature.SetProviderAndWait(MyProvider{}) ``` In some situations, it may be beneficial to register multiple providers in the same application. -This is possible using [domains](#domains), which is covered in more details below. +This is possible using [domains](#domains), which is covered in more details below, or the included [multiprovider](#multi-provider-implementation) +implementation. ### Targeting @@ -326,6 +327,11 @@ tCtx := openfeature.MergeTransactionContext(ctx, openfeature.EvaluationContext{} client.BooleanValue(tCtx, ....) ``` +### Multi-Provider Implementation + +Included with this SDK is an _experimental_ multi-provider that can be used to query multiple feature flag providers simultaneously. +More information can be found in the [multi package's README](https://github.com/open-feature/go-sdk/blob/main/openfeature/multi/README.md). + ## Extending ### Develop a provider diff --git a/docs/reference/technologies/server/index.mdx b/docs/reference/sdks/server/index.mdx similarity index 100% rename from docs/reference/technologies/server/index.mdx rename to docs/reference/sdks/server/index.mdx diff --git a/docs/reference/technologies/server/java.mdx b/docs/reference/sdks/server/java.mdx similarity index 98% rename from docs/reference/technologies/server/java.mdx rename to docs/reference/sdks/server/java.mdx index f73a345a5..cdedc6d04 100644 --- a/docs/reference/technologies/server/java.mdx +++ b/docs/reference/sdks/server/java.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from java-sdk. Edits should be made here: https://github.com/open-feature/java-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Mon Oct 06 2025 08:10:44 GMT+0000 (Coordinated Universal Time) +Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) -->

@@ -18,8 +18,8 @@ Last updated at Mon Oct 06 2025 08:10:44 GMT+0000 (Coordinated Universal Time) - - Release + + Release @@ -54,7 +54,7 @@ Note that this library is intended to be used in server-side contexts and has no dev.openfeature sdk - 1.18.1 + 1.18.2 ``` @@ -77,7 +77,7 @@ If you would like snapshot builds, this is the relevant repository information: ```groovy dependencies { - implementation 'dev.openfeature:sdk:1.18.1' + implementation 'dev.openfeature:sdk:1.18.2' } ``` diff --git a/docs/reference/technologies/server/javascript/_category_.json b/docs/reference/sdks/server/javascript/_category_.json similarity index 100% rename from docs/reference/technologies/server/javascript/_category_.json rename to docs/reference/sdks/server/javascript/_category_.json diff --git a/docs/reference/technologies/server/javascript/index.mdx b/docs/reference/sdks/server/javascript/index.mdx similarity index 85% rename from docs/reference/technologies/server/javascript/index.mdx rename to docs/reference/sdks/server/javascript/index.mdx index 6f3cd47f3..162a64f18 100644 --- a/docs/reference/technologies/server/javascript/index.mdx +++ b/docs/reference/sdks/server/javascript/index.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Mon Oct 06 2025 08:10:44 GMT+0000 (Coordinated Universal Time) +Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) -->

@@ -18,8 +18,8 @@ Last updated at Mon Oct 06 2025 08:10:44 GMT+0000 (Coordinated Universal Time) Specification - - Release + + Release
@@ -52,7 +52,7 @@ npm install --save @openfeature/server-sdk ``` > [!TIP] -> This SDK is designed to run in Node.JS. If you're interested in browser support, check out the [Web SDK](/docs/reference/technologies/client/web/). +> This SDK is designed to run in Node.JS. If you're interested in browser support, check out the [Web SDK](/docs/reference/sdks/client/web/). #### yarn @@ -137,7 +137,83 @@ OpenFeature.setProvider(new MyProvider()); Once the provider has been registered, the status can be tracked using [events](#eventing). In some situations, it may be beneficial to register multiple providers in the same application. -This is possible using [domains](#domains), which is covered in more details below. +This is possible using [domains](#domains), which is covered in more detail below. + +#### Multi-Provider + +The Multi-Provider allows you to use multiple underlying providers as sources of flag data for the OpenFeature server SDK. When a flag is being evaluated, the Multi-Provider will consult each underlying provider it is managing in order to determine the final result. Different evaluation strategies can be defined to control which providers get evaluated and which result is used. + +The Multi-Provider is a powerful tool for performing migrations between flag providers, or combining multiple providers into a single feature flagging interface. For example: + +- **Migration**: Gradually migrate from one provider to another by serving some flags from your old provider and some from your new provider +- **Backup**: Use one provider as a backup for another in case of failures +- **Comparison**: Compare results from multiple providers to validate consistency +- **Hybrid**: Combine multiple providers to leverage different strengths (e.g., one for simple flags, another for complex targeting) + +```ts +import { OpenFeature, MultiProvider, FirstMatchStrategy } from '@openfeature/server-sdk'; + +// Create providers +const primaryProvider = new YourPrimaryProvider(); +const backupProvider = new YourBackupProvider(); + +// Create multi-provider with a strategy +const multiProvider = new MultiProvider( + [primaryProvider, backupProvider], + new FirstMatchStrategy() +); + +// Register the multi-provider +await OpenFeature.setProviderAndWait(multiProvider); + +// Use as normal +const client = OpenFeature.getClient(); +const value = await client.getBooleanValue('my-flag', false); +``` + +**Available Strategies:** + +- `FirstMatchStrategy`: Returns the first successful result from the list of providers +- `ComparisonStrategy`: Compares results from multiple providers and can handle discrepancies + +**Migration Example:** + +```ts +import { OpenFeature, MultiProvider, FirstMatchStrategy } from '@openfeature/server-sdk'; + +// During migration, serve some flags from the new provider and fallback to the old one +const newProvider = new NewFlagProvider(); +const oldProvider = new OldFlagProvider(); + +const multiProvider = new MultiProvider( + [newProvider, oldProvider], // New provider is consulted first + new FirstMatchStrategy() +); + +await OpenFeature.setProviderAndWait(multiProvider); +``` + +**Comparison Example:** + +```ts +import { OpenFeature, MultiProvider, ComparisonStrategy } from '@openfeature/server-sdk'; + +// Compare results from two providers for validation +const providerA = new ProviderA(); +const providerB = new ProviderB(); + +const multiProvider = new MultiProvider( + [ + { provider: providerA }, + { provider: providerB } + ], + new ComparisonStrategy(providerA, (resolutions) => { + console.warn('Mismatch detected', resolutions); + }) +); + +await OpenFeature.setProviderAndWait(multiProvider); +``` ### Targeting diff --git a/docs/reference/technologies/server/javascript/nestjs.mdx b/docs/reference/sdks/server/javascript/nestjs.mdx similarity index 97% rename from docs/reference/technologies/server/javascript/nestjs.mdx rename to docs/reference/sdks/server/javascript/nestjs.mdx index e93b603d3..2abbcf07e 100644 --- a/docs/reference/technologies/server/javascript/nestjs.mdx +++ b/docs/reference/sdks/server/javascript/nestjs.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Mon Oct 06 2025 08:10:45 GMT+0000 (Coordinated Universal Time) +Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) -->

@@ -33,7 +33,7 @@ Last updated at Mon Oct 06 2025 08:10:45 GMT+0000 (Coordinated Universal Time) ## Overview -The OpenFeature NestJS SDK is a package that provides a NestJS wrapper for the [OpenFeature Server SDK](/docs/reference/technologies/server/javascript/). +The OpenFeature NestJS SDK is a package that provides a NestJS wrapper for the [OpenFeature Server SDK](/docs/reference/sdks/server/javascript/). Capabilities include: diff --git a/docs/reference/technologies/server/php.mdx b/docs/reference/sdks/server/php.mdx similarity index 99% rename from docs/reference/technologies/server/php.mdx rename to docs/reference/sdks/server/php.mdx index 45e72ea7b..81aee4744 100644 --- a/docs/reference/technologies/server/php.mdx +++ b/docs/reference/sdks/server/php.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from php-sdk. Edits should be made here: https://github.com/open-feature/php-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Mon Oct 06 2025 08:10:45 GMT+0000 (Coordinated Universal Time) +Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/technologies/server/python.mdx b/docs/reference/sdks/server/python.mdx similarity index 99% rename from docs/reference/technologies/server/python.mdx rename to docs/reference/sdks/server/python.mdx index f39a79d5f..3666d0072 100644 --- a/docs/reference/technologies/server/python.mdx +++ b/docs/reference/sdks/server/python.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from python-sdk. Edits should be made here: https://github.com/open-feature/python-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Mon Oct 06 2025 08:10:45 GMT+0000 (Coordinated Universal Time) +Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/technologies/server/ruby.mdx b/docs/reference/sdks/server/ruby.mdx similarity index 99% rename from docs/reference/technologies/server/ruby.mdx rename to docs/reference/sdks/server/ruby.mdx index 8ea111140..28807d4e2 100644 --- a/docs/reference/technologies/server/ruby.mdx +++ b/docs/reference/sdks/server/ruby.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from ruby-sdk. Edits should be made here: https://github.com/open-feature/ruby-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Mon Oct 06 2025 08:10:45 GMT+0000 (Coordinated Universal Time) +Last updated at Thu Oct 23 2025 10:35:33 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/technologies/server/rust.mdx b/docs/reference/sdks/server/rust.mdx similarity index 99% rename from docs/reference/technologies/server/rust.mdx rename to docs/reference/sdks/server/rust.mdx index 78a2e85a1..ef1ecfcf5 100644 --- a/docs/reference/technologies/server/rust.mdx +++ b/docs/reference/sdks/server/rust.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from rust-sdk. Edits should be made here: https://github.com/open-feature/rust-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Mon Oct 06 2025 08:10:45 GMT+0000 (Coordinated Universal Time) +Last updated at Thu Oct 23 2025 10:35:33 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/tutorials/five-minutes-to-feature-flags.md b/docs/tutorials/five-minutes-to-feature-flags.md index d6f088c31..6a6d8ec97 100644 --- a/docs/tutorials/five-minutes-to-feature-flags.md +++ b/docs/tutorials/five-minutes-to-feature-flags.md @@ -411,7 +411,7 @@ We can get started with feature flags with low investment and low risk, and once ## Next steps To learn more about OpenFeature, check out the documentation [here](/docs/reference/intro). -Specifically, you can read more about how the [evaluation API works](/docs/reference/concepts/evaluation-api/), what [tech stacks are supported](/docs/reference/technologies/), or read [more tutorials](/docs/category/getting-started/) about using OpenFeature in a variety of tech stacks. +Specifically, you can read more about how the [evaluation API works](/docs/reference/concepts/evaluation-api/), what [tech stacks are supported](/docs/reference/sdks/), or read [more tutorials](/docs/category/getting-started/) about using OpenFeature in a variety of tech stacks. More hands-on tutorials are available on the [OpenFeature Killercoda page](https://killercoda.com/open-feature). diff --git a/docusaurus.config.ts b/docusaurus.config.ts index fc647f6d1..5b763702e 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -319,7 +319,7 @@ const config: Config = { name: 'sdk-content', noRuntimeDownloads: true, sourceBaseUrl: 'https://raw.githubusercontent.com/open-feature/', - outDir: 'docs/reference/technologies', + outDir: 'docs/reference/sdks', documents: processSdkReadmes.paths, modifyContent: processSdkReadmes.modifyContent, }, diff --git a/src/datasets/constants.ts b/src/datasets/constants.ts index 09cc33675..742f353a5 100644 --- a/src/datasets/constants.ts +++ b/src/datasets/constants.ts @@ -18,6 +18,7 @@ export const serverSideFeatures = [ 'Transaction Context Propagation', 'Shutdown', 'Extending', + 'Multi-Provider', ]; export const clientSideFeatures = [ @@ -31,4 +32,5 @@ export const clientSideFeatures = [ 'Tracking', 'Shutdown', 'Extending', + 'Multi-Provider', ]; diff --git a/src/datasets/sdks/angular.ts b/src/datasets/sdks/angular.ts index efec1112d..50567f1dd 100644 --- a/src/datasets/sdks/angular.ts +++ b/src/datasets/sdks/angular.ts @@ -11,6 +11,6 @@ export const Angular: SDK = { logoKey: 'angular-no-fill.svg', technology: 'Angular', parentTechnology: 'JavaScript', - href: '/docs/reference/technologies/client/web/angular', + href: '/docs/reference/sdks/client/web/angular', includeInSupportMatrix: false, }; diff --git a/src/datasets/sdks/dart.ts b/src/datasets/sdks/dart.ts index d6103291f..8f79a54ae 100644 --- a/src/datasets/sdks/dart.ts +++ b/src/datasets/sdks/dart.ts @@ -6,5 +6,5 @@ export const Dart: SDK = { repo: 'dart-server-sdk', logoKey: 'dart-no-fill.svg', technology: 'Dart', - href: '/docs/reference/technologies/server/dart', + href: '/docs/reference/sdks/server/dart', }; diff --git a/src/datasets/sdks/dotnet.ts b/src/datasets/sdks/dotnet.ts index de61e5ede..6ddb86ece 100644 --- a/src/datasets/sdks/dotnet.ts +++ b/src/datasets/sdks/dotnet.ts @@ -9,5 +9,5 @@ export const Dotnet: SDK = { branch: 'main', logoKey: 'c-sharp-no-fill.svg', technology: '.NET', - href: '/docs/reference/technologies/server/dotnet', + href: '/docs/reference/sdks/server/dotnet', }; diff --git a/src/datasets/sdks/go.ts b/src/datasets/sdks/go.ts index 8314f2169..f093a4fb0 100644 --- a/src/datasets/sdks/go.ts +++ b/src/datasets/sdks/go.ts @@ -6,5 +6,5 @@ export const Go: SDK = { repo: 'go-sdk', logoKey: 'go-no-fill.svg', technology: 'Go', - href: '/docs/reference/technologies/server/go', + href: '/docs/reference/sdks/server/go', }; diff --git a/src/datasets/sdks/java.ts b/src/datasets/sdks/java.ts index 9d54b04b3..71790fa20 100644 --- a/src/datasets/sdks/java.ts +++ b/src/datasets/sdks/java.ts @@ -6,5 +6,5 @@ export const Java: SDK = { repo: 'java-sdk', logoKey: 'java-no-fill.svg', technology: 'Java', - href: '/docs/reference/technologies/server/java', + href: '/docs/reference/sdks/server/java', }; diff --git a/src/datasets/sdks/kotlin.ts b/src/datasets/sdks/kotlin.ts index 6875f7d28..904e48b1c 100644 --- a/src/datasets/sdks/kotlin.ts +++ b/src/datasets/sdks/kotlin.ts @@ -9,5 +9,5 @@ export const Kotlin: SDK = { repo: 'kotlin-sdk', logoKey: 'kotlin-no-fill.svg', technology: 'Kotlin', - href: '/docs/reference/technologies/client/kotlin', + href: '/docs/reference/sdks/client/kotlin', }; diff --git a/src/datasets/sdks/nestjs.ts b/src/datasets/sdks/nestjs.ts index 1655f050f..d213094da 100644 --- a/src/datasets/sdks/nestjs.ts +++ b/src/datasets/sdks/nestjs.ts @@ -11,6 +11,6 @@ export const Nestjs: SDK = { logoKey: 'nestjs-no-fill.svg', technology: 'NestJS', parentTechnology: 'JavaScript', - href: '/docs/reference/technologies/server/javascript/nestjs', + href: '/docs/reference/sdks/server/javascript/nestjs', includeInSupportMatrix: false, }; diff --git a/src/datasets/sdks/nodejs.ts b/src/datasets/sdks/nodejs.ts index 7454b8d88..038e03240 100644 --- a/src/datasets/sdks/nodejs.ts +++ b/src/datasets/sdks/nodejs.ts @@ -9,5 +9,5 @@ export const Nodejs: SDK = { folder: '/packages/server', logoKey: 'nodejs-no-fill.svg', technology: 'JavaScript', - href: '/docs/reference/technologies/server/javascript', + href: '/docs/reference/sdks/server/javascript', }; diff --git a/src/datasets/sdks/php.ts b/src/datasets/sdks/php.ts index 8135bda12..ce20b0636 100644 --- a/src/datasets/sdks/php.ts +++ b/src/datasets/sdks/php.ts @@ -6,5 +6,5 @@ export const PHP: SDK = { repo: 'php-sdk', logoKey: 'php-no-fill.svg', technology: 'PHP', - href: '/docs/reference/technologies/server/php', + href: '/docs/reference/sdks/server/php', }; diff --git a/src/datasets/sdks/python.ts b/src/datasets/sdks/python.ts index 0e38b2db6..9060d1c65 100644 --- a/src/datasets/sdks/python.ts +++ b/src/datasets/sdks/python.ts @@ -6,5 +6,5 @@ export const Python: SDK = { repo: 'python-sdk', logoKey: 'python-no-fill.svg', technology: 'Python', - href: '/docs/reference/technologies/server/python', + href: '/docs/reference/sdks/server/python', }; diff --git a/src/datasets/sdks/react.ts b/src/datasets/sdks/react.ts index eecb22108..9fa5aeff3 100644 --- a/src/datasets/sdks/react.ts +++ b/src/datasets/sdks/react.ts @@ -11,6 +11,6 @@ export const React: SDK = { logoKey: 'react-no-fill.svg', technology: 'React', parentTechnology: 'JavaScript', - href: '/docs/reference/technologies/client/web/react', + href: '/docs/reference/sdks/client/web/react', includeInSupportMatrix: false, }; diff --git a/src/datasets/sdks/ruby.ts b/src/datasets/sdks/ruby.ts index 0db2219d6..a3de98fc6 100644 --- a/src/datasets/sdks/ruby.ts +++ b/src/datasets/sdks/ruby.ts @@ -9,5 +9,5 @@ export const Ruby: SDK = { branch: 'main', logoKey: 'ruby-no-fill.svg', technology: 'Ruby', - href: '/docs/reference/technologies/server/ruby', + href: '/docs/reference/sdks/server/ruby', }; diff --git a/src/datasets/sdks/rust.ts b/src/datasets/sdks/rust.ts index f78b11c7a..08ad719dd 100644 --- a/src/datasets/sdks/rust.ts +++ b/src/datasets/sdks/rust.ts @@ -6,5 +6,5 @@ export const Rust: SDK = { repo: 'rust-sdk', logoKey: 'rust-no-fill.svg', technology: 'Rust', - href: '/docs/reference/technologies/server/rust', + href: '/docs/reference/sdks/server/rust', }; diff --git a/src/datasets/sdks/sdk-compatibility.json b/src/datasets/sdks/sdk-compatibility.json index 024011438..ae5cd878a 100644 --- a/src/datasets/sdks/sdk-compatibility.json +++ b/src/datasets/sdks/sdk-compatibility.json @@ -1,11 +1,11 @@ [ { "name": "Java", - "path": "/docs/reference/technologies/server/java", + "path": "/docs/reference/sdks/server/java", "category": "Server", "release": { - "href": "https://github.com/open-feature/java-sdk/releases/tag/v1.18.1", - "version": "1.18.1", + "href": "https://github.com/open-feature/java-sdk/releases/tag/v1.18.2", + "version": "1.18.2", "stable": true }, "spec": { @@ -15,53 +15,57 @@ "features": { "Providers": { "status": "✅", - "path": "/docs/reference/technologies/server/java#providers" + "path": "/docs/reference/sdks/server/java#providers" }, "Targeting": { "status": "✅", - "path": "/docs/reference/technologies/server/java#targeting" + "path": "/docs/reference/sdks/server/java#targeting" }, "Hooks": { "status": "✅", - "path": "/docs/reference/technologies/server/java#hooks" + "path": "/docs/reference/sdks/server/java#hooks" }, "Logging": { "status": "✅", - "path": "/docs/reference/technologies/server/java#logging" + "path": "/docs/reference/sdks/server/java#logging" }, "Domains": { "status": "✅", - "path": "/docs/reference/technologies/server/java#domains" + "path": "/docs/reference/sdks/server/java#domains" }, "Eventing": { "status": "✅", - "path": "/docs/reference/technologies/server/java#eventing" + "path": "/docs/reference/sdks/server/java#eventing" }, "Tracking": { "status": "✅", - "path": "/docs/reference/technologies/server/java#tracking" + "path": "/docs/reference/sdks/server/java#tracking" }, "Transaction Context Propagation": { "status": "✅", - "path": "/docs/reference/technologies/server/java#transaction-context-propagation" + "path": "/docs/reference/sdks/server/java#transaction-context-propagation" }, "Shutdown": { "status": "✅", - "path": "/docs/reference/technologies/server/java#shutdown" + "path": "/docs/reference/sdks/server/java#shutdown" }, "Extending": { "status": "✅", - "path": "/docs/reference/technologies/server/java#extending" + "path": "/docs/reference/sdks/server/java#extending" + }, + "Multi-Provider": { + "status": "❓", + "path": "/docs/reference/sdks/server/java" } } }, { "name": "Node.js", - "path": "/docs/reference/technologies/server/javascript", + "path": "/docs/reference/sdks/server/javascript", "category": "Server", "release": { - "href": "https://github.com/open-feature/js-sdk/releases/tag/server-sdk-v1.19.0", - "version": "1.19.0", + "href": "https://github.com/open-feature/js-sdk/releases/tag/server-sdk-v1.20.0", + "version": "1.20.0", "stable": true }, "spec": { @@ -71,53 +75,57 @@ "features": { "Providers": { "status": "✅", - "path": "/docs/reference/technologies/server/javascript#providers" + "path": "/docs/reference/sdks/server/javascript#providers" }, "Targeting": { "status": "✅", - "path": "/docs/reference/technologies/server/javascript#targeting" + "path": "/docs/reference/sdks/server/javascript#targeting" }, "Hooks": { "status": "✅", - "path": "/docs/reference/technologies/server/javascript#hooks" + "path": "/docs/reference/sdks/server/javascript#hooks" }, "Logging": { "status": "✅", - "path": "/docs/reference/technologies/server/javascript#logging" + "path": "/docs/reference/sdks/server/javascript#logging" }, "Domains": { "status": "✅", - "path": "/docs/reference/technologies/server/javascript#domains" + "path": "/docs/reference/sdks/server/javascript#domains" }, "Eventing": { "status": "✅", - "path": "/docs/reference/technologies/server/javascript#eventing" + "path": "/docs/reference/sdks/server/javascript#eventing" }, "Tracking": { "status": "✅", - "path": "/docs/reference/technologies/server/javascript#tracking" + "path": "/docs/reference/sdks/server/javascript#tracking" }, "Transaction Context Propagation": { "status": "✅", - "path": "/docs/reference/technologies/server/javascript#transaction-context-propagation" + "path": "/docs/reference/sdks/server/javascript#transaction-context-propagation" }, "Shutdown": { "status": "✅", - "path": "/docs/reference/technologies/server/javascript#shutdown" + "path": "/docs/reference/sdks/server/javascript#shutdown" }, "Extending": { "status": "✅", - "path": "/docs/reference/technologies/server/javascript#extending" + "path": "/docs/reference/sdks/server/javascript#extending" + }, + "Multi-Provider": { + "status": "❓", + "path": "/docs/reference/sdks/server/javascript" } } }, { "name": ".NET", - "path": "/docs/reference/technologies/server/dotnet", + "path": "/docs/reference/sdks/server/dotnet", "category": "Server", "release": { - "href": "https://github.com/open-feature/dotnet-sdk/releases/tag/v2.8.1", - "version": "2.8.1", + "href": "https://github.com/open-feature/dotnet-sdk/releases/tag/v2.9.0", + "version": "2.9.0", "stable": true }, "spec": { @@ -127,49 +135,53 @@ "features": { "Providers": { "status": "✅", - "path": "/docs/reference/technologies/server/dotnet#providers" + "path": "/docs/reference/sdks/server/dotnet#providers" }, "Targeting": { "status": "✅", - "path": "/docs/reference/technologies/server/dotnet#targeting" + "path": "/docs/reference/sdks/server/dotnet#targeting" }, "Hooks": { "status": "✅", - "path": "/docs/reference/technologies/server/dotnet#hooks" + "path": "/docs/reference/sdks/server/dotnet#hooks" }, "Logging": { "status": "✅", - "path": "/docs/reference/technologies/server/dotnet#logging" + "path": "/docs/reference/sdks/server/dotnet#logging" }, "Domains": { "status": "✅", - "path": "/docs/reference/technologies/server/dotnet#domains" + "path": "/docs/reference/sdks/server/dotnet#domains" }, "Eventing": { "status": "✅", - "path": "/docs/reference/technologies/server/dotnet#eventing" + "path": "/docs/reference/sdks/server/dotnet#eventing" }, "Tracking": { "status": "✅", - "path": "/docs/reference/technologies/server/dotnet#tracking" + "path": "/docs/reference/sdks/server/dotnet#tracking" }, "Transaction Context Propagation": { "status": "✅", - "path": "/docs/reference/technologies/server/dotnet#transaction-context-propagation" + "path": "/docs/reference/sdks/server/dotnet#transaction-context-propagation" }, "Shutdown": { "status": "✅", - "path": "/docs/reference/technologies/server/dotnet#shutdown" + "path": "/docs/reference/sdks/server/dotnet#shutdown" }, "Extending": { "status": "✅", - "path": "/docs/reference/technologies/server/dotnet#extending" + "path": "/docs/reference/sdks/server/dotnet#extending" + }, + "Multi-Provider": { + "status": "❓", + "path": "/docs/reference/sdks/server/dotnet" } } }, { "name": "Go", - "path": "/docs/reference/technologies/server/go", + "path": "/docs/reference/sdks/server/go", "category": "Server", "release": { "href": "https://github.com/open-feature/go-sdk/releases/tag/v1.16.0", @@ -183,49 +195,53 @@ "features": { "Providers": { "status": "✅", - "path": "/docs/reference/technologies/server/go#providers" + "path": "/docs/reference/sdks/server/go#providers" }, "Targeting": { "status": "✅", - "path": "/docs/reference/technologies/server/go#targeting" + "path": "/docs/reference/sdks/server/go#targeting" }, "Hooks": { "status": "✅", - "path": "/docs/reference/technologies/server/go#hooks" + "path": "/docs/reference/sdks/server/go#hooks" }, "Logging": { "status": "✅", - "path": "/docs/reference/technologies/server/go#logging" + "path": "/docs/reference/sdks/server/go#logging" }, "Domains": { "status": "✅", - "path": "/docs/reference/technologies/server/go#domains" + "path": "/docs/reference/sdks/server/go#domains" }, "Eventing": { "status": "✅", - "path": "/docs/reference/technologies/server/go#eventing" + "path": "/docs/reference/sdks/server/go#eventing" }, "Tracking": { "status": "✅", - "path": "/docs/reference/technologies/server/go#tracking" + "path": "/docs/reference/sdks/server/go#tracking" }, "Transaction Context Propagation": { "status": "✅", - "path": "/docs/reference/technologies/server/go#transaction-context-propagation" + "path": "/docs/reference/sdks/server/go#transaction-context-propagation" }, "Shutdown": { "status": "✅", - "path": "/docs/reference/technologies/server/go#shutdown" + "path": "/docs/reference/sdks/server/go#shutdown" }, "Extending": { "status": "✅", - "path": "/docs/reference/technologies/server/go#extending" + "path": "/docs/reference/sdks/server/go#extending" + }, + "Multi-Provider": { + "status": "❓", + "path": "/docs/reference/sdks/server/go" } } }, { "name": "Python", - "path": "/docs/reference/technologies/server/python", + "path": "/docs/reference/sdks/server/python", "category": "Server", "release": { "href": "https://github.com/open-feature/python-sdk/releases/tag/v0.8.3", @@ -239,49 +255,53 @@ "features": { "Providers": { "status": "✅", - "path": "/docs/reference/technologies/server/python#providers" + "path": "/docs/reference/sdks/server/python#providers" }, "Targeting": { "status": "✅", - "path": "/docs/reference/technologies/server/python#targeting" + "path": "/docs/reference/sdks/server/python#targeting" }, "Hooks": { "status": "✅", - "path": "/docs/reference/technologies/server/python#hooks" + "path": "/docs/reference/sdks/server/python#hooks" }, "Logging": { "status": "✅", - "path": "/docs/reference/technologies/server/python#logging" + "path": "/docs/reference/sdks/server/python#logging" }, "Domains": { "status": "✅", - "path": "/docs/reference/technologies/server/python#domains" + "path": "/docs/reference/sdks/server/python#domains" }, "Eventing": { "status": "✅", - "path": "/docs/reference/technologies/server/python#eventing" + "path": "/docs/reference/sdks/server/python#eventing" }, "Tracking": { "status": "❓", - "path": "/docs/reference/technologies/server/python" + "path": "/docs/reference/sdks/server/python" }, "Transaction Context Propagation": { "status": "✅", - "path": "/docs/reference/technologies/server/python#transaction-context-propagation" + "path": "/docs/reference/sdks/server/python#transaction-context-propagation" }, "Shutdown": { "status": "✅", - "path": "/docs/reference/technologies/server/python#shutdown" + "path": "/docs/reference/sdks/server/python#shutdown" }, "Extending": { "status": "✅", - "path": "/docs/reference/technologies/server/python#extending" + "path": "/docs/reference/sdks/server/python#extending" + }, + "Multi-Provider": { + "status": "❓", + "path": "/docs/reference/sdks/server/python" } } }, { "name": "PHP", - "path": "/docs/reference/technologies/server/php", + "path": "/docs/reference/sdks/server/php", "category": "Server", "release": { "href": "https://github.com/open-feature/php-sdk/releases/tag/2.1.0", @@ -295,53 +315,57 @@ "features": { "Providers": { "status": "✅", - "path": "/docs/reference/technologies/server/php#providers" + "path": "/docs/reference/sdks/server/php#providers" }, "Targeting": { "status": "✅", - "path": "/docs/reference/technologies/server/php#targeting" + "path": "/docs/reference/sdks/server/php#targeting" }, "Hooks": { "status": "✅", - "path": "/docs/reference/technologies/server/php#hooks" + "path": "/docs/reference/sdks/server/php#hooks" }, "Logging": { "status": "✅", - "path": "/docs/reference/technologies/server/php#logging" + "path": "/docs/reference/sdks/server/php#logging" }, "Domains": { "status": "❌", - "path": "/docs/reference/technologies/server/php#named-clients" + "path": "/docs/reference/sdks/server/php#named-clients" }, "Eventing": { "status": "⚠️", - "path": "/docs/reference/technologies/server/php#eventing" + "path": "/docs/reference/sdks/server/php#eventing" }, "Tracking": { "status": "❓", - "path": "/docs/reference/technologies/server/php" + "path": "/docs/reference/sdks/server/php" }, "Transaction Context Propagation": { "status": "❓", - "path": "/docs/reference/technologies/server/php" + "path": "/docs/reference/sdks/server/php" }, "Shutdown": { "status": "❌", - "path": "/docs/reference/technologies/server/php#shutdown" + "path": "/docs/reference/sdks/server/php#shutdown" }, "Extending": { "status": "✅", - "path": "/docs/reference/technologies/server/php#extending" + "path": "/docs/reference/sdks/server/php#extending" + }, + "Multi-Provider": { + "status": "❓", + "path": "/docs/reference/sdks/server/php" } } }, { "name": "Web", - "path": "/docs/reference/technologies/client/web", + "path": "/docs/reference/sdks/client/web", "category": "Client", "release": { - "href": "https://github.com/open-feature/js-sdk/releases/tag/web-sdk-v1.6.2", - "version": "1.6.2", + "href": "https://github.com/open-feature/js-sdk/releases/tag/web-sdk-v1.7.0", + "version": "1.7.0", "stable": true }, "spec": { @@ -351,45 +375,49 @@ "features": { "Providers": { "status": "✅", - "path": "/docs/reference/technologies/client/web#providers" + "path": "/docs/reference/sdks/client/web#providers" }, "Targeting": { "status": "✅", - "path": "/docs/reference/technologies/client/web#targeting-and-context" + "path": "/docs/reference/sdks/client/web#targeting-and-context" }, "Hooks": { "status": "✅", - "path": "/docs/reference/technologies/client/web#hooks" + "path": "/docs/reference/sdks/client/web#hooks" }, "Logging": { "status": "✅", - "path": "/docs/reference/technologies/client/web#logging" + "path": "/docs/reference/sdks/client/web#logging" }, "Domains": { "status": "✅", - "path": "/docs/reference/technologies/client/web#domains" + "path": "/docs/reference/sdks/client/web#domains" }, "Eventing": { "status": "✅", - "path": "/docs/reference/technologies/client/web#eventing" + "path": "/docs/reference/sdks/client/web#eventing" }, "Tracking": { "status": "✅", - "path": "/docs/reference/technologies/client/web#tracking" + "path": "/docs/reference/sdks/client/web#tracking" }, "Shutdown": { "status": "✅", - "path": "/docs/reference/technologies/client/web#shutdown" + "path": "/docs/reference/sdks/client/web#shutdown" }, "Extending": { "status": "✅", - "path": "/docs/reference/technologies/client/web#extending" + "path": "/docs/reference/sdks/client/web#extending" + }, + "Multi-Provider": { + "status": "❓", + "path": "/docs/reference/sdks/client/web" } } }, { "name": "Kotlin", - "path": "/docs/reference/technologies/client/kotlin", + "path": "/docs/reference/sdks/client/kotlin", "category": "Client", "release": { "href": "https://github.com/open-feature/kotlin-sdk/releases/tag/v0.7.0", @@ -403,45 +431,49 @@ "features": { "Providers": { "status": "✅", - "path": "/docs/reference/technologies/client/kotlin#providers" + "path": "/docs/reference/sdks/client/kotlin#providers" }, "Targeting": { "status": "✅", - "path": "/docs/reference/technologies/client/kotlin#targeting" + "path": "/docs/reference/sdks/client/kotlin#targeting" }, "Hooks": { "status": "✅", - "path": "/docs/reference/technologies/client/kotlin#hooks" + "path": "/docs/reference/sdks/client/kotlin#hooks" }, "Logging": { "status": "❌", - "path": "/docs/reference/technologies/client/kotlin#logging" + "path": "/docs/reference/sdks/client/kotlin#logging" }, "Domains": { "status": "❌", - "path": "/docs/reference/technologies/client/kotlin#named-clients" + "path": "/docs/reference/sdks/client/kotlin#named-clients" }, "Eventing": { "status": "✅", - "path": "/docs/reference/technologies/client/kotlin#eventing" + "path": "/docs/reference/sdks/client/kotlin#eventing" }, "Tracking": { "status": "✅", - "path": "/docs/reference/technologies/client/kotlin#tracking" + "path": "/docs/reference/sdks/client/kotlin#tracking" }, "Shutdown": { "status": "✅", - "path": "/docs/reference/technologies/client/kotlin#shutdown" + "path": "/docs/reference/sdks/client/kotlin#shutdown" }, "Extending": { "status": "⚠️", - "path": "/docs/reference/technologies/client/kotlin#extending" + "path": "/docs/reference/sdks/client/kotlin#extending" + }, + "Multi-Provider": { + "status": "❓", + "path": "/docs/reference/sdks/client/kotlin" } } }, { "name": "iOS", - "path": "/docs/reference/technologies/client/swift", + "path": "/docs/reference/sdks/client/swift", "category": "Client", "release": { "href": "https://github.com/open-feature/swift-sdk/releases/tag/0.4.0", @@ -455,45 +487,49 @@ "features": { "Providers": { "status": "✅", - "path": "/docs/reference/technologies/client/swift#providers" + "path": "/docs/reference/sdks/client/swift#providers" }, "Targeting": { "status": "✅", - "path": "/docs/reference/technologies/client/swift#targeting" + "path": "/docs/reference/sdks/client/swift#targeting" }, "Hooks": { "status": "✅", - "path": "/docs/reference/technologies/client/swift#hooks" + "path": "/docs/reference/sdks/client/swift#hooks" }, "Logging": { "status": "❌", - "path": "/docs/reference/technologies/client/swift#logging" + "path": "/docs/reference/sdks/client/swift#logging" }, "Domains": { "status": "❓", - "path": "/docs/reference/technologies/client/swift" + "path": "/docs/reference/sdks/client/swift" }, "Eventing": { "status": "✅", - "path": "/docs/reference/technologies/client/swift#eventing" + "path": "/docs/reference/sdks/client/swift#eventing" }, "Tracking": { "status": "❌", - "path": "/docs/reference/technologies/client/swift#tracking" + "path": "/docs/reference/sdks/client/swift#tracking" }, "Shutdown": { "status": "❌", - "path": "/docs/reference/technologies/client/swift#shutdown" + "path": "/docs/reference/sdks/client/swift#shutdown" }, "Extending": { "status": "✅", - "path": "/docs/reference/technologies/client/swift#extending" + "path": "/docs/reference/sdks/client/swift#extending" + }, + "Multi-Provider": { + "status": "❓", + "path": "/docs/reference/sdks/client/swift" } } }, { "name": "Ruby", - "path": "/docs/reference/technologies/server/ruby", + "path": "/docs/reference/sdks/server/ruby", "category": "Server", "release": { "href": "https://github.com/open-feature/ruby-sdk/releases/tag/v0.4.0", @@ -507,49 +543,53 @@ "features": { "Providers": { "status": "✅", - "path": "/docs/reference/technologies/server/ruby#providers" + "path": "/docs/reference/sdks/server/ruby#providers" }, "Targeting": { "status": "✅", - "path": "/docs/reference/technologies/server/ruby#targeting" + "path": "/docs/reference/sdks/server/ruby#targeting" }, "Hooks": { "status": "⚠️", - "path": "/docs/reference/technologies/server/ruby#hooks" + "path": "/docs/reference/sdks/server/ruby#hooks" }, "Logging": { "status": "❌", - "path": "/docs/reference/technologies/server/ruby#logging" + "path": "/docs/reference/sdks/server/ruby#logging" }, "Domains": { "status": "✅", - "path": "/docs/reference/technologies/server/ruby#domains" + "path": "/docs/reference/sdks/server/ruby#domains" }, "Eventing": { "status": "❌", - "path": "/docs/reference/technologies/server/ruby#eventing" + "path": "/docs/reference/sdks/server/ruby#eventing" }, "Tracking": { "status": "❓", - "path": "/docs/reference/technologies/server/ruby" + "path": "/docs/reference/sdks/server/ruby" }, "Transaction Context Propagation": { "status": "❌", - "path": "/docs/reference/technologies/server/ruby#transaction-context-propagation" + "path": "/docs/reference/sdks/server/ruby#transaction-context-propagation" }, "Shutdown": { "status": "⚠️", - "path": "/docs/reference/technologies/server/ruby#shutdown" + "path": "/docs/reference/sdks/server/ruby#shutdown" }, "Extending": { "status": "⚠️", - "path": "/docs/reference/technologies/server/ruby#extending" + "path": "/docs/reference/sdks/server/ruby#extending" + }, + "Multi-Provider": { + "status": "❓", + "path": "/docs/reference/sdks/server/ruby" } } }, { "name": "Dart", - "path": "/docs/reference/technologies/server/dart", + "path": "/docs/reference/sdks/server/dart", "category": "Server", "release": { "href": "https://github.com/open-feature/dart-server-sdk/releases/tag/v0.0.13", @@ -563,49 +603,53 @@ "features": { "Providers": { "status": "✅", - "path": "/docs/reference/technologies/server/dart#providers" + "path": "/docs/reference/sdks/server/dart#providers" }, "Targeting": { "status": "✅", - "path": "/docs/reference/technologies/server/dart#targeting" + "path": "/docs/reference/sdks/server/dart#targeting" }, "Hooks": { "status": "✅", - "path": "/docs/reference/technologies/server/dart#hooks" + "path": "/docs/reference/sdks/server/dart#hooks" }, "Logging": { "status": "✅", - "path": "/docs/reference/technologies/server/dart#logging" + "path": "/docs/reference/sdks/server/dart#logging" }, "Domains": { "status": "✅", - "path": "/docs/reference/technologies/server/dart#domains" + "path": "/docs/reference/sdks/server/dart#domains" }, "Eventing": { "status": "✅", - "path": "/docs/reference/technologies/server/dart#eventing" + "path": "/docs/reference/sdks/server/dart#eventing" }, "Tracking": { "status": "❓", - "path": "/docs/reference/technologies/server/dart" + "path": "/docs/reference/sdks/server/dart" }, "Transaction Context Propagation": { "status": "✅", - "path": "/docs/reference/technologies/server/dart#transaction-context-propagation" + "path": "/docs/reference/sdks/server/dart#transaction-context-propagation" }, "Shutdown": { "status": "✅", - "path": "/docs/reference/technologies/server/dart#shutdown" + "path": "/docs/reference/sdks/server/dart#shutdown" }, "Extending": { "status": "✅", - "path": "/docs/reference/technologies/server/dart#extending" + "path": "/docs/reference/sdks/server/dart#extending" + }, + "Multi-Provider": { + "status": "❓", + "path": "/docs/reference/sdks/server/dart" } } }, { "name": "Rust", - "path": "/docs/reference/technologies/server/rust", + "path": "/docs/reference/sdks/server/rust", "category": "Server", "release": { "href": "https://github.com/open-feature/rust-sdk/releases/tag/v0.2.7", @@ -619,43 +663,47 @@ "features": { "Providers": { "status": "✅", - "path": "/docs/reference/technologies/server/rust#providers" + "path": "/docs/reference/sdks/server/rust#providers" }, "Targeting": { "status": "✅", - "path": "/docs/reference/technologies/server/rust#targeting" + "path": "/docs/reference/sdks/server/rust#targeting" }, "Hooks": { "status": "✅", - "path": "/docs/reference/technologies/server/rust#hooks" + "path": "/docs/reference/sdks/server/rust#hooks" }, "Logging": { "status": "✅", - "path": "/docs/reference/technologies/server/rust#logging" + "path": "/docs/reference/sdks/server/rust#logging" }, "Domains": { "status": "✅", - "path": "/docs/reference/technologies/server/rust#named-clients" + "path": "/docs/reference/sdks/server/rust#named-clients" }, "Eventing": { "status": "❌", - "path": "/docs/reference/technologies/server/rust#eventing" + "path": "/docs/reference/sdks/server/rust#eventing" }, "Tracking": { "status": "❓", - "path": "/docs/reference/technologies/server/rust" + "path": "/docs/reference/sdks/server/rust" }, "Transaction Context Propagation": { "status": "❓", - "path": "/docs/reference/technologies/server/rust" + "path": "/docs/reference/sdks/server/rust" }, "Shutdown": { "status": "✅", - "path": "/docs/reference/technologies/server/rust#shutdown" + "path": "/docs/reference/sdks/server/rust#shutdown" }, "Extending": { "status": "✅", - "path": "/docs/reference/technologies/server/rust#extending" + "path": "/docs/reference/sdks/server/rust#extending" + }, + "Multi-Provider": { + "status": "❓", + "path": "/docs/reference/sdks/server/rust" } } } diff --git a/src/datasets/sdks/swift.ts b/src/datasets/sdks/swift.ts index ae737496b..cd170330e 100644 --- a/src/datasets/sdks/swift.ts +++ b/src/datasets/sdks/swift.ts @@ -8,5 +8,5 @@ export const Swift: SDK = { repo: 'swift-sdk', logoKey: 'ios-no-fill.svg', technology: 'Swift', - href: '/docs/reference/technologies/client/swift', + href: '/docs/reference/sdks/client/swift', }; diff --git a/src/datasets/sdks/web.ts b/src/datasets/sdks/web.ts index 7061c0acc..55a4b0b02 100644 --- a/src/datasets/sdks/web.ts +++ b/src/datasets/sdks/web.ts @@ -10,5 +10,5 @@ export const Web: SDK = { folder: '/packages/web', logoKey: 'web-no-fill.svg', technology: 'JavaScript', - href: '/docs/reference/technologies/client/web', + href: '/docs/reference/sdks/client/web', }; From 06e0bac729d641395c3e070ca92c5b393d35f673 Mon Sep 17 00:00:00 2001 From: Jonathan Norris Date: Fri, 24 Oct 2025 10:15:57 -0400 Subject: [PATCH 02/14] docs: rename sdks doc id from technologies to sdks Signed-off-by: Jonathan Norris --- docs/reference/sdks/index.mdx | 6 +++--- docusaurus.config.ts | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/reference/sdks/index.mdx b/docs/reference/sdks/index.mdx index 3ed231b8c..28f94772d 100644 --- a/docs/reference/sdks/index.mdx +++ b/docs/reference/sdks/index.mdx @@ -1,10 +1,10 @@ --- sidebar_position: 2 -id: technologies -title: Technologies +id: sdks +title: SDK Technologies --- -# Technologies +# SDK Technologies OpenFeature SDKs and components for a range of supported languages and runtimes. diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 5b763702e..859fbf458 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -346,6 +346,9 @@ const config: Config = { if (existingPath.includes('/docs/specification')) { return [existingPath.replace('/docs/specification', '/specification')]; } + if (existingPath.includes('/docs/reference/sdks')) { + return [existingPath.replace('/docs/reference/sdks', '/docs/reference/technologies')]; + } return undefined; // Return a falsy value: no redirect created }, }, From 01f8811c2d43d042eefcb15ef448d8385d0da59e Mon Sep 17 00:00:00 2001 From: Jonathan Norris Date: Fri, 24 Oct 2025 10:22:59 -0400 Subject: [PATCH 03/14] docs: format other technologies with generated-index Signed-off-by: Jonathan Norris --- docs/reference/other-technologies/_category_.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/reference/other-technologies/_category_.json b/docs/reference/other-technologies/_category_.json index f45bdc373..25a7e03ba 100644 --- a/docs/reference/other-technologies/_category_.json +++ b/docs/reference/other-technologies/_category_.json @@ -2,5 +2,10 @@ "label": "Other Technologies", "position": 4, "collapsible": true, - "collapsed": false + "collapsed": false, + "link": { + "type": "generated-index", + "title": "Other Technologies", + "description": "OpenFeature protocols, tools, and integrations for feature flag management across various technologies and platforms." + } } \ No newline at end of file From 96ec91d7d921932d3862ece1599272c71c2c50b2 Mon Sep 17 00:00:00 2001 From: Jonathan Norris Date: Fri, 24 Oct 2025 10:35:18 -0400 Subject: [PATCH 04/14] docs: add CLI documentation Signed-off-by: Jonathan Norris --- docs/reference/other-technologies/cli.mdx | 255 +++++++++++++++++++++- 1 file changed, 254 insertions(+), 1 deletion(-) diff --git a/docs/reference/other-technologies/cli.mdx b/docs/reference/other-technologies/cli.mdx index 5bef6000d..95cc6dfcc 100644 --- a/docs/reference/other-technologies/cli.mdx +++ b/docs/reference/other-technologies/cli.mdx @@ -1,9 +1,262 @@ --- title: CLI sidebar_label: CLI +sidebar_position: 1 +id: cli --- # OpenFeature CLI -Content coming soon. +The OpenFeature CLI is a command-line tool designed to improve the developer experience when working with feature flags. +It helps developers manage feature flags consistently across different environments and programming languages by providing powerful utilities for code generation, flag validation, and more. +:::caution Experimental +The OpenFeature CLI is experimental! Feel free to give it a shot and provide feedback, but expect breaking changes. +::: + +## Overview + +The CLI bridges the gap between feature flag management systems and your application code by generating strongly typed flag accessors from a flag manifest. This approach provides: + +- **Type Safety**: Generate strongly-typed flag accessors for your preferred language +- **Consistency**: Maintain a single source of truth for feature flags across your projects +- **Developer Experience**: Reduce errors and improve IDE autocomplete support +- **Language Support**: Generate code for TypeScript, JavaScript, React, Go, C#, and more + +## Installation + +#### curl + +The OpenFeature CLI can be installed using a shell command. This method is suitable for most Unix-like operating systems. + +```bash +curl -fsSL https://openfeature.dev/scripts/install_cli.sh | sh +``` + +#### Docker + +The OpenFeature CLI is available as a Docker image in the GitHub Container Registry. + +```bash +docker run -it -v $(pwd):/local -w /local ghcr.io/open-feature/cli:latest +``` + +#### Go + +If you have Go >= 1.23 installed, you can install the CLI using: + +```bash +go install github.com/open-feature/cli/cmd/openfeature@latest +``` + +#### Pre-built Binaries + +Download the appropriate pre-built binary from the [releases page](https://github.com/open-feature/cli/releases). + +## Quick Start + +1. Create a flag manifest file in your project root: + +```bash +cat > flags.json << EOL +{ + "$schema": "https://raw.githubusercontent.com/open-feature/cli/refs/heads/main/schema/v0/flag-manifest.json", + "flags": { + "enableMagicButton": { + "flagType": "boolean", + "defaultValue": false, + "description": "Activates a special button that enhances user interaction with magical, intuitive functionalities." + } + } +} +EOL +``` + +:::info +This is for demonstration purposes only. In a real-world scenario, you would typically want to fetch this file from a remote flag management service. +::: + +2. Generate code for your preferred language: + +```bash +openfeature generate react +``` + +3. View the generated code: + +```bash +cat openfeature.ts +``` + +Congratulations! You have successfully generated your first strongly typed flag accessors. + +## Commands + +### init + +Initialize a new flag manifest in your project. + +```bash +openfeature init +``` + +This command creates a `flags.json` file in your current directory with the proper schema reference. +You can customize the manifest path using configuration options. + +[View full command documentation →](https://github.com/open-feature/cli/blob/main/docs/commands/openfeature_init.md) + +### generate + +Generate strongly typed flag accessors for your project. + +```bash +# List available languages +openfeature generate + +# Generate for a specific language +openfeature generate typescript + +# With custom output directory +openfeature generate typescript --output ./src/flags +``` + +**Supported Languages:** + +- `typescript` - TypeScript flag accessors +- `javascript` - JavaScript flag accessors +- `react` - React hooks for feature flags +- `go` - Go flag accessors +- `csharp` - C# flag accessors + +[View full command documentation →](https://github.com/open-feature/cli/blob/main/docs/commands/openfeature_generate.md) + +### version + +Print the version number of the OpenFeature CLI. + +```bash +openfeature version +``` + +[View full command documentation →](https://github.com/open-feature/cli/blob/main/docs/commands/openfeature_version.md) + +## Flag Manifest + +The flag manifest is a JSON file that defines your feature flags and their properties. +It serves as the source of truth for your feature flags and is used by the CLI to generate strongly typed accessors. + +### Flag Manifest Structure + +The flag manifest file should follow the [JSON schema](https://raw.githubusercontent.com/open-feature/cli/refs/heads/main/schema/v0/flag-manifest.json) with the following properties: + +- `$schema` - The URL of the JSON schema for validation +- `flags` - An object containing the feature flags + - `flagKey` - A unique key for the flag + - `description` - A description of what the flag does + - `type` - The type of the flag (`boolean`, `string`, `number`, `object`) + - `defaultValue` - The default value of the flag + +#### Example Flag Manifest + +```json +{ + "$schema": "https://raw.githubusercontent.com/open-feature/cli/refs/heads/main/schema/v0/flag-manifest.json", + "flags": { + "newCheckoutFlow": { + "description": "Enables the redesigned checkout experience", + "type": "boolean", + "defaultValue": false + }, + "maxCartItems": { + "description": "Maximum number of items allowed in cart", + "type": "number", + "defaultValue": 10 + }, + "welcomeMessage": { + "description": "Message displayed on the home page", + "type": "string", + "defaultValue": "Welcome to our store!" + } + } +} +``` + +## Configuration + +The OpenFeature CLI uses an optional configuration file to override default settings and customize behavior. +This file can be in JSON or YAML format and should be named either `.openfeature.json` or `.openfeature.yaml`. + +#### Configuration File Structure + +```yaml +# .openfeature.yaml +manifest: "flags/manifest.json" # Override default manifest path +generate: + output: "src/flags" # Override default output directory + + # Language-specific options + react: + output: "src/flags/react" + + go: + package: "github.com/myorg/myrepo/flags" + output: "src/flags/go" +``` + +### Configuration Priority + +The CLI uses a layered approach to configuration, with settings applied in the following order (later sources override earlier ones): + +1. **Default Configuration** - Built-in CLI defaults +2. **Configuration File** - Settings from `.openfeature.json` or `.openfeature.yaml` +3. **Command Line Arguments** - Flags passed directly to commands + +This allows you to set global defaults in the config file while still overriding specific values as needed. + +## Examples + +### TypeScript/JavaScript Project + +Generate flag accessors for a TypeScript project: + +```bash +openfeature generate typescript --output ./src/generated/flags +``` + +### React Application + +Generate React hooks for feature flag usage: + +```bash +openfeature generate react --output ./src/hooks +``` + +Usage in your React components: + +```tsx +import { useEnableMagicButton } from './hooks/openfeature'; + +function MyComponent() { + const isMagicEnabled = useEnableMagicButton(); + + return ( +

+ {isMagicEnabled && } +
+ ); +} +``` + +### Go Service + +Generate Go flag accessors: + +```bash +openfeature generate go --output ./internal/flags +``` + +## Get Involved + +- **GitHub Repository**: [open-feature/cli](https://github.com/open-feature/cli) +- **CNCF Slack**: Join the conversation in the [#openfeature](https://cloud-native.slack.com/archives/C0344AANLA1) and [#openfeature-cli](https://cloud-native.slack.com/archives/C07K9FEKA80) channels +- **Issue Tracker**: [Report bugs or request features](https://github.com/open-feature/cli/issues) From cbdc961e7765d786fba8b739c1cffcb92e435772 Mon Sep 17 00:00:00 2001 From: Jonathan Norris Date: Fri, 24 Oct 2025 10:46:43 -0400 Subject: [PATCH 05/14] docs: add OFREP documentation Signed-off-by: Jonathan Norris --- docs/reference/other-technologies/ofrep.mdx | 367 +++++++++++++++++++- 1 file changed, 366 insertions(+), 1 deletion(-) diff --git a/docs/reference/other-technologies/ofrep.mdx b/docs/reference/other-technologies/ofrep.mdx index 03688d68c..cb9aac5dc 100644 --- a/docs/reference/other-technologies/ofrep.mdx +++ b/docs/reference/other-technologies/ofrep.mdx @@ -1,9 +1,374 @@ --- title: OFREP sidebar_label: OFREP +sidebar_position: 2 +id: ofrep --- # OpenFeature Remote Evaluation Protocol (OFREP) -Content coming soon. +The **OpenFeature Remote Evaluation Protocol (OFREP)** is an API specification for feature flagging that enables vendor-agnostic communication between applications and flag management systems. +OFREP allows the use of generic providers to connect to any feature flag management system that supports the protocol. +## Overview + +The primary goal of OFREP is to establish a standardized, vendor-agnostic communication layer for feature flag evaluation. This protocol aims to decouple applications from specific feature flag vendors, fostering a more flexible and interoperable ecosystem. + +At its heart, OFREP defines a standard API layer between the provider and the flag management system, allowing OpenSource and commercial feature flag management systems to implement the protocol and be compatible with the community-maintained providers. It enables out-of-the-box compatibility with any OFREP compliant flag management system, regardless of whether they have a specific OpenFeature provider implementation. + +### Key Benefits + +- **Vendor Agnostic**: Connect to any OFREP-compliant flag management system without vendor-specific implementations +- **Standardized**: Built on a common OpenAPI specification for consistent integration +- **Flexible**: Works on both client-side and server-side applications +- **Community Maintained**: Generic OFREP providers maintained by the OpenFeature community +- **Simple Migration**: Switch between flag management systems without changing application code + +## What is OFREP? + +OFREP is **a protocol, not a provider**. It defines how to communicate with feature flag management systems and works on top of OpenFeature SDKs by providing standardized providers that can be used to connect to any OFREP compliant flag management system. + +### How It Works + +```mermaid +graph LR + A[Your Application] --> B[OpenFeature SDK] + B --> C[OFREP Provider] + C --> D[OFREP API] + D --> E[Flag Management System] +``` + +1. Your application uses the OpenFeature SDK +2. The OpenFeature SDK uses an OFREP provider +3. The OFREP provider communicates with your flag management system via the standardized OFREP API +4. Your flag management system implements the OFREP specification + +### Server vs Client + +OFREP supports both paradigms defined by OpenFeature: + +#### Server-Side (Dynamic Context) + +- Evaluation happens by calling the OFREP API with context +- No in-process evaluation inside OFREP providers +- Context changes frequently (per request, per user) +- Follows the [dynamic-context paradigm](/docs/reference/concepts/sdk-paradigms#dynamic-context-paradigm-server-side-sdks) + +#### Client-Side (Static Context) + +- Evaluation happens locally with pre-fetched flag data +- Provider reconciles state when context changes +- Context represents a single user or session +- Follows the [static-context paradigm](/docs/reference/concepts/sdk-paradigms#static-context-paradigms-client-side-sdks) + +## Using OFREP + +### Available Providers + +The OpenFeature community maintains OFREP providers for multiple languages. View the complete list of [OFREP providers in the ecosystem](/ecosystem/?instant_search%5BrefinementList%5D%5Bvendor%5D%5B0%5D=OFREP). + +Common implementations include: +- TypeScript/JavaScript (Server & Web) +- Go +- Java +- .NET +- Python +- PHP + +### Available Flag Management Systems + +Many flag management systems support OFREP. View the complete list of [OFREP-compliant systems in the ecosystem](/ecosystem/?instant_search%5BrefinementList%5D%5Btype%5D%5B0%5D=OFREP%20API). + +### Basic Usage + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + + + +```ts +import { OpenFeature } from '@openfeature/server-sdk'; +import { OFREPProvider } from '@openfeature/ofrep-provider'; + +// Configure the OFREP provider with your flag service endpoint +const provider = new OFREPProvider({ + baseURL: 'https://your-flag-service.example.com', + headers: { + 'Authorization': 'Bearer your-api-token' + } +}); + +// Set the provider +await OpenFeature.setProviderAndWait(provider); + +// Get a client and evaluate flags +const client = OpenFeature.getClient(); +const value = await client.getBooleanValue('new-feature', false, { + targetingKey: 'user-123', + email: 'user@example.com' +}); +``` + + + + +```go +import ( + "context" + openfeature "github.com/open-feature/go-sdk/openfeature" + ofrep "github.com/open-feature/go-sdk-contrib/providers/ofrep/pkg" +) + +// Configure the OFREP provider +provider := ofrep.NewProvider(ofrep.ProviderConfig{ + BaseURL: "https://your-flag-service.example.com", + Headers: map[string]string{ + "Authorization": "Bearer your-api-token", + }, +}) + +// Set the provider +openfeature.SetProvider(provider) + +// Get a client and evaluate flags +client := openfeature.NewClient("my-app") +value, err := client.BooleanValue( + context.Background(), + "new-feature", + false, + openfeature.NewEvaluationContext("user-123", map[string]interface{}{ + "email": "user@example.com", + }), +) +``` + + + + +```python +from openfeature import api +from openfeature.contrib.provider.ofrep import OFREPProvider + +# Configure the OFREP provider +provider = OFREPProvider( + base_url="https://your-flag-service.example.com", + headers={ + "Authorization": "Bearer your-api-token" + } +) + +# Set the provider +api.set_provider(provider) + +# Get a client and evaluate flags +client = api.get_client() +value = client.get_boolean_value( + "new-feature", + False, + {"targetingKey": "user-123", "email": "user@example.com"} +) +``` + + + + +## Configuration + +### Required Options + +All OFREP providers accept these configuration options: + +| Option | Description | Required | +|--------|-------------|----------| +| `baseURL` | The base URL of your flag management system (before `/ofrep/v1`) | Yes | +| `headers` | Headers to include in requests (e.g., authorization tokens) | No | +| `timeout` | Request timeout duration (default: 10 seconds) | No | + +#### Example Configuration + +```typescript +const provider = new OFREPProvider({ + // Base URL of your flag service + baseURL: 'https://flags.example.com', + + // Authentication and custom headers + headers: { + 'Authorization': 'Bearer token123', + 'X-Custom-Header': 'value' + }, + + // Request timeout (milliseconds) + timeout: 5000 +}); +``` + +## API Specification + +OFREP is defined by an [OpenAPI specification](https://github.com/open-feature/protocol/blob/main/service/openapi.yaml) that flag management systems must implement. + +### Key Endpoints + +#### Bulk Evaluation (Client-Side) + +``` +POST /ofrep/v1/evaluate/flags +``` + +Returns all flag values for a given context. Used by client-side providers. + +**Request:** +```json +{ + "context": { + "targetingKey": "user-123", + "email": "user@example.com" + } +} +``` + +#### Single Flag Evaluation (Server-Side) + +``` +POST /ofrep/v1/evaluate/flags/{flagKey} +``` + +Evaluates a single flag for a given context. Used by server-side providers. + +**Request:** +```json +{ + "context": { + "targetingKey": "user-123", + "email": "user@example.com" + } +} +``` + +**Response:** +```json +{ + "key": "new-feature", + "value": true, + "reason": "TARGETING_MATCH", + "variant": "on", + "metadata": {} +} +``` + +### Response Codes + +| Code | Description | Provider Behavior | +|------|-------------|-------------------| +| `200` | Success | Return evaluation result | +| `400` | Bad request | Return error with details | +| `401`/`403` | Unauthorized | Return authorization error | +| `404` | Flag not found | Return `FLAG_NOT_FOUND` error | +| `429` | Rate limit exceeded | Respect `Retry-After` header | + +## Implementing OFREP + +### For Application Developers + +If you're building an application and want to use OFREP: + +1. Choose an [OFREP provider](/ecosystem/?instant_search%5BrefinementList%5D%5Bvendor%5D%5B0%5D=OFREP) for your language +2. Choose an [OFREP-compliant flag management system](/ecosystem/?instant_search%5BrefinementList%5D%5Btype%5D%5B0%5D=OFREP%20API) +3. Configure your provider with the flag system's OFREP endpoint +4. Start evaluating flags through the OpenFeature SDK + +### For Provider Developers + +To create an OFREP provider for a new language: + +1. Review the [server provider guideline](https://github.com/open-feature/protocol/blob/main/guideline/dynamic-context-provider.md) or [client provider guideline](https://github.com/open-feature/protocol/blob/main/guideline/static-context-provider.md) +2. Implement the provider interface for your SDK +3. Add HTTP client logic to call OFREP endpoints +4. Handle error cases and response codes according to the specification +5. Register your provider in the [OpenFeature ecosystem](https://github.com/open-feature/openfeature.dev/issues) + +### For Flag Management System Developers + +To make your flag management system OFREP-compliant: + +1. Implement the [OFREP OpenAPI specification](https://github.com/open-feature/protocol/blob/main/service/openapi.yaml) +2. Expose OFREP endpoints at `/ofrep/v1/evaluate/...` +3. Support both bulk evaluation (for client-side) and single flag evaluation (for server-side) +4. Test your implementation with existing OFREP providers +5. Register your system in the [OpenFeature ecosystem](https://github.com/open-feature/openfeature.dev/issues) + +## Examples + +### Switching Between Providers + +One of the key benefits of OFREP is vendor portability. Switching flag systems only requires updating the provider configuration: + +```typescript +// Before: Using Vendor A +const providerA = new OFREPProvider({ + baseURL: 'https://vendor-a.example.com', + headers: { 'Authorization': 'Bearer token-a' } +}); + +// After: Using Vendor B (same application code!) +const providerB = new OFREPProvider({ + baseURL: 'https://vendor-b.example.com', + headers: { 'Authorization': 'Bearer token-b' } +}); +``` + +### Testing with a Local OFREP Server + +```bash +# Run a local OFREP-compliant server +docker run -p 8080:8080 your-ofrep-server + +# Configure your provider to use it +const provider = new OFREPProvider({ + baseURL: 'http://localhost:8080' +}); +``` + +### Advanced Context Evaluation + +```typescript +const client = OpenFeature.getClient(); + +// Rich evaluation context for targeting +const context = { + targetingKey: 'user-123', + email: 'user@example.com', + country: 'US', + subscription: 'premium', + customData: { + accountAge: 365, + lastLogin: '2025-10-24T10:00:00Z' + } +}; + +const value = await client.getBooleanValue('premium-feature', false, context); +``` + +## Resources + +- **GitHub Repository**: [open-feature/protocol](https://github.com/open-feature/protocol) +- **OpenAPI Specification**: [OFREP OpenAPI Spec](https://github.com/open-feature/protocol/blob/main/service/openapi.yaml) +- **Provider Guidelines**: + - [Server Provider Guide](https://github.com/open-feature/protocol/blob/main/guideline/dynamic-context-provider.md) + - [Client Provider Guide](https://github.com/open-feature/protocol/blob/main/guideline/static-context-provider.md) +- **CNCF Slack**: Join the conversation in [#openfeature-remote-evaluation-protocol](https://cloud-native.slack.com/archives/C066A48LK35) +- **Specification**: [Appendix C: OFREP](/specification/appendix-c) +- **Ecosystem**: + - [OFREP Providers](/ecosystem/?instant_search%5BrefinementList%5D%5Bvendor%5D%5B0%5D=OFREP) + - [OFREP-Compliant Systems](/ecosystem/?instant_search%5BrefinementList%5D%5Btype%5D%5B0%5D=OFREP%20API) + +## Get Involved + +OFREP is an open standard maintained by the OpenFeature community. We welcome contributions: + +- **Implement OFREP** in your flag management system +- **Create providers** for additional languages +- **Provide feedback** on the specification +- **Share your experience** using OFREP + +Join the [`#openfeature-remote-evaluation-protocol`](https://cloud-native.slack.com/archives/C066A48LK35) channel on the [CNCF Slack](https://communityinviter.com/apps/cloud-native/cncf) to get involved. From 2765904c8609f4bccdf00702bcc52062496a8bb6 Mon Sep 17 00:00:00 2001 From: Jonathan Norris Date: Fri, 24 Oct 2025 10:54:19 -0400 Subject: [PATCH 06/14] docs: add MCP (Model Context Protocol) documentation Signed-off-by: Jonathan Norris --- docs/reference/other-technologies/mcp.mdx | 369 +++++++++++++++++++++- 1 file changed, 368 insertions(+), 1 deletion(-) diff --git a/docs/reference/other-technologies/mcp.mdx b/docs/reference/other-technologies/mcp.mdx index bb6e09940..72d24a4ef 100644 --- a/docs/reference/other-technologies/mcp.mdx +++ b/docs/reference/other-technologies/mcp.mdx @@ -1,9 +1,376 @@ --- title: MCP sidebar_label: MCP +sidebar_position: 3 +id: mcp --- # Model Context Protocol (MCP) -Content coming soon. +The **OpenFeature Model Context Protocol (MCP) Server** enables AI coding assistants to interact with OpenFeature through a standardized protocol. It provides SDK installation guidance and feature flag evaluation capabilities directly within your AI-powered development environment. +:::info Active Development +This project is in active development. Features and APIs may change. +::: + +## Overview + +The OpenFeature MCP Server is a local tool that connects AI coding assistants (like Cursor, Claude Desktop, VS Code Continue, and Windsurf) to OpenFeature functionality. It acts as a bridge between your AI assistant and OpenFeature capabilities, enabling intelligent code generation, SDK installation guidance, and feature flag evaluation—all through natural language interactions. + +### Key Benefits + +- **AI-Assisted Development**: Get contextual OpenFeature SDK installation instructions directly in your coding environment +- **Intelligent Code Generation**: AI assistants can generate OpenFeature integration code with proper provider setup +- **Feature Flag Evaluation**: Evaluate feature flags via OFREP without leaving your development workflow +- **Multi-Language Support**: Works with OpenFeature SDKs across multiple languages and frameworks +- **Standardized Integration**: Uses the Model Context Protocol for consistent AI assistant integration + +## What is MCP? + +MCP (Model Context Protocol) is a standardized protocol that enables AI assistants to access external tools and data sources. The OpenFeature MCP Server implements this protocol to provide: + +1. **SDK Installation Prompts**: Contextual guidance for installing and configuring OpenFeature SDKs +2. **OFREP Integration**: Remote flag evaluation capabilities through the OpenFeature Remote Evaluation Protocol +3. **Provider Documentation**: Installation instructions for popular feature flag providers + +### How It Works + +```mermaid +graph LR + A[AI Assistant] --> B[MCP Server] + B --> C[SDK Installation Guides] + B --> D[OFREP Flag Evaluation] + D --> E[Flag Management System] +``` + +1. Your AI assistant connects to the OpenFeature MCP Server via stdio +2. When you ask about OpenFeature, the AI uses MCP tools to fetch relevant information +3. For flag evaluation, the server connects to your flag management system via OFREP +4. The AI assistant provides intelligent responses with accurate, up-to-date information + +## Installation + +### Quick Start + +The easiest way to use the OpenFeature MCP Server is through NPX, which requires no installation: + +```json +{ + "mcpServers": { + "OpenFeature": { + "command": "npx", + "args": ["-y", "@openfeature/mcp"] + } + } +} +``` + +### Global Installation + +For faster startup times, you can install the MCP server globally: + +```bash +npm install -g @openfeature/mcp +``` + +Then configure your AI assistant to use the global installation: + +```json +{ + "mcpServers": { + "OpenFeature": { + "command": "openfeature-mcp" + } + } +} +``` + +## Configuration + +### AI Assistant Setup + +#### Cursor + +Add to `~/.cursor/mcp_settings.json`: + +```json +{ + "mcpServers": { + "OpenFeature": { + "command": "npx", + "args": ["-y", "@openfeature/mcp"] + } + } +} +``` + +#### VS Code (Continue) + +Add to `.continue/config.json`: + +```json +{ + "mcpServers": { + "OpenFeature": { + "command": "npx", + "args": ["-y", "@openfeature/mcp"] + } + } +} +``` + +#### Claude Code (CLI) + +Add the server via CLI: + +```bash +claude mcp add --transport stdio openfeature npx -y @openfeature/mcp +``` + +Then manage the connection with `/mcp` in the CLI. + +#### Windsurf + +In the "Manage MCP servers" raw config, add: + +```json +{ + "mcpServers": { + "OpenFeature": { + "command": "npx", + "args": ["-y", "@openfeature/mcp"] + } + } +} +``` + +#### Claude Desktop + +Edit your Claude Desktop config at: +- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` +- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json` + +Add the following configuration: + +```json +{ + "mcpServers": { + "openfeature": { + "command": "npx", + "args": ["-y", "@openfeature/mcp"] + } + } +} +``` + +Restart Claude Desktop after saving. + +### OFREP Configuration + +To use OFREP flag evaluation features, configure authentication and endpoint details. The server checks configuration in this priority order: + +1. **Environment Variables** + - `OPENFEATURE_OFREP_BASE_URL` or `OFREP_BASE_URL` + - `OPENFEATURE_OFREP_BEARER_TOKEN` or `OFREP_BEARER_TOKEN` + - `OPENFEATURE_OFREP_API_KEY` or `OFREP_API_KEY` + +2. **Configuration File**: `~/.openfeature-mcp.json` + +```json +{ + "OFREP": { + "baseUrl": "https://flags.example.com", + "bearerToken": "", + "apiKey": "" + } +} +``` + +You can override the config file path using the `OPENFEATURE_MCP_CONFIG_PATH` environment variable. + +## Available Tools + +The OpenFeature MCP Server provides two main tools accessible to AI assistants: + +### 1. SDK Installation Guide + +**Tool Name**: `install_openfeature_sdk` + +Fetches comprehensive installation instructions for OpenFeature SDKs in various languages and frameworks. Optionally includes provider-specific setup guidance. + +#### Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `technology` | string | Yes | Target language/framework (see supported list below) | +| `providers` | string[] | No | Provider identifiers to include installation instructions | + +#### Supported Technologies + +- `android` - Android SDK +- `dotnet` - .NET SDK +- `go` - Go SDK +- `ios` - iOS/Swift SDK +- `java` - Java SDK +- `javascript` - JavaScript SDK +- `nestjs` - NestJS SDK +- `nodejs` - Node.js SDK +- `php` - PHP SDK +- `python` - Python SDK +- `react` - React SDK +- `ruby` - Ruby SDK + +#### Supported Providers + +The provider list is automatically sourced from the OpenFeature ecosystem. Popular providers include: + +- `flagd` - OpenFeature reference implementation +- `launchdarkly` - LaunchDarkly provider +- `split` - Split.io provider +- `cloudbees` - CloudBees Feature Management +- `configcat` - ConfigCat provider +- And many more in the [OpenFeature ecosystem](/ecosystem) + +#### Example Usage + +When interacting with your AI assistant: + +> "How do I install the OpenFeature SDK for Node.js with the flagd provider?" + +The AI will use this tool to fetch relevant installation instructions and provide you with step-by-step guidance. + +### 2. OFREP Flag Evaluation + +**Tool Name**: `ofrep_flag_eval` + +Evaluate feature flags using the OpenFeature Remote Evaluation Protocol. Supports both single flag and bulk evaluation. + +#### Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `base_url` | string | No | Base URL of your OFREP-compatible flag service | +| `flag_key` | string | No | Flag key for single evaluation (omit for bulk) | +| `context` | object | No | Evaluation context (e.g., `{ targetingKey: "user-123" }`) | +| `etag` | string | No | ETag for bulk evaluation caching | +| `auth` | object | No | Authentication configuration | +| `auth.bearer_token` | string | No | Bearer token for authorization | +| `auth.api_key` | string | No | API key for authorization | + +#### API Endpoints + +**Single Flag Evaluation**: +``` +POST /ofrep/v1/evaluate/flags/{flagKey} +``` + +**Bulk Evaluation**: +``` +POST /ofrep/v1/evaluate/flags +``` + +#### Example Usage + +When interacting with your AI assistant: + +> "Can you check the value of the 'new-checkout-flow' feature flag for user-123?" + +The AI will use this tool to evaluate the flag and provide you with the result, along with additional metadata like variant and reason. + +For more information about OFREP, see the [OFREP documentation](/docs/reference/other-technologies/ofrep). + +## Examples + +### Getting SDK Installation Help + +``` +You: How do I get started with OpenFeature in a React application? + +AI: Let me help you install the OpenFeature React SDK... +[The AI fetches installation instructions using the MCP server] + +Here's how to get started: + +1. Install the package: + npm install @openfeature/react-sdk + +2. Import and configure... +``` + +### Evaluating Feature Flags + +``` +You: What's the current value of the 'dark-mode' flag? + +AI: Let me check the current flag value... +[The AI evaluates the flag using OFREP through the MCP server] + +The 'dark-mode' flag is currently: +- Value: true +- Variant: on +- Reason: TARGETING_MATCH +``` + +### Multi-Provider Setup + +``` +You: Show me how to set up OpenFeature with LaunchDarkly in TypeScript + +AI: Here's how to integrate OpenFeature with LaunchDarkly... +[The AI fetches both OpenFeature and LaunchDarkly provider setup] + +First, install the dependencies: +npm install @openfeature/server-sdk @launchdarkly/openfeature-node-server + +Then configure the provider... +``` + +## Use Cases + +### 1. Learning OpenFeature + +AI assistants can provide contextual, accurate guidance when learning OpenFeature: +- SDK installation steps +- Provider configuration examples +- Best practices for your specific language/framework + +### 2. Rapid Prototyping + +Quickly scaffold OpenFeature integrations: +- Generate boilerplate code +- Set up provider connections +- Implement evaluation patterns + +### 3. Feature Flag Debugging + +Check flag values and targeting without leaving your editor: +- Evaluate flags with different contexts +- Verify targeting rules +- Debug flag resolution issues + +### 4. Migration Support + +Get guidance when migrating between providers: +- Compare provider configurations +- Understand provider-specific features +- Generate migration code + +## Resources + +- **GitHub Repository**: [open-feature/mcp](https://github.com/open-feature/mcp) +- **NPM Package**: [@openfeature/mcp](https://www.npmjs.com/package/@openfeature/mcp) +- **MCP Registry**: [dev.openfeature/mcp](https://registry.modelcontextprotocol.io) +- **OFREP Documentation**: [OpenFeature Remote Evaluation Protocol](/docs/reference/other-technologies/ofrep) +- **OpenFeature CLI**: [CLI Documentation](/docs/reference/other-technologies/cli) +- **CNCF Slack**: Join [#openfeature](https://cloud-native.slack.com/archives/C0344AANLA1) + +## Get Involved + +The OpenFeature MCP Server is an open-source project maintained by the OpenFeature community. We welcome contributions: + +- **Report Issues**: [GitHub Issues](https://github.com/open-feature/mcp/issues) +- **Contribute Code**: [Contributing Guide](https://github.com/open-feature/mcp/blob/main/CONTRIBUTING.md) +- **Suggest Features**: Share ideas in the CNCF Slack [#openfeature](https://cloud-native.slack.com/archives/C0344AANLA1) channel +- **Improve Documentation**: Help us improve SDK installation guides and examples + +Join the [CNCF Slack](https://communityinviter.com/apps/cloud-native/cncf) to get involved. From 42ab20de46e2f551dd9d43f6c9b4cfb937638f6e Mon Sep 17 00:00:00 2001 From: Jonathan Norris Date: Fri, 24 Oct 2025 11:00:36 -0400 Subject: [PATCH 07/14] chore: move generated reference docs to generated subdirectory Signed-off-by: Jonathan Norris --- docs/reference/other-technologies/{ => generated}/cli.mdx | 0 docs/reference/other-technologies/{ => generated}/mcp.mdx | 0 docs/reference/other-technologies/{ => generated}/ofrep.mdx | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename docs/reference/other-technologies/{ => generated}/cli.mdx (100%) rename docs/reference/other-technologies/{ => generated}/mcp.mdx (100%) rename docs/reference/other-technologies/{ => generated}/ofrep.mdx (100%) diff --git a/docs/reference/other-technologies/cli.mdx b/docs/reference/other-technologies/generated/cli.mdx similarity index 100% rename from docs/reference/other-technologies/cli.mdx rename to docs/reference/other-technologies/generated/cli.mdx diff --git a/docs/reference/other-technologies/mcp.mdx b/docs/reference/other-technologies/generated/mcp.mdx similarity index 100% rename from docs/reference/other-technologies/mcp.mdx rename to docs/reference/other-technologies/generated/mcp.mdx diff --git a/docs/reference/other-technologies/ofrep.mdx b/docs/reference/other-technologies/generated/ofrep.mdx similarity index 100% rename from docs/reference/other-technologies/ofrep.mdx rename to docs/reference/other-technologies/generated/ofrep.mdx From 69abcc0376d07fd9e4674830bd112036e4fd6bde Mon Sep 17 00:00:00 2001 From: Jonathan Norris Date: Fri, 24 Oct 2025 11:05:46 -0400 Subject: [PATCH 08/14] chore: update SDK docs and config after directory reorganization Signed-off-by: Jonathan Norris --- .eslintignore | 3 ++- .markdownlint-cli2.yaml | 3 +-- docs/reference/sdks/client/kotlin.mdx | 2 +- docs/reference/sdks/client/swift.mdx | 2 +- docs/reference/sdks/client/web/angular.mdx | 2 +- docs/reference/sdks/client/web/index.mdx | 2 +- docs/reference/sdks/client/web/react.mdx | 2 +- docs/reference/sdks/server/dart.mdx | 2 +- docs/reference/sdks/server/dotnet.mdx | 2 +- docs/reference/sdks/server/go.mdx | 2 +- docs/reference/sdks/server/java.mdx | 2 +- docs/reference/sdks/server/javascript/index.mdx | 2 +- docs/reference/sdks/server/javascript/nestjs.mdx | 2 +- docs/reference/sdks/server/php.mdx | 2 +- docs/reference/sdks/server/python.mdx | 2 +- docs/reference/sdks/server/ruby.mdx | 2 +- docs/reference/sdks/server/rust.mdx | 2 +- src/datasets/types.ts | 4 ++-- 18 files changed, 20 insertions(+), 20 deletions(-) diff --git a/.eslintignore b/.eslintignore index 8febed237..3e11afc45 100644 --- a/.eslintignore +++ b/.eslintignore @@ -3,4 +3,5 @@ dist *.js # Auto-generated disclaimer causes an eslint parsing error -docs/reference/technologies/**/*.mdx \ No newline at end of file +docs/reference/technologies/**/*.mdx +docs/reference/sdks/**/*.mdx \ No newline at end of file diff --git a/.markdownlint-cli2.yaml b/.markdownlint-cli2.yaml index 7f922b42c..21473edcf 100644 --- a/.markdownlint-cli2.yaml +++ b/.markdownlint-cli2.yaml @@ -1,4 +1,3 @@ - config: default: true @@ -33,6 +32,6 @@ ignores: - external-content - docs/specification # Fetched from each SDK's README.md - - docs/reference/technologies/@(client|server)/**/*.mdx + - docs/reference/sdks/@(client|server)/**/*.mdx fix: true diff --git a/docs/reference/sdks/client/kotlin.mdx b/docs/reference/sdks/client/kotlin.mdx index 8d6210806..f6c1da77c 100644 --- a/docs/reference/sdks/client/kotlin.mdx +++ b/docs/reference/sdks/client/kotlin.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from kotlin-sdk. Edits should be made here: https://github.com/open-feature/kotlin-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/client/swift.mdx b/docs/reference/sdks/client/swift.mdx index f0f82251d..e122145e4 100644 --- a/docs/reference/sdks/client/swift.mdx +++ b/docs/reference/sdks/client/swift.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from swift-sdk. Edits should be made here: https://github.com/open-feature/swift-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/client/web/angular.mdx b/docs/reference/sdks/client/web/angular.mdx index d7ba3af67..bd7abf27c 100644 --- a/docs/reference/sdks/client/web/angular.mdx +++ b/docs/reference/sdks/client/web/angular.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Thu Oct 23 2025 10:35:33 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/client/web/index.mdx b/docs/reference/sdks/client/web/index.mdx index df712c935..5a91b9e13 100644 --- a/docs/reference/sdks/client/web/index.mdx +++ b/docs/reference/sdks/client/web/index.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/client/web/react.mdx b/docs/reference/sdks/client/web/react.mdx index 20896d678..4ca719b60 100644 --- a/docs/reference/sdks/client/web/react.mdx +++ b/docs/reference/sdks/client/web/react.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/dart.mdx b/docs/reference/sdks/server/dart.mdx index d086a6f14..167f99cc4 100644 --- a/docs/reference/sdks/server/dart.mdx +++ b/docs/reference/sdks/server/dart.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from dart-server-sdk. Edits should be made here: https://github.com/open-feature/dart-server-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Thu Oct 23 2025 10:35:33 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 10:51:49 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/dotnet.mdx b/docs/reference/sdks/server/dotnet.mdx index 9578546b0..43888b0ad 100644 --- a/docs/reference/sdks/server/dotnet.mdx +++ b/docs/reference/sdks/server/dotnet.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from dotnet-sdk. Edits should be made here: https://github.com/open-feature/dotnet-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) --> [![Specification](https://img.shields.io/static/v1?label=specification&message=v0.8.0&color=yellow&style=for-the-badge)](https://github.com/open-feature/spec/releases/tag/v0.8.0) diff --git a/docs/reference/sdks/server/go.mdx b/docs/reference/sdks/server/go.mdx index d3b1c7b70..01a147712 100644 --- a/docs/reference/sdks/server/go.mdx +++ b/docs/reference/sdks/server/go.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from go-sdk. Edits should be made here: https://github.com/open-feature/go-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/java.mdx b/docs/reference/sdks/server/java.mdx index cdedc6d04..ca89525d7 100644 --- a/docs/reference/sdks/server/java.mdx +++ b/docs/reference/sdks/server/java.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from java-sdk. Edits should be made here: https://github.com/open-feature/java-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 10:51:47 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/javascript/index.mdx b/docs/reference/sdks/server/javascript/index.mdx index 162a64f18..9a87e1647 100644 --- a/docs/reference/sdks/server/javascript/index.mdx +++ b/docs/reference/sdks/server/javascript/index.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/javascript/nestjs.mdx b/docs/reference/sdks/server/javascript/nestjs.mdx index 2abbcf07e..0d7bf6c8f 100644 --- a/docs/reference/sdks/server/javascript/nestjs.mdx +++ b/docs/reference/sdks/server/javascript/nestjs.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/php.mdx b/docs/reference/sdks/server/php.mdx index 81aee4744..168fb5c48 100644 --- a/docs/reference/sdks/server/php.mdx +++ b/docs/reference/sdks/server/php.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from php-sdk. Edits should be made here: https://github.com/open-feature/php-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/python.mdx b/docs/reference/sdks/server/python.mdx index 3666d0072..7bfa2fbcd 100644 --- a/docs/reference/sdks/server/python.mdx +++ b/docs/reference/sdks/server/python.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from python-sdk. Edits should be made here: https://github.com/open-feature/python-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Thu Oct 23 2025 10:35:32 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/ruby.mdx b/docs/reference/sdks/server/ruby.mdx index 28807d4e2..3313b03ae 100644 --- a/docs/reference/sdks/server/ruby.mdx +++ b/docs/reference/sdks/server/ruby.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from ruby-sdk. Edits should be made here: https://github.com/open-feature/ruby-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Thu Oct 23 2025 10:35:33 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/rust.mdx b/docs/reference/sdks/server/rust.mdx index ef1ecfcf5..e079e626d 100644 --- a/docs/reference/sdks/server/rust.mdx +++ b/docs/reference/sdks/server/rust.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from rust-sdk. Edits should be made here: https://github.com/open-feature/rust-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Thu Oct 23 2025 10:35:33 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 10:51:49 GMT-0400 (Eastern Daylight Time) -->

diff --git a/src/datasets/types.ts b/src/datasets/types.ts index 9fdf997bc..30f3e9092 100644 --- a/src/datasets/types.ts +++ b/src/datasets/types.ts @@ -46,7 +46,7 @@ export type SdkCompatibility = { /** * The path in the docs to the SDK * - * @example /docs/reference/technologies/server/java + * @example /docs/reference/sdks/server/java */ path: string; /** @@ -101,7 +101,7 @@ export type SdkCompatibility = { /** * The path to the SDK doc with an anchor to the specific feature. * - * @example /docs/reference/technologies/server/java#providers + * @example /docs/reference/sdks/server/java#providers */ path: string; }; From 8c72e32eec6fb66e05f8102b36f41b654c09069e Mon Sep 17 00:00:00 2001 From: Jonathan Norris Date: Fri, 24 Oct 2025 15:10:59 -0400 Subject: [PATCH 09/14] docs: update Other Technologies docs to be pulled from repo README's Signed-off-by: Jonathan Norris --- docs/reference/other-technologies/cli.mdx | 240 +++++++++++ .../other-technologies/generated/cli.mdx | 262 ------------ .../other-technologies/generated/mcp.mdx | 376 ------------------ .../other-technologies/generated/ofrep.mdx | 374 ----------------- docs/reference/other-technologies/mcp.mdx | 249 ++++++++++++ docs/reference/other-technologies/ofrep.mdx | 103 +++++ docs/reference/sdks/client/kotlin.mdx | 2 +- docs/reference/sdks/client/swift.mdx | 2 +- docs/reference/sdks/client/web/angular.mdx | 2 +- docs/reference/sdks/client/web/index.mdx | 3 +- docs/reference/sdks/client/web/react.mdx | 2 +- docs/reference/sdks/server/dart.mdx | 2 +- docs/reference/sdks/server/dotnet.mdx | 2 +- docs/reference/sdks/server/go.mdx | 2 +- docs/reference/sdks/server/java.mdx | 2 +- .../sdks/server/javascript/index.mdx | 3 +- .../sdks/server/javascript/nestjs.mdx | 2 +- docs/reference/sdks/server/php.mdx | 2 +- docs/reference/sdks/server/python.mdx | 2 +- docs/reference/sdks/server/ruby.mdx | 2 +- docs/reference/sdks/server/rust.mdx | 2 +- docusaurus.config.ts | 13 +- package.json | 4 +- scripts/process-sdk-readmes.ts | 78 ++++ src/datasets/sdks/sdk-compatibility.json | 8 +- 25 files changed, 705 insertions(+), 1034 deletions(-) create mode 100644 docs/reference/other-technologies/cli.mdx delete mode 100644 docs/reference/other-technologies/generated/cli.mdx delete mode 100644 docs/reference/other-technologies/generated/mcp.mdx delete mode 100644 docs/reference/other-technologies/generated/ofrep.mdx create mode 100644 docs/reference/other-technologies/mcp.mdx create mode 100644 docs/reference/other-technologies/ofrep.mdx diff --git a/docs/reference/other-technologies/cli.mdx b/docs/reference/other-technologies/cli.mdx new file mode 100644 index 000000000..f8030bd8a --- /dev/null +++ b/docs/reference/other-technologies/cli.mdx @@ -0,0 +1,240 @@ +--- +title: OpenFeature CLI +sidebar_label: CLI +sidebar_position: 1 +id: cli +--- + +

+ + work-in-progress + + + Slack + +

+ +The OpenFeature CLI is a command-line tool designed to improve the developer experience when working with feature flags. +It helps developers manage feature flags consistently across different environments and programming languages by providing powerful utilities for code generation, flag validation, and more. + +The CLI bridges the gap between feature flag management systems and your application code by generating strongly typed flag accessors from a flag manifest. This approach provides: + +- **Type Safety**: Generate strongly-typed flag accessors for your preferred language +- **Developer Experience**: Reduce errors and improve IDE autocomplete support +- **Language Support**: Generate code for TypeScript, JavaScript, React, Go, C#, and more + +## Installation + +### via curl + +The OpenFeature CLI can be installed using a shell command. +This method is suitable for most Unix-like operating systems. + +```bash +curl -fsSL https://openfeature.dev/scripts/install_cli.sh | sh +``` + +### via Docker + +The OpenFeature CLI is available as a Docker image in the [GitHub Container Registry](https://github.com/open-feature/cli/pkgs/container/cli). + +You can run the CLI in a Docker container using the following command: + +```bash +docker run -it -v $(pwd):/local -w /local ghcr.io/open-feature/cli:latest +``` + +### via Go + +If you have `Go >= 1.23` installed, you can install the CLI using the following command: + +```bash +go install github.com/open-feature/cli/cmd/openfeature@latest +``` + +### via pre-built binaries + +Download the appropriate pre-built binary from the [releases page](https://github.com/open-feature/cli/releases). + +## Quick Start + +1. Create a flag manifest file in your project root: + +```bash +cat > flags.json << EOL +{ + "$schema": "https://raw.githubusercontent.com/open-feature/cli/refs/heads/main/schema/v0/flag-manifest.json", + "flags": { + "enableMagicButton": { + "flagType": "boolean", + "defaultValue": false, + "description": "Activates a special button that enhances user interaction with magical, intuitive functionalities." + } + } +} +EOL +``` + +> [!NOTE] +> This is for demonstration purposes only. +> In a real-world scenario, you would typically want to fetch this file from a remote flag management service. +> See [here](https://github.com/open-feature/cli/issues/3), more more details. + +2. Generate code for your preferred language: + +```bash +openfeature generate react +``` + +See [here](https://github.com/open-feature/cli/blob/docs-update-readme-for-website/docs/commands/openfeature_generate.md) for all available options. + +3. View the generated code: + +```bash +cat openfeature.ts +``` + +**Congratulations!** +You have successfully generated your first strongly typed flag accessors. +You can now use the generated code in your application to access the feature flags. +This is just scratching the surface of what the OpenFeature CLI can do. +For more advanced usage, read on! + +## Commands + +The OpenFeature CLI provides the following commands: + +### `init` + +Initialize a new flag manifest in your project. + +```bash +openfeature init +``` + +This command creates a `flags.json` file in your current directory with the proper schema reference. +You can customize the manifest path using configuration options. + +See [here](https://github.com/open-feature/cli/blob/docs-update-readme-for-website/docs/commands/openfeature_init.md) for all available options. + +### `generate` + +Generate strongly typed flag accessors for your project. + +```bash +# List available languages +openfeature generate + +# Generate for a specific language +openfeature generate typescript + +# With custom output directory +openfeature generate typescript --output ./src/flags +``` + +**Supported Languages:** + +| Language | Description | +|----------|-------------| +| `typescript` | TypeScript flag accessors | +| `javascript` | JavaScript flag accessors | +| `react` | React hooks for feature flags | +| `go` | Go flag accessors | +| `csharp` | C# flag accessors | +| `java` | Java flag accessors | +| `python` | Python flag accessors | +| `nestjs` | NestJS flag accessors | +| `nodejs` | Node.js flag accessors | + +See [here](https://github.com/open-feature/cli/blob/docs-update-readme-for-website/docs/commands/openfeature_generate.md) for all available options. + +### `version` + +Print the version number of the OpenFeature CLI. + +```bash +openfeature version +``` + +See [here](https://github.com/open-feature/cli/blob/docs-update-readme-for-website/docs/commands/openfeature_version.md) for all available options. + +## Flag Manifest + +The flag manifest is a JSON file that defines your feature flags and their properties. +It serves as the source of truth for your feature flags and is used by the CLI to generate strongly typed accessors. +The manifest file should be named `flags.json` and placed in the root of your project. + +### Flag Manifest Structure + +The flag manifest file should follow the [JSON schema](https://raw.githubusercontent.com/open-feature/cli/refs/heads/main/schema/v0/flag-manifest.json) with the following properties: + +- `$schema` - The URL of the JSON schema for validation +- `flags` - An object containing the feature flags + - `flagKey` - A unique key for the flag + - `description` - A description of what the flag does + - `type` - The type of the flag (`boolean`, `string`, `number`, `object`) + - `defaultValue` - The default value of the flag + +### Example Flag Manifest + +```json +{ + "$schema": "https://raw.githubusercontent.com/open-feature/cli/refs/heads/main/schema/v0/flag-manifest.json", + "flags": { + "uniqueFlagKey": { + "description": "Description of what this flag does", + "type": "boolean|string|number|object", + "defaultValue": "default-value", + } + } +} +``` + +## Configuration + +The OpenFeature CLI uses an optional configuration file to override default settings and customize behavior. +This file can be in JSON or YAML format and should be named either `.openfeature.json` or `.openfeature.yaml`. + +### Configuration File Structure + +```yaml +# Example .openfeature.yaml +manifest: "flags/manifest.json" # Overrides the default manifest path +generate: + output: "src/flags" # Overrides the default output directory + # Any language-specific options can be specified here + # For example, for React: + react: + output: "src/flags/react" # Overrides the default React output directory + # For Go: + go: + package: "github.com/myorg/myrepo/flags" # Overrides the default Go package name + output: "src/flags/go" # Overrides the default Go output directory +``` + +### Configuration Priority + +The CLI uses a layered approach to configuration, allowing you to override settings at different levels. +The configuration is applied in the following order: + +```mermaid +flowchart LR + default("Default Config") + config("Config File") + args("Command Line Args") + default --> config + config --> args +``` + +## Get Involved + +- **GitHub Repository**: [open-feature/cli](https://github.com/open-feature/cli) +- **CNCF Slack**: Join the conversation in the [#openfeature](https://cloud-native.slack.com/archives/C0344AANLA1) and [#openfeature-cli](https://cloud-native.slack.com/archives/C07DY4TUDK6) channel +- **Regular Meetings**: Attend our [community calls](https://zoom-lfx.platform.linuxfoundation.org/meetings/openfeature) +- **GitHub Issues**: Report bugs or request features in our [issue tracker](https://github.com/open-feature/cli/issues) +- **Social Media**: + - Twitter: [@openfeature](https://twitter.com/openfeature) + - LinkedIn: [OpenFeature](https://www.linkedin.com/company/openfeature/) + +For more information, visit our [community page](https://openfeature.dev/community/). + diff --git a/docs/reference/other-technologies/generated/cli.mdx b/docs/reference/other-technologies/generated/cli.mdx deleted file mode 100644 index 95cc6dfcc..000000000 --- a/docs/reference/other-technologies/generated/cli.mdx +++ /dev/null @@ -1,262 +0,0 @@ ---- -title: CLI -sidebar_label: CLI -sidebar_position: 1 -id: cli ---- - -# OpenFeature CLI - -The OpenFeature CLI is a command-line tool designed to improve the developer experience when working with feature flags. -It helps developers manage feature flags consistently across different environments and programming languages by providing powerful utilities for code generation, flag validation, and more. - -:::caution Experimental -The OpenFeature CLI is experimental! Feel free to give it a shot and provide feedback, but expect breaking changes. -::: - -## Overview - -The CLI bridges the gap between feature flag management systems and your application code by generating strongly typed flag accessors from a flag manifest. This approach provides: - -- **Type Safety**: Generate strongly-typed flag accessors for your preferred language -- **Consistency**: Maintain a single source of truth for feature flags across your projects -- **Developer Experience**: Reduce errors and improve IDE autocomplete support -- **Language Support**: Generate code for TypeScript, JavaScript, React, Go, C#, and more - -## Installation - -#### curl - -The OpenFeature CLI can be installed using a shell command. This method is suitable for most Unix-like operating systems. - -```bash -curl -fsSL https://openfeature.dev/scripts/install_cli.sh | sh -``` - -#### Docker - -The OpenFeature CLI is available as a Docker image in the GitHub Container Registry. - -```bash -docker run -it -v $(pwd):/local -w /local ghcr.io/open-feature/cli:latest -``` - -#### Go - -If you have Go >= 1.23 installed, you can install the CLI using: - -```bash -go install github.com/open-feature/cli/cmd/openfeature@latest -``` - -#### Pre-built Binaries - -Download the appropriate pre-built binary from the [releases page](https://github.com/open-feature/cli/releases). - -## Quick Start - -1. Create a flag manifest file in your project root: - -```bash -cat > flags.json << EOL -{ - "$schema": "https://raw.githubusercontent.com/open-feature/cli/refs/heads/main/schema/v0/flag-manifest.json", - "flags": { - "enableMagicButton": { - "flagType": "boolean", - "defaultValue": false, - "description": "Activates a special button that enhances user interaction with magical, intuitive functionalities." - } - } -} -EOL -``` - -:::info -This is for demonstration purposes only. In a real-world scenario, you would typically want to fetch this file from a remote flag management service. -::: - -2. Generate code for your preferred language: - -```bash -openfeature generate react -``` - -3. View the generated code: - -```bash -cat openfeature.ts -``` - -Congratulations! You have successfully generated your first strongly typed flag accessors. - -## Commands - -### init - -Initialize a new flag manifest in your project. - -```bash -openfeature init -``` - -This command creates a `flags.json` file in your current directory with the proper schema reference. -You can customize the manifest path using configuration options. - -[View full command documentation →](https://github.com/open-feature/cli/blob/main/docs/commands/openfeature_init.md) - -### generate - -Generate strongly typed flag accessors for your project. - -```bash -# List available languages -openfeature generate - -# Generate for a specific language -openfeature generate typescript - -# With custom output directory -openfeature generate typescript --output ./src/flags -``` - -**Supported Languages:** - -- `typescript` - TypeScript flag accessors -- `javascript` - JavaScript flag accessors -- `react` - React hooks for feature flags -- `go` - Go flag accessors -- `csharp` - C# flag accessors - -[View full command documentation →](https://github.com/open-feature/cli/blob/main/docs/commands/openfeature_generate.md) - -### version - -Print the version number of the OpenFeature CLI. - -```bash -openfeature version -``` - -[View full command documentation →](https://github.com/open-feature/cli/blob/main/docs/commands/openfeature_version.md) - -## Flag Manifest - -The flag manifest is a JSON file that defines your feature flags and their properties. -It serves as the source of truth for your feature flags and is used by the CLI to generate strongly typed accessors. - -### Flag Manifest Structure - -The flag manifest file should follow the [JSON schema](https://raw.githubusercontent.com/open-feature/cli/refs/heads/main/schema/v0/flag-manifest.json) with the following properties: - -- `$schema` - The URL of the JSON schema for validation -- `flags` - An object containing the feature flags - - `flagKey` - A unique key for the flag - - `description` - A description of what the flag does - - `type` - The type of the flag (`boolean`, `string`, `number`, `object`) - - `defaultValue` - The default value of the flag - -#### Example Flag Manifest - -```json -{ - "$schema": "https://raw.githubusercontent.com/open-feature/cli/refs/heads/main/schema/v0/flag-manifest.json", - "flags": { - "newCheckoutFlow": { - "description": "Enables the redesigned checkout experience", - "type": "boolean", - "defaultValue": false - }, - "maxCartItems": { - "description": "Maximum number of items allowed in cart", - "type": "number", - "defaultValue": 10 - }, - "welcomeMessage": { - "description": "Message displayed on the home page", - "type": "string", - "defaultValue": "Welcome to our store!" - } - } -} -``` - -## Configuration - -The OpenFeature CLI uses an optional configuration file to override default settings and customize behavior. -This file can be in JSON or YAML format and should be named either `.openfeature.json` or `.openfeature.yaml`. - -#### Configuration File Structure - -```yaml -# .openfeature.yaml -manifest: "flags/manifest.json" # Override default manifest path -generate: - output: "src/flags" # Override default output directory - - # Language-specific options - react: - output: "src/flags/react" - - go: - package: "github.com/myorg/myrepo/flags" - output: "src/flags/go" -``` - -### Configuration Priority - -The CLI uses a layered approach to configuration, with settings applied in the following order (later sources override earlier ones): - -1. **Default Configuration** - Built-in CLI defaults -2. **Configuration File** - Settings from `.openfeature.json` or `.openfeature.yaml` -3. **Command Line Arguments** - Flags passed directly to commands - -This allows you to set global defaults in the config file while still overriding specific values as needed. - -## Examples - -### TypeScript/JavaScript Project - -Generate flag accessors for a TypeScript project: - -```bash -openfeature generate typescript --output ./src/generated/flags -``` - -### React Application - -Generate React hooks for feature flag usage: - -```bash -openfeature generate react --output ./src/hooks -``` - -Usage in your React components: - -```tsx -import { useEnableMagicButton } from './hooks/openfeature'; - -function MyComponent() { - const isMagicEnabled = useEnableMagicButton(); - - return ( -
- {isMagicEnabled && } -
- ); -} -``` - -### Go Service - -Generate Go flag accessors: - -```bash -openfeature generate go --output ./internal/flags -``` - -## Get Involved - -- **GitHub Repository**: [open-feature/cli](https://github.com/open-feature/cli) -- **CNCF Slack**: Join the conversation in the [#openfeature](https://cloud-native.slack.com/archives/C0344AANLA1) and [#openfeature-cli](https://cloud-native.slack.com/archives/C07K9FEKA80) channels -- **Issue Tracker**: [Report bugs or request features](https://github.com/open-feature/cli/issues) diff --git a/docs/reference/other-technologies/generated/mcp.mdx b/docs/reference/other-technologies/generated/mcp.mdx deleted file mode 100644 index 72d24a4ef..000000000 --- a/docs/reference/other-technologies/generated/mcp.mdx +++ /dev/null @@ -1,376 +0,0 @@ ---- -title: MCP -sidebar_label: MCP -sidebar_position: 3 -id: mcp ---- - -# Model Context Protocol (MCP) - -The **OpenFeature Model Context Protocol (MCP) Server** enables AI coding assistants to interact with OpenFeature through a standardized protocol. It provides SDK installation guidance and feature flag evaluation capabilities directly within your AI-powered development environment. - -:::info Active Development -This project is in active development. Features and APIs may change. -::: - -## Overview - -The OpenFeature MCP Server is a local tool that connects AI coding assistants (like Cursor, Claude Desktop, VS Code Continue, and Windsurf) to OpenFeature functionality. It acts as a bridge between your AI assistant and OpenFeature capabilities, enabling intelligent code generation, SDK installation guidance, and feature flag evaluation—all through natural language interactions. - -### Key Benefits - -- **AI-Assisted Development**: Get contextual OpenFeature SDK installation instructions directly in your coding environment -- **Intelligent Code Generation**: AI assistants can generate OpenFeature integration code with proper provider setup -- **Feature Flag Evaluation**: Evaluate feature flags via OFREP without leaving your development workflow -- **Multi-Language Support**: Works with OpenFeature SDKs across multiple languages and frameworks -- **Standardized Integration**: Uses the Model Context Protocol for consistent AI assistant integration - -## What is MCP? - -MCP (Model Context Protocol) is a standardized protocol that enables AI assistants to access external tools and data sources. The OpenFeature MCP Server implements this protocol to provide: - -1. **SDK Installation Prompts**: Contextual guidance for installing and configuring OpenFeature SDKs -2. **OFREP Integration**: Remote flag evaluation capabilities through the OpenFeature Remote Evaluation Protocol -3. **Provider Documentation**: Installation instructions for popular feature flag providers - -### How It Works - -```mermaid -graph LR - A[AI Assistant] --> B[MCP Server] - B --> C[SDK Installation Guides] - B --> D[OFREP Flag Evaluation] - D --> E[Flag Management System] -``` - -1. Your AI assistant connects to the OpenFeature MCP Server via stdio -2. When you ask about OpenFeature, the AI uses MCP tools to fetch relevant information -3. For flag evaluation, the server connects to your flag management system via OFREP -4. The AI assistant provides intelligent responses with accurate, up-to-date information - -## Installation - -### Quick Start - -The easiest way to use the OpenFeature MCP Server is through NPX, which requires no installation: - -```json -{ - "mcpServers": { - "OpenFeature": { - "command": "npx", - "args": ["-y", "@openfeature/mcp"] - } - } -} -``` - -### Global Installation - -For faster startup times, you can install the MCP server globally: - -```bash -npm install -g @openfeature/mcp -``` - -Then configure your AI assistant to use the global installation: - -```json -{ - "mcpServers": { - "OpenFeature": { - "command": "openfeature-mcp" - } - } -} -``` - -## Configuration - -### AI Assistant Setup - -#### Cursor - -Add to `~/.cursor/mcp_settings.json`: - -```json -{ - "mcpServers": { - "OpenFeature": { - "command": "npx", - "args": ["-y", "@openfeature/mcp"] - } - } -} -``` - -#### VS Code (Continue) - -Add to `.continue/config.json`: - -```json -{ - "mcpServers": { - "OpenFeature": { - "command": "npx", - "args": ["-y", "@openfeature/mcp"] - } - } -} -``` - -#### Claude Code (CLI) - -Add the server via CLI: - -```bash -claude mcp add --transport stdio openfeature npx -y @openfeature/mcp -``` - -Then manage the connection with `/mcp` in the CLI. - -#### Windsurf - -In the "Manage MCP servers" raw config, add: - -```json -{ - "mcpServers": { - "OpenFeature": { - "command": "npx", - "args": ["-y", "@openfeature/mcp"] - } - } -} -``` - -#### Claude Desktop - -Edit your Claude Desktop config at: -- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` -- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json` - -Add the following configuration: - -```json -{ - "mcpServers": { - "openfeature": { - "command": "npx", - "args": ["-y", "@openfeature/mcp"] - } - } -} -``` - -Restart Claude Desktop after saving. - -### OFREP Configuration - -To use OFREP flag evaluation features, configure authentication and endpoint details. The server checks configuration in this priority order: - -1. **Environment Variables** - - `OPENFEATURE_OFREP_BASE_URL` or `OFREP_BASE_URL` - - `OPENFEATURE_OFREP_BEARER_TOKEN` or `OFREP_BEARER_TOKEN` - - `OPENFEATURE_OFREP_API_KEY` or `OFREP_API_KEY` - -2. **Configuration File**: `~/.openfeature-mcp.json` - -```json -{ - "OFREP": { - "baseUrl": "https://flags.example.com", - "bearerToken": "", - "apiKey": "" - } -} -``` - -You can override the config file path using the `OPENFEATURE_MCP_CONFIG_PATH` environment variable. - -## Available Tools - -The OpenFeature MCP Server provides two main tools accessible to AI assistants: - -### 1. SDK Installation Guide - -**Tool Name**: `install_openfeature_sdk` - -Fetches comprehensive installation instructions for OpenFeature SDKs in various languages and frameworks. Optionally includes provider-specific setup guidance. - -#### Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `technology` | string | Yes | Target language/framework (see supported list below) | -| `providers` | string[] | No | Provider identifiers to include installation instructions | - -#### Supported Technologies - -- `android` - Android SDK -- `dotnet` - .NET SDK -- `go` - Go SDK -- `ios` - iOS/Swift SDK -- `java` - Java SDK -- `javascript` - JavaScript SDK -- `nestjs` - NestJS SDK -- `nodejs` - Node.js SDK -- `php` - PHP SDK -- `python` - Python SDK -- `react` - React SDK -- `ruby` - Ruby SDK - -#### Supported Providers - -The provider list is automatically sourced from the OpenFeature ecosystem. Popular providers include: - -- `flagd` - OpenFeature reference implementation -- `launchdarkly` - LaunchDarkly provider -- `split` - Split.io provider -- `cloudbees` - CloudBees Feature Management -- `configcat` - ConfigCat provider -- And many more in the [OpenFeature ecosystem](/ecosystem) - -#### Example Usage - -When interacting with your AI assistant: - -> "How do I install the OpenFeature SDK for Node.js with the flagd provider?" - -The AI will use this tool to fetch relevant installation instructions and provide you with step-by-step guidance. - -### 2. OFREP Flag Evaluation - -**Tool Name**: `ofrep_flag_eval` - -Evaluate feature flags using the OpenFeature Remote Evaluation Protocol. Supports both single flag and bulk evaluation. - -#### Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `base_url` | string | No | Base URL of your OFREP-compatible flag service | -| `flag_key` | string | No | Flag key for single evaluation (omit for bulk) | -| `context` | object | No | Evaluation context (e.g., `{ targetingKey: "user-123" }`) | -| `etag` | string | No | ETag for bulk evaluation caching | -| `auth` | object | No | Authentication configuration | -| `auth.bearer_token` | string | No | Bearer token for authorization | -| `auth.api_key` | string | No | API key for authorization | - -#### API Endpoints - -**Single Flag Evaluation**: -``` -POST /ofrep/v1/evaluate/flags/{flagKey} -``` - -**Bulk Evaluation**: -``` -POST /ofrep/v1/evaluate/flags -``` - -#### Example Usage - -When interacting with your AI assistant: - -> "Can you check the value of the 'new-checkout-flow' feature flag for user-123?" - -The AI will use this tool to evaluate the flag and provide you with the result, along with additional metadata like variant and reason. - -For more information about OFREP, see the [OFREP documentation](/docs/reference/other-technologies/ofrep). - -## Examples - -### Getting SDK Installation Help - -``` -You: How do I get started with OpenFeature in a React application? - -AI: Let me help you install the OpenFeature React SDK... -[The AI fetches installation instructions using the MCP server] - -Here's how to get started: - -1. Install the package: - npm install @openfeature/react-sdk - -2. Import and configure... -``` - -### Evaluating Feature Flags - -``` -You: What's the current value of the 'dark-mode' flag? - -AI: Let me check the current flag value... -[The AI evaluates the flag using OFREP through the MCP server] - -The 'dark-mode' flag is currently: -- Value: true -- Variant: on -- Reason: TARGETING_MATCH -``` - -### Multi-Provider Setup - -``` -You: Show me how to set up OpenFeature with LaunchDarkly in TypeScript - -AI: Here's how to integrate OpenFeature with LaunchDarkly... -[The AI fetches both OpenFeature and LaunchDarkly provider setup] - -First, install the dependencies: -npm install @openfeature/server-sdk @launchdarkly/openfeature-node-server - -Then configure the provider... -``` - -## Use Cases - -### 1. Learning OpenFeature - -AI assistants can provide contextual, accurate guidance when learning OpenFeature: -- SDK installation steps -- Provider configuration examples -- Best practices for your specific language/framework - -### 2. Rapid Prototyping - -Quickly scaffold OpenFeature integrations: -- Generate boilerplate code -- Set up provider connections -- Implement evaluation patterns - -### 3. Feature Flag Debugging - -Check flag values and targeting without leaving your editor: -- Evaluate flags with different contexts -- Verify targeting rules -- Debug flag resolution issues - -### 4. Migration Support - -Get guidance when migrating between providers: -- Compare provider configurations -- Understand provider-specific features -- Generate migration code - -## Resources - -- **GitHub Repository**: [open-feature/mcp](https://github.com/open-feature/mcp) -- **NPM Package**: [@openfeature/mcp](https://www.npmjs.com/package/@openfeature/mcp) -- **MCP Registry**: [dev.openfeature/mcp](https://registry.modelcontextprotocol.io) -- **OFREP Documentation**: [OpenFeature Remote Evaluation Protocol](/docs/reference/other-technologies/ofrep) -- **OpenFeature CLI**: [CLI Documentation](/docs/reference/other-technologies/cli) -- **CNCF Slack**: Join [#openfeature](https://cloud-native.slack.com/archives/C0344AANLA1) - -## Get Involved - -The OpenFeature MCP Server is an open-source project maintained by the OpenFeature community. We welcome contributions: - -- **Report Issues**: [GitHub Issues](https://github.com/open-feature/mcp/issues) -- **Contribute Code**: [Contributing Guide](https://github.com/open-feature/mcp/blob/main/CONTRIBUTING.md) -- **Suggest Features**: Share ideas in the CNCF Slack [#openfeature](https://cloud-native.slack.com/archives/C0344AANLA1) channel -- **Improve Documentation**: Help us improve SDK installation guides and examples - -Join the [CNCF Slack](https://communityinviter.com/apps/cloud-native/cncf) to get involved. diff --git a/docs/reference/other-technologies/generated/ofrep.mdx b/docs/reference/other-technologies/generated/ofrep.mdx deleted file mode 100644 index cb9aac5dc..000000000 --- a/docs/reference/other-technologies/generated/ofrep.mdx +++ /dev/null @@ -1,374 +0,0 @@ ---- -title: OFREP -sidebar_label: OFREP -sidebar_position: 2 -id: ofrep ---- - -# OpenFeature Remote Evaluation Protocol (OFREP) - -The **OpenFeature Remote Evaluation Protocol (OFREP)** is an API specification for feature flagging that enables vendor-agnostic communication between applications and flag management systems. -OFREP allows the use of generic providers to connect to any feature flag management system that supports the protocol. - -## Overview - -The primary goal of OFREP is to establish a standardized, vendor-agnostic communication layer for feature flag evaluation. This protocol aims to decouple applications from specific feature flag vendors, fostering a more flexible and interoperable ecosystem. - -At its heart, OFREP defines a standard API layer between the provider and the flag management system, allowing OpenSource and commercial feature flag management systems to implement the protocol and be compatible with the community-maintained providers. It enables out-of-the-box compatibility with any OFREP compliant flag management system, regardless of whether they have a specific OpenFeature provider implementation. - -### Key Benefits - -- **Vendor Agnostic**: Connect to any OFREP-compliant flag management system without vendor-specific implementations -- **Standardized**: Built on a common OpenAPI specification for consistent integration -- **Flexible**: Works on both client-side and server-side applications -- **Community Maintained**: Generic OFREP providers maintained by the OpenFeature community -- **Simple Migration**: Switch between flag management systems without changing application code - -## What is OFREP? - -OFREP is **a protocol, not a provider**. It defines how to communicate with feature flag management systems and works on top of OpenFeature SDKs by providing standardized providers that can be used to connect to any OFREP compliant flag management system. - -### How It Works - -```mermaid -graph LR - A[Your Application] --> B[OpenFeature SDK] - B --> C[OFREP Provider] - C --> D[OFREP API] - D --> E[Flag Management System] -``` - -1. Your application uses the OpenFeature SDK -2. The OpenFeature SDK uses an OFREP provider -3. The OFREP provider communicates with your flag management system via the standardized OFREP API -4. Your flag management system implements the OFREP specification - -### Server vs Client - -OFREP supports both paradigms defined by OpenFeature: - -#### Server-Side (Dynamic Context) - -- Evaluation happens by calling the OFREP API with context -- No in-process evaluation inside OFREP providers -- Context changes frequently (per request, per user) -- Follows the [dynamic-context paradigm](/docs/reference/concepts/sdk-paradigms#dynamic-context-paradigm-server-side-sdks) - -#### Client-Side (Static Context) - -- Evaluation happens locally with pre-fetched flag data -- Provider reconciles state when context changes -- Context represents a single user or session -- Follows the [static-context paradigm](/docs/reference/concepts/sdk-paradigms#static-context-paradigms-client-side-sdks) - -## Using OFREP - -### Available Providers - -The OpenFeature community maintains OFREP providers for multiple languages. View the complete list of [OFREP providers in the ecosystem](/ecosystem/?instant_search%5BrefinementList%5D%5Bvendor%5D%5B0%5D=OFREP). - -Common implementations include: -- TypeScript/JavaScript (Server & Web) -- Go -- Java -- .NET -- Python -- PHP - -### Available Flag Management Systems - -Many flag management systems support OFREP. View the complete list of [OFREP-compliant systems in the ecosystem](/ecosystem/?instant_search%5BrefinementList%5D%5Btype%5D%5B0%5D=OFREP%20API). - -### Basic Usage - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - - - - -```ts -import { OpenFeature } from '@openfeature/server-sdk'; -import { OFREPProvider } from '@openfeature/ofrep-provider'; - -// Configure the OFREP provider with your flag service endpoint -const provider = new OFREPProvider({ - baseURL: 'https://your-flag-service.example.com', - headers: { - 'Authorization': 'Bearer your-api-token' - } -}); - -// Set the provider -await OpenFeature.setProviderAndWait(provider); - -// Get a client and evaluate flags -const client = OpenFeature.getClient(); -const value = await client.getBooleanValue('new-feature', false, { - targetingKey: 'user-123', - email: 'user@example.com' -}); -``` - - - - -```go -import ( - "context" - openfeature "github.com/open-feature/go-sdk/openfeature" - ofrep "github.com/open-feature/go-sdk-contrib/providers/ofrep/pkg" -) - -// Configure the OFREP provider -provider := ofrep.NewProvider(ofrep.ProviderConfig{ - BaseURL: "https://your-flag-service.example.com", - Headers: map[string]string{ - "Authorization": "Bearer your-api-token", - }, -}) - -// Set the provider -openfeature.SetProvider(provider) - -// Get a client and evaluate flags -client := openfeature.NewClient("my-app") -value, err := client.BooleanValue( - context.Background(), - "new-feature", - false, - openfeature.NewEvaluationContext("user-123", map[string]interface{}{ - "email": "user@example.com", - }), -) -``` - - - - -```python -from openfeature import api -from openfeature.contrib.provider.ofrep import OFREPProvider - -# Configure the OFREP provider -provider = OFREPProvider( - base_url="https://your-flag-service.example.com", - headers={ - "Authorization": "Bearer your-api-token" - } -) - -# Set the provider -api.set_provider(provider) - -# Get a client and evaluate flags -client = api.get_client() -value = client.get_boolean_value( - "new-feature", - False, - {"targetingKey": "user-123", "email": "user@example.com"} -) -``` - - - - -## Configuration - -### Required Options - -All OFREP providers accept these configuration options: - -| Option | Description | Required | -|--------|-------------|----------| -| `baseURL` | The base URL of your flag management system (before `/ofrep/v1`) | Yes | -| `headers` | Headers to include in requests (e.g., authorization tokens) | No | -| `timeout` | Request timeout duration (default: 10 seconds) | No | - -#### Example Configuration - -```typescript -const provider = new OFREPProvider({ - // Base URL of your flag service - baseURL: 'https://flags.example.com', - - // Authentication and custom headers - headers: { - 'Authorization': 'Bearer token123', - 'X-Custom-Header': 'value' - }, - - // Request timeout (milliseconds) - timeout: 5000 -}); -``` - -## API Specification - -OFREP is defined by an [OpenAPI specification](https://github.com/open-feature/protocol/blob/main/service/openapi.yaml) that flag management systems must implement. - -### Key Endpoints - -#### Bulk Evaluation (Client-Side) - -``` -POST /ofrep/v1/evaluate/flags -``` - -Returns all flag values for a given context. Used by client-side providers. - -**Request:** -```json -{ - "context": { - "targetingKey": "user-123", - "email": "user@example.com" - } -} -``` - -#### Single Flag Evaluation (Server-Side) - -``` -POST /ofrep/v1/evaluate/flags/{flagKey} -``` - -Evaluates a single flag for a given context. Used by server-side providers. - -**Request:** -```json -{ - "context": { - "targetingKey": "user-123", - "email": "user@example.com" - } -} -``` - -**Response:** -```json -{ - "key": "new-feature", - "value": true, - "reason": "TARGETING_MATCH", - "variant": "on", - "metadata": {} -} -``` - -### Response Codes - -| Code | Description | Provider Behavior | -|------|-------------|-------------------| -| `200` | Success | Return evaluation result | -| `400` | Bad request | Return error with details | -| `401`/`403` | Unauthorized | Return authorization error | -| `404` | Flag not found | Return `FLAG_NOT_FOUND` error | -| `429` | Rate limit exceeded | Respect `Retry-After` header | - -## Implementing OFREP - -### For Application Developers - -If you're building an application and want to use OFREP: - -1. Choose an [OFREP provider](/ecosystem/?instant_search%5BrefinementList%5D%5Bvendor%5D%5B0%5D=OFREP) for your language -2. Choose an [OFREP-compliant flag management system](/ecosystem/?instant_search%5BrefinementList%5D%5Btype%5D%5B0%5D=OFREP%20API) -3. Configure your provider with the flag system's OFREP endpoint -4. Start evaluating flags through the OpenFeature SDK - -### For Provider Developers - -To create an OFREP provider for a new language: - -1. Review the [server provider guideline](https://github.com/open-feature/protocol/blob/main/guideline/dynamic-context-provider.md) or [client provider guideline](https://github.com/open-feature/protocol/blob/main/guideline/static-context-provider.md) -2. Implement the provider interface for your SDK -3. Add HTTP client logic to call OFREP endpoints -4. Handle error cases and response codes according to the specification -5. Register your provider in the [OpenFeature ecosystem](https://github.com/open-feature/openfeature.dev/issues) - -### For Flag Management System Developers - -To make your flag management system OFREP-compliant: - -1. Implement the [OFREP OpenAPI specification](https://github.com/open-feature/protocol/blob/main/service/openapi.yaml) -2. Expose OFREP endpoints at `/ofrep/v1/evaluate/...` -3. Support both bulk evaluation (for client-side) and single flag evaluation (for server-side) -4. Test your implementation with existing OFREP providers -5. Register your system in the [OpenFeature ecosystem](https://github.com/open-feature/openfeature.dev/issues) - -## Examples - -### Switching Between Providers - -One of the key benefits of OFREP is vendor portability. Switching flag systems only requires updating the provider configuration: - -```typescript -// Before: Using Vendor A -const providerA = new OFREPProvider({ - baseURL: 'https://vendor-a.example.com', - headers: { 'Authorization': 'Bearer token-a' } -}); - -// After: Using Vendor B (same application code!) -const providerB = new OFREPProvider({ - baseURL: 'https://vendor-b.example.com', - headers: { 'Authorization': 'Bearer token-b' } -}); -``` - -### Testing with a Local OFREP Server - -```bash -# Run a local OFREP-compliant server -docker run -p 8080:8080 your-ofrep-server - -# Configure your provider to use it -const provider = new OFREPProvider({ - baseURL: 'http://localhost:8080' -}); -``` - -### Advanced Context Evaluation - -```typescript -const client = OpenFeature.getClient(); - -// Rich evaluation context for targeting -const context = { - targetingKey: 'user-123', - email: 'user@example.com', - country: 'US', - subscription: 'premium', - customData: { - accountAge: 365, - lastLogin: '2025-10-24T10:00:00Z' - } -}; - -const value = await client.getBooleanValue('premium-feature', false, context); -``` - -## Resources - -- **GitHub Repository**: [open-feature/protocol](https://github.com/open-feature/protocol) -- **OpenAPI Specification**: [OFREP OpenAPI Spec](https://github.com/open-feature/protocol/blob/main/service/openapi.yaml) -- **Provider Guidelines**: - - [Server Provider Guide](https://github.com/open-feature/protocol/blob/main/guideline/dynamic-context-provider.md) - - [Client Provider Guide](https://github.com/open-feature/protocol/blob/main/guideline/static-context-provider.md) -- **CNCF Slack**: Join the conversation in [#openfeature-remote-evaluation-protocol](https://cloud-native.slack.com/archives/C066A48LK35) -- **Specification**: [Appendix C: OFREP](/specification/appendix-c) -- **Ecosystem**: - - [OFREP Providers](/ecosystem/?instant_search%5BrefinementList%5D%5Bvendor%5D%5B0%5D=OFREP) - - [OFREP-Compliant Systems](/ecosystem/?instant_search%5BrefinementList%5D%5Btype%5D%5B0%5D=OFREP%20API) - -## Get Involved - -OFREP is an open standard maintained by the OpenFeature community. We welcome contributions: - -- **Implement OFREP** in your flag management system -- **Create providers** for additional languages -- **Provide feedback** on the specification -- **Share your experience** using OFREP - -Join the [`#openfeature-remote-evaluation-protocol`](https://cloud-native.slack.com/archives/C066A48LK35) channel on the [CNCF Slack](https://communityinviter.com/apps/cloud-native/cncf) to get involved. diff --git a/docs/reference/other-technologies/mcp.mdx b/docs/reference/other-technologies/mcp.mdx new file mode 100644 index 000000000..00ff0f608 --- /dev/null +++ b/docs/reference/other-technologies/mcp.mdx @@ -0,0 +1,249 @@ +--- +title: OpenFeature MCP Server +sidebar_label: MCP +sidebar_position: 3 +id: mcp +--- + +The **OpenFeature Model Context Protocol (MCP) Server** enables AI coding assistants to interact with OpenFeature through a standardized protocol. +It provides SDK installation guidance and feature flag evaluation capabilities directly within your AI-powered development environment. + +The OpenFeature MCP Server is a local tool that connects AI coding assistants (like **Cursor**, **Claude Code**, **VS Code**, and **Windsurf**) to OpenFeature functionality. +It acts as a bridge between your AI assistant and OpenFeature capabilities, enabling intelligent code generation and migration, SDK installation guidance, and feature flag evaluation. + +This server is published to the [MCP Registry](https://registry.modelcontextprotocol.io) under `dev.openfeature/mcp`. + +## Quick Start + +### NPX Install + +The easiest way to use the OpenFeature MCP Server is through NPX, which requires no installation: + +```json +{ + "mcpServers": { + "OpenFeature": { + "command": "npx", + "args": ["-y", "@openfeature/mcp"] + } + } +} +``` + +### NPM Global Install + +You can install the MCP server globally: + +```bash +npm install -g @openfeature/mcp +``` + +Then configure your AI assistant to use the global installation: + +```json +{ + "mcpServers": { + "OpenFeature": { + "command": "openfeature-mcp" + } + } +} +``` + +## AI Assistant Configuration + +### Cursor + +Navigate to `Cursor Settings` -> `Tools & MCP` -> `New MCP Server`. +Add to `~/.cursor/mcp_settings.json`: + +```json +{ + "mcpServers": { + "OpenFeature": { + "command": "npx", + "args": ["-y", "@openfeature/mcp"] + } + } +} +``` + +### VS Code + +Add to `.continue/config.json`: + +```json +{ + "mcpServers": { + "OpenFeature": { + "command": "npx", + "args": ["-y", "@openfeature/mcp"] + } + } +} +``` + +### Claude Code + +Add the server via the Claude Code CLI: + +```bash +claude mcp add --transport stdio openfeature npx -y @openfeature/mcp +``` + +Then manage the connection with `/mcp` in the CLI. + +### Windsurf + +In the `Manage MCP servers` raw config, add: + +```json +{ + "mcpServers": { + "OpenFeature": { + "command": "npx", + "args": ["-y", "@openfeature/mcp"] + } + } +} +``` + +### Claude Desktop + +Edit your Claude Desktop config at: + +- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` +- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json` + +Add the following configuration: + +```json +{ + "mcpServers": { + "openfeature": { + "command": "npx", + "args": ["-y", "@openfeature/mcp"] + } + } +} +``` + +Restart Claude Desktop after saving. + +## Available Tools + +The OpenFeature MCP Server provides two main tools accessible to AI assistants: + +### SDK Installation Guide: `install_openfeature_sdk` + +Fetches installation instructions for OpenFeature SDKs in various languages and frameworks. Optionally includes provider-specific setup documentation. + +#### SDK Tool Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `technology` | string | Yes | Target language/framework (see supported list below) | +| `providers` | string[] | No | Provider identifiers to include installation instructions | + +#### Supported Technologies + +The technologies list is built from the available `prompts/*.md`, updated automatically using `scripts/build-prompts.js` + +| Technology | SDK | +|------------|-----| +| `android` | Android Kotlin SDK | +| `dotnet` | .NET SDK | +| `go` | Go SDK | +| `ios` | iOS Swift SDK | +| `java` | Java SDK | +| `javascript` | JavaScript Web SDK | +| `nestjs` | NestJS SDK | +| `nodejs` | Node.js SDK | +| `php` | PHP SDK | +| `python` | Python SDK | +| `react` | React SDK | +| `ruby` | Ruby SDK | + +#### Supported Providers + +The provider list is automatically sourced from the OpenFeature ecosystem (`open-feature/openfeature.dev` repo). + +See `scripts/build-providers.js` for details on how the provider list is maintained. + +### OFREP Flag Evaluation: `ofrep_flag_eval` + +Evaluate feature flags using the OpenFeature Remote Evaluation Protocol (OFREP). +Supports both single flag and bulk evaluation. + +#### OFREP Tool Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `base_url` | string | No | Base URL of your OFREP-compatible flag service | +| `flag_key` | string | No | Flag key for single evaluation (omit for bulk) | +| `context` | object | No | Evaluation context (e.g., `{ targetingKey: "user-123" }`) | +| `etag` | string | No | ETag for bulk evaluation caching | +| `auth` | object | No | Authentication configuration | +| `auth.bearer_token` | string | No | Bearer token for authorization | +| `auth.api_key` | string | No | API key for authorization | + +#### OFREP Configuration + +To use OFREP flag evaluation features, configure authentication and endpoint details. The server checks configuration in this priority order: + +1. **Environment Variables** + - `OPENFEATURE_OFREP_BASE_URL` or `OFREP_BASE_URL` + - `OPENFEATURE_OFREP_BEARER_TOKEN` or `OFREP_BEARER_TOKEN` + - `OPENFEATURE_OFREP_API_KEY` or `OFREP_API_KEY` + +2. **Configuration File**: `~/.openfeature-mcp.json` + +Example `~/.openfeature-mcp.json`: + +```json +{ + "OFREP": { + "baseUrl": "https://flags.example.com", + "bearerToken": "", + "apiKey": "" + } +} +``` + +You can override the config file path using the `OPENFEATURE_MCP_CONFIG_PATH` environment variable. + +> **Note**: All logs are written to stderr. The MCP protocol messages use stdout. + +## MCP Usage Examples + +### SDK Installation Example + +> "install the OpenFeature SDK for Node.js with the flagd provider" + +The AI will use the MCP to fetch relevant installation instructions and attempt to install the OpenFeature SDK with the correct provider. + +### Flag Evaluation Example + +When interacting with your AI assistant: + +> "Can you check the value of the 'new-checkout-flow' feature flag for 'user-123'?" + +The AI will use the MCP to evaluate the flag using OFREP and provide you with the result, along with additional metadata like variant and reason. + +## Resources + +- **NPM Package**: [@openfeature/mcp](https://www.npmjs.com/package/@openfeature/mcp) +- **MCP Registry**: [dev.openfeature/mcp](https://registry.modelcontextprotocol.io) +- **OpenFeature Documentation**: [openfeature.dev](https://openfeature.dev) +- **CNCF Slack**: Join [#openfeature](https://cloud-native.slack.com/archives/C0344AANLA1) + +## Get Involved + +The OpenFeature MCP Server is an open-source project maintained by the OpenFeature community. We welcome contributions: + +- **Report Issues**: [GitHub Issues](https://github.com/open-feature/mcp/issues) +- **Contribute Code**: [Contributing Guide](https://github.com/open-feature/mcp/blob/main/CONTRIBUTING.md) +- **Suggest Features**: Share ideas in the CNCF Slack [#openfeature](https://cloud-native.slack.com/archives/C0344AANLA1) channel +- **Improve Documentation**: Help us improve SDK installation guides and examples + +Join the [CNCF Slack](https://communityinviter.com/apps/cloud-native/cncf) to get involved. diff --git a/docs/reference/other-technologies/ofrep.mdx b/docs/reference/other-technologies/ofrep.mdx new file mode 100644 index 000000000..5867bcf1a --- /dev/null +++ b/docs/reference/other-technologies/ofrep.mdx @@ -0,0 +1,103 @@ +--- +title: OpenFeature Remote Evaluation Protocol (OFREP) +sidebar_label: OFREP +sidebar_position: 2 +id: ofrep +--- + +The **OpenFeature Remote Evaluation Protocol (OFREP)** is an API specification for feature flagging that enables vendor-agnostic communication between applications and flag management systems. It defines a standard API layer between the provider and the flag management system, allowing any OpenSource or commercial system to implement the protocol and be compatible with community-maintained providers. + +### Key Benefits + +- **Vendor Agnostic**: Connect to any OFREP-compliant flag management system without vendor-specific implementations +- **Standardized**: Built on a common OpenAPI specification for consistent integration +- **Flexible**: Works on both client-side and server-side applications +- **Community Maintained**: Generic OFREP providers maintained by the OpenFeature community +- **Simple Migration**: Switch between flag management systems without changing application code + +## How It Works + +OFREP is **a protocol, not a provider**. It defines how to communicate with feature flag management systems and works on top of OpenFeature SDKs by providing standardized providers. + +```mermaid +graph LR + A[Your Application] --> B[OpenFeature SDK] + B --> C[OFREP Provider] + C --> D[OFREP API] + D --> E[Flag Management System] +``` + +1. Your application uses the OpenFeature SDK +2. The OpenFeature SDK uses an OFREP provider +3. The OFREP provider communicates with your flag management system via the standardized OFREP API +4. Your flag management system implements the OFREP specification + +### Server vs Client + +OFREP supports both paradigms defined by OpenFeature: + +#### Server-Side (Dynamic Context) + +- Evaluation happens by calling the OFREP API with context +- No in-process evaluation inside OFREP providers, API request made on every evaluation. +- Context changes frequently (per request, per user) + +#### Client-Side (Static Context) + +- Evaluation happens locally with pre-fetched flag data +- Provider reconciles state using the OFREP API when context changes +- Context represents a single user or session + +## Using OFREP + +### Available Providers + +The OpenFeature community maintains OFREP providers for multiple languages. View the complete list of [OFREP providers in the ecosystem](https://openfeature.dev/ecosystem/?instant_search%5BrefinementList%5D%5Bvendor%5D%5B0%5D=OFREP). + +### Available Flag Management Systems + +Many flag management systems support OFREP. View the complete list of [OFREP-compliant systems in the ecosystem](https://openfeature.dev/ecosystem/?instant_search%5BrefinementList%5D%5Btype%5D%5B0%5D=OFREP%20API). + +## Implementing OFREP + +### For Provider Developers + +To create an OFREP provider for a new language: + +1. Review the [server provider guideline](https://github.com/open-feature/protocol/blob/docs-update-readme-for-website/guideline/dynamic-context-provider.md) or [client provider guideline](https://github.com/open-feature/protocol/blob/docs-update-readme-for-website/guideline/static-context-provider.md) +2. Implement the provider interface for your SDK +3. Add HTTP client logic to call OFREP endpoints +4. Handle error cases and response codes according to the specification +5. Register your provider in the [OpenFeature ecosystem](https://github.com/open-feature/openfeature.dev/issues) + +### For Flag Management System Developers + +To make your flag management system OFREP-compliant: + +1. Implement the [OFREP OpenAPI specification](https://github.com/open-feature/protocol/blob/docs-update-readme-for-website/service/openapi.yaml) +2. Expose OFREP endpoints at `/ofrep/v1/evaluate/...` +3. Support both bulk evaluation (for client-side) and single flag evaluation (for server-side) +4. Test your implementation with existing OFREP providers +5. Register your system in the [OpenFeature ecosystem](https://github.com/open-feature/openfeature.dev/issues) + +## Resources + +- **OpenAPI Specification**: [OFREP OpenAPI Spec](https://github.com/open-feature/protocol/blob/docs-update-readme-for-website/service/openapi.yaml) +- **Provider Guidelines**: + - [Server Provider Guide](https://github.com/open-feature/protocol/blob/docs-update-readme-for-website/guideline/dynamic-context-provider.md) + - [Client Provider Guide](https://github.com/open-feature/protocol/blob/docs-update-readme-for-website/guideline/static-context-provider.md) +- **Ecosystem**: + - [OFREP Providers](https://openfeature.dev/ecosystem/?instant_search%5BrefinementList%5D%5Bvendor%5D%5B0%5D=OFREP) + - [OFREP-Compliant Systems](https://openfeature.dev/ecosystem/?instant_search%5BrefinementList%5D%5Btype%5D%5B0%5D=OFREP%20API) +- **CNCF Slack**: Join [#openfeature-remote-evaluation-protocol](https://cloud-native.slack.com/archives/C066A48LK35) + +## Get Involved + +OFREP is an open standard maintained by the OpenFeature community. We welcome contributions: + +- **Implement OFREP** in your flag management system +- **Create providers** for additional languages +- **Provide feedback** on the specification +- **Share your experience** using OFREP + +Join the [`#openfeature-remote-evaluation-protocol`](https://cloud-native.slack.com/archives/C066A48LK35) channel on the [CNCF Slack](https://communityinviter.com/apps/cloud-native/cncf) to get involved. diff --git a/docs/reference/sdks/client/kotlin.mdx b/docs/reference/sdks/client/kotlin.mdx index f6c1da77c..59199f690 100644 --- a/docs/reference/sdks/client/kotlin.mdx +++ b/docs/reference/sdks/client/kotlin.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from kotlin-sdk. Edits should be made here: https://github.com/open-feature/kotlin-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/client/swift.mdx b/docs/reference/sdks/client/swift.mdx index e122145e4..d6db3489a 100644 --- a/docs/reference/sdks/client/swift.mdx +++ b/docs/reference/sdks/client/swift.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from swift-sdk. Edits should be made here: https://github.com/open-feature/swift-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/client/web/angular.mdx b/docs/reference/sdks/client/web/angular.mdx index bd7abf27c..e909fa204 100644 --- a/docs/reference/sdks/client/web/angular.mdx +++ b/docs/reference/sdks/client/web/angular.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/client/web/index.mdx b/docs/reference/sdks/client/web/index.mdx index 5a91b9e13..cec8dee88 100644 --- a/docs/reference/sdks/client/web/index.mdx +++ b/docs/reference/sdks/client/web/index.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) -->

@@ -106,6 +106,7 @@ See [here](https://open-feature.github.io/js-sdk/modules/_openfeature_web_sdk.ht | ✅ | [Tracking](#tracking) | Associate user actions with feature flag evaluations, particularly for A/B testing. | | ✅ | [Shutdown](#shutdown) | Gracefully clean up a provider during application shutdown. | | ✅ | [Extending](#extending) | Extend OpenFeature with custom providers and hooks. | +| ✅ | [Multi-Provider](#multi-provider) | Combine multiple providers with configurable evaluation strategies. | Implemented: ✅ | In-progress: ⚠️ | Not implemented yet: ❌ diff --git a/docs/reference/sdks/client/web/react.mdx b/docs/reference/sdks/client/web/react.mdx index 4ca719b60..5d1dc06e6 100644 --- a/docs/reference/sdks/client/web/react.mdx +++ b/docs/reference/sdks/client/web/react.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/dart.mdx b/docs/reference/sdks/server/dart.mdx index 167f99cc4..f36087dfb 100644 --- a/docs/reference/sdks/server/dart.mdx +++ b/docs/reference/sdks/server/dart.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from dart-server-sdk. Edits should be made here: https://github.com/open-feature/dart-server-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 10:51:49 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/dotnet.mdx b/docs/reference/sdks/server/dotnet.mdx index 43888b0ad..01e73d64a 100644 --- a/docs/reference/sdks/server/dotnet.mdx +++ b/docs/reference/sdks/server/dotnet.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from dotnet-sdk. Edits should be made here: https://github.com/open-feature/dotnet-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) --> [![Specification](https://img.shields.io/static/v1?label=specification&message=v0.8.0&color=yellow&style=for-the-badge)](https://github.com/open-feature/spec/releases/tag/v0.8.0) diff --git a/docs/reference/sdks/server/go.mdx b/docs/reference/sdks/server/go.mdx index 01a147712..0d5164270 100644 --- a/docs/reference/sdks/server/go.mdx +++ b/docs/reference/sdks/server/go.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from go-sdk. Edits should be made here: https://github.com/open-feature/go-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/java.mdx b/docs/reference/sdks/server/java.mdx index ca89525d7..895fe9f33 100644 --- a/docs/reference/sdks/server/java.mdx +++ b/docs/reference/sdks/server/java.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from java-sdk. Edits should be made here: https://github.com/open-feature/java-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 10:51:47 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/javascript/index.mdx b/docs/reference/sdks/server/javascript/index.mdx index 9a87e1647..7bd7b9a69 100644 --- a/docs/reference/sdks/server/javascript/index.mdx +++ b/docs/reference/sdks/server/javascript/index.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) -->

@@ -107,6 +107,7 @@ See [here](https://open-feature.github.io/js-sdk/modules/_openfeature_server_sdk | ✅ | [Tracking](#tracking) | Associate user actions with feature flag evaluations, particularly for A/B testing. | | ✅ | [Shutdown](#shutdown) | Gracefully clean up a provider during application shutdown. | | ✅ | [Extending](#extending) | Extend OpenFeature with custom providers and hooks. | +| ✅ | [Multi-Provider](#multi-provider) | Combine multiple providers with configurable evaluation strategies. | Implemented: ✅ | In-progress: ⚠️ | Not implemented yet: ❌ diff --git a/docs/reference/sdks/server/javascript/nestjs.mdx b/docs/reference/sdks/server/javascript/nestjs.mdx index 0d7bf6c8f..cb892a9ba 100644 --- a/docs/reference/sdks/server/javascript/nestjs.mdx +++ b/docs/reference/sdks/server/javascript/nestjs.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/php.mdx b/docs/reference/sdks/server/php.mdx index 168fb5c48..6582fb30e 100644 --- a/docs/reference/sdks/server/php.mdx +++ b/docs/reference/sdks/server/php.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from php-sdk. Edits should be made here: https://github.com/open-feature/php-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/python.mdx b/docs/reference/sdks/server/python.mdx index 7bfa2fbcd..b234dd7de 100644 --- a/docs/reference/sdks/server/python.mdx +++ b/docs/reference/sdks/server/python.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from python-sdk. Edits should be made here: https://github.com/open-feature/python-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/ruby.mdx b/docs/reference/sdks/server/ruby.mdx index 3313b03ae..e6a509410 100644 --- a/docs/reference/sdks/server/ruby.mdx +++ b/docs/reference/sdks/server/ruby.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from ruby-sdk. Edits should be made here: https://github.com/open-feature/ruby-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 10:51:48 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/rust.mdx b/docs/reference/sdks/server/rust.mdx index e079e626d..a1ca809e3 100644 --- a/docs/reference/sdks/server/rust.mdx +++ b/docs/reference/sdks/server/rust.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from rust-sdk. Edits should be made here: https://github.com/open-feature/rust-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 10:51:49 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 859fbf458..5bb7b40f7 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -8,7 +8,7 @@ import { rehypeGithubAlerts } from 'rehype-github-alerts'; import remarkGfm from 'remark-gfm'; import tailwindcss from 'tailwindcss'; -import { processSdkReadmes } from './scripts/process-sdk-readmes'; +import { processSdkReadmes, processOtherTechnologies } from './scripts/process-sdk-readmes'; const presetClassicOptions: PresetClassicOptions = { docs: { @@ -324,6 +324,17 @@ const config: Config = { modifyContent: processSdkReadmes.modifyContent, }, ], + [ + 'docusaurus-plugin-remote-content', + { + name: 'other-technologies-content', + noRuntimeDownloads: true, + sourceBaseUrl: 'https://raw.githubusercontent.com/open-feature/', + outDir: 'docs/reference/other-technologies', + documents: processOtherTechnologies.paths, + modifyContent: processOtherTechnologies.modifyContent, + }, + ], [ '@docusaurus/plugin-content-docs', { diff --git a/package.json b/package.json index e13c51e5c..7e961b4f2 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "write-translations": "docusaurus write-translations", "write-heading-ids": "docusaurus write-heading-ids", "typecheck": "tsc", - "update:sdk-docs": "docusaurus download-remote-sdk-content" + "update:sdk-docs": "docusaurus download-remote-sdk-content && docusaurus download-remote-other-technologies-content" }, "engines": { "node": ">20.0.0" @@ -137,4 +137,4 @@ } }, "packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610" -} +} \ No newline at end of file diff --git a/scripts/process-sdk-readmes.ts b/scripts/process-sdk-readmes.ts index eca63c459..f5e4ffcfc 100644 --- a/scripts/process-sdk-readmes.ts +++ b/scripts/process-sdk-readmes.ts @@ -97,6 +97,16 @@ Last updated at ${new Date()} ${content}`; }; +/** + * Fix internal doc links from /technologies/ to /sdks/ + */ +const fixInternalDocLinks = (content: string): string => { + return content.replace( + /\/docs\/reference\/technologies\//g, + '/docs/reference/sdks/' + ); +}; + const replaceLinks = (repo: { url: string; branch: string; folder?: string }) => { return (content: string) => { const replace = (processRelativeUrl: (url: string) => string) => (url: string) => { @@ -154,6 +164,7 @@ const markdownProcessor = (sdks: SDK[]) => { removeExtraNewlinesAtTop, addHeader({ name: sdk.name, repo: sdk.repo, url: repoUrl, fileName, slug: sdk.slug, id: sdk.id }), replaceLinks({ url: repoUrl, branch, folder: sdk.folder }), + fixInternalDocLinks, ].reduce((currentContent, processor) => processor(currentContent), initialContent); if (sdk.includeInSupportMatrix ?? true) { @@ -193,3 +204,70 @@ export const processSdkReadmes = { }), modifyContent: markdownProcessor(SDKS), }; + +/** + * Other Technologies content configuration + */ +// TODO: update branches to main once PRs are merged +const OTHER_TECHNOLOGIES = [ + { repo: 'cli', id: 'cli', title: 'OpenFeature CLI', label: 'CLI', position: 1, branch: 'docs-update-readme-for-website' }, + { repo: 'protocol', id: 'ofrep', title: 'OpenFeature Remote Evaluation Protocol (OFREP)', label: 'OFREP', position: 2, branch: 'docs-update-readme-for-website' }, + { repo: 'mcp', id: 'mcp', title: 'OpenFeature MCP Server', label: 'MCP', position: 3, branch: 'docs-improve-readme-and-contributing' }, +]; + +/** + * Transforms Other Technologies READMEs for inclusion in the OpenFeature docs. + */ +export const processOtherTechnologies = { + paths: OTHER_TECHNOLOGIES.map((tech) => `${tech.repo}/${tech.branch}/README.md`), + modifyContent: (file: string, initialContent: string): { filename: string; content: string } => { + const tech = OTHER_TECHNOLOGIES.find((t) => file.startsWith(`${t.repo}/`)); + + if (!tech) { + throw new Error(`Unable to modify content for ${file}`); + } + + const frontmatter = `--- +title: ${tech.title} +sidebar_label: ${tech.label} +sidebar_position: ${tech.position} +id: ${tech.id} +--- + +`; + + // Convert relative links to absolute GitHub URLs + const fixRelativeLinks = (content: string): string => { + const repoUrl = `https://github.com/${GITHUB_ORG}/${tech.repo}`; + const branch = tech.branch || 'main'; + + // Convert relative markdown links to GitHub URLs + return content.replace( + /\[([^\]]+)\]\(\.\/([^)]+)\)/g, + (match, text, path) => { + // Skip if it's already an absolute URL + if (path.startsWith('http')) return match; + return `[${text}](${repoUrl}/blob/${branch}/${path})`; + } + ); + }; + + const processors = [ + carriageReturnsToNewLines, + removeEmojisFromHeaders, + removeSections, + removeLine, + removeComments, + removeExtraNewlinesBetweenSections, + removeExtraNewlinesAtTop, + fixRelativeLinks, + ]; + + const content = processors.reduce((currentContent, processor) => processor(currentContent), initialContent); + + return { + filename: `${tech.id}.mdx`, + content: frontmatter + content, + }; + }, +}; diff --git a/src/datasets/sdks/sdk-compatibility.json b/src/datasets/sdks/sdk-compatibility.json index ae5cd878a..41a10d1f9 100644 --- a/src/datasets/sdks/sdk-compatibility.json +++ b/src/datasets/sdks/sdk-compatibility.json @@ -114,8 +114,8 @@ "path": "/docs/reference/sdks/server/javascript#extending" }, "Multi-Provider": { - "status": "❓", - "path": "/docs/reference/sdks/server/javascript" + "status": "✅", + "path": "/docs/reference/sdks/server/javascript#multi-provider" } } }, @@ -410,8 +410,8 @@ "path": "/docs/reference/sdks/client/web#extending" }, "Multi-Provider": { - "status": "❓", - "path": "/docs/reference/sdks/client/web" + "status": "✅", + "path": "/docs/reference/sdks/client/web#multi-provider" } } }, From 9bae239ec3e47750878f3ecd51b5be9005c1e30c Mon Sep 17 00:00:00 2001 From: Jonathan Norris Date: Fri, 24 Oct 2025 15:20:41 -0400 Subject: [PATCH 10/14] chore: update specification submodule to include SDK link fix Signed-off-by: Jonathan Norris --- external-content/specification | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external-content/specification b/external-content/specification index 25dac91f8..a5d40a8b2 160000 --- a/external-content/specification +++ b/external-content/specification @@ -1 +1 @@ -Subproject commit 25dac91f8add07cf1a47c43f8ca4a67dae2f41d5 +Subproject commit a5d40a8b21aedb1640bd52ba5063c2ec9028eac9 From bb11e56fd4992bbc7dbbccdd6135eeeb4bf58f62 Mon Sep 17 00:00:00 2001 From: Jonathan Norris Date: Fri, 24 Oct 2025 15:29:24 -0400 Subject: [PATCH 11/14] chore: ignore markdownlint for fetched other-technologies docs Signed-off-by: Jonathan Norris --- .markdownlint-cli2.yaml | 2 ++ docs/reference/sdks/client/kotlin.mdx | 2 +- docs/reference/sdks/client/swift.mdx | 2 +- docs/reference/sdks/client/web/angular.mdx | 2 +- docs/reference/sdks/client/web/index.mdx | 2 +- docs/reference/sdks/client/web/react.mdx | 2 +- docs/reference/sdks/server/dart.mdx | 2 +- docs/reference/sdks/server/dotnet.mdx | 2 +- docs/reference/sdks/server/go.mdx | 2 +- docs/reference/sdks/server/java.mdx | 2 +- docs/reference/sdks/server/javascript/index.mdx | 2 +- docs/reference/sdks/server/javascript/nestjs.mdx | 2 +- docs/reference/sdks/server/php.mdx | 2 +- docs/reference/sdks/server/python.mdx | 2 +- docs/reference/sdks/server/ruby.mdx | 2 +- docs/reference/sdks/server/rust.mdx | 2 +- 16 files changed, 17 insertions(+), 15 deletions(-) diff --git a/.markdownlint-cli2.yaml b/.markdownlint-cli2.yaml index 21473edcf..0d1b1e2ce 100644 --- a/.markdownlint-cli2.yaml +++ b/.markdownlint-cli2.yaml @@ -33,5 +33,7 @@ ignores: - docs/specification # Fetched from each SDK's README.md - docs/reference/sdks/@(client|server)/**/*.mdx + # Fetched from other technology repos + - docs/reference/other-technologies/*.mdx fix: true diff --git a/docs/reference/sdks/client/kotlin.mdx b/docs/reference/sdks/client/kotlin.mdx index 59199f690..ff15b7b50 100644 --- a/docs/reference/sdks/client/kotlin.mdx +++ b/docs/reference/sdks/client/kotlin.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from kotlin-sdk. Edits should be made here: https://github.com/open-feature/kotlin-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/client/swift.mdx b/docs/reference/sdks/client/swift.mdx index d6db3489a..f4c4ae1e6 100644 --- a/docs/reference/sdks/client/swift.mdx +++ b/docs/reference/sdks/client/swift.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from swift-sdk. Edits should be made here: https://github.com/open-feature/swift-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/client/web/angular.mdx b/docs/reference/sdks/client/web/angular.mdx index e909fa204..777158d5e 100644 --- a/docs/reference/sdks/client/web/angular.mdx +++ b/docs/reference/sdks/client/web/angular.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/client/web/index.mdx b/docs/reference/sdks/client/web/index.mdx index cec8dee88..5f0880b9e 100644 --- a/docs/reference/sdks/client/web/index.mdx +++ b/docs/reference/sdks/client/web/index.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/client/web/react.mdx b/docs/reference/sdks/client/web/react.mdx index 5d1dc06e6..3ae1f0399 100644 --- a/docs/reference/sdks/client/web/react.mdx +++ b/docs/reference/sdks/client/web/react.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/dart.mdx b/docs/reference/sdks/server/dart.mdx index f36087dfb..fb9d232cb 100644 --- a/docs/reference/sdks/server/dart.mdx +++ b/docs/reference/sdks/server/dart.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from dart-server-sdk. Edits should be made here: https://github.com/open-feature/dart-server-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/dotnet.mdx b/docs/reference/sdks/server/dotnet.mdx index 01e73d64a..a7c89323c 100644 --- a/docs/reference/sdks/server/dotnet.mdx +++ b/docs/reference/sdks/server/dotnet.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from dotnet-sdk. Edits should be made here: https://github.com/open-feature/dotnet-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:28:43 GMT-0400 (Eastern Daylight Time) --> [![Specification](https://img.shields.io/static/v1?label=specification&message=v0.8.0&color=yellow&style=for-the-badge)](https://github.com/open-feature/spec/releases/tag/v0.8.0) diff --git a/docs/reference/sdks/server/go.mdx b/docs/reference/sdks/server/go.mdx index 0d5164270..6a8ce73ed 100644 --- a/docs/reference/sdks/server/go.mdx +++ b/docs/reference/sdks/server/go.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from go-sdk. Edits should be made here: https://github.com/open-feature/go-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:28:43 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/java.mdx b/docs/reference/sdks/server/java.mdx index 895fe9f33..4fa879f59 100644 --- a/docs/reference/sdks/server/java.mdx +++ b/docs/reference/sdks/server/java.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from java-sdk. Edits should be made here: https://github.com/open-feature/java-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:28:42 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/javascript/index.mdx b/docs/reference/sdks/server/javascript/index.mdx index 7bd7b9a69..d4bf04c4a 100644 --- a/docs/reference/sdks/server/javascript/index.mdx +++ b/docs/reference/sdks/server/javascript/index.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:28:42 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/javascript/nestjs.mdx b/docs/reference/sdks/server/javascript/nestjs.mdx index cb892a9ba..91d6a392b 100644 --- a/docs/reference/sdks/server/javascript/nestjs.mdx +++ b/docs/reference/sdks/server/javascript/nestjs.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:28:43 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/php.mdx b/docs/reference/sdks/server/php.mdx index 6582fb30e..ab3c4f10f 100644 --- a/docs/reference/sdks/server/php.mdx +++ b/docs/reference/sdks/server/php.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from php-sdk. Edits should be made here: https://github.com/open-feature/php-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/python.mdx b/docs/reference/sdks/server/python.mdx index b234dd7de..0e5dd924f 100644 --- a/docs/reference/sdks/server/python.mdx +++ b/docs/reference/sdks/server/python.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from python-sdk. Edits should be made here: https://github.com/open-feature/python-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/ruby.mdx b/docs/reference/sdks/server/ruby.mdx index e6a509410..4c6cb5601 100644 --- a/docs/reference/sdks/server/ruby.mdx +++ b/docs/reference/sdks/server/ruby.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from ruby-sdk. Edits should be made here: https://github.com/open-feature/ruby-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/rust.mdx b/docs/reference/sdks/server/rust.mdx index a1ca809e3..9a8ddb80d 100644 --- a/docs/reference/sdks/server/rust.mdx +++ b/docs/reference/sdks/server/rust.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from rust-sdk. Edits should be made here: https://github.com/open-feature/rust-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:09:14 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) -->

From 8977fded26d7875e64e65e487104162406c3795d Mon Sep 17 00:00:00 2001 From: Jonathan Norris Date: Fri, 24 Oct 2025 16:40:52 -0400 Subject: [PATCH 12/14] docs: update docs with cleaned up Other Technologies Signed-off-by: Jonathan Norris --- docs/reference/other-technologies/cli.mdx | 14 +------------ docs/reference/other-technologies/mcp.mdx | 17 --------------- docs/reference/other-technologies/ofrep.mdx | 21 ------------------- docs/reference/sdks/client/kotlin.mdx | 2 +- docs/reference/sdks/client/swift.mdx | 2 +- docs/reference/sdks/client/web/angular.mdx | 2 +- docs/reference/sdks/client/web/index.mdx | 2 +- docs/reference/sdks/client/web/react.mdx | 2 +- docs/reference/sdks/server/dart.mdx | 2 +- docs/reference/sdks/server/dotnet.mdx | 2 +- docs/reference/sdks/server/go.mdx | 2 +- docs/reference/sdks/server/java.mdx | 2 +- .../sdks/server/javascript/index.mdx | 2 +- .../sdks/server/javascript/nestjs.mdx | 2 +- docs/reference/sdks/server/php.mdx | 2 +- docs/reference/sdks/server/python.mdx | 2 +- docs/reference/sdks/server/ruby.mdx | 2 +- docs/reference/sdks/server/rust.mdx | 2 +- 18 files changed, 16 insertions(+), 66 deletions(-) diff --git a/docs/reference/other-technologies/cli.mdx b/docs/reference/other-technologies/cli.mdx index f8030bd8a..bd4627933 100644 --- a/docs/reference/other-technologies/cli.mdx +++ b/docs/reference/other-technologies/cli.mdx @@ -78,7 +78,7 @@ EOL > [!NOTE] > This is for demonstration purposes only. > In a real-world scenario, you would typically want to fetch this file from a remote flag management service. -> See [here](https://github.com/open-feature/cli/issues/3), more more details. +> See [here](https://github.com/open-feature/cli/issues/3), more details. 2. Generate code for your preferred language: @@ -226,15 +226,3 @@ flowchart LR config --> args ``` -## Get Involved - -- **GitHub Repository**: [open-feature/cli](https://github.com/open-feature/cli) -- **CNCF Slack**: Join the conversation in the [#openfeature](https://cloud-native.slack.com/archives/C0344AANLA1) and [#openfeature-cli](https://cloud-native.slack.com/archives/C07DY4TUDK6) channel -- **Regular Meetings**: Attend our [community calls](https://zoom-lfx.platform.linuxfoundation.org/meetings/openfeature) -- **GitHub Issues**: Report bugs or request features in our [issue tracker](https://github.com/open-feature/cli/issues) -- **Social Media**: - - Twitter: [@openfeature](https://twitter.com/openfeature) - - LinkedIn: [OpenFeature](https://www.linkedin.com/company/openfeature/) - -For more information, visit our [community page](https://openfeature.dev/community/). - diff --git a/docs/reference/other-technologies/mcp.mdx b/docs/reference/other-technologies/mcp.mdx index 00ff0f608..7a42537c4 100644 --- a/docs/reference/other-technologies/mcp.mdx +++ b/docs/reference/other-technologies/mcp.mdx @@ -230,20 +230,3 @@ When interacting with your AI assistant: The AI will use the MCP to evaluate the flag using OFREP and provide you with the result, along with additional metadata like variant and reason. -## Resources - -- **NPM Package**: [@openfeature/mcp](https://www.npmjs.com/package/@openfeature/mcp) -- **MCP Registry**: [dev.openfeature/mcp](https://registry.modelcontextprotocol.io) -- **OpenFeature Documentation**: [openfeature.dev](https://openfeature.dev) -- **CNCF Slack**: Join [#openfeature](https://cloud-native.slack.com/archives/C0344AANLA1) - -## Get Involved - -The OpenFeature MCP Server is an open-source project maintained by the OpenFeature community. We welcome contributions: - -- **Report Issues**: [GitHub Issues](https://github.com/open-feature/mcp/issues) -- **Contribute Code**: [Contributing Guide](https://github.com/open-feature/mcp/blob/main/CONTRIBUTING.md) -- **Suggest Features**: Share ideas in the CNCF Slack [#openfeature](https://cloud-native.slack.com/archives/C0344AANLA1) channel -- **Improve Documentation**: Help us improve SDK installation guides and examples - -Join the [CNCF Slack](https://communityinviter.com/apps/cloud-native/cncf) to get involved. diff --git a/docs/reference/other-technologies/ofrep.mdx b/docs/reference/other-technologies/ofrep.mdx index 5867bcf1a..d6a2bb45c 100644 --- a/docs/reference/other-technologies/ofrep.mdx +++ b/docs/reference/other-technologies/ofrep.mdx @@ -80,24 +80,3 @@ To make your flag management system OFREP-compliant: 4. Test your implementation with existing OFREP providers 5. Register your system in the [OpenFeature ecosystem](https://github.com/open-feature/openfeature.dev/issues) -## Resources - -- **OpenAPI Specification**: [OFREP OpenAPI Spec](https://github.com/open-feature/protocol/blob/docs-update-readme-for-website/service/openapi.yaml) -- **Provider Guidelines**: - - [Server Provider Guide](https://github.com/open-feature/protocol/blob/docs-update-readme-for-website/guideline/dynamic-context-provider.md) - - [Client Provider Guide](https://github.com/open-feature/protocol/blob/docs-update-readme-for-website/guideline/static-context-provider.md) -- **Ecosystem**: - - [OFREP Providers](https://openfeature.dev/ecosystem/?instant_search%5BrefinementList%5D%5Bvendor%5D%5B0%5D=OFREP) - - [OFREP-Compliant Systems](https://openfeature.dev/ecosystem/?instant_search%5BrefinementList%5D%5Btype%5D%5B0%5D=OFREP%20API) -- **CNCF Slack**: Join [#openfeature-remote-evaluation-protocol](https://cloud-native.slack.com/archives/C066A48LK35) - -## Get Involved - -OFREP is an open standard maintained by the OpenFeature community. We welcome contributions: - -- **Implement OFREP** in your flag management system -- **Create providers** for additional languages -- **Provide feedback** on the specification -- **Share your experience** using OFREP - -Join the [`#openfeature-remote-evaluation-protocol`](https://cloud-native.slack.com/archives/C066A48LK35) channel on the [CNCF Slack](https://communityinviter.com/apps/cloud-native/cncf) to get involved. diff --git a/docs/reference/sdks/client/kotlin.mdx b/docs/reference/sdks/client/kotlin.mdx index ff15b7b50..7345375ef 100644 --- a/docs/reference/sdks/client/kotlin.mdx +++ b/docs/reference/sdks/client/kotlin.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from kotlin-sdk. Edits should be made here: https://github.com/open-feature/kotlin-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 16:39:59 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/client/swift.mdx b/docs/reference/sdks/client/swift.mdx index f4c4ae1e6..d41303cc0 100644 --- a/docs/reference/sdks/client/swift.mdx +++ b/docs/reference/sdks/client/swift.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from swift-sdk. Edits should be made here: https://github.com/open-feature/swift-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 16:39:59 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/client/web/angular.mdx b/docs/reference/sdks/client/web/angular.mdx index 777158d5e..565feffa4 100644 --- a/docs/reference/sdks/client/web/angular.mdx +++ b/docs/reference/sdks/client/web/angular.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 16:39:59 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/client/web/index.mdx b/docs/reference/sdks/client/web/index.mdx index 5f0880b9e..9f7281926 100644 --- a/docs/reference/sdks/client/web/index.mdx +++ b/docs/reference/sdks/client/web/index.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 16:39:59 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/client/web/react.mdx b/docs/reference/sdks/client/web/react.mdx index 3ae1f0399..647abcd1c 100644 --- a/docs/reference/sdks/client/web/react.mdx +++ b/docs/reference/sdks/client/web/react.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 16:39:59 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/dart.mdx b/docs/reference/sdks/server/dart.mdx index fb9d232cb..ec019f72c 100644 --- a/docs/reference/sdks/server/dart.mdx +++ b/docs/reference/sdks/server/dart.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from dart-server-sdk. Edits should be made here: https://github.com/open-feature/dart-server-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 16:39:59 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/dotnet.mdx b/docs/reference/sdks/server/dotnet.mdx index a7c89323c..61b72ceed 100644 --- a/docs/reference/sdks/server/dotnet.mdx +++ b/docs/reference/sdks/server/dotnet.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from dotnet-sdk. Edits should be made here: https://github.com/open-feature/dotnet-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:28:43 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 16:39:58 GMT-0400 (Eastern Daylight Time) --> [![Specification](https://img.shields.io/static/v1?label=specification&message=v0.8.0&color=yellow&style=for-the-badge)](https://github.com/open-feature/spec/releases/tag/v0.8.0) diff --git a/docs/reference/sdks/server/go.mdx b/docs/reference/sdks/server/go.mdx index 6a8ce73ed..a1e063014 100644 --- a/docs/reference/sdks/server/go.mdx +++ b/docs/reference/sdks/server/go.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from go-sdk. Edits should be made here: https://github.com/open-feature/go-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:28:43 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 16:39:58 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/java.mdx b/docs/reference/sdks/server/java.mdx index 4fa879f59..5c4d85ca9 100644 --- a/docs/reference/sdks/server/java.mdx +++ b/docs/reference/sdks/server/java.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from java-sdk. Edits should be made here: https://github.com/open-feature/java-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:28:42 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 16:39:58 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/javascript/index.mdx b/docs/reference/sdks/server/javascript/index.mdx index d4bf04c4a..020dc61b1 100644 --- a/docs/reference/sdks/server/javascript/index.mdx +++ b/docs/reference/sdks/server/javascript/index.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:28:42 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 16:39:58 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/javascript/nestjs.mdx b/docs/reference/sdks/server/javascript/nestjs.mdx index 91d6a392b..20cf97d93 100644 --- a/docs/reference/sdks/server/javascript/nestjs.mdx +++ b/docs/reference/sdks/server/javascript/nestjs.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:28:43 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 16:39:58 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/php.mdx b/docs/reference/sdks/server/php.mdx index ab3c4f10f..a47f74a1e 100644 --- a/docs/reference/sdks/server/php.mdx +++ b/docs/reference/sdks/server/php.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from php-sdk. Edits should be made here: https://github.com/open-feature/php-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 16:39:59 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/python.mdx b/docs/reference/sdks/server/python.mdx index 0e5dd924f..b63f91c42 100644 --- a/docs/reference/sdks/server/python.mdx +++ b/docs/reference/sdks/server/python.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from python-sdk. Edits should be made here: https://github.com/open-feature/python-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 16:39:58 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/ruby.mdx b/docs/reference/sdks/server/ruby.mdx index 4c6cb5601..be4b64e7c 100644 --- a/docs/reference/sdks/server/ruby.mdx +++ b/docs/reference/sdks/server/ruby.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from ruby-sdk. Edits should be made here: https://github.com/open-feature/ruby-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 16:39:59 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/rust.mdx b/docs/reference/sdks/server/rust.mdx index 9a8ddb80d..6e72cbf0e 100644 --- a/docs/reference/sdks/server/rust.mdx +++ b/docs/reference/sdks/server/rust.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from rust-sdk. Edits should be made here: https://github.com/open-feature/rust-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 15:28:44 GMT-0400 (Eastern Daylight Time) +Last updated at Fri Oct 24 2025 16:39:59 GMT-0400 (Eastern Daylight Time) -->

From ffcf7b0d46c99294d1f7224acf95686a9a4be62e Mon Sep 17 00:00:00 2001 From: Jonathan Norris Date: Fri, 24 Oct 2025 16:43:26 -0400 Subject: [PATCH 13/14] chore: cleanup .eslintignore Signed-off-by: Jonathan Norris --- .eslintignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.eslintignore b/.eslintignore index 3e11afc45..20cf0700e 100644 --- a/.eslintignore +++ b/.eslintignore @@ -3,5 +3,4 @@ dist *.js # Auto-generated disclaimer causes an eslint parsing error -docs/reference/technologies/**/*.mdx docs/reference/sdks/**/*.mdx \ No newline at end of file From d143fae36fa93fba970f62caaad2ebf141c7c36b Mon Sep 17 00:00:00 2001 From: Jonathan Norris Date: Mon, 27 Oct 2025 14:02:17 -0400 Subject: [PATCH 14/14] chore: update SDK docs Signed-off-by: Jonathan Norris --- docs/reference/other-technologies/cli.mdx | 8 +++--- docs/reference/other-technologies/ofrep.mdx | 25 ++++++++----------- docs/reference/sdks/client/kotlin.mdx | 2 +- docs/reference/sdks/client/swift.mdx | 2 +- docs/reference/sdks/client/web/angular.mdx | 2 +- docs/reference/sdks/client/web/index.mdx | 2 +- docs/reference/sdks/client/web/react.mdx | 2 +- docs/reference/sdks/server/dart.mdx | 2 +- docs/reference/sdks/server/dotnet.mdx | 2 +- docs/reference/sdks/server/go.mdx | 2 +- docs/reference/sdks/server/java.mdx | 2 +- .../sdks/server/javascript/index.mdx | 2 +- .../sdks/server/javascript/nestjs.mdx | 2 +- docs/reference/sdks/server/php.mdx | 2 +- docs/reference/sdks/server/python.mdx | 2 +- docs/reference/sdks/server/ruby.mdx | 2 +- docs/reference/sdks/server/rust.mdx | 2 +- scripts/process-sdk-readmes.ts | 4 +-- 18 files changed, 31 insertions(+), 36 deletions(-) diff --git a/docs/reference/other-technologies/cli.mdx b/docs/reference/other-technologies/cli.mdx index bd4627933..87a461409 100644 --- a/docs/reference/other-technologies/cli.mdx +++ b/docs/reference/other-technologies/cli.mdx @@ -86,7 +86,7 @@ EOL openfeature generate react ``` -See [here](https://github.com/open-feature/cli/blob/docs-update-readme-for-website/docs/commands/openfeature_generate.md) for all available options. +See [here](https://github.com/open-feature/cli/blob/main/docs/commands/openfeature_generate.md) for all available options. 3. View the generated code: @@ -115,7 +115,7 @@ openfeature init This command creates a `flags.json` file in your current directory with the proper schema reference. You can customize the manifest path using configuration options. -See [here](https://github.com/open-feature/cli/blob/docs-update-readme-for-website/docs/commands/openfeature_init.md) for all available options. +See [here](https://github.com/open-feature/cli/blob/main/docs/commands/openfeature_init.md) for all available options. ### `generate` @@ -146,7 +146,7 @@ openfeature generate typescript --output ./src/flags | `nestjs` | NestJS flag accessors | | `nodejs` | Node.js flag accessors | -See [here](https://github.com/open-feature/cli/blob/docs-update-readme-for-website/docs/commands/openfeature_generate.md) for all available options. +See [here](https://github.com/open-feature/cli/blob/main/docs/commands/openfeature_generate.md) for all available options. ### `version` @@ -156,7 +156,7 @@ Print the version number of the OpenFeature CLI. openfeature version ``` -See [here](https://github.com/open-feature/cli/blob/docs-update-readme-for-website/docs/commands/openfeature_version.md) for all available options. +See [here](https://github.com/open-feature/cli/blob/main/docs/commands/openfeature_version.md) for all available options. ## Flag Manifest diff --git a/docs/reference/other-technologies/ofrep.mdx b/docs/reference/other-technologies/ofrep.mdx index d6a2bb45c..8805fb86e 100644 --- a/docs/reference/other-technologies/ofrep.mdx +++ b/docs/reference/other-technologies/ofrep.mdx @@ -12,8 +12,7 @@ The **OpenFeature Remote Evaluation Protocol (OFREP)** is an API specification f - **Vendor Agnostic**: Connect to any OFREP-compliant flag management system without vendor-specific implementations - **Standardized**: Built on a common OpenAPI specification for consistent integration - **Flexible**: Works on both client-side and server-side applications -- **Community Maintained**: Generic OFREP providers maintained by the OpenFeature community -- **Simple Migration**: Switch between flag management systems without changing application code +- **Community Maintained**: Generic OFREP providers maintained by the OpenFeature project ## How It Works @@ -39,13 +38,13 @@ OFREP supports both paradigms defined by OpenFeature: #### Server-Side (Dynamic Context) - Evaluation happens by calling the OFREP API with context -- No in-process evaluation inside OFREP providers, API request made on every evaluation. -- Context changes frequently (per request, per user) +- API request with evaluation context is made on every evaluation +- Context per evaluation #### Client-Side (Static Context) -- Evaluation happens locally with pre-fetched flag data -- Provider reconciles state using the OFREP API when context changes +- All flags are evaluated in one OFREP API call using a common static context +- Then local flag evaluation happens against the cached static context - Context represents a single user or session ## Using OFREP @@ -56,7 +55,7 @@ The OpenFeature community maintains OFREP providers for multiple languages. View ### Available Flag Management Systems -Many flag management systems support OFREP. View the complete list of [OFREP-compliant systems in the ecosystem](https://openfeature.dev/ecosystem/?instant_search%5BrefinementList%5D%5Btype%5D%5B0%5D=OFREP%20API). +Several flag management systems support OFREP. View the complete list of [OFREP-compliant systems in the ecosystem](https://openfeature.dev/ecosystem/?instant_search%5BrefinementList%5D%5Btype%5D%5B0%5D=OFREP%20API). ## Implementing OFREP @@ -65,18 +64,14 @@ Many flag management systems support OFREP. View the complete list of [OFREP-com To create an OFREP provider for a new language: 1. Review the [server provider guideline](https://github.com/open-feature/protocol/blob/docs-update-readme-for-website/guideline/dynamic-context-provider.md) or [client provider guideline](https://github.com/open-feature/protocol/blob/docs-update-readme-for-website/guideline/static-context-provider.md) -2. Implement the provider interface for your SDK -3. Add HTTP client logic to call OFREP endpoints -4. Handle error cases and response codes according to the specification -5. Register your provider in the [OpenFeature ecosystem](https://github.com/open-feature/openfeature.dev/issues) +2. Implement the provider for your SDK according to the guidelines +3. Register your provider in the [OpenFeature ecosystem](https://github.com/open-feature/openfeature.dev/issues) ### For Flag Management System Developers To make your flag management system OFREP-compliant: 1. Implement the [OFREP OpenAPI specification](https://github.com/open-feature/protocol/blob/docs-update-readme-for-website/service/openapi.yaml) -2. Expose OFREP endpoints at `/ofrep/v1/evaluate/...` -3. Support both bulk evaluation (for client-side) and single flag evaluation (for server-side) -4. Test your implementation with existing OFREP providers -5. Register your system in the [OpenFeature ecosystem](https://github.com/open-feature/openfeature.dev/issues) +2. Test your implementation with existing OFREP providers +3. Register your system in the [OpenFeature ecosystem](https://github.com/open-feature/openfeature.dev/issues) diff --git a/docs/reference/sdks/client/kotlin.mdx b/docs/reference/sdks/client/kotlin.mdx index 7345375ef..cc70833cf 100644 --- a/docs/reference/sdks/client/kotlin.mdx +++ b/docs/reference/sdks/client/kotlin.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from kotlin-sdk. Edits should be made here: https://github.com/open-feature/kotlin-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 16:39:59 GMT-0400 (Eastern Daylight Time) +Last updated at Mon Oct 27 2025 14:02:00 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/client/swift.mdx b/docs/reference/sdks/client/swift.mdx index d41303cc0..7466ba4e7 100644 --- a/docs/reference/sdks/client/swift.mdx +++ b/docs/reference/sdks/client/swift.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from swift-sdk. Edits should be made here: https://github.com/open-feature/swift-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 16:39:59 GMT-0400 (Eastern Daylight Time) +Last updated at Mon Oct 27 2025 14:02:00 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/client/web/angular.mdx b/docs/reference/sdks/client/web/angular.mdx index 565feffa4..134cfc610 100644 --- a/docs/reference/sdks/client/web/angular.mdx +++ b/docs/reference/sdks/client/web/angular.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 16:39:59 GMT-0400 (Eastern Daylight Time) +Last updated at Mon Oct 27 2025 14:02:00 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/client/web/index.mdx b/docs/reference/sdks/client/web/index.mdx index 9f7281926..e94f15b32 100644 --- a/docs/reference/sdks/client/web/index.mdx +++ b/docs/reference/sdks/client/web/index.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 16:39:59 GMT-0400 (Eastern Daylight Time) +Last updated at Mon Oct 27 2025 14:02:00 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/client/web/react.mdx b/docs/reference/sdks/client/web/react.mdx index 647abcd1c..00d50f685 100644 --- a/docs/reference/sdks/client/web/react.mdx +++ b/docs/reference/sdks/client/web/react.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 16:39:59 GMT-0400 (Eastern Daylight Time) +Last updated at Mon Oct 27 2025 14:02:00 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/dart.mdx b/docs/reference/sdks/server/dart.mdx index ec019f72c..7a257af6a 100644 --- a/docs/reference/sdks/server/dart.mdx +++ b/docs/reference/sdks/server/dart.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from dart-server-sdk. Edits should be made here: https://github.com/open-feature/dart-server-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 16:39:59 GMT-0400 (Eastern Daylight Time) +Last updated at Mon Oct 27 2025 14:02:00 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/dotnet.mdx b/docs/reference/sdks/server/dotnet.mdx index 61b72ceed..df54d9969 100644 --- a/docs/reference/sdks/server/dotnet.mdx +++ b/docs/reference/sdks/server/dotnet.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from dotnet-sdk. Edits should be made here: https://github.com/open-feature/dotnet-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 16:39:58 GMT-0400 (Eastern Daylight Time) +Last updated at Mon Oct 27 2025 14:01:59 GMT-0400 (Eastern Daylight Time) --> [![Specification](https://img.shields.io/static/v1?label=specification&message=v0.8.0&color=yellow&style=for-the-badge)](https://github.com/open-feature/spec/releases/tag/v0.8.0) diff --git a/docs/reference/sdks/server/go.mdx b/docs/reference/sdks/server/go.mdx index a1e063014..bc969f1fe 100644 --- a/docs/reference/sdks/server/go.mdx +++ b/docs/reference/sdks/server/go.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from go-sdk. Edits should be made here: https://github.com/open-feature/go-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 16:39:58 GMT-0400 (Eastern Daylight Time) +Last updated at Mon Oct 27 2025 14:01:59 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/java.mdx b/docs/reference/sdks/server/java.mdx index 5c4d85ca9..76ec7def3 100644 --- a/docs/reference/sdks/server/java.mdx +++ b/docs/reference/sdks/server/java.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from java-sdk. Edits should be made here: https://github.com/open-feature/java-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 16:39:58 GMT-0400 (Eastern Daylight Time) +Last updated at Mon Oct 27 2025 14:01:59 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/javascript/index.mdx b/docs/reference/sdks/server/javascript/index.mdx index 020dc61b1..2f5ae8b65 100644 --- a/docs/reference/sdks/server/javascript/index.mdx +++ b/docs/reference/sdks/server/javascript/index.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 16:39:58 GMT-0400 (Eastern Daylight Time) +Last updated at Mon Oct 27 2025 14:01:59 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/javascript/nestjs.mdx b/docs/reference/sdks/server/javascript/nestjs.mdx index 20cf97d93..d49d441b9 100644 --- a/docs/reference/sdks/server/javascript/nestjs.mdx +++ b/docs/reference/sdks/server/javascript/nestjs.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from js-sdk. Edits should be made here: https://github.com/open-feature/js-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 16:39:58 GMT-0400 (Eastern Daylight Time) +Last updated at Mon Oct 27 2025 14:01:59 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/php.mdx b/docs/reference/sdks/server/php.mdx index a47f74a1e..d914ec3f7 100644 --- a/docs/reference/sdks/server/php.mdx +++ b/docs/reference/sdks/server/php.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from php-sdk. Edits should be made here: https://github.com/open-feature/php-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 16:39:59 GMT-0400 (Eastern Daylight Time) +Last updated at Mon Oct 27 2025 14:01:59 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/python.mdx b/docs/reference/sdks/server/python.mdx index b63f91c42..5809819c1 100644 --- a/docs/reference/sdks/server/python.mdx +++ b/docs/reference/sdks/server/python.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from python-sdk. Edits should be made here: https://github.com/open-feature/python-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 16:39:58 GMT-0400 (Eastern Daylight Time) +Last updated at Mon Oct 27 2025 14:01:59 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/ruby.mdx b/docs/reference/sdks/server/ruby.mdx index be4b64e7c..59419e26d 100644 --- a/docs/reference/sdks/server/ruby.mdx +++ b/docs/reference/sdks/server/ruby.mdx @@ -10,7 +10,7 @@ This content has been automatically generated from ruby-sdk. Edits should be made here: https://github.com/open-feature/ruby-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 16:39:59 GMT-0400 (Eastern Daylight Time) +Last updated at Mon Oct 27 2025 14:02:00 GMT-0400 (Eastern Daylight Time) -->

diff --git a/docs/reference/sdks/server/rust.mdx b/docs/reference/sdks/server/rust.mdx index 6e72cbf0e..9e25b24f0 100644 --- a/docs/reference/sdks/server/rust.mdx +++ b/docs/reference/sdks/server/rust.mdx @@ -9,7 +9,7 @@ This content has been automatically generated from rust-sdk. Edits should be made here: https://github.com/open-feature/rust-sdk Once a repo has been updated, docs can be generated by running: yarn update:sdk-docs -Last updated at Fri Oct 24 2025 16:39:59 GMT-0400 (Eastern Daylight Time) +Last updated at Mon Oct 27 2025 14:02:00 GMT-0400 (Eastern Daylight Time) -->

diff --git a/scripts/process-sdk-readmes.ts b/scripts/process-sdk-readmes.ts index f5e4ffcfc..3f4bb948d 100644 --- a/scripts/process-sdk-readmes.ts +++ b/scripts/process-sdk-readmes.ts @@ -210,9 +210,9 @@ export const processSdkReadmes = { */ // TODO: update branches to main once PRs are merged const OTHER_TECHNOLOGIES = [ - { repo: 'cli', id: 'cli', title: 'OpenFeature CLI', label: 'CLI', position: 1, branch: 'docs-update-readme-for-website' }, + { repo: 'cli', id: 'cli', title: 'OpenFeature CLI', label: 'CLI', position: 1, branch: 'main' }, { repo: 'protocol', id: 'ofrep', title: 'OpenFeature Remote Evaluation Protocol (OFREP)', label: 'OFREP', position: 2, branch: 'docs-update-readme-for-website' }, - { repo: 'mcp', id: 'mcp', title: 'OpenFeature MCP Server', label: 'MCP', position: 3, branch: 'docs-improve-readme-and-contributing' }, + { repo: 'mcp', id: 'mcp', title: 'OpenFeature MCP Server', label: 'MCP', position: 3, branch: 'main' }, ]; /**