[{"data":1,"prerenderedAt":1172},["ShallowReactive",2],{"page:\u002Fdocs\u002F5.x\u002Fhow-to\u002Frecipes":3},{"id":4,"title":5,"body":6,"description":1155,"extension":1156,"frontmatter":1157,"heading":5,"meta":1163,"navigation":1165,"order":1151,"path":1166,"seo":1167,"sitemap":1168,"source":1169,"stem":1170,"__hash__":1171},"docs\u002Fdocs\u002F5.x\u002Fhow-to\u002Frecipes.md","Configure generation",{"type":7,"value":8,"toc":1146},"minimark",[9,28,41,46,766,787,791,816,984,988,1002,1071,1088,1092],[10,11,12,13,18,19,23,24,27],"p",{},"Use these configurations in a project with ",[14,15,17],"a",{"href":16},"\u002Fdocs\u002F5.x\u002Fhow-to\u002Finstallation","Kubb installed"," and an OpenAPI specification. Replace ",[20,21,22],"code",{},".\u002FpetStore.yaml"," with your specification path, install the packages for your stack, then run ",[20,25,26],{},"npx kubb generate",". Each plugin page shows its single-plugin configuration. The stacks below combine several plugins.",[29,30,32,33,36,37,40],"blockquote",{"as":31},"warning","The examples write to ",[20,34,35],{},".\u002Fsrc\u002Fgen",". With ",[20,38,39],{},"clean: true",", Kubb removes that directory before generation, so keep handwritten files elsewhere.",[42,43,45],"h2",{"id":44},"pick-a-stack","Pick a stack",[47,48,49,310,510],"tabs",{},[50,51,53,61,113],"tabs-item",{"label":52},"React Query",[10,54,55,56,60],{},"Types, an Axios client, and ",[14,57,59],{"href":58},"https:\u002F\u002Ftanstack.com\u002Fquery","TanStack Query"," hooks for React.",[62,63,68],"pre",{"language":64,"filename":65,"code":66,"class":67},"shell","Terminal","npm install -D kubb typescript @kubb\u002Fplugin-ts @kubb\u002Fplugin-axios @kubb\u002Fplugin-react-query\nnpm install axios react @tanstack\u002Freact-query","highlights",[20,69,71,100,101],{"class":70},"language-shell",[72,73,76,80,84,87,90,92,95,97],"span",{"class":74,"style":75},"line","display: inline",[72,77,79],{"style":78},"color:#6f42c1;--hls-dark:#b392f0","npm ",[72,81,83],{"style":82},"color:#24292e;--hls-dark:#e1e4e8","install -D kubb typescript ",[72,85,86],{"style":82},"@",[72,88,89],{"style":82},"kubb\u002Fplugin-ts ",[72,91,86],{"style":82},[72,93,94],{"style":82},"kubb\u002Fplugin-axios ",[72,96,86],{"style":82},[72,98,99],{"style":82},"kubb\u002Fplugin-react-query","\n",[72,102,103,105,108,110],{"class":74,"style":75},[72,104,79],{"style":78},[72,106,107],{"style":82},"install axios react ",[72,109,86],{"style":82},[72,111,112],{"style":82},"tanstack\u002Freact-query",[62,114,118],{"language":115,"filename":116,"code":117,"class":67},"typescript","kubb.config.ts","import { defineConfig } from 'kubb\u002Fconfig'\nimport { pluginTs } from '@kubb\u002Fplugin-ts'\nimport { pluginAxios } from '@kubb\u002Fplugin-axios'\nimport { pluginReactQuery } from '@kubb\u002Fplugin-react-query'\n\nexport default defineConfig({\n  input: '.\u002FpetStore.yaml',\n  output: { path: '.\u002Fsrc\u002Fgen', clean: true },\n  plugins: [pluginTs(), pluginAxios(), pluginReactQuery({ hooks: true })],\n})",[20,119,121,100,144,100,160,100,176,100,192,100,194,100,208,100,225,100,260,100,305],{"class":120},"language-typescript",[72,122,123,127,131,134,137,140],{"class":74,"style":75},[72,124,126],{"style":125},"color:#d73a49;--hls-dark:#f97583","import ",[72,128,130],{"style":129},"color:#005cc5;--hls-dark:#79b8ff","{ ",[72,132,133],{"style":82},"defineConfig ",[72,135,136],{"style":129},"} ",[72,138,139],{"style":125},"from ",[72,141,143],{"style":142},"color:#032f62;--hls-dark:#9ecbff","'kubb\u002Fconfig'",[72,145,146,148,150,153,155,157],{"class":74,"style":75},[72,147,126],{"style":125},[72,149,130],{"style":129},[72,151,152],{"style":82},"pluginTs ",[72,154,136],{"style":129},[72,156,139],{"style":125},[72,158,159],{"style":142},"'@kubb\u002Fplugin-ts'",[72,161,162,164,166,169,171,173],{"class":74,"style":75},[72,163,126],{"style":125},[72,165,130],{"style":129},[72,167,168],{"style":82},"pluginAxios ",[72,170,136],{"style":129},[72,172,139],{"style":125},[72,174,175],{"style":142},"'@kubb\u002Fplugin-axios'",[72,177,178,180,182,185,187,189],{"class":74,"style":75},[72,179,126],{"style":125},[72,181,130],{"style":129},[72,183,184],{"style":82},"pluginReactQuery ",[72,186,136],{"style":129},[72,188,139],{"style":125},[72,190,191],{"style":142},"'@kubb\u002Fplugin-react-query'",[72,193],{"class":74,"style":75},[72,195,196,199,202,205],{"class":74,"style":75},[72,197,198],{"style":125},"export ",[72,200,201],{"style":125},"default ",[72,203,204],{"style":78},"defineConfig",[72,206,207],{"style":129},"({",[72,209,210,213,216,219,222],{"class":74,"style":75},[72,211,212],{"style":129},"  ",[72,214,215],{"style":129},"input",[72,217,218],{"style":125},": ",[72,220,221],{"style":142},"'.\u002FpetStore.yaml'",[72,223,224],{"style":125},",",[72,226,227,229,232,234,236,239,241,244,247,250,252,255,258],{"class":74,"style":75},[72,228,212],{"style":125},[72,230,231],{"style":129},"output",[72,233,218],{"style":125},[72,235,130],{"style":129},[72,237,238],{"style":129},"path",[72,240,218],{"style":125},[72,242,243],{"style":142},"'.\u002Fsrc\u002Fgen'",[72,245,246],{"style":125},", ",[72,248,249],{"style":129},"clean",[72,251,218],{"style":125},[72,253,254],{"style":129},"true ",[72,256,257],{"style":129},"}",[72,259,224],{"style":125},[72,261,262,264,267,269,272,275,278,280,283,285,287,290,293,296,298,300,303],{"class":74,"style":75},[72,263,212],{"style":125},[72,265,266],{"style":129},"plugins",[72,268,218],{"style":125},[72,270,271],{"style":129},"[",[72,273,274],{"style":78},"pluginTs",[72,276,277],{"style":129},"()",[72,279,246],{"style":125},[72,281,282],{"style":78},"pluginAxios",[72,284,277],{"style":129},[72,286,246],{"style":125},[72,288,289],{"style":78},"pluginReactQuery",[72,291,292],{"style":129},"({ ",[72,294,295],{"style":129},"hooks",[72,297,218],{"style":125},[72,299,254],{"style":129},[72,301,302],{"style":129},"})]",[72,304,224],{"style":125},[72,306,307],{"class":74,"style":75},[72,308,309],{"style":129},"})",[50,311,313,318,354],{"label":312},"Vue Query",[10,314,55,315,317],{},[14,316,59],{"href":58}," composables for Vue.",[62,319,321],{"language":64,"filename":65,"code":320,"class":67},"npm install -D kubb typescript @kubb\u002Fplugin-ts @kubb\u002Fplugin-axios @kubb\u002Fplugin-vue-query\nnpm install axios vue @tanstack\u002Fvue-query",[20,322,323,100,342],{"class":70},[72,324,325,327,329,331,333,335,337,339],{"class":74,"style":75},[72,326,79],{"style":78},[72,328,83],{"style":82},[72,330,86],{"style":82},[72,332,89],{"style":82},[72,334,86],{"style":82},[72,336,94],{"style":82},[72,338,86],{"style":82},[72,340,341],{"style":82},"kubb\u002Fplugin-vue-query",[72,343,344,346,349,351],{"class":74,"style":75},[72,345,79],{"style":78},[72,347,348],{"style":82},"install axios vue ",[72,350,86],{"style":82},[72,352,353],{"style":82},"tanstack\u002Fvue-query",[62,355,357],{"language":115,"filename":116,"code":356,"class":67},"import { defineConfig } from 'kubb\u002Fconfig'\nimport { pluginTs } from '@kubb\u002Fplugin-ts'\nimport { pluginAxios } from '@kubb\u002Fplugin-axios'\nimport { pluginVueQuery } from '@kubb\u002Fplugin-vue-query'\n\nexport default defineConfig({\n  input: '.\u002FpetStore.yaml',\n  output: { path: '.\u002Fsrc\u002Fgen', clean: true },\n  plugins: [pluginTs(), pluginAxios(), pluginVueQuery({ hooks: true })],\n})",[20,358,359,100,373,100,387,100,401,100,417,100,419,100,429,100,441,100,469,100,506],{"class":120},[72,360,361,363,365,367,369,371],{"class":74,"style":75},[72,362,126],{"style":125},[72,364,130],{"style":129},[72,366,133],{"style":82},[72,368,136],{"style":129},[72,370,139],{"style":125},[72,372,143],{"style":142},[72,374,375,377,379,381,383,385],{"class":74,"style":75},[72,376,126],{"style":125},[72,378,130],{"style":129},[72,380,152],{"style":82},[72,382,136],{"style":129},[72,384,139],{"style":125},[72,386,159],{"style":142},[72,388,389,391,393,395,397,399],{"class":74,"style":75},[72,390,126],{"style":125},[72,392,130],{"style":129},[72,394,168],{"style":82},[72,396,136],{"style":129},[72,398,139],{"style":125},[72,400,175],{"style":142},[72,402,403,405,407,410,412,414],{"class":74,"style":75},[72,404,126],{"style":125},[72,406,130],{"style":129},[72,408,409],{"style":82},"pluginVueQuery ",[72,411,136],{"style":129},[72,413,139],{"style":125},[72,415,416],{"style":142},"'@kubb\u002Fplugin-vue-query'",[72,418],{"class":74,"style":75},[72,420,421,423,425,427],{"class":74,"style":75},[72,422,198],{"style":125},[72,424,201],{"style":125},[72,426,204],{"style":78},[72,428,207],{"style":129},[72,430,431,433,435,437,439],{"class":74,"style":75},[72,432,212],{"style":129},[72,434,215],{"style":129},[72,436,218],{"style":125},[72,438,221],{"style":142},[72,440,224],{"style":125},[72,442,443,445,447,449,451,453,455,457,459,461,463,465,467],{"class":74,"style":75},[72,444,212],{"style":125},[72,446,231],{"style":129},[72,448,218],{"style":125},[72,450,130],{"style":129},[72,452,238],{"style":129},[72,454,218],{"style":125},[72,456,243],{"style":142},[72,458,246],{"style":125},[72,460,249],{"style":129},[72,462,218],{"style":125},[72,464,254],{"style":129},[72,466,257],{"style":129},[72,468,224],{"style":125},[72,470,471,473,475,477,479,481,483,485,487,489,491,494,496,498,500,502,504],{"class":74,"style":75},[72,472,212],{"style":125},[72,474,266],{"style":129},[72,476,218],{"style":125},[72,478,271],{"style":129},[72,480,274],{"style":78},[72,482,277],{"style":129},[72,484,246],{"style":125},[72,486,282],{"style":78},[72,488,277],{"style":129},[72,490,246],{"style":125},[72,492,493],{"style":78},"pluginVueQuery",[72,495,292],{"style":129},[72,497,295],{"style":129},[72,499,218],{"style":125},[72,501,254],{"style":129},[72,503,302],{"style":129},[72,505,224],{"style":125},[72,507,508],{"class":74,"style":75},[72,509,309],{"style":129},[50,511,513,531,573],{"label":512},"Zod and MSW",[10,514,515,516,520,521,525,526,530],{},"Runtime validation with ",[14,517,519],{"href":518},"https:\u002F\u002Fzod.dev","Zod",", plus ",[14,522,524],{"href":523},"https:\u002F\u002Fmswjs.io","MSW"," request handlers backed by ",[14,527,529],{"href":528},"https:\u002F\u002Ffakerjs.dev","Faker.js"," mock data.",[62,532,534],{"language":64,"filename":65,"code":533,"class":67},"npm install -D kubb typescript @kubb\u002Fplugin-ts @kubb\u002Fplugin-zod @kubb\u002Fplugin-faker @kubb\u002Fplugin-msw\nnpm install zod msw @faker-js\u002Ffaker",[20,535,536,100,561],{"class":70},[72,537,538,540,542,544,546,548,551,553,556,558],{"class":74,"style":75},[72,539,79],{"style":78},[72,541,83],{"style":82},[72,543,86],{"style":82},[72,545,89],{"style":82},[72,547,86],{"style":82},[72,549,550],{"style":82},"kubb\u002Fplugin-zod ",[72,552,86],{"style":82},[72,554,555],{"style":82},"kubb\u002Fplugin-faker ",[72,557,86],{"style":82},[72,559,560],{"style":82},"kubb\u002Fplugin-msw",[72,562,563,565,568,570],{"class":74,"style":75},[72,564,79],{"style":78},[72,566,567],{"style":82},"install zod msw ",[72,569,86],{"style":82},[72,571,572],{"style":82},"faker-js\u002Ffaker",[62,574,576],{"language":115,"filename":116,"code":575,"class":67},"import { defineConfig } from 'kubb\u002Fconfig'\nimport { pluginTs } from '@kubb\u002Fplugin-ts'\nimport { pluginZod } from '@kubb\u002Fplugin-zod'\nimport { pluginFaker } from '@kubb\u002Fplugin-faker'\nimport { pluginMsw } from '@kubb\u002Fplugin-msw'\n\nexport default defineConfig({\n  input: '.\u002FpetStore.yaml',\n  output: { path: '.\u002Fsrc\u002Fgen', clean: true },\n  plugins: [pluginTs(), pluginZod(), pluginFaker(), pluginMsw({ parser: 'faker', handlers: true })],\n})",[20,577,578,100,592,100,606,100,622,100,638,100,654,100,656,100,666,100,678,100,706,100,762],{"class":120},[72,579,580,582,584,586,588,590],{"class":74,"style":75},[72,581,126],{"style":125},[72,583,130],{"style":129},[72,585,133],{"style":82},[72,587,136],{"style":129},[72,589,139],{"style":125},[72,591,143],{"style":142},[72,593,594,596,598,600,602,604],{"class":74,"style":75},[72,595,126],{"style":125},[72,597,130],{"style":129},[72,599,152],{"style":82},[72,601,136],{"style":129},[72,603,139],{"style":125},[72,605,159],{"style":142},[72,607,608,610,612,615,617,619],{"class":74,"style":75},[72,609,126],{"style":125},[72,611,130],{"style":129},[72,613,614],{"style":82},"pluginZod ",[72,616,136],{"style":129},[72,618,139],{"style":125},[72,620,621],{"style":142},"'@kubb\u002Fplugin-zod'",[72,623,624,626,628,631,633,635],{"class":74,"style":75},[72,625,126],{"style":125},[72,627,130],{"style":129},[72,629,630],{"style":82},"pluginFaker ",[72,632,136],{"style":129},[72,634,139],{"style":125},[72,636,637],{"style":142},"'@kubb\u002Fplugin-faker'",[72,639,640,642,644,647,649,651],{"class":74,"style":75},[72,641,126],{"style":125},[72,643,130],{"style":129},[72,645,646],{"style":82},"pluginMsw ",[72,648,136],{"style":129},[72,650,139],{"style":125},[72,652,653],{"style":142},"'@kubb\u002Fplugin-msw'",[72,655],{"class":74,"style":75},[72,657,658,660,662,664],{"class":74,"style":75},[72,659,198],{"style":125},[72,661,201],{"style":125},[72,663,204],{"style":78},[72,665,207],{"style":129},[72,667,668,670,672,674,676],{"class":74,"style":75},[72,669,212],{"style":129},[72,671,215],{"style":129},[72,673,218],{"style":125},[72,675,221],{"style":142},[72,677,224],{"style":125},[72,679,680,682,684,686,688,690,692,694,696,698,700,702,704],{"class":74,"style":75},[72,681,212],{"style":125},[72,683,231],{"style":129},[72,685,218],{"style":125},[72,687,130],{"style":129},[72,689,238],{"style":129},[72,691,218],{"style":125},[72,693,243],{"style":142},[72,695,246],{"style":125},[72,697,249],{"style":129},[72,699,218],{"style":125},[72,701,254],{"style":129},[72,703,257],{"style":129},[72,705,224],{"style":125},[72,707,708,710,712,714,716,718,720,722,725,727,729,732,734,736,739,741,744,746,749,751,754,756,758,760],{"class":74,"style":75},[72,709,212],{"style":125},[72,711,266],{"style":129},[72,713,218],{"style":125},[72,715,271],{"style":129},[72,717,274],{"style":78},[72,719,277],{"style":129},[72,721,246],{"style":125},[72,723,724],{"style":78},"pluginZod",[72,726,277],{"style":129},[72,728,246],{"style":125},[72,730,731],{"style":78},"pluginFaker",[72,733,277],{"style":129},[72,735,246],{"style":125},[72,737,738],{"style":78},"pluginMsw",[72,740,292],{"style":129},[72,742,743],{"style":129},"parser",[72,745,218],{"style":125},[72,747,748],{"style":142},"'faker'",[72,750,246],{"style":125},[72,752,753],{"style":129},"handlers",[72,755,218],{"style":125},[72,757,254],{"style":129},[72,759,302],{"style":129},[72,761,224],{"style":125},[72,763,764],{"class":74,"style":75},[72,765,309],{"style":129},[10,767,768,769,772,773,775,776,782,783,786],{},"To call the API with the global ",[20,770,771],{},"fetch"," instead of Axios, replace ",[20,774,282],{}," with ",[14,777,779],{"href":778},"\u002Fextensions\u002Fkubb-labs\u002Fplugin-fetch",[20,780,781],{},"pluginFetch"," from ",[20,784,785],{},"@kubb\u002Fplugin-fetch",".",[42,788,790],{"id":789},"format-lint-and-run-commands-after-generation","Format, lint, and run commands after generation",[10,792,793,794,797,798,801,802,805,806,812,813,786],{},"Set ",[20,795,796],{},"format"," and ",[20,799,800],{},"lint"," to a tool name, or to ",[20,803,804],{},"'auto'"," to pick whichever tool is installed. ",[14,807,809],{"href":808},"\u002Fdocs\u002F5.x\u002Freference\u002Fconfiguration#outputpostgenerate",[20,810,811],{},"output.postGenerate"," runs shell commands once the files are formatted and linted. Install the tools first, for example ",[20,814,815],{},"npm install -D @biomejs\u002Fbiome oxlint",[62,817,819],{"language":115,"filename":116,"code":818,"class":67},"import { defineConfig } from 'kubb\u002Fconfig'\nimport { pluginTs } from '@kubb\u002Fplugin-ts'\n\nexport default defineConfig({\n  input: '.\u002FpetStore.yaml',\n  output: {\n    path: '.\u002Fsrc\u002Fgen',\n    clean: true,\n    format: 'biome',\n    lint: 'oxlint',\n    postGenerate: ['npm run typecheck'],\n  },\n  plugins: [pluginTs()],\n})",[20,820,821,100,835,100,849,100,851,100,861,100,873,100,884,100,897,100,910,100,923,100,936,100,955,100,963,100,980],{"class":120},[72,822,823,825,827,829,831,833],{"class":74,"style":75},[72,824,126],{"style":125},[72,826,130],{"style":129},[72,828,133],{"style":82},[72,830,136],{"style":129},[72,832,139],{"style":125},[72,834,143],{"style":142},[72,836,837,839,841,843,845,847],{"class":74,"style":75},[72,838,126],{"style":125},[72,840,130],{"style":129},[72,842,152],{"style":82},[72,844,136],{"style":129},[72,846,139],{"style":125},[72,848,159],{"style":142},[72,850],{"class":74,"style":75},[72,852,853,855,857,859],{"class":74,"style":75},[72,854,198],{"style":125},[72,856,201],{"style":125},[72,858,204],{"style":78},[72,860,207],{"style":129},[72,862,863,865,867,869,871],{"class":74,"style":75},[72,864,212],{"style":129},[72,866,215],{"style":129},[72,868,218],{"style":125},[72,870,221],{"style":142},[72,872,224],{"style":125},[72,874,875,877,879,881],{"class":74,"style":75},[72,876,212],{"style":125},[72,878,231],{"style":129},[72,880,218],{"style":125},[72,882,883],{"style":129},"{",[72,885,886,889,891,893,895],{"class":74,"style":75},[72,887,888],{"style":129},"    ",[72,890,238],{"style":129},[72,892,218],{"style":125},[72,894,243],{"style":142},[72,896,224],{"style":125},[72,898,899,901,903,905,908],{"class":74,"style":75},[72,900,888],{"style":125},[72,902,249],{"style":129},[72,904,218],{"style":125},[72,906,907],{"style":129},"true",[72,909,224],{"style":125},[72,911,912,914,916,918,921],{"class":74,"style":75},[72,913,888],{"style":125},[72,915,796],{"style":129},[72,917,218],{"style":125},[72,919,920],{"style":142},"'biome'",[72,922,224],{"style":125},[72,924,925,927,929,931,934],{"class":74,"style":75},[72,926,888],{"style":125},[72,928,800],{"style":129},[72,930,218],{"style":125},[72,932,933],{"style":142},"'oxlint'",[72,935,224],{"style":125},[72,937,938,940,943,945,947,950,953],{"class":74,"style":75},[72,939,888],{"style":125},[72,941,942],{"style":129},"postGenerate",[72,944,218],{"style":125},[72,946,271],{"style":129},[72,948,949],{"style":142},"'npm run typecheck'",[72,951,952],{"style":129},"]",[72,954,224],{"style":125},[72,956,957,959,961],{"class":74,"style":75},[72,958,212],{"style":125},[72,960,257],{"style":129},[72,962,224],{"style":125},[72,964,965,967,969,971,973,975,978],{"class":74,"style":75},[72,966,212],{"style":125},[72,968,266],{"style":129},[72,970,218],{"style":125},[72,972,271],{"style":129},[72,974,274],{"style":78},[72,976,977],{"style":129},"()]",[72,979,224],{"style":125},[72,981,982],{"class":74,"style":75},[72,983,309],{"style":129},[42,985,987],{"id":986},"read-the-spec-from-a-git-repository","Read the spec from a git repository",[10,989,990,991,993,994,997,998,1001],{},"Point ",[20,992,215],{}," at a file in a git repository when the spec lives in another repo, such as the API's own. Write it as ",[20,995,996],{},"git+\u003Crepo>#\u003Cref>:\u003Cpath>",", and pin ",[20,999,1000],{},"\u003Cref>"," to a tag or commit so every run generates from the same spec:",[62,1003,1005],{"language":115,"filename":116,"code":1004,"class":67},"import { defineConfig } from 'kubb\u002Fconfig'\n\nexport default defineConfig({\n  input: 'git+https:\u002F\u002Fgithub.com\u002Forg\u002Fapi.git#v2.1.0:specs\u002Fopenapi.yaml',\n  output: { path: '.\u002Fsrc\u002Fgen' },\n})",[20,1006,1007,100,1021,100,1023,100,1033,100,1046,100,1067],{"class":120},[72,1008,1009,1011,1013,1015,1017,1019],{"class":74,"style":75},[72,1010,126],{"style":125},[72,1012,130],{"style":129},[72,1014,133],{"style":82},[72,1016,136],{"style":129},[72,1018,139],{"style":125},[72,1020,143],{"style":142},[72,1022],{"class":74,"style":75},[72,1024,1025,1027,1029,1031],{"class":74,"style":75},[72,1026,198],{"style":125},[72,1028,201],{"style":125},[72,1030,204],{"style":78},[72,1032,207],{"style":129},[72,1034,1035,1037,1039,1041,1044],{"class":74,"style":75},[72,1036,212],{"style":129},[72,1038,215],{"style":129},[72,1040,218],{"style":125},[72,1042,1043],{"style":142},"'git+https:\u002F\u002Fgithub.com\u002Forg\u002Fapi.git#v2.1.0:specs\u002Fopenapi.yaml'",[72,1045,224],{"style":125},[72,1047,1048,1050,1052,1054,1056,1058,1060,1063,1065],{"class":74,"style":75},[72,1049,212],{"style":125},[72,1051,231],{"style":129},[72,1053,218],{"style":125},[72,1055,130],{"style":129},[72,1057,238],{"style":129},[72,1059,218],{"style":125},[72,1061,1062],{"style":142},"'.\u002Fsrc\u002Fgen' ",[72,1064,257],{"style":129},[72,1066,224],{"style":125},[72,1068,1069],{"class":74,"style":75},[72,1070,309],{"style":129},[10,1072,1073,1074,1077,1078,1081,1082,1087],{},"Kubb needs ",[20,1075,1076],{},"git"," on the ",[20,1079,1080],{},"PATH"," and uses your own git credentials, so a private repository works with the credential helper or SSH key you already use. In CI, give the job read access to that repository. See ",[14,1083,1085],{"href":1084},"\u002Fdocs\u002F5.x\u002Freference\u002Fconfiguration#input",[20,1086,215],{}," for the full format.",[42,1089,1091],{"id":1090},"watch-mode-several-specifications-and-scripts","Watch mode, several specifications, and scripts",[1093,1094,1095,1117,1127,1137],"ul",{},[1096,1097,1098,1099,1102,1103,1105,1106,1109,1110,1112,1113,786],"li",{},"Run ",[20,1100,1101],{},"kubb generate --watch"," to regenerate when the local spec file changes. A URL or git input is generated once, so rerun Kubb after the remote spec changes. Pass a function to ",[20,1104,204],{}," to read ",[20,1107,1108],{},"watch"," and keep ",[20,1111,249],{}," off during incremental runs. See ",[14,1114,1116],{"href":1115},"\u002Fdocs\u002F5.x\u002Freference\u002Fconfiguration#config-formats","Config formats",[1096,1118,1119,1120,1122,1123,1126],{},"Pass an array to ",[20,1121,204],{}," to generate from several specifications in one run, each with its own plugins and output directory. Set a ",[20,1124,1125],{},"name"," per entry so the CLI output tells them apart.",[1096,1128,1129,1130,1136],{},"Drive Kubb from a script with ",[14,1131,1133],{"href":1132},"\u002Fdocs\u002F5.x\u002Freference\u002Fkit\u002Fengine#createkubb",[20,1134,1135],{},"createKubb"," when you orchestrate builds or inspect diagnostics.",[1096,1138,1098,1139,1145],{},[14,1140,1142],{"href":1141},"\u002Fdocs\u002F5.x\u002Freference\u002Fcommands\u002Fvalidate",[20,1143,1144],{},"kubb validate"," before generation in CI to fail on an invalid specification.",{"title":1147,"searchDepth":1148,"depth":1148,"links":1149},"",5,[1150,1152,1153,1154],{"id":44,"depth":1151,"text":45},2,{"id":789,"depth":1151,"text":790},{"id":986,"depth":1151,"text":987},{"id":1090,"depth":1151,"text":1091},"Configure common Kubb stacks, formatting, linting, and post-generate commands.","md",{"layout":1158,"title":5,"description":1155,"outline":1159,"order":1151,"navigation":1161},"doc",[1151,1160],3,{"title":5,"icon":1162},"i-iconoir-flask",{"layout":1158,"outline":1164},[1151,1160],{"title":5,"icon":1162},"\u002Fdocs\u002F5.x\u002Fhow-to\u002Frecipes",{"title":5,"description":1155},{"loc":1166},"kubb-labs\u002Fkubb\u002Fdocs\u002F5.x\u002Fhow-to\u002Frecipes.md","docs\u002F5.x\u002Fhow-to\u002Frecipes","Ug08WsLBn63MLZU1ZpESlUKo5FegDLu57MkaCcZah7Q",1792931640472]