[{"data":1,"prerenderedAt":1668},["ShallowReactive",2],{"navigation":3,"\u002Fdevelopment\u002Fruntime-contract":250,"\u002Fdevelopment\u002Fruntime-contract-surround":1663},[4,28,56,91,117,135,169,224],{"title":5,"path":6,"stem":7,"children":8,"icon":27},"Start here","\u002Fgetting-started","1.getting-started\u002F1.index",[9,11,15,19,23],{"title":10,"path":6,"stem":7},"Introduction",{"title":12,"path":13,"stem":14},"Decisions and open gates","\u002Fgetting-started\u002Fdecisions","1.getting-started\u002F2.decisions",{"title":16,"path":17,"stem":18},"Scope and non-goals","\u002Fgetting-started\u002Fscope","1.getting-started\u002F3.scope",{"title":20,"path":21,"stem":22},"Organization pilot","\u002Fgetting-started\u002Fpilot","1.getting-started\u002F4.pilot",{"title":24,"path":25,"stem":26},"Economics and quotas","\u002Fgetting-started\u002Feconomics","1.getting-started\u002F5.economics","i-lucide-compass",{"title":29,"path":30,"stem":31,"children":32,"icon":55},"Architecture","\u002Farchitecture","2.architecture\u002F1.index",[33,35,39,43,47,51],{"title":34,"path":30,"stem":31},"System architecture",{"title":36,"path":37,"stem":38},"Trust zones","\u002Farchitecture\u002Ftrust-zones","2.architecture\u002F2.trust-zones",{"title":40,"path":41,"stem":42},"Control plane","\u002Farchitecture\u002Fcontrol-plane","2.architecture\u002F3.control-plane",{"title":44,"path":45,"stem":46},"Organization tenancy","\u002Farchitecture\u002Ftenancy","2.architecture\u002F4.tenancy",{"title":48,"path":49,"stem":50},"Core data model","\u002Farchitecture\u002Fdata-model","2.architecture\u002F5.data-model",{"title":52,"path":53,"stem":54},"Codebase organization","\u002Farchitecture\u002Fcodebase","2.architecture\u002F6.codebase","i-lucide-layers",{"title":57,"icon":58,"path":59,"stem":60,"children":61,"page":90},"Identity and security","i-lucide-shield-check","\u002Fsecurity","3.security",[62,66,70,74,78,82,86],{"title":63,"path":64,"stem":65},"Identity and sessions","\u002Fsecurity\u002Fidentity","3.security\u002F1.identity",{"title":67,"path":68,"stem":69},"Domains and TLS","\u002Fsecurity\u002Fdomains","3.security\u002F2.domains",{"title":71,"path":72,"stem":73},"Ingress and egress","\u002Fsecurity\u002Fnetworking","3.security\u002F3.networking",{"title":75,"path":76,"stem":77},"Access policies and WAF-lite","\u002Fsecurity\u002Faccess-policies","3.security\u002F4.access-policies",{"title":79,"path":80,"stem":81},"Secrets and integrations","\u002Fsecurity\u002Fsecrets-integrations","3.security\u002F5.secrets-integrations",{"title":83,"path":84,"stem":85},"Governance and ownership","\u002Fsecurity\u002Fgovernance","3.security\u002F6.governance",{"title":87,"path":88,"stem":89},"Threat model","\u002Fsecurity\u002Fthreat-model","3.security\u002F7.threat-model",false,{"title":92,"icon":93,"path":94,"stem":95,"children":96,"page":90},"Building applications","i-lucide-code","\u002Fdevelopment","4.development",[97,101,105,109,113],{"title":98,"path":99,"stem":100},"AI and MCP","\u002Fdevelopment\u002Fai-mcp","4.development\u002F1.ai-mcp",{"title":102,"path":103,"stem":104},"Source control","\u002Fdevelopment\u002Fsource-control","4.development\u002F2.source-control",{"title":106,"path":107,"stem":108},"Sandboxed builds","\u002Fdevelopment\u002Fbuilds","4.development\u002F3.builds",{"title":110,"path":111,"stem":112},"Runtime contract and SDK","\u002Fdevelopment\u002Fruntime-contract","4.development\u002F4.runtime-contract",{"title":114,"path":115,"stem":116},"APIs and protocols","\u002Fdevelopment\u002Fapi","4.development\u002F5.api",{"title":118,"icon":119,"path":120,"stem":121,"children":122,"page":90},"Runtime and delivery","i-lucide-rocket","\u002Fdelivery","5.delivery",[123,127,131],{"title":124,"path":125,"stem":126},"Runtime clusters and previews","\u002Fdelivery\u002Fruntime-clusters","5.delivery\u002F1.runtime-clusters",{"title":128,"path":129,"stem":130},"Deployments and approvals","\u002Fdelivery\u002Fdeployments","5.delivery\u002F2.deployments",{"title":132,"path":133,"stem":134},"Databases and recovery","\u002Fdelivery\u002Fdata-recovery","5.delivery\u002F3.data-recovery",{"title":136,"icon":137,"path":138,"stem":139,"children":140,"page":90},"Operations","i-lucide-activity","\u002Foperations","6.operations",[141,145,149,153,157,161,165],{"title":142,"path":143,"stem":144},"Observability and audit","\u002Foperations\u002Fobservability","6.operations\u002F1.observability",{"title":146,"path":147,"stem":148},"Operating model","\u002Foperations\u002Foperating-model","6.operations\u002F2.operating-model",{"title":150,"path":151,"stem":152},"Deploy and roll back","\u002Foperations\u002Fdeploy-rollback","6.operations\u002F3.deploy-rollback",{"title":154,"path":155,"stem":156},"Back up and restore","\u002Foperations\u002Fbackup-restore","6.operations\u002F4.backup-restore",{"title":158,"path":159,"stem":160},"Upgrade and patch","\u002Foperations\u002Fupgrades","6.operations\u002F5.upgrades",{"title":162,"path":163,"stem":164},"Rotate keys and credentials","\u002Foperations\u002Fkey-rotation","6.operations\u002F6.key-rotation",{"title":166,"path":167,"stem":168},"Incidents and access revocation","\u002Foperations\u002Fincidents","6.operations\u002F7.incidents",{"title":170,"path":171,"stem":172,"children":173,"icon":223},"Implementation plan","\u002Froadmap","7.roadmap\u002F01.index",[174,175,179,183,187,191,195,199,203,207,211,215,219],{"title":170,"path":171,"stem":172},{"title":176,"path":177,"stem":178},"Phase 0: architecture spikes and ADRs","\u002Froadmap\u002Fphase-0","7.roadmap\u002F02.phase-0",{"title":180,"path":181,"stem":182},"Phase 1: control-plane foundation","\u002Froadmap\u002Fphase-1","7.roadmap\u002F03.phase-1",{"title":184,"path":185,"stem":186},"Phase 2: managed source and change sets","\u002Froadmap\u002Fphase-2","7.roadmap\u002F04.phase-2",{"title":188,"path":189,"stem":190},"Phase 3: sandboxed build system","\u002Froadmap\u002Fphase-3","7.roadmap\u002F05.phase-3",{"title":192,"path":193,"stem":194},"Phase 4: runtime and data plane","\u002Froadmap\u002Fphase-4","7.roadmap\u002F06.phase-4",{"title":196,"path":197,"stem":198},"Phase 5: deployment, preview, migration, and recovery","\u002Froadmap\u002Fphase-5","7.roadmap\u002F07.phase-5",{"title":200,"path":201,"stem":202},"Phase 6: Entra identity and security policy","\u002Froadmap\u002Fphase-6","7.roadmap\u002F08.phase-6",{"title":204,"path":205,"stem":206},"Phase 7: MCP and AI-native workflow","\u002Froadmap\u002Fphase-7","7.roadmap\u002F09.phase-7",{"title":208,"path":209,"stem":210},"Phase 8: Pilot hardening","\u002Froadmap\u002Fphase-8","7.roadmap\u002F10.phase-8",{"title":212,"path":213,"stem":214},"Phase 9: developer hybrid and v1 GA","\u002Froadmap\u002Fphase-9","7.roadmap\u002F11.phase-9",{"title":216,"path":217,"stem":218},"Test strategy","\u002Froadmap\u002Ftesting","7.roadmap\u002F12.testing",{"title":220,"path":221,"stem":222},"Definition of done","\u002Froadmap\u002Fdefinition-of-done","7.roadmap\u002F13.definition-of-done","i-lucide-list-checks",{"title":225,"icon":226,"path":227,"stem":228,"children":229,"page":90},"Reference","i-lucide-book-open","\u002Freference","8.reference",[230,234,238,242,246],{"title":231,"path":232,"stem":233},"Plan coverage","\u002Freference\u002Fplan-coverage","8.reference\u002F1.plan-coverage",{"title":235,"path":236,"stem":237},"Decision register","\u002Freference\u002Fdecisions","8.reference\u002F2.decisions",{"title":239,"path":240,"stem":241},"Glossary","\u002Freference\u002Fglossary","8.reference\u002F3.glossary",{"title":243,"path":244,"stem":245},"Sources","\u002Freference\u002Fsources","8.reference\u002F4.sources",{"title":247,"path":248,"stem":249},"Contributing and docs access","\u002Freference\u002Fcontributing","8.reference\u002F5.contributing",{"id":251,"title":110,"body":252,"description":1657,"extension":1658,"links":1659,"meta":1660,"navigation":572,"path":111,"seo":1661,"stem":112,"__hash__":1662},"docs\u002F4.development\u002F4.runtime-contract.md",{"type":253,"value":254,"toc":1639},"minimark",[255,271,276,279,290,293,327,330,334,337,343,346,350,353,436,439,442,454,458,461,467,470,476,484,488,491,789,797,800,826,830,1023,1026,1029,1035,1039,1067,1070,1090,1093,1099,1102,1106,1109,1166,1169,1172,1175,1181,1184,1187,1261,1264,1290,1293,1296,1300,1303,1309,1317,1321,1324,1365,1368,1375,1378,1384,1387,1419,1422,1426,1604,1607,1611,1614,1620,1624,1635],[256,257,258],"note",{},[259,260,261,265,266,270],"p",{},[262,263,264],"strong",{},"v1 design baseline."," This page specifies intended behavior. Delivery and validation are tracked in the ",[267,268,269],"a",{"href":171},"implementation plan","; it is not a claim that the platform is already implemented.",[272,273,275],"h2",{"id":274},"supported-application-model","Supported application model",[259,277,278],{},"V1 supports:",[280,281,287],"pre",{"className":282,"code":284,"language":285,"meta":286},[283],"language-text","Nuxt\n  ↓\nNitro Workers-compatible output\n  ↓\nworkerd\n","text","",[288,289,284],"code",{"__ignoreMap":286},[259,291,292],{},"The platform does not support:",[294,295,296,300,303,306,309,312,315,318,321,324],"ul",{},[297,298,299],"li",{},"Arbitrary Linux containers",[297,301,302],{},"Express servers listening on a port",[297,304,305],{},"Persistent Node processes",[297,307,308],{},"Native Node add-ons",[297,310,311],{},"Arbitrary binaries",[297,313,314],{},"Local durable filesystem",[297,316,317],{},"Raw TCP or UDP",[297,319,320],{},"Dockerfiles",[297,322,323],{},"User-managed daemons",[297,325,326],{},"Background threads intended to live forever",[259,328,329],{},"Next.js is a later framework target using the same runtime contract.",[272,331,333],{"id":332},"web-platform-apis","Web-platform APIs",[259,335,336],{},"Supported APIs include the documented runtime subset of:",[280,338,341],{"className":339,"code":340,"language":285,"meta":286},[283],"Request\nResponse\nHeaders\nURL\nURLPattern where supported\nfetch\nReadableStream\nWritableStream\nTransformStream\nWebSocket where supported\ncrypto\nTextEncoder\u002FTextDecoder\nAbortController\nconsole\ntimers within platform limits\n",[288,342,340],{"__ignoreMap":286},[259,344,345],{},"Node compatibility is a documented subset—not a promise that the runtime behaves like a conventional Node server.",[272,347,349],{"id":348},"runtime-compatibility-version","Runtime compatibility version",[259,351,352],{},"Each app pins a contract version:",[280,354,358],{"className":355,"code":356,"language":357,"meta":286,"style":286},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineIntrnlConfig({\n  compatibilityDate: '2026-09-01',\n  runtime: 'workers',\n});\n","ts",[288,359,360,384,407,424],{"__ignoreMap":286},[361,362,365,369,372,376,380],"span",{"class":363,"line":364},"line",1,[361,366,368],{"class":367},"s7zQu","export",[361,370,371],{"class":367}," default",[361,373,375],{"class":374},"s2Zo4"," defineIntrnlConfig",[361,377,379],{"class":378},"sTEyZ","(",[361,381,383],{"class":382},"sMK4o","{\n",[361,385,387,391,394,397,401,404],{"class":363,"line":386},2,[361,388,390],{"class":389},"swJcz","  compatibilityDate",[361,392,393],{"class":382},":",[361,395,396],{"class":382}," '",[361,398,400],{"class":399},"sfazB","2026-09-01",[361,402,403],{"class":382},"'",[361,405,406],{"class":382},",\n",[361,408,410,413,415,417,420,422],{"class":363,"line":409},3,[361,411,412],{"class":389},"  runtime",[361,414,393],{"class":382},[361,416,396],{"class":382},[361,418,419],{"class":399},"workers",[361,421,403],{"class":382},[361,423,406],{"class":382},[361,425,427,430,433],{"class":363,"line":426},4,[361,428,429],{"class":382},"}",[361,431,432],{"class":378},")",[361,434,435],{"class":382},";\n",[259,437,438],{},"Platform upgrades preserve existing behavior where practical.",[259,440,441],{},"New APIs or breaking semantics require a new compatibility version and an explicit app upgrade.",[259,443,444,447,448],{},[288,445,446],{},"workerd"," itself uses date-based compatibility behavior, which aligns well with this model. ",[267,449,453],{"href":450,"rel":451},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkers\u002Fconfiguration\u002Fcompatibility-dates\u002F",[452],"nofollow","Workers compatibility dates",[272,455,457],{"id":456},"bindings","Bindings",[259,459,460],{},"V1 bindings:",[280,462,465],{"className":463,"code":464,"language":285,"meta":286},[283],"DB\nKV\nAUTH\nCONFIG\nINTEGRATIONS\n",[288,466,464],{"__ignoreMap":286},[259,468,469],{},"Potential later bindings:",[280,471,474],{"className":472,"code":473,"language":285,"meta":286},[283],"FILES\nQUEUE\nSCHEDULE\nSERVICE\nAI\n",[288,475,473],{"__ignoreMap":286},[259,477,478,479],{},"Cloudflare’s binding model is useful because a binding supplies both a capability and its API without revealing the underlying secret or connection material. ",[267,480,483],{"href":481,"rel":482},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkers\u002Fruntime-apis\u002Fbindings\u002F",[452],"Workers bindings",[272,485,487],{"id":486},"database-binding","Database binding",[259,489,490],{},"D1-inspired API:",[280,492,494],{"className":355,"code":493,"language":357,"meta":286,"style":286},"const result = await env.DB\n  .prepare('SELECT * FROM requests WHERE owner_id = ?')\n  .bind(user.id)\n  .all();\n\nconst record = await env.DB\n  .prepare('SELECT * FROM requests WHERE id = ?')\n  .bind(id)\n  .first();\n\nawait env.DB\n  .prepare('INSERT INTO requests (...) VALUES (...)')\n  .bind(...)\n  .run();\n\nawait env.DB.batch([\n  env.DB.prepare(...).bind(...),\n  env.DB.prepare(...).bind(...),\n]);\n",[288,495,496,520,540,555,567,574,592,610,620,632,637,649,667,681,693,698,718,750,781],{"__ignoreMap":286},[361,497,498,502,505,508,511,514,517],{"class":363,"line":364},[361,499,501],{"class":500},"spNyl","const",[361,503,504],{"class":378}," result ",[361,506,507],{"class":382},"=",[361,509,510],{"class":367}," await",[361,512,513],{"class":378}," env",[361,515,516],{"class":382},".",[361,518,519],{"class":378},"DB\n",[361,521,522,525,528,530,532,535,537],{"class":363,"line":386},[361,523,524],{"class":382},"  .",[361,526,527],{"class":374},"prepare",[361,529,379],{"class":378},[361,531,403],{"class":382},[361,533,534],{"class":399},"SELECT * FROM requests WHERE owner_id = ?",[361,536,403],{"class":382},[361,538,539],{"class":378},")\n",[361,541,542,544,547,550,552],{"class":363,"line":409},[361,543,524],{"class":382},[361,545,546],{"class":374},"bind",[361,548,549],{"class":378},"(user",[361,551,516],{"class":382},[361,553,554],{"class":378},"id)\n",[361,556,557,559,562,565],{"class":363,"line":426},[361,558,524],{"class":382},[361,560,561],{"class":374},"all",[361,563,564],{"class":378},"()",[361,566,435],{"class":382},[361,568,570],{"class":363,"line":569},5,[361,571,573],{"emptyLinePlaceholder":572},true,"\n",[361,575,577,579,582,584,586,588,590],{"class":363,"line":576},6,[361,578,501],{"class":500},[361,580,581],{"class":378}," record ",[361,583,507],{"class":382},[361,585,510],{"class":367},[361,587,513],{"class":378},[361,589,516],{"class":382},[361,591,519],{"class":378},[361,593,595,597,599,601,603,606,608],{"class":363,"line":594},7,[361,596,524],{"class":382},[361,598,527],{"class":374},[361,600,379],{"class":378},[361,602,403],{"class":382},[361,604,605],{"class":399},"SELECT * FROM requests WHERE id = ?",[361,607,403],{"class":382},[361,609,539],{"class":378},[361,611,613,615,617],{"class":363,"line":612},8,[361,614,524],{"class":382},[361,616,546],{"class":374},[361,618,619],{"class":378},"(id)\n",[361,621,623,625,628,630],{"class":363,"line":622},9,[361,624,524],{"class":382},[361,626,627],{"class":374},"first",[361,629,564],{"class":378},[361,631,435],{"class":382},[361,633,635],{"class":363,"line":634},10,[361,636,573],{"emptyLinePlaceholder":572},[361,638,640,643,645,647],{"class":363,"line":639},11,[361,641,642],{"class":367},"await",[361,644,513],{"class":378},[361,646,516],{"class":382},[361,648,519],{"class":378},[361,650,652,654,656,658,660,663,665],{"class":363,"line":651},12,[361,653,524],{"class":382},[361,655,527],{"class":374},[361,657,379],{"class":378},[361,659,403],{"class":382},[361,661,662],{"class":399},"INSERT INTO requests (...) VALUES (...)",[361,664,403],{"class":382},[361,666,539],{"class":378},[361,668,670,672,674,676,679],{"class":363,"line":669},13,[361,671,524],{"class":382},[361,673,546],{"class":374},[361,675,379],{"class":378},[361,677,678],{"class":382},"...",[361,680,539],{"class":378},[361,682,684,686,689,691],{"class":363,"line":683},14,[361,685,524],{"class":382},[361,687,688],{"class":374},"run",[361,690,564],{"class":378},[361,692,435],{"class":382},[361,694,696],{"class":363,"line":695},15,[361,697,573],{"emptyLinePlaceholder":572},[361,699,701,703,705,707,710,712,715],{"class":363,"line":700},16,[361,702,642],{"class":367},[361,704,513],{"class":378},[361,706,516],{"class":382},[361,708,709],{"class":378},"DB",[361,711,516],{"class":382},[361,713,714],{"class":374},"batch",[361,716,717],{"class":378},"([\n",[361,719,721,724,726,728,730,732,734,736,738,740,742,744,746,748],{"class":363,"line":720},17,[361,722,723],{"class":378},"  env",[361,725,516],{"class":382},[361,727,709],{"class":378},[361,729,516],{"class":382},[361,731,527],{"class":374},[361,733,379],{"class":378},[361,735,678],{"class":382},[361,737,432],{"class":378},[361,739,516],{"class":382},[361,741,546],{"class":374},[361,743,379],{"class":378},[361,745,678],{"class":382},[361,747,432],{"class":378},[361,749,406],{"class":382},[361,751,753,755,757,759,761,763,765,767,769,771,773,775,777,779],{"class":363,"line":752},18,[361,754,723],{"class":378},[361,756,516],{"class":382},[361,758,709],{"class":378},[361,760,516],{"class":382},[361,762,527],{"class":374},[361,764,379],{"class":378},[361,766,678],{"class":382},[361,768,432],{"class":378},[361,770,516],{"class":382},[361,772,546],{"class":374},[361,774,379],{"class":378},[361,776,678],{"class":382},[361,778,432],{"class":378},[361,780,406],{"class":382},[361,782,784,787],{"class":363,"line":783},19,[361,785,786],{"class":378},"])",[361,788,435],{"class":382},[259,790,791,792],{},"This mirrors the familiar prepared-statement shape of D1’s Worker binding without promising complete D1 product parity. ",[267,793,796],{"href":794,"rel":795},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fd1\u002Fworker-api\u002Fprepared-statements\u002F",[452],"D1 prepared statements",[259,798,799],{},"Document intrnl’s own semantics for:",[294,801,802,805,808,811,814,817,820,823],{},[297,803,804],{},"Batch atomicity",[297,806,807],{},"Result shapes",[297,809,810],{},"Errors",[297,812,813],{},"Parameter types",[297,815,816],{},"Limits",[297,818,819],{},"Concurrency",[297,821,822],{},"Timeouts",[297,824,825],{},"Schema operations",[272,827,829],{"id":828},"kv-binding","KV binding",[280,831,833],{"className":355,"code":832,"language":357,"meta":286,"style":286},"await env.KV.get('key');\nawait env.KV.get('key', { type: 'json' });\nawait env.KV.put('key', value, { expirationTtl: 3600 });\nawait env.KV.delete('key');\nawait env.KV.list({ prefix: 'session:' });\n",[288,834,835,864,911,958,985],{"__ignoreMap":286},[361,836,837,839,841,843,846,848,851,853,855,858,860,862],{"class":363,"line":364},[361,838,642],{"class":367},[361,840,513],{"class":378},[361,842,516],{"class":382},[361,844,845],{"class":378},"KV",[361,847,516],{"class":382},[361,849,850],{"class":374},"get",[361,852,379],{"class":378},[361,854,403],{"class":382},[361,856,857],{"class":399},"key",[361,859,403],{"class":382},[361,861,432],{"class":378},[361,863,435],{"class":382},[361,865,866,868,870,872,874,876,878,880,882,884,886,889,892,895,897,899,902,904,907,909],{"class":363,"line":386},[361,867,642],{"class":367},[361,869,513],{"class":378},[361,871,516],{"class":382},[361,873,845],{"class":378},[361,875,516],{"class":382},[361,877,850],{"class":374},[361,879,379],{"class":378},[361,881,403],{"class":382},[361,883,857],{"class":399},[361,885,403],{"class":382},[361,887,888],{"class":382},",",[361,890,891],{"class":382}," {",[361,893,894],{"class":389}," type",[361,896,393],{"class":382},[361,898,396],{"class":382},[361,900,901],{"class":399},"json",[361,903,403],{"class":382},[361,905,906],{"class":382}," }",[361,908,432],{"class":378},[361,910,435],{"class":382},[361,912,913,915,917,919,921,923,926,928,930,932,934,936,939,941,943,946,948,952,954,956],{"class":363,"line":409},[361,914,642],{"class":367},[361,916,513],{"class":378},[361,918,516],{"class":382},[361,920,845],{"class":378},[361,922,516],{"class":382},[361,924,925],{"class":374},"put",[361,927,379],{"class":378},[361,929,403],{"class":382},[361,931,857],{"class":399},[361,933,403],{"class":382},[361,935,888],{"class":382},[361,937,938],{"class":378}," value",[361,940,888],{"class":382},[361,942,891],{"class":382},[361,944,945],{"class":389}," expirationTtl",[361,947,393],{"class":382},[361,949,951],{"class":950},"sbssI"," 3600",[361,953,906],{"class":382},[361,955,432],{"class":378},[361,957,435],{"class":382},[361,959,960,962,964,966,968,970,973,975,977,979,981,983],{"class":363,"line":426},[361,961,642],{"class":367},[361,963,513],{"class":378},[361,965,516],{"class":382},[361,967,845],{"class":378},[361,969,516],{"class":382},[361,971,972],{"class":374},"delete",[361,974,379],{"class":378},[361,976,403],{"class":382},[361,978,857],{"class":399},[361,980,403],{"class":382},[361,982,432],{"class":378},[361,984,435],{"class":382},[361,986,987,989,991,993,995,997,1000,1002,1005,1008,1010,1012,1015,1017,1019,1021],{"class":363,"line":569},[361,988,642],{"class":367},[361,990,513],{"class":378},[361,992,516],{"class":382},[361,994,845],{"class":378},[361,996,516],{"class":382},[361,998,999],{"class":374},"list",[361,1001,379],{"class":378},[361,1003,1004],{"class":382},"{",[361,1006,1007],{"class":389}," prefix",[361,1009,393],{"class":382},[361,1011,396],{"class":382},[361,1013,1014],{"class":399},"session:",[361,1016,403],{"class":382},[361,1018,906],{"class":382},[361,1020,432],{"class":378},[361,1022,435],{"class":382},[259,1024,1025],{},"Valkey may provide stronger consistency than Cloudflare KV. Do not artificially weaken it for compatibility.",[259,1027,1028],{},"The documented contract should state:",[1030,1031,1032],"blockquote",{},[259,1033,1034],{},"intrnl KV uses a Workers-style API but has intrnl-specific consistency and limits.",[272,1036,1038],{"id":1037},"authentication-binding","Authentication binding",[280,1040,1042],{"className":355,"code":1041,"language":357,"meta":286,"style":286},"const user = env.AUTH.user;\n",[288,1043,1044],{"__ignoreMap":286},[361,1045,1046,1048,1051,1053,1055,1057,1060,1062,1065],{"class":363,"line":364},[361,1047,501],{"class":500},[361,1049,1050],{"class":378}," user ",[361,1052,507],{"class":382},[361,1054,513],{"class":378},[361,1056,516],{"class":382},[361,1058,1059],{"class":378},"AUTH",[361,1061,516],{"class":382},[361,1063,1064],{"class":378},"user",[361,1066,435],{"class":382},[259,1068,1069],{},"or:",[280,1071,1073],{"className":355,"code":1072,"language":357,"meta":286,"style":286},"const user = useIntrnlUser();\n",[288,1074,1075],{"__ignoreMap":286},[361,1076,1077,1079,1081,1083,1086,1088],{"class":363,"line":364},[361,1078,501],{"class":500},[361,1080,1050],{"class":378},[361,1082,507],{"class":382},[361,1084,1085],{"class":374}," useIntrnlUser",[361,1087,564],{"class":378},[361,1089,435],{"class":382},[259,1091,1092],{},"Fields:",[280,1094,1097],{"className":1095,"code":1096,"language":285,"meta":286},[283],"id\norganizationId\nemail\ndisplayName\ngroups\nplatformRoles\nidentityProvider\n",[288,1098,1096],{"__ignoreMap":286},[259,1100,1101],{},"The SDK distinguishes platform groups from app-owned business roles.",[272,1103,1105],{"id":1104},"configuration-binding","Configuration binding",[259,1107,1108],{},"Non-secret settings:",[280,1110,1112],{"className":355,"code":1111,"language":357,"meta":286,"style":286},"env.CONFIG.get('SUPPORT_EMAIL');\nenv.CONFIG.get('FEATURE_X_ENABLED');\n",[288,1113,1114,1141],{"__ignoreMap":286},[361,1115,1116,1119,1121,1124,1126,1128,1130,1132,1135,1137,1139],{"class":363,"line":364},[361,1117,1118],{"class":378},"env",[361,1120,516],{"class":382},[361,1122,1123],{"class":378},"CONFIG",[361,1125,516],{"class":382},[361,1127,850],{"class":374},[361,1129,379],{"class":378},[361,1131,403],{"class":382},[361,1133,1134],{"class":399},"SUPPORT_EMAIL",[361,1136,403],{"class":382},[361,1138,432],{"class":378},[361,1140,435],{"class":382},[361,1142,1143,1145,1147,1149,1151,1153,1155,1157,1160,1162,1164],{"class":363,"line":386},[361,1144,1118],{"class":378},[361,1146,516],{"class":382},[361,1148,1123],{"class":378},[361,1150,516],{"class":382},[361,1152,850],{"class":374},[361,1154,379],{"class":378},[361,1156,403],{"class":382},[361,1158,1159],{"class":399},"FEATURE_X_ENABLED",[361,1161,403],{"class":382},[361,1163,432],{"class":378},[361,1165,435],{"class":382},[259,1167,1168],{},"These values may be visible to authorized creators and AI.",[272,1170,79],{"id":1171},"secrets-and-integrations",[259,1173,1174],{},"Preferred proxy model (an enterprise resource planning integration is a future capability, excluded from v1):",[280,1176,1179],{"className":1177,"code":1178,"language":285,"meta":286},[283],"App\n ↓ env.INTEGRATIONS.ERP.fetch(...)\nCredential-injecting integration proxy\n ↓\nApproved destination\n",[288,1180,1178],{"__ignoreMap":286},[259,1182,1183],{},"The application does not see the raw credential.",[259,1185,1186],{},"For a generic external API:",[280,1188,1190],{"className":355,"code":1189,"language":357,"meta":286,"style":286},"await env.INTEGRATIONS.ACCOUNTING.fetch('\u002Finvoices', {\n  method: 'POST',\n  body: ...\n});\n",[288,1191,1192,1227,1243,1253],{"__ignoreMap":286},[361,1193,1194,1196,1198,1200,1203,1205,1208,1210,1213,1215,1217,1220,1222,1224],{"class":363,"line":364},[361,1195,642],{"class":367},[361,1197,513],{"class":378},[361,1199,516],{"class":382},[361,1201,1202],{"class":378},"INTEGRATIONS",[361,1204,516],{"class":382},[361,1206,1207],{"class":378},"ACCOUNTING",[361,1209,516],{"class":382},[361,1211,1212],{"class":374},"fetch",[361,1214,379],{"class":378},[361,1216,403],{"class":382},[361,1218,1219],{"class":399},"\u002Finvoices",[361,1221,403],{"class":382},[361,1223,888],{"class":382},[361,1225,1226],{"class":382}," {\n",[361,1228,1229,1232,1234,1236,1239,1241],{"class":363,"line":386},[361,1230,1231],{"class":389},"  method",[361,1233,393],{"class":382},[361,1235,396],{"class":382},[361,1237,1238],{"class":399},"POST",[361,1240,403],{"class":382},[361,1242,406],{"class":382},[361,1244,1245,1248,1250],{"class":363,"line":409},[361,1246,1247],{"class":389},"  body",[361,1249,393],{"class":382},[361,1251,1252],{"class":382}," ...\n",[361,1254,1255,1257,1259],{"class":363,"line":426},[361,1256,429],{"class":382},[361,1258,432],{"class":378},[361,1260,435],{"class":382},[259,1262,1263],{},"The integration definition controls:",[294,1265,1266,1269,1272,1275,1278,1281,1284,1287],{},[297,1267,1268],{},"Destination hostname",[297,1270,1271],{},"Allowed path prefixes",[297,1273,1274],{},"Allowed methods",[297,1276,1277],{},"Authentication injection",[297,1279,1280],{},"Request\u002Fresponse size",[297,1282,1283],{},"Rate limit",[297,1285,1286],{},"Logging\u002Fredaction",[297,1288,1289],{},"Environment-specific credential",[259,1291,1292],{},"Raw secret bindings should exist only when a proxy cannot satisfy the use case. They require higher risk classification and explicit approval.",[259,1294,1295],{},"The AI may see the integration’s name and schema but never its plaintext credential.",[272,1297,1299],{"id":1298},"static-assets","Static assets",[259,1301,1302],{},"Build output is split into:",[280,1304,1307],{"className":1305,"code":1306,"language":285,"meta":286},[283],"Worker bundle\nImmutable hashed static assets\n",[288,1308,1306],{"__ignoreMap":286},[259,1310,1311,1312],{},"The gateway or static service answers asset requests without invoking the Worker when possible. This matches the general Workers model in which static assets can be deployed alongside Worker logic and served directly. ",[267,1313,1316],{"href":1314,"rel":1315},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkers\u002Fstatic-assets\u002F",[452],"Workers static assets",[272,1318,1320],{"id":1319},"runtime-limits","Runtime limits",[259,1322,1323],{},"Limits are configurable by plan\u002Frisk profile:",[294,1325,1326,1329,1332,1335,1338,1341,1344,1347,1350,1353,1356,1359,1362],{},[297,1327,1328],{},"Memory",[297,1330,1331],{},"CPU time",[297,1333,1334],{},"Wall-clock duration",[297,1336,1337],{},"Request body size",[297,1339,1340],{},"Response body size",[297,1342,1343],{},"Concurrent requests",[297,1345,1346],{},"Outbound subrequests",[297,1348,1349],{},"Open connections",[297,1351,1352],{},"DB statements",[297,1354,1355],{},"KV operations",[297,1357,1358],{},"Log volume",[297,1360,1361],{},"Bundle size",[297,1363,1364],{},"Static asset volume",[259,1366,1367],{},"Phase 0 benchmarks establish production defaults. A 128 MiB compatibility test profile is a reasonable starting point for Workers-like applications, but final intrnl limits should reflect actual Nuxt workloads rather than blindly copying another platform.",[272,1369,1371,1374],{"id":1370},"intrnlsdk-and-nuxt-module",[288,1372,1373],{},"@intrnl\u002Fsdk"," and Nuxt module",[259,1376,1377],{},"Packages:",[280,1379,1382],{"className":1380,"code":1381,"language":285,"meta":286},[283],"@intrnl\u002Fsdk\n@intrnl\u002Fnuxt\n",[288,1383,1381],{"__ignoreMap":286},[259,1385,1386],{},"Responsibilities:",[294,1388,1389,1392,1395,1398,1401,1404,1407,1410,1413,1416],{},[297,1390,1391],{},"Typed binding interfaces",[297,1393,1394],{},"User\u002Fsession access",[297,1396,1397],{},"Error normalization",[297,1399,1400],{},"Local development adapters",[297,1402,1403],{},"Test fakes",[297,1405,1406],{},"Runtime contract validation",[297,1408,1409],{},"Database and KV helpers",[297,1411,1412],{},"Integration clients",[297,1414,1415],{},"Audit\u002Fcorrelation context",[297,1417,1418],{},"Nuxt composables and server middleware",[259,1420,1421],{},"The SDK is convenience, not the security boundary.",[272,1423,1425],{"id":1424},"configuration-file","Configuration file",[280,1427,1429],{"className":355,"code":1428,"language":357,"meta":286,"style":286},"\u002F\u002F intrnl.config.ts\nexport default defineIntrnlConfig({\n  framework: 'nuxt',\n  runtime: 'workers',\n  compatibilityDate: '2026-09-01',\n\n  bindings: {\n    DB: { type: 'sqlite' },\n    KV: { type: 'kv' },\n  },\n\n  capabilities: {\n    outboundHttp: [],\n    integrations: [],\n  },\n});\n",[288,1430,1431,1437,1449,1465,1479,1493,1497,1506,1529,1551,1556,1560,1569,1581,1592,1596],{"__ignoreMap":286},[361,1432,1433],{"class":363,"line":364},[361,1434,1436],{"class":1435},"sHwdD","\u002F\u002F intrnl.config.ts\n",[361,1438,1439,1441,1443,1445,1447],{"class":363,"line":386},[361,1440,368],{"class":367},[361,1442,371],{"class":367},[361,1444,375],{"class":374},[361,1446,379],{"class":378},[361,1448,383],{"class":382},[361,1450,1451,1454,1456,1458,1461,1463],{"class":363,"line":409},[361,1452,1453],{"class":389},"  framework",[361,1455,393],{"class":382},[361,1457,396],{"class":382},[361,1459,1460],{"class":399},"nuxt",[361,1462,403],{"class":382},[361,1464,406],{"class":382},[361,1466,1467,1469,1471,1473,1475,1477],{"class":363,"line":426},[361,1468,412],{"class":389},[361,1470,393],{"class":382},[361,1472,396],{"class":382},[361,1474,419],{"class":399},[361,1476,403],{"class":382},[361,1478,406],{"class":382},[361,1480,1481,1483,1485,1487,1489,1491],{"class":363,"line":569},[361,1482,390],{"class":389},[361,1484,393],{"class":382},[361,1486,396],{"class":382},[361,1488,400],{"class":399},[361,1490,403],{"class":382},[361,1492,406],{"class":382},[361,1494,1495],{"class":363,"line":576},[361,1496,573],{"emptyLinePlaceholder":572},[361,1498,1499,1502,1504],{"class":363,"line":594},[361,1500,1501],{"class":389},"  bindings",[361,1503,393],{"class":382},[361,1505,1226],{"class":382},[361,1507,1508,1511,1513,1515,1517,1519,1521,1524,1526],{"class":363,"line":612},[361,1509,1510],{"class":389},"    DB",[361,1512,393],{"class":382},[361,1514,891],{"class":382},[361,1516,894],{"class":389},[361,1518,393],{"class":382},[361,1520,396],{"class":382},[361,1522,1523],{"class":399},"sqlite",[361,1525,403],{"class":382},[361,1527,1528],{"class":382}," },\n",[361,1530,1531,1534,1536,1538,1540,1542,1544,1547,1549],{"class":363,"line":622},[361,1532,1533],{"class":389},"    KV",[361,1535,393],{"class":382},[361,1537,891],{"class":382},[361,1539,894],{"class":389},[361,1541,393],{"class":382},[361,1543,396],{"class":382},[361,1545,1546],{"class":399},"kv",[361,1548,403],{"class":382},[361,1550,1528],{"class":382},[361,1552,1553],{"class":363,"line":634},[361,1554,1555],{"class":382},"  },\n",[361,1557,1558],{"class":363,"line":639},[361,1559,573],{"emptyLinePlaceholder":572},[361,1561,1562,1565,1567],{"class":363,"line":651},[361,1563,1564],{"class":389},"  capabilities",[361,1566,393],{"class":382},[361,1568,1226],{"class":382},[361,1570,1571,1574,1576,1579],{"class":363,"line":669},[361,1572,1573],{"class":389},"    outboundHttp",[361,1575,393],{"class":382},[361,1577,1578],{"class":378}," []",[361,1580,406],{"class":382},[361,1582,1583,1586,1588,1590],{"class":363,"line":683},[361,1584,1585],{"class":389},"    integrations",[361,1587,393],{"class":382},[361,1589,1578],{"class":378},[361,1591,406],{"class":382},[361,1593,1594],{"class":363,"line":695},[361,1595,1555],{"class":382},[361,1597,1598,1600,1602],{"class":363,"line":700},[361,1599,429],{"class":382},[361,1601,432],{"class":378},[361,1603,435],{"class":382},[259,1605,1606],{},"The console and AI manage this for nontechnical users. Developers may edit it directly.",[272,1608,1610],{"id":1609},"contract-details-still-to-validate","Contract details still to validate",[259,1612,1613],{},"The method names above are proposed interface shapes. Phase 0 must establish DB batch atomicity, result\u002Ferror types, supported parameters, timeouts, statement limits, WAL\u002Fconcurrency behavior, and multiple-replica behavior. It must also establish KV consistency, size and TTL limits, list pagination, and recovery behavior. Until those results are accepted, do not infer Cloudflare D1 or KV parity.",[259,1615,1616,1617,1619],{},"The sample ",[288,1618,400],{}," compatibility date illustrates version pinning. It does not name an available intrnl release. The 128 MiB profile is a benchmark input, not a promised production limit.",[272,1621,1623],{"id":1622},"related-documentation","Related documentation",[294,1625,1626,1631],{},[297,1627,1628],{},[267,1629,1630],{"href":133},"Data and recovery",[297,1632,1633],{},[267,1634,79],{"href":80},[1636,1637,1638],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":286,"searchDepth":364,"depth":386,"links":1640},[1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1654,1655,1656],{"id":274,"depth":386,"text":275},{"id":332,"depth":386,"text":333},{"id":348,"depth":386,"text":349},{"id":456,"depth":386,"text":457},{"id":486,"depth":386,"text":487},{"id":828,"depth":386,"text":829},{"id":1037,"depth":386,"text":1038},{"id":1104,"depth":386,"text":1105},{"id":1171,"depth":386,"text":79},{"id":1298,"depth":386,"text":1299},{"id":1319,"depth":386,"text":1320},{"id":1370,"depth":386,"text":1653},"@intrnl\u002Fsdk and Nuxt module",{"id":1424,"depth":386,"text":1425},{"id":1609,"depth":386,"text":1610},{"id":1622,"depth":386,"text":1623},"The proposed Nuxt\u002Fworkerd contract, explicit bindings, compatibility versions, and SDK responsibilities.","md",null,{},{"title":110,"description":1657},"DpLSlwE4SZln0bmcWbdE-26WNqjNa4lSJLwoH02xC7Q",[1664,1666],{"title":106,"path":107,"stem":108,"description":1665,"children":-1},"Immutable build inputs, dependency policy, disposable execution, and signed artifact provenance.",{"title":114,"path":115,"stem":116,"description":1667,"children":-1},"Shared application services, REST requirements, MCP schemas, runtime commands, and webhooks.",1790019414383]