CINXE.COM
<!doctype html> <html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-reference/technologies/client/swift" data-has-hydrated="false"> <head> <meta charset="UTF-8"> <meta name="generator" content="Docusaurus v3.6.3"> <title data-rh="true">OpenFeature iOS SDK | OpenFeature</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://openfeature.dev/img/opengraph.jpg"><meta data-rh="true" name="twitter:image" content="https://openfeature.dev/img/opengraph.jpg"><meta data-rh="true" property="og:url" content="https://openfeature.dev/docs/reference/technologies/client/swift"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="OpenFeature iOS SDK | OpenFeature"><meta data-rh="true" name="description" content="<!--"><meta data-rh="true" property="og:description" content="<!--"><link data-rh="true" rel="canonical" href="https://openfeature.dev/docs/reference/technologies/client/swift"><link data-rh="true" rel="alternate" href="https://openfeature.dev/docs/reference/technologies/client/swift" hreflang="en"><link data-rh="true" rel="alternate" href="https://openfeature.dev/docs/reference/technologies/client/swift" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://PH0VDWFP7Q-dsn.algolia.net" crossorigin="anonymous"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="OpenFeature RSS Feed"> <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="OpenFeature Atom Feed"> <link rel="search" type="application/opensearchdescription+xml" title="OpenFeature" href="/opensearch.xml"> <link rel="preconnect" href="https://www.google-analytics.com"> <link rel="preconnect" href="https://www.googletagmanager.com"> <script async src="https://www.googletagmanager.com/gtag/js?id=G-ZG0JSPYJXZ"></script> <script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-ZG0JSPYJXZ",{anonymize_ip:!0})</script> <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon.png"> <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-precomposed.png"> <link rel="icon" type="image/png" sizes="32x32" href="/favicons/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="16x16" href="/favicons/favicon-16x16.png"> <link rel="icon" type="image/svg+xml" href="/favicons/favicon-light.svg"> <link rel="shortcut icon" type="image/x-icon" href="/favicons/favicon.ico"> <link rel="manifest" href="/favicons/site.webmanifest"> <meta name="theme-color" content="#ffffff"> <meta name="msapplication-config" content="/favicons/browserconfig.xml"><link rel="stylesheet" href="/assets/css/styles.28a4d8ac.css"> <script src="/assets/js/runtime~main.0f106006.js" defer="defer"></script> <script src="/assets/js/main.60910c3a.js" defer="defer"></script> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo-dark.svg" alt="OpenFeature Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/img/logo-light.svg" alt="OpenFeature Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate"></b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/reference/intro">Docs</a><a class="navbar__item navbar__link" href="/specification/">Specification</a><a class="navbar__item navbar__link" href="/ecosystem">Ecosystem</a><a class="navbar__item navbar__link" href="/community/">Community</a><a class="navbar__item navbar__link" href="/support-training">Support & Training</a><a class="navbar__item navbar__link" href="/docs/tutorials/five-minutes-to-feature-flags">Tutorials</a><a class="navbar__item navbar__link" href="/blog">Blog</a></div><div class="navbar__items navbar__items--right"><a href="https://github.com/open-feature" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link header-github-link" aria-label="GitHub organization"></a><div class="toggle_nTvT colorModeToggle_DEke"><button class="clean-btn toggleButton_gYZh toggleButtonDisabled_zh5C" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)"><div class="toggleLogo_HXbd"><div class="toggleIcon_U8RU"><div class="track_Vm51"><div></div></div></div></div></button></div><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search (Command+K)"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20" aria-hidden="true"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="docsWrapper_hBAB"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docRoot_UBD9"><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class="sidebarViewport_aRkj"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/reference/intro">Introduction</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" href="/docs/category/concepts">Concepts</a><button aria-label="Collapse sidebar category 'Concepts'" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference/concepts/evaluation-api">Evaluation API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference/concepts/provider">Providers</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference/concepts/evaluation-context">Evaluation Context</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference/concepts/hooks">Hooks</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference/concepts/events">Events</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference/concepts/sdk-paradigms">SDK paradigms</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--active" href="/docs/reference/technologies/">Technologies</a><button aria-label="Collapse sidebar category 'Technologies'" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference/technologies/sdk-compatibility">SDK Compatibility Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" tabindex="0" href="/docs/reference/technologies/server/">Server</a><button aria-label="Collapse sidebar category 'Server'" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference/technologies/server/dotnet">.NET</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference/technologies/server/go">Go</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference/technologies/server/java">Java</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-3 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" tabindex="0" href="/docs/reference/technologies/server/javascript/">Node.js</a><button aria-label="Collapse sidebar category 'Node.js'" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference/technologies/server/javascript/nestjs">NestJS</a></li></ul></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference/technologies/server/php">PHP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference/technologies/server/python">Python</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference/technologies/server/ruby">Ruby</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--active" tabindex="0" href="/docs/reference/technologies/client/">Client</a><button aria-label="Collapse sidebar category 'Client'" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference/technologies/client/kotlin">Android</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/reference/technologies/client/swift">iOS</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-3 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" tabindex="0" href="/docs/reference/technologies/client/web/">Web</a><button aria-label="Collapse sidebar category 'Web'" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference/technologies/client/web/angular">Angular</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference/technologies/client/web/react">React</a></li></ul></li></ul></li></ul></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/reference/contributing">Contributing</a></li></ul></nav></div></div></aside><main class="docMainContainer_TBSr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item"><a class="breadcrumbs__link" itemprop="item" href="/docs/reference/technologies/"><span itemprop="name">Technologies</span></a><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item"><a class="breadcrumbs__link" itemprop="item" href="/docs/reference/technologies/client/"><span itemprop="name">Client</span></a><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">iOS</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>OpenFeature iOS SDK</h1></header><p align="center" class="github-badges"><a href="https://github.com/open-feature/spec/releases/tag/v0.7.0"><img alt="Specification" src="https://img.shields.io/static/v1?label=specification&message=v0.7.0&color=yellow&style=for-the-badge"></a><a href="https://github.com/open-feature/swift-sdk/releases/tag/0.2.0"><img alt="Release" src="https://img.shields.io/static/v1?label=release&message=v0.2.0&color=blue&style=for-the-badge"></a><br><img alt="Status" src="https://img.shields.io/badge/lifecycle-alpha-a0c3d2.svg"></p> <h2 class="anchor anchorWithStickyNavbar_LWe7" id="quick-start">Quick start<a href="#quick-start" class="hash-link" aria-label="Direct link to Quick start" title="Direct link to Quick start"></a></h2> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="requirements">Requirements<a href="#requirements" class="hash-link" aria-label="Direct link to Requirements" title="Direct link to Requirements"></a></h3> <ul> <li>The minimum iOS version supported is: <code>iOS 14</code>.</li> </ul> <p>Note that this library is intended to be used in a mobile context, and has not been evaluated for use in other type of applications (e.g. server applications, macOS, tvOS, watchOS, etc.).</p> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="install">Install<a href="#install" class="hash-link" aria-label="Direct link to Install" title="Direct link to Install"></a></h3> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="xcode-dependencies">Xcode Dependencies<a href="#xcode-dependencies" class="hash-link" aria-label="Direct link to Xcode Dependencies" title="Direct link to Xcode Dependencies"></a></h4> <p>You have two options, both start from File > Add Packages... in the code menu.</p> <p>First, ensure you have your GitHub account added as an option (+ > Add Source Control Account...). You will need to create a <a href="https://github.com/settings/tokens" target="_blank" rel="noopener noreferrer">Personal Access Token</a> with the permissions defined in the Xcode interface.</p> <ol> <li>Add as a remote repository<!-- --> <ul> <li>Search for <code>git@github.com:open-feature/swift-sdk.git</code> and click "Add Package"</li> </ul> </li> <li>Clone the repository locally<!-- --> <ul> <li>Clone locally using your preferred method</li> <li>Use the "Add Local..." button to select the local folder</li> </ul> </li> </ol> <p><strong>Note:</strong> Option 2 is only recommended if you are making changes to the client SDK.</p> <h4 class="anchor anchorWithStickyNavbar_LWe7" id="swift-package-manager">Swift Package Manager<a href="#swift-package-manager" class="hash-link" aria-label="Direct link to Swift Package Manager" title="Direct link to Swift Package Manager"></a></h4> <p>If you manage dependencies through SPM, in the dependencies section of Package.swift add:</p> <div class="language-swift codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-swift codeBlock_bY9V thin-scrollbar" style="background-color:#282c34;color:#ffffff"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">package</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">url</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token string-literal string" style="color:#8dc891">"git@github.com:open-feature/swift-sdk.git"</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> from</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token string-literal string" style="color:#8dc891">"0.2.0"</span><span class="token punctuation" style="color:#8dc891">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <p>and in the target dependencies section add:</p> <div class="language-swift codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-swift codeBlock_bY9V thin-scrollbar" style="background-color:#282c34;color:#ffffff"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">product</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">name</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token string-literal string" style="color:#8dc891">"OpenFeature"</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> package</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token string-literal string" style="color:#8dc891">"swift-sdk"</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">,</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="usage">Usage<a href="#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage"></a></h3> <div class="language-swift codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-swift codeBlock_bY9V thin-scrollbar" style="background-color:#282c34;color:#ffffff"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token keyword" style="color:#c5a5c5">import</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">OpenFeature</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token class-name" style="color:#FAC863">Task</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> provider </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">CustomProvider</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token comment" style="color:#999999">// configure a provider, wait for it to complete its initialization tasks</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">await</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">OpenFeatureAPI</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">shared</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">setProviderAndWait</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">provider</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> provider</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token comment" style="color:#999999">// get a bool flag value</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> client </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">OpenFeatureAPI</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">shared</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">getClient</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> flagValue </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> client</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">getBooleanValue</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">key</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token string-literal string" style="color:#8dc891">"boolFlag"</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> defaultValue</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token boolean" style="color:#ff8b50">false</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <h2 class="anchor anchorWithStickyNavbar_LWe7" id="features">Features<a href="#features" class="hash-link" aria-label="Direct link to Features" title="Direct link to Features"></a></h2> <table><thead><tr><th>Status</th><th>Features</th><th>Description</th></tr></thead><tbody><tr><td>✅</td><td><a href="#providers">Providers</a></td><td>Integrate with a commercial, open source, or in-house feature management tool.</td></tr><tr><td>✅</td><td><a href="#targeting">Targeting</a></td><td>Contextually-aware flag evaluation using <a href="/docs/reference/concepts/evaluation-context">evaluation context</a>.</td></tr><tr><td>✅</td><td><a href="#hooks">Hooks</a></td><td>Add functionality to various stages of the flag evaluation life-cycle.</td></tr><tr><td>❌</td><td><a href="#logging">Logging</a></td><td>Integrate with popular logging packages.</td></tr><tr><td>❌</td><td><a href="#named-clients">Named clients</a></td><td>Utilize multiple providers in a single application.</td></tr><tr><td>✅</td><td><a href="#eventing">Eventing</a></td><td>React to state changes in the provider or flag management system.</td></tr><tr><td>❌</td><td><a href="#shutdown">Shutdown</a></td><td>Gracefully clean up a provider during application shutdown.</td></tr><tr><td>✅</td><td><a href="#extending">Extending</a></td><td>Extend OpenFeature with custom providers and hooks.</td></tr></tbody></table> <sub>Implemented: ✅ | In-progress: ⚠️ | Not implemented yet: ❌</sub> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="providers">Providers<a href="#providers" class="hash-link" aria-label="Direct link to Providers" title="Direct link to Providers"></a></h3> <p><a href="/docs/reference/concepts/provider">Providers</a> are an abstraction between a flag management system and the OpenFeature SDK. Look <a href="/ecosystem?instant_search%5BrefinementList%5D%5Btype%5D%5B0%5D=Provider&instant_search%5BrefinementList%5D%5Btechnology%5D%5B0%5D=Swift">here</a> for a complete list of available providers. If the provider you're looking for hasn't been created yet, see the <a href="#develop-a-provider">develop a provider</a> section to learn how to build it yourself.</p> <p>Once you've added a provider as a dependency, it can be registered with OpenFeature like this:</p> <div class="language-swift codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-swift codeBlock_bY9V thin-scrollbar" style="background-color:#282c34;color:#ffffff"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token keyword" style="color:#c5a5c5">await</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">OpenFeatureAPI</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">shared</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">setProviderAndWait</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">provider</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">MyProvider</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <blockquote> <p>Asynchronous API that doesn't wait is also available</p> </blockquote> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="targeting">Targeting<a href="#targeting" class="hash-link" aria-label="Direct link to Targeting" title="Direct link to Targeting"></a></h3> <p>Sometimes, the value of a flag must consider some dynamic criteria about the application or user, such as the user's location, IP, email address, or the server's location. In OpenFeature, we refer to this as <a href="/specification/glossary#targeting">targeting</a>. If the flag management system you're using supports targeting, you can provide the input data using the <a href="/docs/reference/concepts/evaluation-context">evaluation context</a>.</p> <div class="language-swift codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-swift codeBlock_bY9V thin-scrollbar" style="background-color:#282c34;color:#ffffff"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token comment" style="color:#999999">// Configure your evaluation context and pass it to OpenFeatureAPI</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> ctx </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">MutableContext</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> targetingKey</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> userId</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> structure</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">MutableStructure</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">attributes</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">[</span><span class="token string-literal string" style="color:#8dc891">"product"</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Value</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">string</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">productId</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">]</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token class-name" style="color:#FAC863">OpenFeatureAPI</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">shared</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">setEvaluationContext</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">evaluationContext</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> ctx</span><span class="token punctuation" style="color:#8dc891">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="hooks">Hooks<a href="#hooks" class="hash-link" aria-label="Direct link to Hooks" title="Direct link to Hooks"></a></h3> <p><a href="/docs/reference/concepts/hooks">Hooks</a> allow for custom logic to be added at well-defined points of the flag evaluation life-cycle. Look <a href="/ecosystem/?instant_search%5BrefinementList%5D%5Btype%5D%5B0%5D=Hook&instant_search%5BrefinementList%5D%5Btechnology%5D%5B0%5D=Swift">here</a> for a complete list of available hooks. If the hook you're looking for hasn't been created yet, see the <a href="#develop-a-hook">develop a hook</a> section to learn how to build it yourself.</p> <p>Once you've added a hook as a dependency, it can be registered at the global, client, or flag invocation level.</p> <div class="language-swift codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-swift codeBlock_bY9V thin-scrollbar" style="background-color:#282c34;color:#ffffff"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token comment" style="color:#999999">// add a hook globally, to run on all evaluations</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token class-name" style="color:#FAC863">OpenFeatureAPI</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">shared</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">addHooks</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">hooks</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">ExampleHook</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token comment" style="color:#999999">// add a hook on this client, to run on all evaluations made by this client</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">val client </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">OpenFeatureAPI</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">shared</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">getClient</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain">client</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">addHooks</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token class-name" style="color:#FAC863">ExampleHook</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token comment" style="color:#999999">// add a hook for this evaluation only</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token omit keyword" style="color:#c5a5c5">_</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> client</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">getValue</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> key</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token string-literal string" style="color:#8dc891">"key"</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> defaultValue</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token boolean" style="color:#ff8b50">false</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> options</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">FlagEvaluationOptions</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">hooks</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">[</span><span class="token class-name" style="color:#FAC863">ExampleHook</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">]</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="logging">Logging<a href="#logging" class="hash-link" aria-label="Direct link to Logging" title="Direct link to Logging"></a></h3> <p>Logging customization is not yet available in the iOS SDK.</p> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="named-clients">Named clients<a href="#named-clients" class="hash-link" aria-label="Direct link to Named clients" title="Direct link to Named clients"></a></h3> <p>Support for named clients is not yet available in the iOS SDK.</p> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="eventing">Eventing<a href="#eventing" class="hash-link" aria-label="Direct link to Eventing" title="Direct link to Eventing"></a></h3> <p>Events allow you to react to state changes in the provider or underlying flag management system, such as flag definition changes, provider readiness, or error conditions. Initialization events (<code>PROVIDER_READY</code> on success, <code>PROVIDER_ERROR</code> on failure) are dispatched for every provider. Some providers support additional events, such as <code>PROVIDER_CONFIGURATION_CHANGED</code>.</p> <p>Please refer to the documentation of the provider you're using to see what events are supported.</p> <div class="language-swift codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-swift codeBlock_bY9V thin-scrollbar" style="background-color:#282c34;color:#ffffff"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token keyword" style="color:#c5a5c5">let</span><span class="token plain"> cancellable </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">OpenFeatureAPI</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">shared</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token function" style="color:#79b6f2">observe</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">sink </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"> event </span><span class="token keyword" style="color:#c5a5c5">in</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">switch</span><span class="token plain"> event </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">case</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">ProviderEvent</span><span class="token punctuation" style="color:#8dc891">.</span><span class="token plain">ready</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token comment" style="color:#999999">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">default</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token comment" style="color:#999999">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="shutdown">Shutdown<a href="#shutdown" class="hash-link" aria-label="Direct link to Shutdown" title="Direct link to Shutdown"></a></h3> <p>A shutdown function is not yet available in the iOS SDK.</p> <h2 class="anchor anchorWithStickyNavbar_LWe7" id="extending">Extending<a href="#extending" class="hash-link" aria-label="Direct link to Extending" title="Direct link to Extending"></a></h2> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="develop-a-provider">Develop a provider<a href="#develop-a-provider" class="hash-link" aria-label="Direct link to Develop a provider" title="Direct link to Develop a provider"></a></h3> <p>To develop a provider, you need to create a new project and include the OpenFeature SDK as a dependency. You’ll then need to write the provider by implementing the <code>FeatureProvider</code> interface exported by the OpenFeature SDK.</p> <div class="language-swift codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-swift codeBlock_bY9V thin-scrollbar" style="background-color:#282c34;color:#ffffff"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token keyword" style="color:#c5a5c5">import</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">OpenFeature</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token keyword" style="color:#c5a5c5">final</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">class</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">CustomProvider</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">FeatureProvider</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">var</span><span class="token plain"> hooks</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">[</span><span class="token plain">any </span><span class="token class-name" style="color:#FAC863">Hook</span><span class="token punctuation" style="color:#8dc891">]</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">[</span><span class="token punctuation" style="color:#8dc891">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">var</span><span class="token plain"> metadata</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">ProviderMetadata</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">CustomMetadata</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">func</span><span class="token plain"> </span><span class="token function-definition function" style="color:#79b6f2">initialize</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">initialContext</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">EvaluationContext</span><span class="token operator" style="color:#d7deea">?</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token comment" style="color:#999999">// add context-aware provider initialisation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">func</span><span class="token plain"> </span><span class="token function-definition function" style="color:#79b6f2">onContextSet</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">oldContext</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">EvaluationContext</span><span class="token operator" style="color:#d7deea">?</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> newContext</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">EvaluationContext</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token comment" style="color:#999999">// add necessary changes on context change</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">func</span><span class="token plain"> </span><span class="token function-definition function" style="color:#79b6f2">getBooleanEvaluation</span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> key</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">String</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> defaultValue</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Bool</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> context</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">EvaluationContext</span><span class="token operator" style="color:#d7deea">?</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">throws</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">-></span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">ProviderEvaluation</span><span class="token operator" style="color:#d7deea"><</span><span class="token class-name" style="color:#FAC863">Bool</span><span class="token operator" style="color:#d7deea">></span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token comment" style="color:#999999">// resolve a boolean flag value</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token operator" style="color:#d7deea">...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <blockquote> <p>Built a new provider? <a href="https://github.com/open-feature/openfeature.dev/issues/new?assignees=&labels=provider&projects=&template=document-provider.yaml&title=%5BProvider%5D%3A+" target="_blank" rel="noopener noreferrer">Let us know</a> so we can add it to the docs!</p> </blockquote> <h3 class="anchor anchorWithStickyNavbar_LWe7" id="develop-a-hook">Develop a hook<a href="#develop-a-hook" class="hash-link" aria-label="Direct link to Develop a hook" title="Direct link to Develop a hook"></a></h3> <p>To develop a hook, you need to create a new project and include the OpenFeature SDK as a dependency. Implement your own hook by conforming to the <code>Hook interface</code>. To satisfy the interface, all methods (<code>Before</code>/<code>After</code>/<code>Finally</code>/<code>Error</code>) need to be defined.</p> <div class="language-swift codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#282c34;--prism-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-swift codeBlock_bY9V thin-scrollbar" style="background-color:#282c34;color:#ffffff"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#ffffff"><span class="token keyword" style="color:#c5a5c5">class</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">BooleanHook</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Hook</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">typealias</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">HookValue</span><span class="token plain"> </span><span class="token operator" style="color:#d7deea">=</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Bool</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">func</span><span class="token plain"> </span><span class="token function-definition function" style="color:#79b6f2">before</span><span class="token operator" style="color:#d7deea"><</span><span class="token class-name" style="color:#FAC863">HookValue</span><span class="token operator" style="color:#d7deea">></span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">ctx</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">HookContext</span><span class="token operator" style="color:#d7deea"><</span><span class="token class-name" style="color:#FAC863">HookValue</span><span class="token operator" style="color:#d7deea">></span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> hints</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">[</span><span class="token class-name" style="color:#FAC863">String</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">Any</span><span class="token punctuation" style="color:#8dc891">]</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token comment" style="color:#999999">// do something</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">func</span><span class="token plain"> </span><span class="token function-definition function" style="color:#79b6f2">after</span><span class="token operator" style="color:#d7deea"><</span><span class="token class-name" style="color:#FAC863">HookValue</span><span class="token operator" style="color:#d7deea">></span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">ctx</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">HookContext</span><span class="token operator" style="color:#d7deea"><</span><span class="token class-name" style="color:#FAC863">HookValue</span><span class="token operator" style="color:#d7deea">></span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> details</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">FlagEvaluationDetails</span><span class="token operator" style="color:#d7deea"><</span><span class="token class-name" style="color:#FAC863">HookValue</span><span class="token operator" style="color:#d7deea">></span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> hints</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">[</span><span class="token class-name" style="color:#FAC863">String</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">Any</span><span class="token punctuation" style="color:#8dc891">]</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token comment" style="color:#999999">// do something</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">func</span><span class="token plain"> </span><span class="token function-definition function" style="color:#79b6f2">error</span><span class="token operator" style="color:#d7deea"><</span><span class="token class-name" style="color:#FAC863">HookValue</span><span class="token operator" style="color:#d7deea">></span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">ctx</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">HookContext</span><span class="token operator" style="color:#d7deea"><</span><span class="token class-name" style="color:#FAC863">HookValue</span><span class="token operator" style="color:#d7deea">></span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> error</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">Error</span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> hints</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">[</span><span class="token class-name" style="color:#FAC863">String</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">Any</span><span class="token punctuation" style="color:#8dc891">]</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token comment" style="color:#999999">// do something</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">func</span><span class="token plain"> </span><span class="token function-definition function" style="color:#79b6f2">finallyAfter</span><span class="token operator" style="color:#d7deea"><</span><span class="token class-name" style="color:#FAC863">HookValue</span><span class="token operator" style="color:#d7deea">></span><span class="token punctuation" style="color:#8dc891">(</span><span class="token plain">ctx</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token class-name" style="color:#FAC863">HookContext</span><span class="token operator" style="color:#d7deea"><</span><span class="token class-name" style="color:#FAC863">HookValue</span><span class="token operator" style="color:#d7deea">></span><span class="token punctuation" style="color:#8dc891">,</span><span class="token plain"> hints</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">[</span><span class="token class-name" style="color:#FAC863">String</span><span class="token punctuation" style="color:#8dc891">:</span><span class="token plain"> </span><span class="token keyword" style="color:#c5a5c5">Any</span><span class="token punctuation" style="color:#8dc891">]</span><span class="token punctuation" style="color:#8dc891">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token comment" style="color:#999999">// do something</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"> </span><span class="token punctuation" style="color:#8dc891">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#ffffff"><span class="token plain"></span><span class="token punctuation" style="color:#8dc891">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <blockquote> <p>Built a new hook? <a href="https://github.com/open-feature/openfeature.dev/issues/new?assignees=&labels=hook&projects=&template=document-hook.yaml&title=%5BHook%5D%3A+" target="_blank" rel="noopener noreferrer">Let us know</a> so we can add it to the docs!</p> </blockquote></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/open-feature/openfeature.dev/edit/main/docs/reference/technologies/client/swift.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_JAkA"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/reference/technologies/client/kotlin"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Android</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/reference/technologies/client/web/"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Web</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#quick-start" class="table-of-contents__link toc-highlight">Quick start</a><ul><li><a href="#requirements" class="table-of-contents__link toc-highlight">Requirements</a></li><li><a href="#install" class="table-of-contents__link toc-highlight">Install</a></li><li><a href="#usage" class="table-of-contents__link toc-highlight">Usage</a></li></ul></li><li><a href="#features" class="table-of-contents__link toc-highlight">Features</a><ul><li><a href="#providers" class="table-of-contents__link toc-highlight">Providers</a></li><li><a href="#targeting" class="table-of-contents__link toc-highlight">Targeting</a></li><li><a href="#hooks" class="table-of-contents__link toc-highlight">Hooks</a></li><li><a href="#logging" class="table-of-contents__link toc-highlight">Logging</a></li><li><a href="#named-clients" class="table-of-contents__link toc-highlight">Named clients</a></li><li><a href="#eventing" class="table-of-contents__link toc-highlight">Eventing</a></li><li><a href="#shutdown" class="table-of-contents__link toc-highlight">Shutdown</a></li></ul></li><li><a href="#extending" class="table-of-contents__link toc-highlight">Extending</a><ul><li><a href="#develop-a-provider" class="table-of-contents__link toc-highlight">Develop a provider</a></li><li><a href="#develop-a-hook" class="table-of-contents__link toc-highlight">Develop a hook</a></li></ul></li></ul></div></div></div></div></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Sections</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/reference/intro">Docs</a></li><li class="footer__item"><a class="footer__link-item" href="/specification">Specification</a></li><li class="footer__item"><a class="footer__link-item" href="/community">Community</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/tutorials/five-minutes-to-feature-flags">Tutorials</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://twitter.com/openfeature" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.linkedin.com/company/openfeature/" target="_blank" rel="noopener noreferrer" class="footer__link-item">LinkedIn<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://cloud-native.slack.com/archives/C0344AANLA1" target="_blank" rel="noopener noreferrer" class="footer__link-item">Join us on Slack<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.youtube.com/@openfeature" target="_blank" rel="noopener noreferrer" class="footer__link-item">YouTube<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/open-feature" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.linuxfoundation.org/legal/trademark-usage" target="_blank" rel="noopener noreferrer" class="footer__link-item">Trademarks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"> <a href="https://www.netlify.com" target="_blank" rel="noreferrer noopener" aria-label="Deploys by Netlify"> <img src="https://www.netlify.com/img/global/badges/netlify-color-accent.svg" alt="Deploys by Netlify" width="114" height="51"> </a> </li></ul></div></div><div class="footer__bottom text--center"><svg xmlns="http://www.w3.org/2000/svg" viewBox="-1.81 -3.06 419.38 80.13" style="width:300px"><style>.st0{fill:#fff}</style><g id="XMLID_1_"><g id="XMLID_575_"><path id="XMLID_643_" d="M102.2 33c3.3 0 5.9-1.3 8-3.9l4.3 4.4c-3.4 3.8-7.3 5.7-11.9 5.7s-8.3-1.4-11.3-4.3-4.4-6.5-4.4-10.9 1.5-8.1 4.5-11 6.7-4.4 11.1-4.4c4.9 0 9 1.9 12.2 5.6l-4.1 4.7q-3.15-3.9-7.8-3.9c-2.5 0-4.6.8-6.4 2.4s-2.7 3.8-2.7 6.6.8 5 2.5 6.7c1.6 1.4 3.6 2.3 6 2.3" class="st0"></path><path id="XMLID_641_" d="M119.7 38.8V9.1h6.6v23.8H139v5.9z" class="st0"></path><path id="XMLID_638_" d="M168 34.7c-3 2.9-6.7 4.4-11.1 4.4s-8.1-1.5-11.1-4.4-4.5-6.6-4.5-10.9c0-4.4 1.5-8 4.5-10.9s6.7-4.4 11.1-4.4S165 10 168 12.9s4.5 6.6 4.5 10.9c0 4.4-1.5 8-4.5 10.9m-2.3-10.9c0-2.6-.9-4.9-2.6-6.8s-3.8-2.8-6.3-2.8-4.6.9-6.3 2.8-2.6 4.1-2.6 6.8c0 2.6.9 4.9 2.6 6.8s3.8 2.8 6.3 2.8 4.6-.9 6.3-2.8c1.8-1.9 2.6-4.1 2.6-6.8" class="st0"></path><path id="XMLID_636_" d="M186 31.2q1.65 2.1 4.5 2.1c2.85 0 3.4-.7 4.4-2.1 1.1-1.4 1.6-3.3 1.6-5.6V9.2h6.6v16.6q0 6.45-3.6 9.9c-3.6 3.45-5.4 3.5-9.1 3.5s-6.8-1.2-9.2-3.5q-3.6-3.45-3.6-9.9V9.2h6.6v16.4c.1 2.3.7 4.2 1.8 5.6" class="st0"></path><path id="XMLID_633_" d="M232.7 13c2.8 2.6 4.3 6.2 4.3 10.8s-1.4 8.3-4.1 11c-2.8 2.7-7 4-12.6 4H210V9.1h10.5c5.3 0 9.4 1.3 12.2 3.9m-4.8 17.7c1.6-1.5 2.4-3.8 2.4-6.7s-.8-5.2-2.4-6.7q-2.4-2.4-7.5-2.4h-3.7V33h4.2c3 0 5.3-.8 7-2.3" class="st0"></path><path id="XMLID_631_" d="M274.7 9.1h6.6v29.7h-6.6l-14.2-18.6v18.6h-6.6V9.1h6.2l14.6 19.1z" class="st0"></path><path id="XMLID_628_" d="m309.8 38.8-2.8-6.4h-12.5l-2.8 6.4h-7.1l12.8-29.7h6.4l12.8 29.7zM300.9 18l-3.7 8.6h7.4z" class="st0"></path><path id="XMLID_626_" d="M330.8 14.9v24h-6.6v-24h-8.4V9.2h23.5v5.7z" class="st0"></path><path id="XMLID_624_" d="M344 9.1h6.6v29.7H344z" class="st0"></path><path id="XMLID_622_" d="m368.9 28 7.6-18.9h7.2l-11.9 29.7h-5.6L354.3 9.1h7.2z" class="st0"></path><path id="XMLID_620_" d="M408.6 9.1V15h-14.8v6.1h13.3v5.7h-13.3V33h15.3v5.9h-21.9V9.2h21.4z" class="st0"></path><path id="XMLID_618_" d="M94.6 64.1c1.8 0 3.3-.7 4.5-2.2l2.4 2.5c-1.9 2.1-4.1 3.2-6.7 3.2s-4.7-.8-6.3-2.4c-1.7-1.6-2.5-3.7-2.5-6.1 0-2.5.8-4.5 2.5-6.2s3.8-2.5 6.2-2.5c2.7 0 5 1 6.9 3.1l-2.3 2.6c-1.2-1.5-2.6-2.2-4.4-2.2-1.4 0-2.6.5-3.6 1.4s-1.5 2.1-1.5 3.7.5 2.8 1.4 3.7c.9 1 2.1 1.4 3.4 1.4" class="st0"></path><path id="XMLID_615_" d="M118 65.1c-1.7 1.6-3.8 2.5-6.2 2.5-2.5 0-4.5-.8-6.2-2.5-1.7-1.6-2.5-3.7-2.5-6.1s.8-4.5 2.5-6.1 3.8-2.5 6.2-2.5c2.5 0 4.5.8 6.2 2.5 1.7 1.6 2.5 3.7 2.5 6.1s-.8 4.5-2.5 6.1m-1.2-6.1c0-1.5-.5-2.8-1.4-3.8-1-1-2.1-1.6-3.5-1.6s-2.6.5-3.5 1.6c-1 1-1.4 2.3-1.4 3.8s.5 2.7 1.4 3.8c1 1 2.1 1.6 3.5 1.6s2.6-.5 3.5-1.6c.9-1 1.4-2.3 1.4-3.8" class="st0"></path><path id="XMLID_613_" d="m138.6 56.9-4.5 9.1h-2.2l-4.5-9.1v10.5h-3.7V50.7h5l4.3 9.1 4.3-9.1h5v16.7h-3.7z" class="st0"></path><path id="XMLID_610_" d="M157.9 52.3c1.2 1 1.8 2.5 1.8 4.6s-.6 3.6-1.8 4.5c-1.2 1-3 1.4-5.5 1.4h-2.2v4.6h-3.7V50.7h5.9c2.5.1 4.3.6 5.5 1.6m-2.7 6.5c.4-.5.7-1.2.7-2.2s-.3-1.6-.9-2-1.5-.6-2.7-.6h-2.1v5.6h2.5c1.2 0 2-.3 2.5-.8" class="st0"></path><path id="XMLID_608_" d="M167 63.1c.6.8 1.5 1.2 2.5 1.2s1.9-.4 2.5-1.2.9-1.8.9-3.2v-9.2h3.7V60c0 2.4-.7 4.3-2 5.6s-3 1.9-5.1 1.9-3.8-.7-5.1-2-2-3.2-2-5.6v-9.3h3.7v9.2q0 2.25.9 3.3" class="st0"></path><path id="XMLID_606_" d="M187.5 54v13.4h-3.7V54h-4.7v-3.2h13.2V54z" class="st0"></path><path id="XMLID_604_" d="M195 50.8h3.7v16.7H195z" class="st0"></path><path id="XMLID_602_" d="M214.4 50.8h3.7v16.7h-3.7l-7.9-10.4v10.4h-3.7V50.8h3.5l8.2 10.7V50.8z" class="st0"></path><path id="XMLID_600_" d="M233.1 59h3.7v5.9c-1.7 1.8-3.9 2.8-6.9 2.8-2.4 0-4.5-.8-6.2-2.4s-2.5-3.7-2.5-6.1c0-2.5.8-4.5 2.5-6.2s3.7-2.5 6.1-2.5 4.5.8 6.2 2.4l-1.9 2.8c-.7-.7-1.4-1.1-2.1-1.3-.6-.2-1.3-.4-2-.4-1.4 0-2.6.5-3.6 1.4-1 1-1.5 2.2-1.5 3.8s.5 2.8 1.4 3.8c.9.9 2 1.4 3.3 1.4s2.4-.2 3.2-.7V59z" class="st0"></path><path id="XMLID_598_" d="M257.8 50.8v3.3h-7.7v3.6h7.3V61h-7.3v6.5h-3.7V50.8z" class="st0"></path><path id="XMLID_595_" d="M275 65.1c-1.7 1.6-3.8 2.5-6.2 2.5-2.5 0-4.5-.8-6.2-2.5-1.7-1.6-2.5-3.7-2.5-6.1s.8-4.5 2.5-6.1 3.8-2.5 6.2-2.5c2.5 0 4.5.8 6.2 2.5 1.7 1.6 2.5 3.7 2.5 6.1s-.8 4.5-2.5 6.1m-1.3-6.1c0-1.5-.5-2.8-1.4-3.8-1-1-2.1-1.6-3.5-1.6s-2.6.5-3.5 1.6c-1 1-1.4 2.3-1.4 3.8s.5 2.7 1.4 3.8c1 1 2.1 1.6 3.5 1.6s2.6-.5 3.5-1.6c1-1 1.4-2.3 1.4-3.8" class="st0"></path><path id="XMLID_593_" d="M285.1 63.1c.6.8 1.5 1.2 2.5 1.2s1.9-.4 2.5-1.2.9-1.8.9-3.2v-9.2h3.7V60c0 2.4-.7 4.3-2 5.6s-3 1.9-5.1 1.9-3.8-.7-5.1-2-2-3.2-2-5.6v-9.3h3.7v9.2c-.1 1.5.3 2.6.9 3.3" class="st0"></path><path id="XMLID_591_" d="M310.2 50.8h3.7v16.7h-3.7l-7.9-10.4v10.4h-3.7V50.8h3.5l8.2 10.7V50.8z" class="st0"></path><path id="XMLID_588_" d="M330.7 53c1.6 1.5 2.4 3.5 2.4 6.1s-.8 4.6-2.3 6.1-3.9 2.3-7.1 2.3H318V50.8h5.9c3 0 5.3.7 6.8 2.2m-2.7 9.9c.9-.9 1.4-2.1 1.4-3.7s-.5-2.9-1.4-3.8-2.3-1.3-4.2-1.3h-2.1v10.1h2.4c1.7-.1 3-.5 3.9-1.3" class="st0"></path><path id="XMLID_585_" d="m347.7 67.4-1.5-3.6h-7l-1.5 3.6h-4l7.2-16.7h3.6l7.2 16.7zm-5-11.7-2.1 4.8h4.2z" class="st0"></path><path id="XMLID_583_" d="M359.5 54v13.4h-3.7V54H351v-3.2h13.2V54z" class="st0"></path><path id="XMLID_581_" d="M366.9 50.8h3.7v16.7h-3.7z" class="st0"></path><path id="XMLID_578_" d="M388.7 65.1c-1.7 1.6-3.8 2.5-6.2 2.5-2.5 0-4.5-.8-6.2-2.5-1.7-1.6-2.5-3.7-2.5-6.1s.8-4.5 2.5-6.1 3.8-2.5 6.2-2.5c2.5 0 4.5.8 6.2 2.5 1.7 1.6 2.5 3.7 2.5 6.1s-.8 4.5-2.5 6.1m-1.2-6.1c0-1.5-.5-2.8-1.4-3.8-1-1-2.1-1.6-3.5-1.6s-2.6.5-3.5 1.6c-1 1-1.4 2.3-1.4 3.8s.5 2.7 1.4 3.8c1 1 2.1 1.6 3.5 1.6s2.6-.5 3.5-1.6c.9-1 1.4-2.3 1.4-3.8" class="st0"></path><path id="XMLID_576_" d="M406 50.8h3.7v16.7H406l-7.9-10.4v10.4h-3.7V50.8h3.5l8.2 10.7z" class="st0"></path></g></g><g id="XMLID_197_"><g id="XMLID_392_"><path id="XMLID_397_" d="M15.5 47.7H6.4v21.4h21.3v-9.2H15.5z" class="st0"></path><path id="XMLID_395_" d="M61.3 47.8v12.1H49.1v-.1 9.3h21.3V47.7h-9.2z" class="st0"></path><path id="XMLID_394_" d="M6.4 26.4h9.2l-.1-.1V14.2h12.2V5H6.4z" class="st0"></path><path id="XMLID_393_" d="M49.1 5v9.2h12.2v12.2h9.1V5z" class="st0"></path></g><g id="XMLID_200_" opacity="0.8"><path id="XMLID_391_" d="M47.9 26.4 35.7 14.2h13.4V5H27.7v9.2l12.2 12.2z" class="st0"></path><path id="XMLID_390_" d="M36.9 47.7h-8L39 57.8l2 2.1H27.7v9.2h21.4v-9.3l-6.1-6z" class="st0"></path><path id="XMLID_389_" d="M61.3 26.4v13.3l-2.1-2.1-10.1-10.1v8.1l6 6 6.1 6.1h9.2V26.4z" class="st0"></path><path id="XMLID_388_" d="M27.7 38.5 15.6 26.4H6.4v21.3h9.1V34.4l12.2 12.2z" class="st0"></path></g></g></svg><div class="footer__copyright">© 2024 OpenFeature is a Cloud Native Computing Foundation incubating project | Documentation Distributed under CC BY 4.0 | All Rights Reserved</div></div></div></footer></div> </body> </html>