Skip to content

Commit d529ba0

Browse files
Merge branch 'main' into snyk-fix-ab07221f479cc0cb5ac7bc21c2dc7a99
2 parents 7d25cfc + 4c1a864 commit d529ba0

File tree

7 files changed

+202
-17
lines changed

7 files changed

+202
-17
lines changed

.github/workflows/deploy.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ jobs:
3535
run: npm run build
3636
env:
3737
HUBSPOT_TRACKING_ID: ${{ secrets.HUBSPOT_TRACKING_ID }}
38+
KAPA_WEBSITE_ID: ${{ secrets.KAPA_WEBSITE_ID }}
3839

3940
# Popular action to deploy to GitHub Pages:
4041
# Docs: https://github.com/peaceiris/actions-gh-pages#%EF%B8%8F-docusaurus

blog/authors.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ eharris:
77
name: Ewan Harris
88
url: https://github.com/ewanharris
99
image_url: /img/blog/authors/ewan.jpg
10+
jakub:
11+
name: Jakub Hertyk
12+
url: https://github.com/curfew-marathon
13+
image_url: /img/blog/authors/jakub.jpg
1014
miparnisari:
1115
name: Maria Ines Parnisari
1216
url: https://github.com/miparnisari

blog/incubation-announcement.md

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
---
2+
title: OpenFGA Accepted into CNCF Incubation 🎉
3+
description: OpenFGA has been accepted into the Cloud Native Computing Foundation Incubation stage
4+
slug: incubation-announcement
5+
date: 2026-01-07
6+
authors: [aaguiar, jakub]
7+
tags: [announcement]
8+
image: /img/og-rich-embed.png
9+
hide_table_of_contents: false
10+
---
11+
# OpenFGA Accepted into CNCF Incubation 🎉
12+
13+
OpenFGA has been accepted as a CNCF **Incubation** project! The Cloud Native Computing Foundation (CNCF) Technical Oversight Committee (TOC) [voted to advance OpenFGA](https://github.com/cncf/toc/issues/1287#issuecomment-3458442973) from Sandbox to Incubation status, recognizing years of community work and real-world adoption. This places OpenFGA on the same maturity path as other CNCF projects like OpenTelemetry, Keycloak, Artifact Hub, and Backstage. Learn more at the CNCF joint announcement: [OpenFGA becomes a CNCF Incubating Project](https://www.cncf.io/blog/2025/11/11/openfga-becomes-a-cncf-incubating-project/).
14+
15+
## Why Incubation Matters
16+
17+
Incubation signals that OpenFGA is production-ready with a healthy, diverse contributor base and real-world adoption at scale. For organizations evaluating OpenFGA, this milestone validates the project's maturity, governance, and long-term sustainability. The CNCF due diligence process assessed our security posture, documentation, community health, and adoption metrics—all meeting the standards required for broad enterprise use.
18+
19+
Learn more about [CNCF project stages](https://www.cncf.io/projects/) and review our [due diligence documentation](https://github.com/cncf/toc/blob/main/projects/openfga/openfga-incubation-dd.md).
20+
21+
## Technical Maturity Since Sandbox
22+
23+
Since joining CNCF as a Sandbox project in December 2022, OpenFGA has evolved significantly:
24+
25+
- **Performance improvements**: Substantial optimizations in query execution and caching, enabling sub-millisecond authorization checks at scale
26+
- **Enhanced capabilities**: Introduction of conditional tuples, modular models, and list users functionality to support more complex authorization scenarios
27+
- **Expanded ecosystem**: New SDKs, database adapters (including SQLite), Terraform provider, and IDE plugins
28+
- **Production hardening**: Improved observability, configuration options, and operational tooling based on real-world deployment feedback
29+
- **Security posture**: Comprehensive security assessments, vulnerability management processes, and regular dependency updates
30+
31+
These improvements reflect our commitment to building a reliable, performant authorization system ready for enterprise production use.
32+
33+
## How We Got Here
34+
35+
OpenFGA was open sourced in June 2022 and accepted as a CNCF Sandbox project in December 2022. Since then, we've seen incredible community support:
36+
37+
- Regular community meetings since 2022, available on [our YouTube channel](https://www.youtube.com/@OpenFGA), along with more than 40 presentations from community members.
38+
- Contributions from the community—whether through questions, feedback, feature requests, PRs, bug reports, or guides and tools built around OpenFGA.
39+
- [Grafana Labs](https://grafana.com/) joined the maintainer team.
40+
- 600+ contributors across the OpenFGA organization.
41+
- 5,000+ GitHub stars across our repositories.
42+
- Presence at six consecutive KubeCon conferences (US and EU) with breakout sessions and a kiosk.
43+
- Production adopters include [Canonical](https://canonical.com/), [Docker](https://www.docker.com), [Grafana Labs](https://grafana.com), [Read AI](https://read.ai/), [Agicap](https://agicap.com), [Headspace](https://headspace.com), [Zuplo](https://zuplo.com), [Sourcegraph](https://sourcegraph.com/), [OpenObserve](https://openobserve.ai/) and [LakeKeeper](https://lakekeeper.io/) along with [many others](https://github.com/openfga/community/blob/main/ADOPTERS.md).
44+
- Several adopters [went on the record](https://github.com/cncf/toc/tree/main/projects/openfga) in interviews with CNCF around their OpenFGA experience through the due diligence project.
45+
46+
## Thank You
47+
48+
OpenFGA's success is the result of contributions from many individuals and organizations. We want to highlight a few who made significant impact:
49+
50+
### Community Contributors
51+
52+
- [Massimiliano Gori](https://www.linkedin.com/in/massi-gori) believed in OpenFGA early and led integration across Canonical.
53+
- [Pauline Jamin](https://www.linkedin.com/in/paulinejamin) spearheaded adoption at [Agicap](https://agicap.com) and presented their learnings at [KubeCon Europe 2024](https://colocatedeventseu2024.sched.com/event/1YFhM/implementing-modern-cloud-native-authorization-using-openfga-andres-aguiar-okta-pauline-jamin-agicap).
54+
- [JT aka Hawxy](https://github.com/Hawxy) has been maintaining [Fga.net](https://github.com/Hawxy/Fga.Net) for years, and has been graciously providing us feedback since.
55+
- [Andrew Powers](https://www.linkedin.com/in/andrew-powers-geo) led [Read AI](https://www.read.ai/) implementation supporting collaboration and RAG for enterprise search.
56+
- [Joao Guerreiro](https://www.linkedin.com/in/joguer) led the implementation at [Grafana](https://grafana.com/) and presented their journey at [KubeCon Europe 2025](https://kccnceu2025.sched.com/event/1txIJ/from-chaos-to-control-migrating-access-control-to-openfga-in-a-multi-tenant-world-jo-guerreiro-grafana-labs-poovamraj-thanganadar-thiagarajan-okta).
57+
- [Dan Cech](https://www.linkedin.com/in/dancech) from [Grafana](https://grafana.com/) contributed the SQLite adapter and serves as a maintainer.
58+
- [Nathan Totten](https://www.linkedin.com/in/nathantotten) led [Zuplo](https://zuplo.com/) integration, implementing [authorization at the edge](https://zuplo.com/examples/openfga) for the API gateway.
59+
- [Gurleen Sethi](https://www.linkedin.com/in/gurleensethi) led the implementation of organization and team management at [Docker, Inc](https://www.docker.com/).
60+
- [Siddhant Khare](https://github.com/Siddhant-K-code) was the first independent contributor who onboarded as a maintainer of the OpenFGA project.
61+
- [Maurice Ackel](https://github.com/mauriceackel) donated the [OpenFGA Terraform Provider](https://registry.terraform.io/providers/openfga/openfga/latest/docs), and joined as a maintainer.
62+
- [Yann D'Isanto](https://www.linkedin.com/in/yann-d-19851110) from [Agicap](https://agicap.com), who contributed the JetBrains IDE plugin.
63+
- [Martin Besozzi](https://www.linkedin.com/in/embesozzi) has been involved in the OpenFGA community from the beginning, driving integrations with [Keycloak](https://www.keycloak.org/).
64+
65+
### CNCF Support
66+
67+
- [Chris Aniszczyk](https://www.linkedin.com/in/caniszczyk) helped guide the project donation and acceptance.
68+
- [Eddie Knight](https://www.linkedin.com/in/knight1776), [Evan Anderson](https://www.linkedin.com/in/evankanderson), [Marina Moore](https://www.linkedin.com/in/marina-moore-5a7242105) and [Justin Cappos](https://github.com/JustinCappos) from [CNCF TAG Security](https://tag-security.cncf.io/) supported the self-assessment and helped strengthen our posture for due diligence.
69+
- [Karena Angell](https://www.linkedin.com/in/karenaangell) and [Faseela K](https://www.linkedin.com/in/faseela-k-42178528) helped us navigate the due diligence process and carried much of the heavy lift to make it happen.
70+
71+
## What's Next
72+
73+
Incubation is a milestone, not a destination. Our focus continues on:
74+
75+
- **Performance**: Optimizing latency and throughput for large-scale deployments
76+
- **Developer Experience**: Enhanced tooling, IDE plugins, and debugging capabilities
77+
- **Integrations**: Expanding our ecosystem with more identity providers, frameworks, and platforms
78+
- **Documentation**: Comprehensive guides, tutorials, and real-world implementation patterns
79+
- **Governance**: Strengthening our contributor pathways and security practices
80+
81+
Our next milestone: CNCF Graduation. Track our progress on the [project roadmap](https://github.com/orgs/openfga/projects/1).
82+
83+
## Get Involved
84+
85+
This achievement belongs to every contributor, user, and community member who has supported OpenFGA. Thank you for being part of our journey!
86+
87+
**New to OpenFGA?** Start here:
88+
- [Try OpenFGA locally](https://openfga.dev/docs/getting-started) and explore the documentation
89+
- [Join our CNCF Slack community](https://openfga.dev/community) to ask questions and connect with users
90+
91+
**Already using OpenFGA?**
92+
- [Star the repo](https://github.com/openfga/openfga) and follow development
93+
- Share your adoption story—add your organization to our [ADOPTERS.md](https://github.com/openfga/community/blob/main/ADOPTERS.md)
94+
- Check out the [roadmap](https://github.com/orgs/openfga/projects/1) and contribute to upcoming features
95+
96+

docusaurus.config.js

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ const config = {
6060
: 'https://raw.githubusercontent.com/openfga/api/main/docs/openapiv2/apidocs.swagger.json',
6161

6262
// Customization for product information
63-
6463
description: `OpenFGA is an open source Fine-Grained Authorization solution based on Google's Zanzibar.`,
6564
productName: `OpenFGA`,
6665
// link to product description section (relative to baseURL)
@@ -115,18 +114,17 @@ import dev.openfga.sdk.api.configuration.ClientConfiguration;`,
115114
block-all-mixed-content;
116115
worker-src 'self';
117116
child-src www.youtube-nocookie.com;
118-
prefetch-src 'self';
119-
connect-src 'self' https://raw.githubusercontent.com https://s3.amazonaws.com https://cdn.cookielaw.org https://privacyportal.onetrust.com https://heapanalytics.com https://js.hs-scripts.com https://api.github.com https://js.hscollectedforms.net https://js.hs-analytics.net https://js.hs-banner.com https://forms.hscollectedforms.net ;
117+
connect-src 'self' https://raw.githubusercontent.com https://s3.amazonaws.com https://cdn.cookielaw.org https://privacyportal.onetrust.com https://heapanalytics.com https://js.hs-scripts.com https://api.github.com https://js.hscollectedforms.net https://js.hs-analytics.net https://js.hs-banner.com https://forms.hscollectedforms.net https://proxy.kapa.ai https://kapa-widget-proxy-la7dkmplpq-uc.a.run.app https://metrics.kapa.ai https://www.google.com/recaptcha/ https://hcaptcha.com https://*.hcaptcha.com ;
120118
font-src 'self' https://fonts.googleapis.com https://fonts.gstatic.com;
121119
form-action 'none';
122-
frame-src www.youtube-nocookie.com;
123-
img-src 'self' data: https://pbs.twimg.com https://docs.github.com https://heapanalytics.com https://forms.hsforms.com https://track.hubspot.com ;
120+
frame-src www.youtube-nocookie.com https://www.google.com https://hcaptcha.com https://*.hcaptcha.com;
121+
img-src 'self' data: https://openfga.dev https://pbs.twimg.com https://docs.github.com https://heapanalytics.com https://forms.hsforms.com https://track.hubspot.com ;
124122
media-src 'self';
125123
object-src 'none';
126124
script-src 'self' ${
127125
process.env.NODE_ENV === 'development' ? `'unsafe-eval'` : ``
128-
} 'unsafe-inline' https://cdn.cookielaw.org https://geolocation.onetrust.com https://cdn.heapanalytics.com https://js.hs-scripts.com https://api.github.com https://js.hscollectedforms.net https://js.hs-analytics.net https://js.hs-banner.com;
129-
style-src 'unsafe-inline' 'self' https://fonts.googleapis.com;`,
126+
} 'unsafe-inline' https://cdn.cookielaw.org https://geolocation.onetrust.com https://cdn.heapanalytics.com https://js.hs-scripts.com https://api.github.com https://js.hscollectedforms.net https://js.hs-analytics.net https://js.hs-banner.com https://widget.kapa.ai https://www.google.com https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/ https://hcaptcha.com https://*.hcaptcha.com;
127+
style-src 'unsafe-inline' 'self' https://fonts.googleapis.com https://hcaptcha.com https://*.hcaptcha.com;`,
130128
},
131129

132130
themes: [
@@ -272,6 +270,11 @@ import dev.openfga.sdk.api.configuration.ClientConfiguration;`,
272270
className: 'header-social header-slack-link',
273271
'aria-label': 'OpenFGA on Slack',
274272
},
273+
{
274+
type: 'html',
275+
position: 'right',
276+
value: '<div class="navbar__item navbar__link ask-ai-button-wrapper"><button class="ask-ai-button" aria-label="Ask AI">Ask AI</button></div>',
277+
},
275278
],
276279
},
277280
footer: {
@@ -318,19 +321,37 @@ import dev.openfga.sdk.api.configuration.ClientConfiguration;`,
318321
},
319322
},
320323
}),
324+
325+
scripts: [],
321326
};
322327

328+
// Kapa.ai website widget - KAPA_WEBSITE_ID can be provided via environment variable
329+
if (process.env.KAPA_WEBSITE_ID) {
330+
config.scripts = config.scripts || [];
331+
config.scripts.push({
332+
src: "https://widget.kapa.ai/kapa-widget.bundle.js",
333+
"data-website-id": process.env.KAPA_WEBSITE_ID,
334+
"data-project-name": "OpenFGA",
335+
"data-project-color": "#79ED83",
336+
"data-project-logo": "https://openfga.dev/img/openfga_logo.svg",
337+
"data-button-hide": "true",
338+
"data-modal-override-open-selector": ".ask-ai-button",
339+
"data-modal-open-on-command-k": "true",
340+
async: true,
341+
});
342+
}
343+
323344
if (process.env.HUBSPOT_TRACKING_ID) {
324-
config.scripts = [
325-
{
326-
src: `https://js.hs-scripts.com/${process.env.HUBSPOT_TRACKING_ID}.js`,
327-
type: "text/javascript",
328-
charset: "UTF-8",
329-
id: "hs-script-loader",
330-
async: true,
331-
defer: true,
332-
},
333-
];
345+
// Ensure config.scripts exists and append the HubSpot loader instead of replacing the whole scripts array.
346+
config.scripts = config.scripts || [];
347+
config.scripts.push({
348+
src: `https://js.hs-scripts.com/${process.env.HUBSPOT_TRACKING_ID}.js`,
349+
type: "text/javascript",
350+
charset: "UTF-8",
351+
id: "hs-script-loader",
352+
async: true,
353+
defer: true,
354+
});
334355
}
335356

336357
module.exports = config;

src/components/SocialMedia/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ const SocialMedia: React.FC = () => {
2222
<div className={styles[baseClassName]}>
2323
{filteredItems.map(({ label, to, ['aria-label']: ariaLabel }) => (
2424
<Link
25+
key={label}
2526
to={useBaseUrl(to as string)}
2627
className={clsx(
2728
styles[baseClassName + '-item'],

src/css/custom.css

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,62 @@ html[data-theme='dark'] {
4040
table td {
4141
overflow-wrap: break-word;
4242
}
43+
44+
/* Ask AI Button Styling */
45+
.ask-ai-button-wrapper {
46+
position: relative !important;
47+
order: 1000 !important;
48+
padding-left: 0.75rem !important;
49+
flex-shrink: 0 !important;
50+
margin-left: 0 !important;
51+
}
52+
53+
.ask-ai-button {
54+
background: linear-gradient(135deg, var(--ofga-color-module) 0%, var(--ofga-color-relation) 100%);
55+
56+
color: var(--ofga-color-background) !important;
57+
58+
border: 1px solid color-mix(in srgb, var(--ofga-color-relation), var(--ofga-neutral-darkest) 70%);
59+
border-radius: 6px;
60+
padding: 0.5rem 1rem;
61+
font-weight: 600;
62+
cursor: pointer;
63+
font-size: 0.9rem;
64+
transition:
65+
background 0.25s ease,
66+
transform 0.25s ease,
67+
box-shadow 0.25s ease;
68+
box-shadow: 0 2px 10px color-mix(in srgb, var(--ofga-color-background), transparent 80%);
69+
}
70+
71+
.ask-ai-button:hover {
72+
transform: translateY(-2px);
73+
box-shadow: 0 6px 18px var(--ofga-color-background);
74+
filter: saturate(1.05);
75+
}
76+
77+
.ask-ai-button:active {
78+
transform: translateY(0);
79+
}
80+
81+
.navbar__items.navbar__items--right {
82+
display: flex !important;
83+
flex-wrap: nowrap !important;
84+
}
85+
86+
.navbar__items--right > .navbarSearchContainer_Bca1 {
87+
order: 999 !important;
88+
}
89+
90+
.navbar__items--right > .navbar__item:has(.ask-ai-button-wrapper) {
91+
order: 1000 !important;
92+
}
93+
94+
@media (max-width: 996px) {
95+
.ask-ai-button {
96+
display: block;
97+
width: 100%;
98+
text-align: center;
99+
margin: 0.5rem 0;
100+
}
101+
}

static/img/blog/authors/jakub.jpg

Lines changed: 3 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)