[{"data":1,"prerenderedAt":1574},["ShallowReactive",2],{"navigation_docs":3,"-sdks-maven-repository":225,"-sdks-maven-repository-surround":1568},[4,46,68,210],{"title":5,"icon":6,"modifiedAt":7,"path":8,"stem":9,"children":10,"page":6},"Getting Started",false,"2026-04-30T19:15:33.000Z","\u002Fgetting-started","1.getting-started",[11,16,21,26,31,36,41],{"title":12,"path":13,"stem":14,"icon":15},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F1.quickstart","i-lucide-fast-forward",{"title":17,"path":18,"stem":19,"icon":20},"Core Concepts","\u002Fgetting-started\u002Fcore-concepts","1.getting-started\u002F2.core-concepts","i-lucide-workflow",{"title":22,"path":23,"stem":24,"icon":25},"Configs Anatomy","\u002Fgetting-started\u002Fconfigs","1.getting-started\u002F3.configs","i-lucide-file-cog",{"title":27,"path":28,"stem":29,"icon":30},"Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F4.architecture","i-lucide-layers",{"title":32,"path":33,"stem":34,"icon":35},"JSON Schema Validation","\u002Fgetting-started\u002Fjson-schema-validation","1.getting-started\u002F5.json-schema-validation","i-lucide-braces",{"title":37,"path":38,"stem":39,"icon":40},"Testing Rules","\u002Fgetting-started\u002Ftesting-targeting-rules","1.getting-started\u002F6.testing-targeting-rules","i-lucide-flask-conical",{"title":42,"path":43,"stem":44,"icon":45},"Pricing & Billing","\u002Fgetting-started\u002Fpricing-and-billing","1.getting-started\u002F7.pricing-and-billing","i-lucide-credit-card",{"title":47,"modifiedAt":48,"defaultOpen":49,"path":50,"stem":51,"children":52,"page":6},"Monitoring","2026-09-24T23:33:20.000Z",true,"\u002Fmonitoring","2.monitoring",[53,58,63],{"title":54,"path":55,"stem":56,"icon":57},"Activity","\u002Fmonitoring\u002Factivity","2.monitoring\u002F1.activity","i-lucide-activity",{"title":59,"path":60,"stem":61,"icon":62},"Lifecycle","\u002Fmonitoring\u002Flifecycle","2.monitoring\u002F2.lifecycle","i-lucide-recycle",{"title":64,"path":65,"stem":66,"icon":67},"Alerts","\u002Fmonitoring\u002Falerts","2.monitoring\u002F3.alerts","i-lucide-bell",{"title":69,"modifiedAt":48,"defaultOpen":49,"path":70,"stem":71,"children":72,"page":6},"SDKs","\u002Fsdks","3.sdks",[73,78,99,124,140,166,205],{"title":74,"path":75,"stem":76,"icon":77},"Available SDKs","\u002Fsdks\u002Favailable-sdks","3.sdks\u002F1.available-sdks","i-lucide-list",{"title":79,"modifiedAt":48,"icon":80,"defaultOpen":6,"path":81,"stem":82,"children":83,"page":6},"Browser SDKs","i-lucide-monitor","\u002Fsdks\u002Fbrowser","3.sdks\u002F2.browser",[84,89,94],{"title":85,"path":86,"stem":87,"icon":88},"Javascript","\u002Fsdks\u002Fbrowser\u002Fjavascript","3.sdks\u002F2.browser\u002F1.javascript","cd-logos-javascript",{"title":90,"path":91,"stem":92,"icon":93},"React","\u002Fsdks\u002Fbrowser\u002Freact","3.sdks\u002F2.browser\u002F2.react","cd-logos-react-light",{"title":95,"path":96,"stem":97,"icon":98},"Vue","\u002Fsdks\u002Fbrowser\u002Fvue","3.sdks\u002F2.browser\u002F3.vue","cd-logos-vue",{"title":100,"modifiedAt":48,"icon":101,"defaultOpen":6,"path":102,"stem":103,"children":104,"page":6},"Mobile SDKs","i-lucide-smartphone","\u002Fsdks\u002Fmobile","3.sdks\u002F3.mobile",[105,109,114,119],{"title":106,"path":107,"stem":108,"icon":93},"React Native","\u002Fsdks\u002Fmobile\u002Freact-native","3.sdks\u002F3.mobile\u002F1.react-native",{"title":110,"path":111,"stem":112,"icon":113},"Flutter","\u002Fsdks\u002Fmobile\u002Fflutter","3.sdks\u002F3.mobile\u002F2.flutter","cd-logos-flutter",{"title":115,"path":116,"stem":117,"icon":118},"Swift","\u002Fsdks\u002Fmobile\u002Fswift","3.sdks\u002F3.mobile\u002F3.swift","cd-logos-swift",{"title":120,"path":121,"stem":122,"icon":123},"Android","\u002Fsdks\u002Fmobile\u002Fandroid","3.sdks\u002F3.mobile\u002F4.android","cd-logos-android",{"title":125,"modifiedAt":48,"icon":126,"defaultOpen":6,"path":127,"stem":128,"children":129,"page":6},"Meta-framework SDKs","i-lucide-monitor-smartphone","\u002Fsdks\u002Fmeta","3.sdks\u002F4.meta",[130,135],{"title":131,"path":132,"stem":133,"icon":134},"Next.js","\u002Fsdks\u002Fmeta\u002Fnextjs","3.sdks\u002F4.meta\u002F1.nextjs","cd-logos-nextjs",{"title":136,"path":137,"stem":138,"icon":139},"Nuxt","\u002Fsdks\u002Fmeta\u002Fnuxt","3.sdks\u002F4.meta\u002F2.nuxt","cd-logos-nuxt",{"title":141,"modifiedAt":48,"icon":142,"defaultOpen":6,"path":143,"stem":144,"children":145,"page":6},"Server SDKs","i-lucide-server","\u002Fsdks\u002Fserver","3.sdks\u002F5.server",[146,151,156,161],{"title":147,"path":148,"stem":149,"icon":150},"Node.js","\u002Fsdks\u002Fserver\u002Fnode-js","3.sdks\u002F5.server\u002F1.node-js","cd-logos-nodejs",{"title":152,"path":153,"stem":154,"icon":155},"Python","\u002Fsdks\u002Fserver\u002Fpython","3.sdks\u002F5.server\u002F2.python","cd-logos-python",{"title":157,"path":158,"stem":159,"icon":160},"Java","\u002Fsdks\u002Fserver\u002Fjava","3.sdks\u002F5.server\u002F3.java","cd-logos-java",{"title":162,"path":163,"stem":164,"icon":165},".NET","\u002Fsdks\u002Fserver\u002Fdotnet","3.sdks\u002F5.server\u002F4.dotnet","cd-logos-dotnet",{"title":167,"modifiedAt":48,"icon":168,"defaultOpen":6,"path":169,"stem":170,"children":171,"page":6},"OpenFeature Providers","cd-logos-openfeature","\u002Fsdks\u002Fopenfeature","3.sdks\u002F6.openfeature",[172,177,181,185,189,193,197,201],{"title":173,"path":174,"stem":175,"icon":168,"icons":176},"Web","\u002Fsdks\u002Fopenfeature\u002Fweb","3.sdks\u002F6.openfeature\u002F1.web",[168,88],{"title":115,"path":178,"stem":179,"icon":168,"icons":180},"\u002Fsdks\u002Fopenfeature\u002Fswift","3.sdks\u002F6.openfeature\u002F2.swift",[168,118],{"title":120,"path":182,"stem":183,"icon":168,"icons":184},"\u002Fsdks\u002Fopenfeature\u002Fandroid","3.sdks\u002F6.openfeature\u002F3.android",[168,123],{"title":110,"path":186,"stem":187,"icon":168,"icons":188},"\u002Fsdks\u002Fopenfeature\u002Fflutter","3.sdks\u002F6.openfeature\u002F4.flutter",[168,113],{"title":147,"path":190,"stem":191,"icon":168,"icons":192},"\u002Fsdks\u002Fopenfeature\u002Fnode-js","3.sdks\u002F6.openfeature\u002F5.node-js",[168,150],{"title":152,"path":194,"stem":195,"icon":168,"icons":196},"\u002Fsdks\u002Fopenfeature\u002Fpython","3.sdks\u002F6.openfeature\u002F6.python",[168,155],{"title":157,"path":198,"stem":199,"icon":168,"icons":200},"\u002Fsdks\u002Fopenfeature\u002Fjava","3.sdks\u002F6.openfeature\u002F7.java",[168,160],{"title":162,"path":202,"stem":203,"icon":168,"icons":204},"\u002Fsdks\u002Fopenfeature\u002Fdotnet","3.sdks\u002F6.openfeature\u002F8.dotnet",[168,165],{"title":206,"path":207,"stem":208,"icon":209},"Maven Repository","\u002Fsdks\u002Fmaven-repository","3.sdks\u002F7.maven-repository","i-lucide-package",{"title":211,"modifiedAt":48,"defaultOpen":49,"path":212,"stem":213,"children":214,"page":6},"Integrations","\u002Fintegrations","4.integrations",[215,220],{"title":216,"path":217,"stem":218,"icon":219},"Terraform","\u002Fintegrations\u002Fterraform","4.integrations\u002F1.terraform","cd-logos-terraform",{"title":221,"path":222,"stem":223,"icon":224},"MCP","\u002Fintegrations\u002Fmcp","4.integrations\u002F2.mcp","cd-logos-mcp",{"id":226,"title":206,"body":227,"description":1560,"extension":1561,"links":1562,"meta":1563,"navigation":1565,"path":207,"seo":1566,"stem":208,"__hash__":1567},"docs\u002F3.sdks\u002F7.maven-repository.md",{"type":228,"value":229,"toc":1544},"minimark",[230,234,251,254,259,359,364,367,465,468,472,476,491,765,772,968,975,979,986,1124,1128,1135,1263,1283,1287,1290,1317,1320,1324,1331,1349,1369,1373,1393,1433,1436,1439,1497,1500,1504,1512,1537,1540],[231,232,233],"p",{},"The ConfigDirector Android and Java SDKs, and the OpenFeature providers built on them, are published to the ConfigDirector Maven repository:",[235,236,241],"pre",{"className":237,"code":238,"language":239,"meta":240,"style":240},"language-txt shiki shiki-themes material-theme-lighter github-light github-dark","https:\u002F\u002Fmaven.configdirector.com\n","txt","",[242,243,244],"code",{"__ignoreMap":240},[245,246,249],"span",{"class":247,"line":248},"line",1,[245,250,238],{},[231,252,253],{},"Anyone can download from it, without an account or credentials. Once a version is published there it never changes: its files are never replaced or deleted.",[255,256,258],"h2",{"id":257},"artifacts","Artifacts",[260,261,262,275],"table",{},[263,264,265],"thead",{},[266,267,268,272],"tr",{},[269,270,271],"th",{},"Artifact",[269,273,274],{},"Contents",[276,277,278,293,303,313,325,337,347],"tbody",{},[266,279,280,286],{},[281,282,283],"td",{},[242,284,285],{},"com.configdirector:android-sdk",[281,287,288,289],{},"The ",[290,291,292],"a",{"href":121},"Android SDK",[266,294,295,300],{},[281,296,297],{},[242,298,299],{},"com.configdirector:android-sdk-compose",[281,301,302],{},"Jetpack Compose bindings for the Android SDK",[266,304,305,310],{},[281,306,307],{},[242,308,309],{},"com.configdirector:android-sdk-testing",[281,311,312],{},"Tools for testing code that uses the Android SDK",[266,314,315,320],{},[281,316,317],{},[242,318,319],{},"com.configdirector:openfeature-android-provider",[281,321,288,322],{},[290,323,324],{"href":182},"OpenFeature Android provider",[266,326,327,332],{},[281,328,329],{},[242,330,331],{},"com.configdirector:server-sdk",[281,333,288,334],{},[290,335,336],{"href":158},"Java server SDK",[266,338,339,344],{},[281,340,341],{},[242,342,343],{},"com.configdirector:server-sdk-testing",[281,345,346],{},"Tools for testing code that uses the Java server SDK",[266,348,349,354],{},[281,350,351],{},[242,352,353],{},"com.configdirector:openfeature-server-provider",[281,355,288,356],{},[290,357,358],{"href":198},"OpenFeature Java provider",[360,361,363],"h3",{"id":362},"older-versions-on-maven-central","Older versions on Maven Central",[231,365,366],{},"Versions up to Android SDK 1.6.0, OpenFeature Android provider 1.2.0, Java server SDK 1.7.0 and OpenFeature Java provider 1.4.0 were published to Maven Central under older names. Newer versions are only in this repository.",[260,368,369,379],{},[263,370,371],{},[266,372,373,376],{},[269,374,375],{},"Name on Maven Central",[269,377,378],{},"Name in this repository",[276,380,381,393,405,417,429,441,453],{},[266,382,383,388],{},[281,384,385],{},[242,386,387],{},"configdirector-android",[281,389,390],{},[242,391,392],{},"android-sdk",[266,394,395,400],{},[281,396,397],{},[242,398,399],{},"configdirector-android-compose",[281,401,402],{},[242,403,404],{},"android-sdk-compose",[266,406,407,412],{},[281,408,409],{},[242,410,411],{},"configdirector-android-testing",[281,413,414],{},[242,415,416],{},"android-sdk-testing",[266,418,419,424],{},[281,420,421],{},[242,422,423],{},"configdirector-openfeature-android-provider",[281,425,426],{},[242,427,428],{},"openfeature-android-provider",[266,430,431,436],{},[281,432,433],{},[242,434,435],{},"configdirector-server-sdk",[281,437,438],{},[242,439,440],{},"server-sdk",[266,442,443,448],{},[281,444,445],{},[242,446,447],{},"configdirector-server-sdk-testing",[281,449,450],{},[242,451,452],{},"server-sdk-testing",[266,454,455,460],{},[281,456,457],{},[242,458,459],{},"configdirector-openfeature-server-provider",[281,461,462],{},[242,463,464],{},"openfeature-server-provider",[231,466,467],{},"To upgrade from a version on Maven Central, add the repository to your build and change the artifact names. Change all of them at once: an artifact under its old name and the same artifact under its new name contain the same classes, so they cannot be on the same classpath.",[255,469,471],{"id":470},"add-the-repository-to-your-build","Add the repository to your build",[360,473,475],{"id":474},"gradle","Gradle",[231,477,478,479,482,483,486,487,490],{},"If your build declares its repositories in ",[242,480,481],{},"settings.gradle.kts"," or ",[242,484,485],{},"settings.gradle",", under ",[242,488,489],{},"dependencyResolutionManagement",", add the repository there. Android Studio sets up new projects this way, and their builds fail if a module's build file declares a repository.",[492,493,494,649],"code-group",{},[235,495,499],{"className":496,"code":497,"filename":481,"language":498,"meta":240,"style":240},"language-kotlin shiki shiki-themes material-theme-lighter github-light github-dark","dependencyResolutionManagement {\n    repositories {\n        google()\n        mavenCentral()\n        exclusiveContent {\n            forRepository {\n                maven {\n                    name = \"ConfigDirector\"\n                    url = uri(\"https:\u002F\u002Fmaven.configdirector.com\")\n                }\n            }\n            filter {\n                includeGroup(\"com.configdirector\")\n            }\n        }\n    }\n}\n","kotlin",[242,500,501,510,518,527,535,543,551,559,573,593,599,605,613,626,631,637,643],{"__ignoreMap":240},[245,502,503,506],{"class":247,"line":248},[245,504,489],{"class":505},"sGLFI",[245,507,509],{"class":508},"su5hD"," {\n",[245,511,513,516],{"class":247,"line":512},2,[245,514,515],{"class":505},"    repositories",[245,517,509],{"class":508},[245,519,521,524],{"class":247,"line":520},3,[245,522,523],{"class":505},"        google",[245,525,526],{"class":508},"()\n",[245,528,530,533],{"class":247,"line":529},4,[245,531,532],{"class":505},"        mavenCentral",[245,534,526],{"class":508},[245,536,538,541],{"class":247,"line":537},5,[245,539,540],{"class":505},"        exclusiveContent",[245,542,509],{"class":508},[245,544,546,549],{"class":247,"line":545},6,[245,547,548],{"class":505},"            forRepository",[245,550,509],{"class":508},[245,552,554,557],{"class":247,"line":553},7,[245,555,556],{"class":505},"                maven",[245,558,509],{"class":508},[245,560,562,565,569],{"class":247,"line":561},8,[245,563,564],{"class":508},"                    name ",[245,566,568],{"class":567},"smGrS","=",[245,570,572],{"class":571},"s_sjI"," \"ConfigDirector\"\n",[245,574,576,579,581,584,587,590],{"class":247,"line":575},9,[245,577,578],{"class":508},"                    url ",[245,580,568],{"class":567},[245,582,583],{"class":505}," uri",[245,585,586],{"class":508},"(",[245,588,589],{"class":571},"\"https:\u002F\u002Fmaven.configdirector.com\"",[245,591,592],{"class":508},")\n",[245,594,596],{"class":247,"line":595},10,[245,597,598],{"class":508},"                }\n",[245,600,602],{"class":247,"line":601},11,[245,603,604],{"class":508},"            }\n",[245,606,608,611],{"class":247,"line":607},12,[245,609,610],{"class":505},"            filter",[245,612,509],{"class":508},[245,614,616,619,621,624],{"class":247,"line":615},13,[245,617,618],{"class":505},"                includeGroup",[245,620,586],{"class":508},[245,622,623],{"class":571},"\"com.configdirector\"",[245,625,592],{"class":508},[245,627,629],{"class":247,"line":628},14,[245,630,604],{"class":508},[245,632,634],{"class":247,"line":633},15,[245,635,636],{"class":508},"        }\n",[245,638,640],{"class":247,"line":639},16,[245,641,642],{"class":508},"    }\n",[245,644,646],{"class":247,"line":645},17,[245,647,648],{"class":508},"}\n",[235,650,654],{"className":651,"code":652,"filename":485,"language":653,"meta":240,"style":240},"language-groovy shiki shiki-themes material-theme-lighter github-light github-dark","dependencyResolutionManagement {\n    repositories {\n        google()\n        mavenCentral()\n        exclusiveContent {\n            forRepository {\n                maven {\n                    name = 'ConfigDirector'\n                    url = 'https:\u002F\u002Fmaven.configdirector.com'\n                }\n            }\n            filter {\n                includeGroup 'com.configdirector'\n            }\n        }\n    }\n}\n","groovy",[242,655,656,661,666,673,679,684,689,694,710,723,727,731,736,749,753,757,761],{"__ignoreMap":240},[245,657,658],{"class":247,"line":248},[245,659,660],{"class":508},"dependencyResolutionManagement {\n",[245,662,663],{"class":247,"line":512},[245,664,665],{"class":508},"    repositories {\n",[245,667,668,670],{"class":247,"line":520},[245,669,523],{"class":508},[245,671,526],{"class":672},"sP7_E",[245,674,675,677],{"class":247,"line":529},[245,676,532],{"class":508},[245,678,526],{"class":672},[245,680,681],{"class":247,"line":537},[245,682,683],{"class":508},"        exclusiveContent {\n",[245,685,686],{"class":247,"line":545},[245,687,688],{"class":508},"            forRepository {\n",[245,690,691],{"class":247,"line":553},[245,692,693],{"class":508},"                maven {\n",[245,695,696,698,700,704,707],{"class":247,"line":561},[245,697,564],{"class":508},[245,699,568],{"class":567},[245,701,703],{"class":702},"sjJ54"," '",[245,705,706],{"class":571},"ConfigDirector",[245,708,709],{"class":702},"'\n",[245,711,712,714,716,718,721],{"class":247,"line":575},[245,713,578],{"class":508},[245,715,568],{"class":567},[245,717,703],{"class":702},[245,719,720],{"class":571},"https:\u002F\u002Fmaven.configdirector.com",[245,722,709],{"class":702},[245,724,725],{"class":247,"line":595},[245,726,598],{"class":508},[245,728,729],{"class":247,"line":601},[245,730,604],{"class":508},[245,732,733],{"class":247,"line":607},[245,734,735],{"class":508},"            filter {\n",[245,737,738,741,744,747],{"class":247,"line":615},[245,739,740],{"class":508},"                includeGroup ",[245,742,743],{"class":702},"'",[245,745,746],{"class":571},"com.configdirector",[245,748,709],{"class":702},[245,750,751],{"class":247,"line":628},[245,752,604],{"class":508},[245,754,755],{"class":247,"line":633},[245,756,636],{"class":508},[245,758,759],{"class":247,"line":639},[245,760,642],{"class":508},[245,762,763],{"class":247,"line":645},[245,764,648],{"class":508},[231,766,767,768,771],{},"Otherwise, add it to the ",[242,769,770],{},"repositories"," block of your build file:",[492,773,774,876],{},[235,775,778],{"className":496,"code":776,"filename":777,"language":498,"meta":240,"style":240},"repositories {\n    mavenCentral()\n    exclusiveContent {\n        forRepository {\n            maven {\n                name = \"ConfigDirector\"\n                url = uri(\"https:\u002F\u002Fmaven.configdirector.com\")\n            }\n        }\n        filter {\n            includeGroup(\"com.configdirector\")\n        }\n    }\n}\n","build.gradle.kts",[242,779,780,786,793,800,807,814,823,838,842,846,853,864,868,872],{"__ignoreMap":240},[245,781,782,784],{"class":247,"line":248},[245,783,770],{"class":505},[245,785,509],{"class":508},[245,787,788,791],{"class":247,"line":512},[245,789,790],{"class":505},"    mavenCentral",[245,792,526],{"class":508},[245,794,795,798],{"class":247,"line":520},[245,796,797],{"class":505},"    exclusiveContent",[245,799,509],{"class":508},[245,801,802,805],{"class":247,"line":529},[245,803,804],{"class":505},"        forRepository",[245,806,509],{"class":508},[245,808,809,812],{"class":247,"line":537},[245,810,811],{"class":505},"            maven",[245,813,509],{"class":508},[245,815,816,819,821],{"class":247,"line":545},[245,817,818],{"class":508},"                name ",[245,820,568],{"class":567},[245,822,572],{"class":571},[245,824,825,828,830,832,834,836],{"class":247,"line":553},[245,826,827],{"class":508},"                url ",[245,829,568],{"class":567},[245,831,583],{"class":505},[245,833,586],{"class":508},[245,835,589],{"class":571},[245,837,592],{"class":508},[245,839,840],{"class":247,"line":561},[245,841,604],{"class":508},[245,843,844],{"class":247,"line":575},[245,845,636],{"class":508},[245,847,848,851],{"class":247,"line":595},[245,849,850],{"class":505},"        filter",[245,852,509],{"class":508},[245,854,855,858,860,862],{"class":247,"line":601},[245,856,857],{"class":505},"            includeGroup",[245,859,586],{"class":508},[245,861,623],{"class":571},[245,863,592],{"class":508},[245,865,866],{"class":247,"line":607},[245,867,636],{"class":508},[245,869,870],{"class":247,"line":615},[245,871,642],{"class":508},[245,873,874],{"class":247,"line":628},[245,875,648],{"class":508},[235,877,880],{"className":651,"code":878,"filename":879,"language":653,"meta":240,"style":240},"repositories {\n    mavenCentral()\n    exclusiveContent {\n        forRepository {\n            maven {\n                name = 'ConfigDirector'\n                url = 'https:\u002F\u002Fmaven.configdirector.com'\n            }\n        }\n        filter {\n            includeGroup 'com.configdirector'\n        }\n    }\n}\n","build.gradle",[242,881,882,887,893,898,903,908,920,932,936,940,945,956,960,964],{"__ignoreMap":240},[245,883,884],{"class":247,"line":248},[245,885,886],{"class":508},"repositories {\n",[245,888,889,891],{"class":247,"line":512},[245,890,790],{"class":508},[245,892,526],{"class":672},[245,894,895],{"class":247,"line":520},[245,896,897],{"class":508},"    exclusiveContent {\n",[245,899,900],{"class":247,"line":529},[245,901,902],{"class":508},"        forRepository {\n",[245,904,905],{"class":247,"line":537},[245,906,907],{"class":508},"            maven {\n",[245,909,910,912,914,916,918],{"class":247,"line":545},[245,911,818],{"class":508},[245,913,568],{"class":567},[245,915,703],{"class":702},[245,917,706],{"class":571},[245,919,709],{"class":702},[245,921,922,924,926,928,930],{"class":247,"line":553},[245,923,827],{"class":508},[245,925,568],{"class":567},[245,927,703],{"class":702},[245,929,720],{"class":571},[245,931,709],{"class":702},[245,933,934],{"class":247,"line":561},[245,935,604],{"class":508},[245,937,938],{"class":247,"line":575},[245,939,636],{"class":508},[245,941,942],{"class":247,"line":595},[245,943,944],{"class":508},"        filter {\n",[245,946,947,950,952,954],{"class":247,"line":601},[245,948,949],{"class":508},"            includeGroup ",[245,951,743],{"class":702},[245,953,746],{"class":571},[245,955,709],{"class":702},[245,957,958],{"class":247,"line":607},[245,959,636],{"class":508},[245,961,962],{"class":247,"line":615},[245,963,642],{"class":508},[245,965,966],{"class":247,"line":628},[245,967,648],{"class":508},[231,969,970,971,974],{},"With ",[242,972,973],{},"exclusiveContent",", Gradle looks for ConfigDirector artifacts only in this repository, and looks for nothing else there. Keep the other repositories your build already lists.",[360,976,978],{"id":977},"maven","Maven",[231,980,981,982,985],{},"Add the repository to ",[242,983,984],{},"pom.xml",":",[235,987,991],{"className":988,"code":989,"filename":984,"language":990,"meta":240,"style":240},"language-xml shiki shiki-themes material-theme-lighter github-light github-dark","\u003Crepositories>\n  \u003Crepository>\n    \u003Cid>configdirector\u003C\u002Fid>\n    \u003Curl>https:\u002F\u002Fmaven.configdirector.com\u003C\u002Furl>\n    \u003Creleases>\u003Cenabled>true\u003C\u002Fenabled>\u003C\u002Freleases>\n    \u003Csnapshots>\u003Cenabled>false\u003C\u002Fenabled>\u003C\u002Fsnapshots>\n  \u003C\u002Frepository>\n\u003C\u002Frepositories>\n","xml",[242,992,993,1004,1014,1035,1052,1081,1107,1116],{"__ignoreMap":240},[245,994,995,998,1001],{"class":247,"line":248},[245,996,997],{"class":672},"\u003C",[245,999,770],{"class":1000},"sQzsp",[245,1002,1003],{"class":672},">\n",[245,1005,1006,1009,1012],{"class":247,"line":512},[245,1007,1008],{"class":672},"  \u003C",[245,1010,1011],{"class":1000},"repository",[245,1013,1003],{"class":672},[245,1015,1016,1019,1022,1025,1028,1031,1033],{"class":247,"line":520},[245,1017,1018],{"class":672},"    \u003C",[245,1020,1021],{"class":1000},"id",[245,1023,1024],{"class":672},">",[245,1026,1027],{"class":508},"configdirector",[245,1029,1030],{"class":672},"\u003C\u002F",[245,1032,1021],{"class":1000},[245,1034,1003],{"class":672},[245,1036,1037,1039,1042,1044,1046,1048,1050],{"class":247,"line":529},[245,1038,1018],{"class":672},[245,1040,1041],{"class":1000},"url",[245,1043,1024],{"class":672},[245,1045,720],{"class":508},[245,1047,1030],{"class":672},[245,1049,1041],{"class":1000},[245,1051,1003],{"class":672},[245,1053,1054,1056,1059,1062,1065,1067,1070,1072,1074,1077,1079],{"class":247,"line":537},[245,1055,1018],{"class":672},[245,1057,1058],{"class":1000},"releases",[245,1060,1061],{"class":672},">\u003C",[245,1063,1064],{"class":1000},"enabled",[245,1066,1024],{"class":672},[245,1068,1069],{"class":508},"true",[245,1071,1030],{"class":672},[245,1073,1064],{"class":1000},[245,1075,1076],{"class":672},">\u003C\u002F",[245,1078,1058],{"class":1000},[245,1080,1003],{"class":672},[245,1082,1083,1085,1088,1090,1092,1094,1097,1099,1101,1103,1105],{"class":247,"line":545},[245,1084,1018],{"class":672},[245,1086,1087],{"class":1000},"snapshots",[245,1089,1061],{"class":672},[245,1091,1064],{"class":1000},[245,1093,1024],{"class":672},[245,1095,1096],{"class":508},"false",[245,1098,1030],{"class":672},[245,1100,1064],{"class":1000},[245,1102,1076],{"class":672},[245,1104,1087],{"class":1000},[245,1106,1003],{"class":672},[245,1108,1109,1112,1114],{"class":247,"line":553},[245,1110,1111],{"class":672},"  \u003C\u002F",[245,1113,1011],{"class":1000},[245,1115,1003],{"class":672},[245,1117,1118,1120,1122],{"class":247,"line":561},[245,1119,1030],{"class":672},[245,1121,770],{"class":1000},[245,1123,1003],{"class":672},[255,1125,1127],{"id":1126},"dependabot","Dependabot",[231,1129,1130,1131,1134],{},"Dependabot can't reach this repository until ",[242,1132,1133],{},".github\u002Fdependabot.yml"," declares it, even though the repository needs no credentials. Declare it so that Dependabot can open pull requests for new versions of the SDKs:",[235,1136,1140],{"className":1137,"code":1138,"filename":1133,"language":1139,"meta":240,"style":240},"language-yaml shiki shiki-themes material-theme-lighter github-light github-dark","version: 2\nregistries:\n  configdirector:\n    type: maven-repository\n    url: https:\u002F\u002Fmaven.configdirector.com\nupdates:\n  - package-ecosystem: \"gradle\"\n    directory: \"\u002F\"\n    registries:\n      - configdirector\n    schedule:\n      interval: \"weekly\"\n","yaml",[242,1141,1142,1153,1161,1168,1178,1188,1195,1213,1227,1234,1242,1249],{"__ignoreMap":240},[245,1143,1144,1147,1149],{"class":247,"line":248},[245,1145,1146],{"class":1000},"version",[245,1148,985],{"class":672},[245,1150,1152],{"class":1151},"srdBf"," 2\n",[245,1154,1155,1158],{"class":247,"line":512},[245,1156,1157],{"class":1000},"registries",[245,1159,1160],{"class":672},":\n",[245,1162,1163,1166],{"class":247,"line":520},[245,1164,1165],{"class":1000},"  configdirector",[245,1167,1160],{"class":672},[245,1169,1170,1173,1175],{"class":247,"line":529},[245,1171,1172],{"class":1000},"    type",[245,1174,985],{"class":672},[245,1176,1177],{"class":571}," maven-repository\n",[245,1179,1180,1183,1185],{"class":247,"line":537},[245,1181,1182],{"class":1000},"    url",[245,1184,985],{"class":672},[245,1186,1187],{"class":571}," https:\u002F\u002Fmaven.configdirector.com\n",[245,1189,1190,1193],{"class":247,"line":545},[245,1191,1192],{"class":1000},"updates",[245,1194,1160],{"class":672},[245,1196,1197,1200,1203,1205,1208,1210],{"class":247,"line":553},[245,1198,1199],{"class":672},"  -",[245,1201,1202],{"class":1000}," package-ecosystem",[245,1204,985],{"class":672},[245,1206,1207],{"class":702}," \"",[245,1209,474],{"class":571},[245,1211,1212],{"class":702},"\"\n",[245,1214,1215,1218,1220,1222,1225],{"class":247,"line":561},[245,1216,1217],{"class":1000},"    directory",[245,1219,985],{"class":672},[245,1221,1207],{"class":702},[245,1223,1224],{"class":571},"\u002F",[245,1226,1212],{"class":702},[245,1228,1229,1232],{"class":247,"line":575},[245,1230,1231],{"class":1000},"    registries",[245,1233,1160],{"class":672},[245,1235,1236,1239],{"class":247,"line":595},[245,1237,1238],{"class":672},"      -",[245,1240,1241],{"class":571}," configdirector\n",[245,1243,1244,1247],{"class":247,"line":601},[245,1245,1246],{"class":1000},"    schedule",[245,1248,1160],{"class":672},[245,1250,1251,1254,1256,1258,1261],{"class":247,"line":607},[245,1252,1253],{"class":1000},"      interval",[245,1255,985],{"class":672},[245,1257,1207],{"class":702},[245,1259,1260],{"class":571},"weekly",[245,1262,1212],{"class":702},[231,1264,1265,1266,1269,1270,1273,1274,1276,1277,1279,1280,1282],{},"For a Maven build, the ",[242,1267,1268],{},"package-ecosystem"," is ",[242,1271,1272],{},"\"maven\"",". If the file already has ",[242,1275,1192],{}," entries, add ",[242,1278,1027],{}," to the ",[242,1281,1157],{}," of each entry that covers a build using the SDKs.",[255,1284,1286],{"id":1285},"company-repository-managers","Company repository managers",[231,1288,1289],{},"If your builds download their dependencies through a repository manager such as Sonatype Nexus Repository or JFrog Artifactory, rather than from public repositories directly, its administrator adds this repository once:",[1291,1292,1293,1300,1314],"ol",{},[1294,1295,1296,1297,1299],"li",{},"Create a Maven proxy repository (a remote repository in Artifactory) with ",[242,1298,720],{}," as its URL. It only serves release versions and needs no credentials.",[1294,1301,1302,1303,1305,1306,1309,1310,1313],{},"Limit it to the ",[242,1304,746],{}," group: in Nexus with a routing rule that allows ",[242,1307,1308],{},"^\u002Fcom\u002Fconfigdirector\u002F.*",", in Artifactory with the include pattern ",[242,1311,1312],{},"com\u002Fconfigdirector\u002F**",".",[1294,1315,1316],{},"Add it to the group repository (the virtual repository in Artifactory) that your builds use.",[231,1318,1319],{},"Your builds keep listing only the repository manager, and get the SDKs through it like any other dependency.",[255,1321,1323],{"id":1322},"verify-what-you-download","Verify what you download",[231,1325,1326,1327,1330],{},"Every jar, AAR and POM in the repository is signed with the ConfigDirector signing key. The signature is the ",[242,1328,1329],{},".asc"," file next to each one.",[1332,1333,1334,1340,1346],"ul",{},[1294,1335,1336,1337],{},"Fingerprint: ",[242,1338,1339],{},"779A DCFB 334D A3FD 2E00 5AB4 3CD4 0757 E05C 6B4C",[1294,1341,1342,1343],{},"User ID: ",[242,1344,1345],{},"ConfigDirector \u003Copensource@configdirector.com>",[1294,1347,1348],{},"Expires: 2028-08-20",[231,1350,1351,1352,1355,1356,1362,1363,1368],{},"The key is published on keys.openpgp.org and keyserver.ubuntu.com, and in full in the ",[242,1353,1354],{},"KEYS.md"," file of the ",[290,1357,292],{"href":1358,"rel":1359,"target":1361},"https:\u002F\u002Fgithub.com\u002FConfigDirector\u002Fandroid-sdk\u002Fblob\u002Fmain\u002FKEYS.md",[1360],"noopener","_blank"," and ",[290,1364,1367],{"href":1365,"rel":1366,"target":1361},"https:\u002F\u002Fgithub.com\u002FConfigDirector\u002Fjava-sdks\u002Fblob\u002Fmain\u002FKEYS.md",[1360],"Java SDK"," repositories.",[360,1370,1372],{"id":1371},"gradle-dependency-verification","Gradle dependency verification",[231,1374,1375,1376,1381,1382,1384,1385,1388,1389,1392],{},"If your build verifies signatures with ",[290,1377,1380],{"href":1378,"rel":1379,"target":1361},"https:\u002F\u002Fdocs.gradle.org\u002Fcurrent\u002Fuserguide\u002Fdependency_verification.html",[1360],"Gradle's dependency verification",", trust the key for the ",[242,1383,746],{}," group by adding this entry to ",[242,1386,1387],{},"\u003Ctrusted-keys>"," in ",[242,1390,1391],{},"gradle\u002Fverification-metadata.xml",". Gradle downloads the key from the key servers above.",[235,1394,1396],{"className":988,"code":1395,"language":990,"meta":240,"style":240},"\u003Ctrusted-key id=\"779ADCFB334DA3FD2E005AB43CD40757E05C6B4C\" group=\"com.configdirector\"\u002F>\n",[242,1397,1398],{"__ignoreMap":240},[245,1399,1400,1402,1405,1409,1411,1414,1417,1419,1422,1424,1426,1428,1430],{"class":247,"line":248},[245,1401,997],{"class":672},[245,1403,1404],{"class":1000},"trusted-key",[245,1406,1408],{"class":1407},"s9AJx"," id",[245,1410,568],{"class":672},[245,1412,1413],{"class":702},"\"",[245,1415,1416],{"class":571},"779ADCFB334DA3FD2E005AB43CD40757E05C6B4C",[245,1418,1413],{"class":702},[245,1420,1421],{"class":1407}," group",[245,1423,568],{"class":672},[245,1425,1413],{"class":702},[245,1427,746],{"class":571},[245,1429,1413],{"class":702},[245,1431,1432],{"class":672},"\u002F>\n",[360,1434,1435],{"id":1435},"gpg",[231,1437,1438],{},"Download a file and its signature, and check one against the other:",[235,1440,1444],{"className":1441,"code":1442,"language":1443,"meta":240,"style":240},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","gpg --keyserver hkps:\u002F\u002Fkeyserver.ubuntu.com --recv-keys 779ADCFB334DA3FD2E005AB43CD40757E05C6B4C\ncurl -O https:\u002F\u002Fmaven.configdirector.com\u002Fcom\u002Fconfigdirector\u002Fserver-sdk\u002F1.8.0\u002Fserver-sdk-1.8.0.jar\ncurl -O https:\u002F\u002Fmaven.configdirector.com\u002Fcom\u002Fconfigdirector\u002Fserver-sdk\u002F1.8.0\u002Fserver-sdk-1.8.0.jar.asc\ngpg --verify server-sdk-1.8.0.jar.asc server-sdk-1.8.0.jar\n","bash",[242,1445,1446,1464,1475,1484],{"__ignoreMap":240},[245,1447,1448,1451,1455,1458,1461],{"class":247,"line":248},[245,1449,1435],{"class":1450},"sbgvK",[245,1452,1454],{"class":1453},"stzsN"," --keyserver",[245,1456,1457],{"class":571}," hkps:\u002F\u002Fkeyserver.ubuntu.com",[245,1459,1460],{"class":1453}," --recv-keys",[245,1462,1463],{"class":571}," 779ADCFB334DA3FD2E005AB43CD40757E05C6B4C\n",[245,1465,1466,1469,1472],{"class":247,"line":512},[245,1467,1468],{"class":1450},"curl",[245,1470,1471],{"class":1453}," -O",[245,1473,1474],{"class":571}," https:\u002F\u002Fmaven.configdirector.com\u002Fcom\u002Fconfigdirector\u002Fserver-sdk\u002F1.8.0\u002Fserver-sdk-1.8.0.jar\n",[245,1476,1477,1479,1481],{"class":247,"line":520},[245,1478,1468],{"class":1450},[245,1480,1471],{"class":1453},[245,1482,1483],{"class":571}," https:\u002F\u002Fmaven.configdirector.com\u002Fcom\u002Fconfigdirector\u002Fserver-sdk\u002F1.8.0\u002Fserver-sdk-1.8.0.jar.asc\n",[245,1485,1486,1488,1491,1494],{"class":247,"line":529},[245,1487,1435],{"class":1450},[245,1489,1490],{"class":1453}," --verify",[245,1492,1493],{"class":571}," server-sdk-1.8.0.jar.asc",[245,1495,1496],{"class":571}," server-sdk-1.8.0.jar\n",[231,1498,1499],{},"Check that gpg reports a good signature and shows the fingerprint above.",[360,1501,1503],{"id":1502},"github-artifact-attestations","GitHub artifact attestations",[231,1505,1506,1507,985],{},"Every jar, AAR and POM also has a GitHub artifact attestation, which records the SDK's source repository on GitHub and the release workflow run that built the file. Check a downloaded file with the ",[290,1508,1511],{"href":1509,"rel":1510,"target":1361},"https:\u002F\u002Fcli.github.com",[1360],"GitHub CLI",[235,1513,1515],{"className":1441,"code":1514,"language":1443,"meta":240,"style":240},"gh attestation verify server-sdk-1.8.0.jar --owner ConfigDirector\n",[242,1516,1517],{"__ignoreMap":240},[245,1518,1519,1522,1525,1528,1531,1534],{"class":247,"line":248},[245,1520,1521],{"class":1450},"gh",[245,1523,1524],{"class":571}," attestation",[245,1526,1527],{"class":571}," verify",[245,1529,1530],{"class":571}," server-sdk-1.8.0.jar",[245,1532,1533],{"class":1453}," --owner",[245,1535,1536],{"class":571}," ConfigDirector\n",[231,1538,1539],{},"The command succeeds only when the file was built by a workflow in a ConfigDirector repository on GitHub.",[1541,1542,1543],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sQzsp, html code.shiki .sQzsp{--shiki-light:#E53935;--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s9AJx, html code.shiki .s9AJx{--shiki-light:#9C3EDA;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":240,"searchDepth":512,"depth":512,"links":1545},[1546,1549,1553,1554,1555],{"id":257,"depth":512,"text":258,"children":1547},[1548],{"id":362,"depth":520,"text":363},{"id":470,"depth":512,"text":471,"children":1550},[1551,1552],{"id":474,"depth":520,"text":475},{"id":977,"depth":520,"text":978},{"id":1126,"depth":512,"text":1127},{"id":1285,"depth":512,"text":1286},{"id":1322,"depth":512,"text":1323,"children":1556},[1557,1558,1559],{"id":1371,"depth":520,"text":1372},{"id":1435,"depth":520,"text":1435},{"id":1502,"depth":520,"text":1503},"Add the ConfigDirector Maven repository to a Gradle or Maven build to install the Android and Java SDKs, and verify the files it serves","md",null,{"modifiedAt":1564},"2026-10-05T04:23:30.000Z",{"title":206,"icon":209},{"title":206,"description":1560},"1wYQdZ3fQ6u8JJzpNZ9SEkT7-k4b9X_FPqlNUG4omag",[1569,1572],{"title":162,"path":202,"stem":203,"description":1570,"icon":168,"icons":1571,"children":-1},"ConfigDirector Provider for the OpenFeature .NET SDK",[168,165],{"title":216,"path":217,"stem":218,"description":1573,"icon":219,"children":-1},"Manage projects, environments, configs, and targeting rules as code with the ConfigDirector Terraform provider",1791174299116]