[{"data":1,"prerenderedAt":376},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-json-schema-validation":158,"-getting-started-json-schema-validation-surround":371},[4,35,143],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F1.quickstart","i-lucide-fast-forward",{"title":16,"path":17,"stem":18,"icon":19},"Core Concepts","\u002Fgetting-started\u002Fcore-concepts","1.getting-started\u002F2.core-concepts","i-lucide-workflow",{"title":21,"path":22,"stem":23,"icon":24},"Configs Anatomy","\u002Fgetting-started\u002Fconfigs","1.getting-started\u002F3.configs","i-lucide-file-cog",{"title":26,"path":27,"stem":28,"icon":29},"Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F4.architecture","i-lucide-layers",{"title":31,"path":32,"stem":33,"icon":34},"JSON Schema Validation","\u002Fgetting-started\u002Fjson-schema-validation","1.getting-started\u002F5.json-schema-validation","i-lucide-braces",{"title":36,"defaultOpen":37,"path":38,"stem":39,"children":40,"page":6},"SDKs",true,"\u002Fsdks","2.sdks",[41,46,72,97,113],{"title":42,"path":43,"stem":44,"icon":45},"Available SDKs","\u002Fsdks\u002Favailable-sdks","2.sdks\u002F1.available-sdks","i-lucide-list",{"title":47,"icon":48,"defaultOpen":37,"path":49,"stem":50,"children":51,"page":6},"Browser SDKs","i-lucide-monitor","\u002Fsdks\u002Fbrowser","2.sdks\u002F2.browser",[52,57,62,67],{"title":53,"path":54,"stem":55,"icon":56},"Javascript","\u002Fsdks\u002Fbrowser\u002Fjavascript","2.sdks\u002F2.browser\u002F1.javascript","cd-logos-javascript",{"title":58,"path":59,"stem":60,"icon":61},"React","\u002Fsdks\u002Fbrowser\u002Freact","2.sdks\u002F2.browser\u002F2.react","cd-logos-react-light",{"title":63,"path":64,"stem":65,"icon":66},"Vue","\u002Fsdks\u002Fbrowser\u002Fvue","2.sdks\u002F2.browser\u002F3.vue","cd-logos-vue",{"title":68,"path":69,"stem":70,"icon":71},"OpenFeature Web","\u002Fsdks\u002Fbrowser\u002Fopenfeature-web","2.sdks\u002F2.browser\u002F4.openfeature-web","cd-logos-openfeature",{"title":73,"icon":74,"defaultOpen":37,"path":75,"stem":76,"children":77,"page":6},"Mobile SDKs","i-lucide-smartphone","\u002Fsdks\u002Fmobile","2.sdks\u002F3.mobile",[78,82,87,92],{"title":79,"path":80,"stem":81,"icon":61},"React Native","\u002Fsdks\u002Fmobile\u002Freact-native","2.sdks\u002F3.mobile\u002F1.react-native",{"title":83,"path":84,"stem":85,"icon":86},"Flutter","\u002Fsdks\u002Fmobile\u002Fflutter","2.sdks\u002F3.mobile\u002F2.flutter","cd-logos-flutter",{"title":88,"path":89,"stem":90,"icon":91},"Swift","\u002Fsdks\u002Fmobile\u002Fswift","2.sdks\u002F3.mobile\u002F3.swift","cd-logos-swift",{"title":93,"path":94,"stem":95,"icon":96},"Android","\u002Fsdks\u002Fmobile\u002Fandroid","2.sdks\u002F3.mobile\u002F4.android","cd-logos-android",{"title":98,"icon":99,"defaultOpen":37,"path":100,"stem":101,"children":102,"page":6},"Meta-framework SDKs","i-lucide-monitor-smartphone","\u002Fsdks\u002Fmeta","2.sdks\u002F4.meta",[103,108],{"title":104,"path":105,"stem":106,"icon":107},"Next.js","\u002Fsdks\u002Fmeta\u002Fnextjs","2.sdks\u002F4.meta\u002F1.nextjs","cd-logos-nextjs",{"title":109,"path":110,"stem":111,"icon":112},"Nuxt","\u002Fsdks\u002Fmeta\u002Fnuxt","2.sdks\u002F4.meta\u002F2.nuxt","cd-logos-nuxt",{"title":114,"icon":115,"defaultOpen":37,"path":116,"stem":117,"children":118,"page":6},"Server SDKs","i-lucide-server","\u002Fsdks\u002Fserver","2.sdks\u002F5.server",[119,124,128,133,138],{"title":120,"path":121,"stem":122,"icon":123},"Node.js","\u002Fsdks\u002Fserver\u002Fnode-js","2.sdks\u002F5.server\u002F1.node-js","cd-logos-nodejs",{"title":125,"path":126,"stem":127,"icon":71},"OpenFeature Node.js","\u002Fsdks\u002Fserver\u002Fopenfeature-node","2.sdks\u002F5.server\u002F2.openfeature-node",{"title":129,"path":130,"stem":131,"icon":132},"Python","\u002Fsdks\u002Fserver\u002Fpython","2.sdks\u002F5.server\u002F3.python","cd-logos-python",{"title":134,"path":135,"stem":136,"icon":137},"Java","\u002Fsdks\u002Fserver\u002Fjava","2.sdks\u002F5.server\u002F4.java","cd-logos-java",{"title":139,"path":140,"stem":141,"icon":142},".NET","\u002Fsdks\u002Fserver\u002Fdotnet","2.sdks\u002F5.server\u002F5.dotnet","cd-logos-dotnet",{"title":144,"defaultOpen":37,"path":145,"stem":146,"children":147,"page":6},"Integrations","\u002Fintegrations","3.integrations",[148,153],{"title":149,"path":150,"stem":151,"icon":152},"Terraform","\u002Fintegrations\u002Fterraform","3.integrations\u002F1.terraform","cd-logos-terraform",{"title":154,"path":155,"stem":156,"icon":157},"MCP","\u002Fintegrations\u002Fmcp","3.integrations\u002F2.mcp","cd-logos-mcp",{"id":159,"title":31,"body":160,"description":364,"extension":365,"links":366,"meta":367,"navigation":368,"path":32,"seo":369,"stem":33,"__hash__":370},"docs\u002F1.getting-started\u002F5.json-schema-validation.md",{"type":161,"value":162,"toc":356},"minimark",[163,171,174,179,192,196,207,211,214,304,308,311,349],[164,165,166,170],"p",{},[167,168,169],"code",{},"JSON"," configs can be configured with a JSON Schema. When a schema is set, every value the config can return is validated against the schema before it is saved, so a value that does not pass validation never reaches your applications. This applies to targeting rules values (including the default rule), and experiment variations, whether they are changed from the dashboard, the Admin API, or Terraform.",[164,172,173],{},"JSON Schema Validation is available in all of our plans.",[175,176,178],"h2",{"id":177},"when-values-are-validated","When values are validated",[180,181,182,186,189],"ul",{},[183,184,185],"li",{},"When you add or update the schema, every existing value in every environment is validated against the new schema. The update is rejected if any environment holds a value that no longer validates.",[183,187,188],{},"When you save targeting rules for an environment, every rule value is validated against the schema.",[183,190,191],{},"When you update the variations of a JSON experiment, every variation is validated against the schema.",[175,193,195],{"id":194},"schema-support","Schema support",[164,197,198,199,202,203,206],{},"Schemas are validated as JSON Schema draft-07. Regular expressions in ",[167,200,201],{},"pattern"," and ",[167,204,205],{},"patternProperties"," are analyzed before the schema is accepted, and a pattern that can take exponential time to match, known as catastrophic backtracking, is rejected. If you received that error when saving a JSON Schema, rewrite the regular expression patterns with bounded repetition instead of nested quantifiers.",[175,208,210],{"id":209},"limits","Limits",[164,212,213],{},"These limits apply to every plan.",[215,216,217,230],"table",{},[218,219,220],"thead",{},[221,222,223,227],"tr",{},[224,225,226],"th",{},"Limit",[224,228,229],{},"Value",[231,232,233,242,250,258,269,277,285],"tbody",{},[221,234,235,239],{},[236,237,238],"td",{},"Schema size",[236,240,241],{},"32 KB",[221,243,244,247],{},[236,245,246],{},"JSON value size",[236,248,249],{},"16 KB",[221,251,252,255],{},[236,253,254],{},"Nesting depth of a schema",[236,256,257],{},"50 levels",[221,259,260,266],{},[236,261,262,263],{},"Items in an ",[167,264,265],{},"enum",[236,267,268],{},"1,000",[221,270,271,274],{},[236,272,273],{},"Regular expression patterns per schema",[236,275,276],{},"32",[221,278,279,282],{},[236,280,281],{},"Length of any given regex pattern",[236,283,284],{},"512 characters",[221,286,287,301],{},[236,288,289,290,293,294,297,298],{},"Branches across ",[167,291,292],{},"anyOf",", ",[167,295,296],{},"oneOf",", and ",[167,299,300],{},"allOf",[236,302,303],{},"100",[175,305,307],{"id":306},"hourly-budgets-on-the-free-plan","Hourly budgets on the Free plan",[164,309,310],{},"Validating the provided schema itself, and validating JSON against a schema are two of the most resource intensive operations we run. In order to protect our systems from abuse, the Free plan has a fair-use budget per organization, which resets every hour:",[215,312,313,326],{},[218,314,315],{},[221,316,317,320,323],{},[224,318,319],{},"Operation",[224,321,322],{},"Free plan",[224,324,325],{},"Paid plans",[231,327,328,339],{},[221,329,330,333,336],{},[236,331,332],{},"Schema updates per hour",[236,334,335],{},"20",[236,337,338],{},"No limit",[221,340,341,344,347],{},[236,342,343],{},"JSON value validations per hour",[236,345,346],{},"300",[236,348,338],{},[164,350,351,352,355],{},"A schema updates is any save that adds, edits, or removes a schema. A value validation is any save of targeting rules or experiment variations for a config that has a JSON schema. When the budget is used up, the update is rejected with an error that says when the budget resets. The Admin API responds with HTTP status ",[167,353,354],{},"429",", and av error message in the response body.",{"title":357,"searchDepth":358,"depth":358,"links":359},"",2,[360,361,362,363],{"id":177,"depth":358,"text":178},{"id":194,"depth":358,"text":195},{"id":209,"depth":358,"text":210},{"id":306,"depth":358,"text":307},"Validate JSON config values against a schema, and the limits that apply","md",null,{},{"icon":34},{"title":31,"description":364},"HjcOhSQgI7eQH-dBTfdvZcVWHCeatGc8y_eMOcxDeNU",[372,374],{"title":26,"path":27,"stem":28,"description":373,"icon":29,"children":-1},"How ConfigDirector delivers config values and updates",{"title":42,"path":43,"stem":44,"description":375,"icon":45,"children":-1},"Select one of the SDKs below to view its documentation.",1789677023768]