PageSourceSearch

https://bleep.build/assets/js/8194ad42.765b5c53.js

js bleep.build collected 2026-10-05 22:54:04 UTC 164,191 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkbleep_site=globalThis.webpackChunkbleep_site||[]).push([[7688],{9365(e,n,t){t.d(n,{A:()=>p});t(6540);var s=t(4164),r=t(7751);const a="tabItem_Ymn6";var i=t(4848);function o({children:e,className:n,hidden:t}){return(0,i.jsx)("div",{role:"tabpanel",className:(0,s.A)(a,n),hidden:t,children:e})}function p({children:e,className:n,value:t}){const{selectedValue:s,lazy:a}=(0,r.uc)(),p=t===s;return!p&&a?null:(0,i.jsx)(o,{className:n,hidden:!p,children:e})}},4865(e,n,t){t.d(n,{A:()=>g});t(6540);var s=t(4164),r=t(7559),a=t(7751),i=t(3104),o=t(2303);const p="tabList__CuJ",l="tabItem_LNqP";var c=t(4848);function m({className:e}){const{selectedValue:n,selectValue:t,tabValues:r,block:o}=(0,a.uc)(),p=[],{blockElementScrollPositionUntilNextRender:m}=(0,i.a_)(),d=e=>{const s=e.currentTarget,a=p.indexOf(s),i=r[a].value;i!==n&&(m(s),t(i))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=p.indexOf(e.currentTarget)+1;n=p[t]??p[0];break}case"ArrowLeft":{const t=p.indexOf(e.currentTarget)-1;n=p[t]??p[p.length-1];break}}n?.focus()};return(0,c.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":o},e),children:r.map(({value:e,label:t,attributes:r})=>(0,c.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>{p.push(e)},onKeyDown:u,onClick:d,...r,className:(0,s.A)("tabs__item",l,r?.className,{"tabs__item--active":n===e}),children:t??e},e))})}function d({children:e}){return(0,c.jsx)("div",{className:"margin-top--md",children:e})}function u({className:e,children:n}){return(0,c.jsxs)("div",{className:(0,s.A)(r.G.tabs.container,"tabs-container",p),children:[(0,c.jsx)(m,{className:e}),(0,c.jsx)(d,{children:n})]})}function g(e){const n=(0,o.A)(),t=(0,a.OC)(e);return(0,c.jsx)(a.O_,{value:t,children:(0,c.jsx)(u,{className:e.className,children:(0,a.vT)(e.children)})},String(n))}},7751(e,n,t){t.d(n,{OC:()=>g,O_:()=>v,uc:()=>b,vT:()=>c});var s=t(6540),r=t(6347),a=t(205),i=t(7485),o=t(679),p=t(1682),l=t(4848);function c(e){return s.Children.toArray(e).filter(e=>"\n"!==e)}function m(e){const{values:n,children:t}=e;return(0,s.useMemo)(()=>{const e=n??function(e){return s.Children.toArray(e).flatMap(e=>{if(!e)return[];if((0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return[e];const n="string"==typeof e.type?e.type:e.type.name;throw new Error(`Docusaurus error: Bad <Tabs> child <${n}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.\nIf you do not want to pass on a "value" prop to the direct children of <Tabs>, you can also pass an explicit <Tabs values={...}> prop.`)}).map(({props:{value:e,label:n,attributes:t,default:s}})=>({value:e,label:n,attributes:t,default:s}))}(t);
1return function(e){const n=(0,p.XI)(e,(e,n)=>e.value===n.value);if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map(e=>`'${e.value}'`).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e},[n,t])}function d({value:e,tabValues:n}){return n.some(n=>n.value===e)}function u({queryString:e=!1,groupId:n}){const t=(0,r.W6)(),a=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,i.aZ)(a),(0,s.useCallback)(e=>{if(!a)return;const n=new URLSearchParams(t.location.search);n.set(a,e),t.replace({...t.location,search:n.toString()})},[a,t])]}function g(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,i=m(e),[p,l]=(0,s.useState)(()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!d({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const t=n.find(e=>e.default)??n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:i})),[c,g]=u({queryString:t,groupId:r}),[h,b]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,o.Dv)(n);return[t,(0,s.useCallback)(e=>{n&&r.set(e)},[n,r])]}({groupId:r}),v=(()=>{const e=c??h;return d({value:e,tabValues:i})?e:null})();(0,a.A)(()=>{v&&l(v)},[v]);return{selectedValue:p,selectValue:(0,s.useCallback)(e=>{if(!d({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),g(e),b(e)},[g,b,i]),tabValues:i,lazy:e.lazy??!1,block:e.block??!1}}const h=(0,s.createContext)(null);function b(){const e=s.useContext(h);if(!e)throw new Error("useTabsContext() must be used within a Tabs component");return e}function v(e){return(0,l.jsx)(h.Provider,{value:e.value,children:e.children})}},3905(e,n,t){t.d(n,{M:()=>o});var s=t(6540),r=t(8478),a=t(4848);const i=({src:e,...n})=>{const r=s.useRef(null);return s.useEffect(()=>{const s=t(9936),a=r.current;a&&s.create(e,a,n)},[e,r]),(0,a.jsx)("div",{ref:r})},o=e=>(0,a.jsx)(r.A,{children:()=>(0,a.jsx)(i,{...e})})},4334(e,n,t){t.d(n,{A:()=>h});var s=t(6540),r=t(4865),a=t(9365),i=t(8149);const o="snippetContainer_KzbM",p="tabsWrapper_cW4m",l="checkbox_OJ2q",c=JSON.parse('{"docs-snippets-from-tests/your-first-scala-project/bleep.yaml":{"name":"docs-snippets-from-tests/your-first-scala-project/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    extends: template-common\\n    platform:\\n      mainClass: com.example.helloMain\\n  myapp-test:\\n    dependencies: org.scalameta::munit:1.3.4\\n    dependsOn: myapp\\n    extends: template-common\\n    isTestProject: true\\ntemplates:\\n  template-common:\\n    platform:\\n      name: jvm\\n    scala:\\n      options: -encoding utf8 -feature -unchecked\\n      strict: true\\n      version: 3.9.0","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    extends: template-common\\n    platform:\\n      mainClass: com.example.helloMain\\n  myapp-test:\\n    dependencies: org.scalameta::munit:1.3.4\\n    dependsOn: myapp\\n    extends: template-common\\n    isTestProject: true\\ntemplates:\\n  template-common:\\n    platform:\\n      name: jvm\\n    scala:\\n      options: -encoding utf8 -feature -unchecked\\n      strict: true\\n      version: 3.9.0"},"docs-snippets-from-tests/your-first-project/bleep.yaml":{"name":"docs-snippets-from-tests/your-first-project/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    extends: template-common\\n    platform:\\n      mainClass: com.example.Main\\n  myapp-test:\\n    dependencies: org.junit.jupiter:junit-jupiter:5.14.4\\n    dependsOn: myapp\\n    extends: template-common\\n    isTestProject: true\\ntemplates:\\n  template-common:\\n    platform:\\n      name: jvm","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    extends: template-common\\n    platform:\\n      mainClass: com.example.Main\\n  myapp-test:\\n    dependencies: org.junit.jupiter:junit-jupiter:5.14.4\\n    dependsOn: myapp\\n    extends: template-common\\n    isTestProject: true\\ntemplates:\\n  template-common:\\n    platform:\\n      name: jvm"},"docs-snippets-from-tests/your-first-kotlin-project/bleep.yaml":{"name":"docs-snippets-from-tests/your-first-kotlin-project/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    extends: template-common\\n    platform:\\n      mainClass: com.example.MainKt\\n  myapp-test:\\n    dependencies: io.kotest:kotest-runner-junit5-jvm:6.2.4\\n    dependsOn: myapp\\n    extends: template-common\\n    isTestProject: true\\ntemplates:\\n  template-common:\\n    kotlin:\\n      jvmTarget: \'25\'\\n      version: 2.4.10\\n    platform:\\n      name: jvm","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    extends: template-common\\n    platform:\\n      mainClass: com.example.MainKt\\n  myapp-test:\\n    dependencies: io.kotest:kotest-runner-junit5-jvm:6.2.4\\n    dependsOn: myapp\\n    extends: template-common\\n    isTestProject: true\\ntemplates:\\n  template-common:\\n    kotlin:\\n      jvmTarget: \'25\'\\n      version: 2.4.10\\n    platform:\\n      name: jvm"},"docs-snippets-from-tests/test-projects/bleep.yaml":{"name":"docs-snippets-from-tests/test-projects/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  mylib:\\n    extends: template-jvm\\n  mylib-test:\\n    extends: template-jvm\\n    isTestProject: true\\n    dependsOn: mylib\\n    dependencies:\\n      - org.junit.jupiter:junit-jupiter:5.10.1\\n  mylib-it:\\n    extends: template-jvm\\n    isTestProject: true\\n    dependsOn: mylib\\n    dependencies:\\n      - org.junit.jupiter:junit-jupiter:5.10.1\\n      - org.testcontainers:testcontainers:1.20.4\\ntemplates:\\n  template-jvm:\\n    platform:\\n      name: jvm","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  mylib:\\n    extends: template-jvm\\n  mylib-test:\\n    extends: template-jvm\\n    isTestProject: true\\n    dependsOn: mylib\\n    dependencies:\\n      - org.junit.jupiter:junit-jupiter:5.10.1\\n  mylib-it:\\n    extends: template-jvm\\n    isTestProject: true\\n    dependsOn: mylib\\n    dependencies:\\n      - org.junit.jupiter:junit-jupiter:5.10.1\\n      - org.testcontainers:testcontainers:1.20.4\\ntemplates:\\n  template-jvm:\\n    platform:\\n      name: jvm"},"docs-snippets-from-tests/stamps/bleep.yaml":{"name":"docs-snippets-from-tests/stamps/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  lib:\\n    platform:\\n      name: jvm\\n    stamp: [dynver, git-sha, project-digest, build-digest]\\n    publish:\\n      groupId: com.example\\n  app:\\n    platform:\\n      name: jvm\\n    dependsOn: lib\\n  app-test:\\n    platform:\\n      name: jvm\\n    dependsOn: app\\n    isTestProject: true\\n    dependencies: org.junit.jupiter:junit-jupiter:5.14.4","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  lib:\\n    platform:\\n      name: jvm\\n    stamp: [dynver, git-sha, project-digest, build-digest]\\n    publish:\\n      groupId: com.example\\n  app:\\n    platform:\\n      name: jvm\\n    dependsOn: lib\\n  app-test:\\n    platform:\\n      name: jvm\\n    dependsOn: app\\n    isTestProject: true\\n    dependencies: org.junit.jupiter:junit-jupiter:5.14.4"},"docs-snippets-from-tests/spring-boot-myapp/bleep.yaml":{"name":"docs-snippets-from-tests/spring-boot-myapp/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    dependencies:\\n      - org.springframework.boot:spring-boot-starter-web:3.4.0\\n      - org.springframework.boot:spring-boot-starter-jdbc:3.4.0\\n      - org.springframework.boot:spring-boot-starter-
1actuator:3.4.0\\n      - org.duckdb:duckdb_jdbc:1.1.3\\n    extends:\\n      - template-common\\n    platform:\\n      mainClass: com.example.myapp.MyApp\\n    sourcegen:\\n      - main: bleep.plugin.springboot.SpringBootBuildInfo\\n        project: scripts\\n  myapp-test:\\n    dependencies:\\n      - org.springframework.boot:spring-boot-starter-test:3.4.0\\n    dependsOn: myapp\\n    extends:\\n      - template-common\\n    isTestProject: true\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleep-plugin-spring-boot:${BLEEP_VERSION}\\n    java:\\n      options: -proc:none --release 17\\n    platform:\\n      name: jvm\\nscripts:\\n  run-myapp-dev:\\n    main: scripts.RunMyappDev\\n    project: scripts\\n  run-myapp-prod:\\n    main: scripts.RunMyappProd\\n    project: scripts\\n  package-myapp:\\n    main: scripts.PackageMyapp\\n    project: scripts\\ntemplates:\\n  template-common:\\n    java:\\n      options: -proc:none --release 17\\n    platform:\\n      name: jvm","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    dependencies:\\n      - org.springframework.boot:spring-boot-starter-web:3.4.0\\n      - org.springframework.boot:spring-boot-starter-jdbc:3.4.0\\n      - org.springframework.boot:spring-boot-starter-actuator:3.4.0\\n      - org.duckdb:duckdb_jdbc:1.1.3\\n    extends:\\n      - template-common\\n    platform:\\n      mainClass: com.example.myapp.MyApp\\n    sourcegen:\\n      - main: bleep.plugin.springboot.SpringBootBuildInfo\\n        project: scripts\\n  myapp-test:\\n    dependencies:\\n      - org.springframework.boot:spring-boot-starter-test:3.4.0\\n    dependsOn: myapp\\n    extends:\\n      - template-common\\n    isTestProject: true\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleep-plugin-spring-boot:${BLEEP_VERSION}\\n    java:\\n      options: -proc:none --release 17\\n    platform:\\n      name: jvm\\nscripts:\\n  run-myapp-dev:\\n    main: scripts.RunMyappDev\\n    project: scripts\\n  run-myapp-prod:\\n    main: scripts.RunMyappProd\\n    project: scripts\\n  package-myapp:\\n    main: scripts.PackageMyapp\\n    project: scripts\\ntemplates:\\n  template-common:\\n    java:\\n      options: -proc:none --release 17\\n    platform:\\n      name: jvm"},"docs-snippets-from-tests/sourcegen-scala/bleep.yaml":{"name":"docs-snippets-from-tests/sourcegen-scala/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    platform:\\n      name: jvm\\n      mainClass: com.example.Main\\n    scala:\\n      version: 3.9.0\\n    sourcegen:\\n      project: scripts\\n      main: scripts.GenConstants\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleepscript:${BLEEP_VERSION}\\n    platform:\\n      name: jvm\\n    scala:\\n      version: 3.9.0","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    platform:\\n      name: jvm\\n      mainClass: com.example.Main\\n    scala:\\n      version: 3.9.0\\n    sourcegen:\\n      project: scripts\\n      main: scripts.GenConstants\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleepscript:${BLEEP_VERSION}\\n    platform:\\n      name: jvm\\n    scala:\\n      version: 3.9.0"},"docs-snippets-from-tests/sourcegen-kotlin/bleep.yaml":{"name":"docs-snippets-from-tests/sourcegen-kotlin/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    kotlin:\\n      jvmTarget: \\"25\\"\\n      version: 2.3.21\\n    platform:\\n      name: jvm\\n      mainClass: com.example.MainKt\\n    sourcegen:\\n      project: scripts\\n      main: scripts.GenConstants\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleepscript:${BLEEP_VERSION}\\n    kotlin:\\n      jvmTarget: \\"25\\"\\n      version: 2.3.21\\n    platform:\\n      name: jvm","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    kotlin:\\n      jvmTarget: \\"25\\"\\n      version: 2.3.21\\n    platform:\\n      name: jvm\\n      mainClass: com.example.MainKt\\n    sourcegen:\\n      project: scripts\\n      main: scripts.GenConstants\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleepscript:${BLEEP_VERSION}\\n    kotlin:\\n      jvmTarget: \\"25\\"\\n      version: 2.3.21\\n    platform:\\n      name: jvm"},"docs-snippets-from-tests/sourcegen-java/bleep.yaml":{"name":"docs-snippets-from-tests/sourcegen-java/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    java:\\n      version: \\"25\\"\\n    platform:\\n      name: jvm\\n      mainClass: com.example.Main\\n    sourcegen:\\n      project: scripts\\n      main: scripts.GenConstants\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleepscript:${BLEEP_VERSION}\\n    java:\\n      version: \\"25\\"\\n    platform:\\n      name: jvm","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    java:\\n      version: \\"25\\"\\n    platform:\\n      name: jvm\\n      mainClass: com.example.Main\\n    sourcegen:\\n      project: scripts\\n      main: scripts.GenConstants\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleepscript:${BLEEP_VERSION}\\n    java:\\n      version: \\"25\\"\\n    platform:\\n      name: jvm"},"docs-snippets-from-tests/quarkus-myapp/bleep.yaml":{"name":"docs-snippets-from-tests/quarkus-myapp/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    dependencies:\\n      - io.quarkus:quarkus-rest:3.39.1\\n    extends: template-common\\n  myapp-test:\\n    dependencies:\\n      - io.quarkus:quarkus-junit5:3.39.1\\n    dependsOn: myapp\\n    extends:\\n      - template-common\\n      - template-quarkus-test\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleep-plugin-quarkus:${BLEEP_VERSION}\\n    java:\\n      options: -proc:none --release 17\\n    platform:\\n      name: jvm\\nscripts:\\n  run-myapp-dev:\\n    main: scripts.RunMyappDev\\n    project: scripts\\n  package-myapp:\\n    main: scripts.PackageMyapp\\n    project: scripts\\ntemplates:\\n  template-common:\\n    java:\\n      options: -proc:none --release 17 -parameters\\n    platform:\\n      name: jvm\\n  template-quarkus-test:\\n    isTestProject: true\\n    sourcegen:\\n      main: bleep.plugin.quarkus.QuarkusTestModelGen\\n      project: scripts","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    dependencies:\\n      - io.quarkus:quarkus-rest:3.39.1\\n    extends: template-common\\n  myapp-test:\\n    dependencies:\\n      - io.quarkus:quarkus-junit5:3.39.1\\n    dependsOn: myapp\\n    extends:\\n      - template-common\\n      - template-quarkus-test\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleep-plugin-quarkus:${BLEEP_VERSION}\\n    java:\\n      options: -proc:none --release 17\\n    platform:\\n      name: jvm\\nscripts:\\n  run-myapp-dev:\\n    main: scripts.RunMyappDev\\n    project: scripts\\n  package-myapp:\\n    main: scripts.PackageMyapp\\n    project: scripts\\ntemplates:\\n  template-common:\\n    java:\\n      options: -proc:none --release 17 -parameters\\n    platform:\\n      name: jvm\\n  template-quarkus-test:\\n    isTestProject: true\\n    sourcegen:\\n      main: bleep.plugin.quarkus.QuarkusTestModelGen\\n      project: scripts"},"docs-snippets-from-tests/publish-to-maven/bleep.yaml":{"name":"docs-snippets-from-tests/publish-to-maven/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  mylib:\\n    platform:\\n      name: jvm\\n    publish:\\n      groupId: io.github.myusername\\n      url: https://github.com/myusername/mylib\\n      description: A useful library that does useful things.\\n      developers:\\n        - id: myusername\\n          name: My Name\\n          url: https://github.com/myusername\\n      licenses:\\n        - name: Apache-2.0\\n          url: https://www.apache.org/licenses/LICENSE-2.0.txt\\n      sonatypeCredentialHost: central.sonatype.com","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  mylib:\\n    platform:\\n      name: jvm\\n    publish:\\n      groupId: io.github.myusername\\n      url: https://github.com/myusername/mylib\\n      description: A useful library that does useful things.\\n      developers:\\n        - id: myusername\\n          name: My Name\\n          url: https://github.com/myusername\\n      licenses:\\n        - name: Apache-2.0\\n          url: https://www.apache.org/licenses/LICENSE-2.0.txt\\n      sonatypeCredentialHost: central.sonatype.com"},"docs-snippets-from-tests/proguard-publish-scala/bleep.yaml":{"name":"docs-snippets-from-tests/proguard-publish-scala/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  mylib:\\n    platform:\\n      name: jvm\\n    publish:\\n      groupId: com.example\\n    scala:\\n      version: 3.9.0\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleepscript:${BLEEP_VERSION}\\n    platform:\\n      name: jvm\\n    scala:\\n      version: 3.9.0\\nscripts:\\n  proguard-publish:\\n    main: scripts.ProguardPublish\\n    project: scripts","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  mylib:\\n    platform:\\n      name: jvm\\n    publish:\\n      groupId: com.example\\n    scala:\\n      version: 3.9.0\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleepscript:${BLEEP_VERSION}\\n    platform:\\n      name: jvm\\n    scala:\\n      version: 3.9.0\\nscripts:\\n  proguard-publish:\\n    main: scripts.ProguardPublish\\n    project: scripts"},"docs-snippets-from-tests/proguard-publish-kotlin/bleep.yaml":{"name":"docs-snippets-from-tests/proguard-publish-kotlin/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  mylib:\\n    kotlin:\\n      jvmTarget: \\"17\\"\\n      version: 2.3.21\\n    platform:\\n      name: jvm\\n    publish:\\n      groupId: com.example\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleepscript:${BLEEP_VERSION}\\n    kotlin:\\n      jvmTarget: \\"25\\"\\n      version: 2.3.21\\n    platform:\\n      name: jvm\\nscripts:\\n  proguard-publish:\\n    main: scripts.ProguardPublish\\n    project: scripts","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  mylib:\\n    kotlin:\\n      jvmTarget: \\"17\\"\\n      version: 2.3.21\\n    platform:\\n      name: jvm\\n    publish:\\n      groupId: com.example\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleepscript:${BLEEP_VERSION}\\n    kotlin:\\n      jvmTarget: \\"25\\"\\n      version: 2.3.21\\n    platform:\\n      name: jvm\\nscripts:\\n  proguard-publish:\\n    main: scripts.ProguardPublish\\n    project: scripts"},"docs-snippets-from-tests/proguard-publish-java/bleep.yaml":{"name":"docs-snippets-from-tests/proguard-publish-java/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  mylib:\\n    java:\\n      options: -proc:none --release 17\\n    platform:\\n      name: jvm\\n    publish:\\n      groupId: com.example\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleepscript:${BLEEP_VERSION}\\n    java:\\n      options: -proc:none --release 17\\n    platform:\\n      name: jvm\\nscripts:\\n  proguard-publish:\\n    main: scripts.ProguardPublish\\n    project: scripts","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  mylib:\\n    java:\\n      options: -proc:none --release 17\\n    platform:\\n      name: jvm\\n    publish:\\n      groupId: com.example\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleepscript:${BLEEP_VERSION}\\n    java:\\n      options: -proc:none --release 17\\n    platform:\\n      name: jvm\\nscripts:\\n  proguard-publish:\\n    main: scripts.ProguardPublish\\n    project: scripts"},"docs-snippets-from-tests/per-cross-customization/bleep.yaml":{"name":"docs-snippets-from-tests/per-cross-customization/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  mylib:\\n    source-layout: cross-pure\\n    cross:\\n      jvm213:\\n        scala:\\n          version: 2.13.18\\n          options: -Ymacro-annotations\\n        dependencies:\\n          - org.typelevel::cats-core:2.10.0\\n      jvm3:\\n        scala:\\n          version: 3.9.0\\n          options: -Yretain-trees\\n    platform:\\n      name: jvm","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  mylib:\\n    source-layout: cross-pure\\n    cross:\\n      jvm213:\\n        scala:\\n          version: 2.13.18\\n          options: -Ymacro-annotations\\n        dependencies:\\n          - org.typelevel::cats-core:2.10.0\\n      jvm3:\\n        scala:\\n          version: 3.9.0\\n          options: -Yretain-trees\\n    platform:\\n      name: jvm"},"docs-snippets-from-tests/first-script-scala/bleep.yaml":{"name":"docs-snippets-from-tests/first-script-scala/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    platform:\\n      name: jvm\\n      mainClass: myapp.Main\\n    scala:\\n      version: 3.9.0\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleepscript:${BLEEP_VERSION}\\n    platform:\\n      name: jvm\\n    scala:\\n      version: 3.9.0\\nscripts:\\n  hello:\\n    main: scripts.HelloScript\\n    project: scripts","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    platform:\\n      name: jvm\\n      mainClass: myapp.Main\\n    scala:\\n      version: 3.9.0\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleepscript:${BLEEP_VERSION}\\n    platform:\\n      name: jvm\\n    scala:\\n      version: 3.9.0\\nscripts:\\n  hello:\\n    main: scripts.HelloScript\\n    project: scripts"},"docs-snippets-from-tests/first-script-kotlin/bleep.yaml":{"name":"docs-snippets-from-tests/first-script-kotlin/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    kotlin:\\n      jvmTarget: \\"25\\"\\n      version: 2.3.21\\n    platform:\\n      name: jvm\\n      mainClass: com.example.MainKt\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleepscript:${BLEEP_VERSION}\\n    kotlin:\\n      jvmTarget: \\"25\\"\\n      ver
1sion: 2.3.21\\n    platform:\\n      name: jvm\\nscripts:\\n  hello:\\n    main: scripts.HelloScript\\n    project: scripts","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    kotlin:\\n      jvmTarget: \\"25\\"\\n      version: 2.3.21\\n    platform:\\n      name: jvm\\n      mainClass: com.example.MainKt\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleepscript:${BLEEP_VERSION}\\n    kotlin:\\n      jvmTarget: \\"25\\"\\n      version: 2.3.21\\n    platform:\\n      name: jvm\\nscripts:\\n  hello:\\n    main: scripts.HelloScript\\n    project: scripts"},"docs-snippets-from-tests/first-script-java/bleep.yaml":{"name":"docs-snippets-from-tests/first-script-java/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    platform:\\n      name: jvm\\n      mainClass: com.example.Main\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleepscript:${BLEEP_VERSION}\\n    java:\\n      options: -proc:none --release 17\\n    platform:\\n      name: jvm\\n    sources: ./src/main/java\\nscripts:\\n  hello:\\n    main: scripts.HelloScript\\n    project: scripts","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  myapp:\\n    platform:\\n      name: jvm\\n      mainClass: com.example.Main\\n  scripts:\\n    dependencies:\\n      - build.bleep:bleepscript:${BLEEP_VERSION}\\n    java:\\n      options: -proc:none --release 17\\n    platform:\\n      name: jvm\\n    sources: ./src/main/java\\nscripts:\\n  hello:\\n    main: scripts.HelloScript\\n    project: scripts"},"docs-snippets-from-tests/cross-building-scala/bleep.yaml":{"name":"docs-snippets-from-tests/cross-building-scala/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  mylib:\\n    extends: template-cross\\n  mylib-test:\\n    dependencies:\\n      - org.scalameta::munit:1.0.0\\n    dependsOn: mylib\\n    extends: template-cross\\n    isTestProject: true\\ntemplates:\\n  template-cross:\\n    cross:\\n      jvm213:\\n        scala:\\n          version: 2.13.18\\n      jvm3:\\n        scala:\\n          version: 3.9.0\\n    platform:\\n      name: jvm","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  mylib:\\n    extends: template-cross\\n  mylib-test:\\n    dependencies:\\n      - org.scalameta::munit:1.0.0\\n    dependsOn: mylib\\n    extends: template-cross\\n    isTestProject: true\\ntemplates:\\n  template-cross:\\n    cross:\\n      jvm213:\\n        scala:\\n          version: 2.13.18\\n      jvm3:\\n        scala:\\n          version: 3.9.0\\n    platform:\\n      name: jvm"},"docs-snippets-from-tests/cross-building-kotlin/bleep.yaml":{"name":"docs-snippets-from-tests/cross-building-kotlin/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  app:\\n    kotlin:\\n      version: 2.3.21\\n    cross:\\n      jvm:\\n        kotlin:\\n          jvmTarget: \\"25\\"\\n        platform:\\n          mainClass: com.example.MainKt\\n          name: jvm\\n      js:\\n        kotlin:\\n          js:\\n            outputMode: js\\n            target: nodejs\\n        platform:\\n          name: js","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nprojects:\\n  app:\\n    kotlin:\\n      version: 2.3.21\\n    cross:\\n      jvm:\\n        kotlin:\\n          jvmTarget: \\"25\\"\\n        platform:\\n          mainClass: com.example.MainKt\\n          name: jvm\\n      js:\\n        kotlin:\\n          js:\\n            outputMode: js\\n            target: nodejs\\n        platform:\\n          name: js"},"docs-snippets-from-tests/artifactory/bleep.yaml":{"name":"docs-snippets-from-tests/artifactory/bleep.yaml","snippet":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nresolvers:\\n  - name: company-releases\\n    type: maven\\n    uri: https://artifactory.company.com/artifactory/libs-release\\n  - name: company-snapshots\\n    type: maven\\n    uri: https://artifactory.company.com/artifactory/libs-snapshot\\n\\nprojects:\\n  mylib:\\n    platform:\\n      name: jvm\\n    publish:\\n      groupId: com.mycompany","fullContent":"$schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json\\n$version: 1.0.0-M15\\njvm:\\n  name: graalvm-community:25.0.2\\nresolvers:\\n  - name: company-releases\\n    type: maven\\n    uri: https://artifactory.company.com/artifactory/libs-release\\n  - name: company-snapshots\\n    type: maven\\n    uri: https://artifactory.company.com/artifactory/libs-snapshot\\n\\nprojects:\\n  mylib:\\n    platform:\\n      name: jvm\\n    publish:\\n      groupId: com.mycompany"},"docs-snippets-from-tests/your-first-project/MainTest.java":{"name":"docs-snippets-from-tests/your-first-project/MainTest.java","snippet":"package com.example;\\n\\nimport static org.junit.jupiter.api.Assertions.assertEquals;\\n\\nimport org.junit.jupiter.api.Test;\\n\\nclass MainTest {\\n  @Test\\n  void greetsByName() {\\n    assertEquals(\\"Hello, World!\\", Main.greet(\\"World\\"));\\n  }\\n}","fullContent":"package com.example;\\n\\nimport static org.junit.jupiter.api.Assertions.assertEquals;\\n\\nimport org.junit.jupiter.api.Test;\\n\\nclass MainTest {\\n  @Test\\n  void greetsByName() {\\n    assertEquals(\\"Hello, World!\\", Main.greet(\\"World\\"));\\n  }\\n}"},"docs-snippets-from-tests/your-first-project/Main.java":{"name":"docs-snippets-from-tests/your-first-project/Main.java","snippet":"package com.example;\\n\\npublic class Main {\\n  public static String greet(String name) {\\n    return \\"Hello, \\" + n
1ame + \\"!\\";\\n  }\\n\\n  public static void main(String[] args) {\\n    System.out.println(greet(\\"World\\"));\\n  }\\n}","fullContent":"package com.example;\\n\\npublic class Main {\\n  public static String greet(String name) {\\n    return \\"Hello, \\" + name + \\"!\\";\\n  }\\n\\n  public static void main(String[] args) {\\n    System.out.println(greet(\\"World\\"));\\n  }\\n}"},"docs-snippets-from-tests/test-projects/GreeterTest.java":{"name":"docs-snippets-from-tests/test-projects/GreeterTest.java","snippet":"package com.example;\\n\\nimport org.junit.jupiter.api.Test;\\nimport static org.junit.jupiter.api.Assertions.assertEquals;\\n\\nclass GreeterTest {\\n  @Test\\n  void greetsByName() {\\n    assertEquals(\\"Hello, world!\\", Greeter.hello(\\"world\\"));\\n  }\\n}","fullContent":"package com.example;\\n\\nimport org.junit.jupiter.api.Test;\\nimport static org.junit.jupiter.api.Assertions.assertEquals;\\n\\nclass GreeterTest {\\n  @Test\\n  void greetsByName() {\\n    assertEquals(\\"Hello, world!\\", Greeter.hello(\\"world\\"));\\n  }\\n}"},"docs-snippets-from-tests/test-projects/GreeterIT.java":{"name":"docs-snippets-from-tests/test-projects/GreeterIT.java","snippet":"package com.example;\\n\\nimport org.junit.jupiter.api.Test;\\nimport org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;\\nimport static org.junit.jupiter.api.Assertions.assertEquals;\\n\\nclass GreeterIT {\\n  @Test\\n  @EnabledIfEnvironmentVariable(named = \\"RUN_INTEGRATION\\", matches = \\"true\\")\\n  void greetsAcrossLocales() {\\n    // Pretend this hits a Testcontainers Postgres or similar.\\n    assertEquals(\\"Hello, world!\\", Greeter.hello(\\"world\\"));\\n  }\\n}","fullContent":"package com.example;\\n\\nimport org.junit.jupiter.api.Test;\\nimport org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;\\nimport static org.junit.jupiter.api.Assertions.assertEquals;\\n\\nclass GreeterIT {\\n  @Test\\n  @EnabledIfEnvironmentVariable(named = \\"RUN_INTEGRATION\\", matches = \\"true\\")\\n  void greetsAcrossLocales() {\\n    // Pretend this hits a Testcontainers Postgres or similar.\\n    assertEquals(\\"Hello, world!\\", Greeter.hello(\\"world\\"));\\n  }\\n}"},"docs-snippets-from-tests/test-projects/Greeter.java":{"name":"docs-snippets-from-tests/test-projects/Greeter.java","snippet":"package com.example;\\n\\npublic final class Greeter {\\n  private Greeter() {}\\n\\n  public static String hello(String name) {\\n    return \\"Hello, \\" + name + \\"!\\";\\n  }\\n}","fullContent":"package com.example;\\n\\npublic final class Greeter {\\n  private Greeter() {}\\n\\n  public static String hello(String name) {\\n    return \\"Hello, \\" + name + \\"!\\";\\n  }\\n}"},"docs-snippets-from-tests/stamps/ReadsLibStampTest.java":{"name":"docs-snippets-from-tests/stamps/ReadsLibStampTest.java","snippet":"package com.example;\\n\\nimport static org.junit.jupiter.api.Assertions.assertNotNull;\\nimport static org.junit.jupiter.api.Assertions.assertTrue;\\n\\nimport java.io.InputStream;\\nimport java.util.Properties;\\nimport org.junit.jupiter.api.Test;\\n\\npublic class ReadsLibStampTest {\\n  @Test\\n  void seesItsDependencysStamp() throws Exception {\\n    try (InputStream in = ReadsLibStampTest.class.getResourceAsStream(\\"/bleep-stamp/lib.properties\\")) {\\n      assertNotNull(in, \\"lib\'s stamp is not on the test fork\'s classpath\\");\\n      Properties p = new Properties();\\n      p.load(in);\\n      assertTrue(p.getProperty(\\"git-sha\\").matches(\\"[0-9a-f]{40}\\"), \\"git-sha was \\" + p.getProperty(\\"git-sha\\"));\\n    }\\n  }\\n}","fullContent":"package com.example;\\n\\nimport static org.junit.jupiter.api.Assertions.assertNotNull;\\nimport static org.junit.jupiter.api.Assertions.assertTrue;\\n\\nimport java.io.InputStream;\\nimport java.util.Properties;\\nimport org.junit.jupiter.api.Test;\\n\\npublic class ReadsLibStampTest {\\n  @Test\\n  void seesItsDependencysStamp() throws Exception {\\n    try (InputStream in = ReadsLibStampTest.class.getResourceAsStream(\\"/bleep-stamp/lib.properties\\")) {\\n      assertNotNull(in, \\"lib\'s stamp is not on the test fork\'s classpath\\");\\n      Properties p = new Properties();\\n      p.load(in);\\n      assertTrue(p.getProperty(\\"git-sha\\").matches(\\"[0-9a-f]{40}\\"), \\"git-sha was \\" + p.getProperty(\\"git-sha\\"));\\n    }\\n  }\\n}"},"docs-snippets-from-tests/sourcegen-java/Main.java":{"name":"docs-snippets-from-tests/sourcegen-java/Main.java","snippet":"package com.example;\\n\\nimport generated.Constants;\\n\\npublic final class Main {\\n  public static void main(String[] args) {\\n    System.out.println(\\"answer: \\" + Constants.ANSWER);\\n  }\\n}","fullContent":"package com.example;\\n\\nimport generated.Constants;\\n\\npublic final class Main {\\n  public static void main(String[] args) {\\n    System.out.println(\\"answer: \\" + Constants.ANSWER);\\n  }\\n}"},"docs-snippets-from-tests/sourcegen-java/GenConstants.java":{"name":"docs-snippets-from-tests/sourcegen-java/GenConstants.java","snippet":"package scripts;\\n\\nimport bleepscript.BleepCodegenScript;\\nimport bleepscript.CodegenTarget;\\nimport bleepscript.Commands;\\nimport bleepscript.Started;\\nimport java.io.IOException;\\nimport java.nio.file.Files;\\nimport java.nio.file.Path;\\nimport java.util.List;\\n\\npublic final class GenConstants extends BleepCodegenScript {\\n  public GenConstants() {\\n    super(\\"GenConstants\\");\\n  }\\n\\n  @Override\\n  public void run(Started started, Commands commands, List<CodegenTarget> targets, List<String> args) {\\n    for (CodegenTarget target : targets) {\\n      Path file = target.sources().resolve(\\"generated/Constants.java\\");
1\\n      try {\\n        Files.createDirectories(file.getParent());\\n        Files.writeString(file,\\n            \\"package generated;\\\\n\\" +\\n            \\"\\\\n\\" +\\n            \\"public final class Constants {\\\\n\\" +\\n            \\"  public static final int ANSWER = 42;\\\\n\\" +\\n            \\"}\\\\n\\");\\n      } catch (IOException e) {\\n        throw new RuntimeException(e);\\n      }\\n    }\\n  }\\n}","fullContent":"package scripts;\\n\\nimport bleepscript.BleepCodegenScript;\\nimport bleepscript.CodegenTarget;\\nimport bleepscript.Commands;\\nimport bleepscript.Started;\\nimport java.io.IOException;\\nimport java.nio.file.Files;\\nimport java.nio.file.Path;\\nimport java.util.List;\\n\\npublic final class GenConstants extends BleepCodegenScript {\\n  public GenConstants() {\\n    super(\\"GenConstants\\");\\n  }\\n\\n  @Override\\n  public void run(Started started, Commands commands, List<CodegenTarget> targets, List<String> args) {\\n    for (CodegenTarget target : targets) {\\n      Path file = target.sources().resolve(\\"generated/Constants.java\\");\\n      try {\\n        Files.createDirectories(file.getParent());\\n        Files.writeString(file,\\n            \\"package generated;\\\\n\\" +\\n            \\"\\\\n\\" +\\n            \\"public final class Constants {\\\\n\\" +\\n            \\"  public static final int ANSWER = 42;\\\\n\\" +\\n            \\"}\\\\n\\");\\n      } catch (IOException e) {\\n        throw new RuntimeException(e);\\n      }\\n    }\\n  }\\n}"},"docs-snippets-from-tests/publish-to-maven/Greeter.java":{"name":"docs-snippets-from-tests/publish-to-maven/Greeter.java","snippet":"package com.example;\\n\\npublic final class Greeter {\\n  private Greeter() {}\\n\\n  public static String hello(String name) {\\n    return \\"Hello, \\" + name + \\"!\\";\\n  }\\n}","fullContent":"package com.example;\\n\\npublic final class Greeter {\\n  private Greeter() {}\\n\\n  public static String hello(String name) {\\n    return \\"Hello, \\" + name + \\"!\\";\\n  }\\n}"},"docs-snippets-from-tests/proguard-publish-java/ProguardPublish.java":{"name":"docs-snippets-from-tests/proguard-publish-java/ProguardPublish.java","snippet":"package scripts;\\n\\nimport bleepscript.BleepScript;\\nimport bleepscript.BleepscriptServices;\\nimport bleepscript.Commands;\\nimport bleepscript.CrossProjectName;\\nimport bleepscript.Logger;\\nimport bleepscript.PackagedLibrary;\\nimport bleepscript.Packaging;\\nimport bleepscript.PublishLayout;\\nimport bleepscript.Started;\\nimport java.util.List;\\nimport java.util.Optional;\\n\\n/**\\n * Compose: compile, package, {@link Proguard#shrink} the main JAR, publish.\\n *\\n * <p>The \\"plugin\\" lives next door in {@link Proguard}. This script is just glue:\\n * arg parsing + four bleepscript API calls.\\n *\\n * <p>Usage: {@code bleep proguard-publish <projectName> <version> <groupId>}.\\n */\\npublic final class ProguardPublish extends BleepScript {\\n  public ProguardPublish() {\\n    super(\\"proguard-publish\\");\\n  }\\n\\n  @Override\\n  public void run(Started started, Commands commands, List<String> args) {\\n    if (args.size() < 3) {\\n      throw new IllegalArgumentException(\\n          \\"Usage: bleep proguard-publish <projectName> <version> <groupId>\\");\\n    }\\n    String projectName = args.get(0);\\n    String version = args.get(1);\\n    String groupId = args.get(2);\\n\\n    CrossProjectName project = new CrossProjectName(projectName, Optional.empty());\\n    Logger log = started.logger().withContext(\\"project\\", projectName);\\n\\n    commands.compile(List.of(project));\\n\\n    log.info(\\"packaging\\");\\n    PackagedLibrary library =\\n        Packaging.packageProject(\\n            started,\\n            project,\\n            groupId,\\n            version,\\n            PublishLayout.Maven.INSTANCE,\\n            BleepscriptServices.Holder.INSTANCE.defaultManifestCreator());\\n\\n    byte[] originalJar = library.jarFile();\\n    log.info(\\"main JAR: \\" + library.jarFilePath().asString() + \\" (\\" + originalJar.length + \\" bytes)\\");
1\\n\\n    byte[] shrunk = Proguard.create(started).shrink(originalJar);\\n    log.info(\\n        \\"ProGuard output: \\" + shrunk.length + \\" bytes (saved \\" + (originalJar.length - shrunk.length) + \\")\\");\\n\\n    Packaging.publishToLocalMaven(library.withJarFile(shrunk));\\n    log.info(\\"Published \\" + groupId + \\":\\" + projectName + \\":\\" + version);\\n  }\\n}","fullContent":"package scripts;\\n\\nimport bleepscript.BleepScript;\\nimport bleepscript.BleepscriptServices;\\nimport bleepscript.Commands;\\nimport bleepscript.CrossProjectName;\\nimport bleepscript.Logger;\\nimport bleepscript.PackagedLibrary;\\nimport bleepscript.Packaging;\\nimport bleepscript.PublishLayout;\\nimport bleepscript.Started;\\nimport java.util.List;\\nimport java.util.Optional;\\n\\n/**\\n * Compose: compile, package, {@link Proguard#shrink} the main JAR, publish.\\n *\\n * <p>The \\"plugin\\" lives next door in {@link Proguard}. This script is just glue:\\n * arg parsing + four bleepscript API calls.\\n *\\n * <p>Usage: {@code bleep proguard-publish <projectName> <version> <groupId>}.\\n */\\npublic final class ProguardPublish extends BleepScript {\\n  public ProguardPublish() {\\n    super(\\"proguard-publish\\");\\n  }\\n\\n  @Override\\n  public void run(Started started, Commands commands, List<String> args) {\\n    if (args.size() < 3) {\\n      throw new IllegalArgumentException(\\n          \\"Usage: bleep proguard-publish <projectName> <version> <groupId>\\");\\n    }\\n    String projectName = args.get(0);\\n    String version = args.get(1);\\n    String groupId = args.get(2);\\n\\n    CrossProjectName project = new CrossProjectName(projectName, Optional.empty());\\n    Logger log = started.logger().withContext(\\"project\\", projectName);\\n\\n    commands.compile(List.of(project));\\n\\n    log.info(\\"packaging\\");\\n    PackagedLibrary library =\\n        Packaging.packageProject(\\n            started,\\n            project,\\n            groupId,\\n            version,\\n            PublishLayout.Maven.INSTANCE,\\n            BleepscriptServices.Holder.INSTANCE.defaultManifestCreator());\\n\\n    byte[] originalJar = library.jarFile();\\n    log.info(\\"main JAR: \\" + library.jarFilePath().asString() + \\" (\\" + originalJar.length + \\" bytes)\\");\\n\\n    byte[] shrunk = Proguard.create(started).shrink(originalJar);\\n    log.info(\\n        \\"ProGuard output: \\" + shrunk.length + \\" bytes (saved \\" + (originalJar.length - shrunk.length) + \\")\\");\\n\\n    Packaging.publishToLocalMaven(library.withJarFile(shrunk));\\n    log.info(\\"Published \\" + groupId + \\":\\" + projectName + \\":\\" + version);\\n  }\\n}"},"docs-snippets-from-tests/proguard-publish-java/Proguard.java":{"name":"docs-snippets-from-tests/proguard-publish-java/Proguard.java","snippet":"package scripts;\\n\\nimport bleepscript.Cli;\\nimport bleepscript.Coursier;\\nimport bleepscript.Started;\\nimport java.io.File;\\nimport java.io.IOException;\\nimport java.io.UncheckedIOException;\\nimport java.nio.file.Files;\\nimport java.nio.file.Path;\\nimport java.util.Comparator;\\nimport java.util.List;\\nimport java.util.stream.Collectors;\\nimport java.util.stream.Stream;\\n\\n/**\\n * A reusable ProGuard helper. Takes JAR bytes, returns shrunk JAR bytes. Reusable\\n * across projects: copy this file, depend on it via {@code sources:} in\\n * bleep.yaml, or publish it as a library.\\n *\\n * <p>This is what a \\"plugin\\" looks like when you don\'t have a plugin API: a\\n * regular class with a regular method. No registration, no lifecycle, no\\n * autoplugin trigger \u2014 just code you can call.\\n *\\n * <p>Instantiate via {@link #create(Started)} \u2014 the factory fetches ProGuard\\n * once and caches the classpath. Reuse one instance across multiple shrink\\n * calls in the same script.\\n */\\npublic record Proguard(Started started, String proguardVersion, String classpath) {\\n  public static final String DEFAULT_VERSION = \\"7.7.0\\";\\n\\n  /** Resolve and cache the ProGuard classpath. Default version. */\\n  public static Proguard create(Started started) {\\n    return create(started, DEFAULT_VERSION);\\n  }\\n\\n  /** Resolve and cache the ProGuard classpath. Caller picks the version. */\\n  public static Proguard create(Started started, String proguardVersion) {\\n    List<Path>
1 jars =\\n        Coursier.fetchClasspath(\\n            started, \\"com.guardsquare:proguard-base:\\" + proguardVersion);\\n    String classpath =\\n        jars.stream().map(Path::toString).collect(Collectors.joining(File.pathSeparator));\\n    return new Proguard(started, proguardVersion, classpath);\\n  }\\n\\n  /**\\n   * Run ProGuard over the given JAR bytes; return the shrunk JAR bytes. Writes\\n   * input/output JARs to a temp directory and forks a JVM through bleep\'s cli\\n   * wrapper using the JVM bleep resolved for this build.\\n   */\\n  public byte[] shrink(byte[] inputJarBytes) {\\n    try {\\n      Path workdir = Files.createTempDirectory(\\"proguard\\");\\n      try {\\n        Path inputJar = workdir.resolve(\\"input.jar\\");\\n        Path outputJar = workdir.resolve(\\"output.jar\\");\\n        Path configFile = workdir.resolve(\\"config.pro\\");\\n        Files.write(inputJar, inputJarBytes);\\n        Files.writeString(configFile, config(inputJar, outputJar));\\n\\n        started.logger().info(\\"running ProGuard \\" + proguardVersion);\\n        Cli.command(\\"proguard\\")\\n            .args(\\n                started.jvmCommand().toString(),\\n                \\"-cp\\",\\n                classpath,\\n                \\"proguard.ProGuard\\",\\n                \\"@\\" + configFile.toAbsolutePath())\\n            .cwd(workdir)\\n            .run(started);\\n\\n        return Files.readAllBytes(outputJar);\\n      } finally {\\n        deleteRecursively(workdir);\\n      }\\n    } catch (IOException e) {\\n      throw new UncheckedIOException(e);\\n    }\\n  }\\n\\n  private static void deleteRecursively(Path dir) throws IOException {\\n    try (Stream<Path> paths = Files.walk(dir)) {\\n      for (Path p : paths.sorted(Comparator.reverseOrder()).toList()) {\\n        Files.delete(p);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * Minimal ProGuard config: shrink only (no obfuscation or optimization), keep\\n   * all public members so the published artifact stays byte-compatible. Customize\\n   * for real use.\\n   */\\n  private static String config(Path inputJar, Path outputJar) {\\n    return String.join(\\n        \\"\\\\n\\",\\n        \\"-injars \\" + inputJar.toAbsolutePath(),\\n        \\"-outjars \\" + outputJar.toAbsolutePath(),\\n        \\"-dontoptimize\\",\\n        \\"-dontobfuscate\\",\\n        \\"-dontwarn\\",\\n        \\"-keep class ** { *; }\\");\\n  }\\n}","fullContent":"package scripts;\\n\\nimport bleepscript.Cli;\\nimport bleepscript.Coursier;\\nimport bleepscript.Started;\\nimport java.io.File;\\nimport java.io.IOException;\\nimport java.io.UncheckedIOException;\\nimport java.nio.file.Files;\\nimport java.nio.file.Path;\\nimport java.util.Comparator;\\nimport java.util.List;\\nimport java.util.stream.Collectors;\\nimport java.util.stream.Stream;\\n\\n/**\\n * A reusable ProGuard helper. Takes JAR bytes, returns shrunk JAR bytes. Reusable\\n * across projects: copy this file, depend on it via {@code sources:} in\\n * bleep.yaml, or publish it as a library.\\n *\\n * <p>This is what a \\"plugin\\" looks like when you don\'t have a plugin API: a\\n * regular class with a regular method. No registration, no lifecycle, no\\n * autoplugin trigger \u2014 just code you can call.\\n *\\n * <p>Instantiate via {@link #create(Started)} \u2014 the factory fetches ProGuard\\n * once and caches the classpath. Reuse one instance across multiple shrink\\n * calls in the same script.\\n */\\npublic record Proguard(Started started, String proguardVersion, String classpath) {\\n  public static final String DEFAULT_VERSION = \\"7.7.0\\";\\n\\n  /** Resolve and cache the ProGuard classpath. Default version. */\\n  public static Proguard create(Started started) {\\n    return create(started, DEFAULT_VERSION);\\n  }\\n\\n  /** Resolve and cache the ProGuard classpath. Caller picks the version. */\\n  public static Proguard create(Started started, String proguardVersion) {\\n    List<Path> jars =\\n        Coursier.fetchClasspath(\\n            started, \\"com.guardsquare:proguard-base:\\" + proguardVersion);\\n    String classpath =\\n        jars.stream().map(Path::toString).collect(Collectors.joining(File.pathSeparator));\\n    return new Proguard(started, proguardVersion, classpath);\\n  }\\n\\n  /**\\n   * Run ProGuard over the given JAR bytes; return the shrunk JAR bytes. Writes\\n   * input/output JARs to a temp directory and forks a JVM through bleep\'s cli\\n   * wrapper using the JVM bleep resolved for this build.\\n   */\\n  public byte[] shrink(byte[] inputJarBytes) {\\n    try {\\n      Path workdir = Files.createTempDirectory(\\"proguard\\");
1\\n      try {\\n        Path inputJar = workdir.resolve(\\"input.jar\\");\\n        Path outputJar = workdir.resolve(\\"output.jar\\");\\n        Path configFile = workdir.resolve(\\"config.pro\\");\\n        Files.write(inputJar, inputJarBytes);\\n        Files.writeString(configFile, config(inputJar, outputJar));\\n\\n        started.logger().info(\\"running ProGuard \\" + proguardVersion);\\n        Cli.command(\\"proguard\\")\\n            .args(\\n                started.jvmCommand().toString(),\\n                \\"-cp\\",\\n                classpath,\\n                \\"proguard.ProGuard\\",\\n                \\"@\\" + configFile.toAbsolutePath())\\n            .cwd(workdir)\\n            .run(started);\\n\\n        return Files.readAllBytes(outputJar);\\n      } finally {\\n        deleteRecursively(workdir);\\n      }\\n    } catch (IOException e) {\\n      throw new UncheckedIOException(e);\\n    }\\n  }\\n\\n  private static void deleteRecursively(Path dir) throws IOException {\\n    try (Stream<Path> paths = Files.walk(dir)) {\\n      for (Path p : paths.sorted(Comparator.reverseOrder()).toList()) {\\n        Files.delete(p);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * Minimal ProGuard config: shrink only (no obfuscation or optimization), keep\\n   * all public members so the published artifact stays byte-compatible. Customize\\n   * for real use.\\n   */\\n  private static String config(Path inputJar, Path outputJar) {\\n    return String.join(\\n        \\"\\\\n\\",\\n        \\"-injars \\" + inputJar.toAbsolutePath(),\\n        \\"-outjars \\" + outputJar.toAbsolutePath(),\\n        \\"-dontoptimize\\",\\n        \\"-dontobfuscate\\",\\n        \\"-dontwarn\\",\\n        \\"-keep class ** { *; }\\");\\n  }\\n}"},"docs-snippets-from-tests/proguard-publish-java/MyLib.java":{"name":"docs-snippets-from-tests/proguard-publish-java/MyLib.java","snippet":"package com.example;\\n\\npublic final class MyLib {\\n  private MyLib() {}\\n\\n  public static String greet(String name) {\\n    return \\"Hello, \\" + name + \\"!\\";\\n  }\\n}","fullContent":"package com.example;\\n\\npublic final class MyLib {\\n  private MyLib() {}\\n\\n  public static String greet(String name) {\\n    return \\"Hello, \\" + name + \\"!\\";\\n  }\\n}"},"docs-snippets-from-tests/first-script-java/Main.java":{"name":"docs-snippets-from-tests/first-script-java/Main.java","snippet":"package com.example;\\n\\npublic class Main {\\n  public static void main(String[] args) {\\n    System.out.println(\\"Hello from bleep!\\");\\n  }\\n}","fullContent":"package com.example;\\n\\npublic class Main {\\n  public static void main(String[] args) {\\n    System.out.println(\\"Hello from bleep!\\");\\n  }\\n}"},"docs-snippets-from-tests/first-script-java/HelloScript.java":{"name":"docs-snippets-from-tests/first-script-java/HelloScript.java","snippet":"package scripts;\\n\\nimport bleepscript.BleepScript;\\nimport bleepscript.Commands;\\nimport bleepscript.Started;\\nimport java.util.List;\\n\\npublic final class HelloScript extends BleepScript {\\n  public HelloScript() {\\n    super(\\"hello\\");\\n  }\\n\\n  @Override\\n  public void run(Started started, Commands commands, List<String> args) {\\n    int projectCount = started.build().explodedProjects().size();\\n    started.logger().info(\\"This build has \\" + projectCount + \\" projects\\");\\n    if (args.isEmpty()) {\\n      started.logger().info(\\"Hello, world!\\");\\n    } else {\\n      started.logger().info(\\"Hello, \\" + String.join(\\" \\", args) + \\"!\\");\\n    }\\n  }\\n}","fullContent":"package scripts;\\n\\nimport bleepscript.BleepScript;\\nimport bleepscript.Commands;\\nimport bleepscript.Started;\\nimport java.util.List;\\n\\npublic final class HelloScript extends BleepScript {\\n  public HelloScript() {\\n    super(\\"hello\\");\\n  }\\n\\n  @Override\\n  public void run(Started started, Commands commands, List<String> args) {\\n    int projectCount = started.build().explodedProjects().size();\\n    started.logger().info(\\"This build has \\" + projectCount + \\" projects\\");\\n    if (args.isEmpty()) {\\n      started.logger().info(\\"Hello, world!\\");\\n    } else {\\n      started.logger().info(\\"Hello, \\" + String.join(\\" \\", args) + \\"!\\");\\n    }\\n  }\\n}"},"docs-snippets-from-tests/artifactory/Greeter.java":{"name":"docs-snippets-from-tests/artifactory/Greeter.java","snippet":"package com.test;\\n\\npublic final class Greeter {\\n  private Greeter() {}\\n\\n  public static String hello(String name) {\\n    return \\"Hello, \\" + n
1ame + \\"!\\";\\n  }\\n}","fullContent":"package com.test;\\n\\npublic final class Greeter {\\n  private Greeter() {}\\n\\n  public static String hello(String name) {\\n    return \\"Hello, \\" + name + \\"!\\";\\n  }\\n}"},"docs-snippets-from-tests/spring-boot-myapp/scripts/src/java/scripts/RunMyappProd.java":{"name":"docs-snippets-from-tests/spring-boot-myapp/scripts/src/java/scripts/RunMyappProd.java","snippet":"package scripts;\\n\\nimport bleep.plugin.springboot.SpringBootRun;\\nimport bleepscript.BleepScript;\\nimport bleepscript.Commands;\\nimport bleepscript.Started;\\nimport java.util.List;\\n\\n/** Run myapp in prod mode: prod profile, larger heap, G1GC tuning. */\\npublic class RunMyappProd extends BleepScript {\\n  public RunMyappProd() {\\n    super(\\"run-myapp-prod\\");\\n  }\\n\\n  @Override\\n  public void run(Started started, Commands commands, List<String> args) {\\n    new SpringBootRun()\\n        .withJvmArgs(\\"-Xmx2g\\", \\"-XX:+UseG1GC\\", \\"-XX:MaxGCPauseMillis=200\\")\\n        .withProfiles(\\"prod\\")\\n        .withEnvironment(\\"APP_PORT\\", \\"9091\\")\\n        .runOn(started, commands, \\"myapp\\");\\n  }\\n}","fullContent":"package scripts;\\n\\nimport bleep.plugin.springboot.SpringBootRun;\\nimport bleepscript.BleepScript;\\nimport bleepscript.Commands;\\nimport bleepscript.Started;\\nimport java.util.List;\\n\\n/** Run myapp in prod mode: prod profile, larger heap, G1GC tuning. */\\npublic class RunMyappProd extends BleepScript {\\n  public RunMyappProd() {\\n    super(\\"run-myapp-prod\\");\\n  }\\n\\n  @Override\\n  public void run(Started started, Commands commands, List<String> args) {\\n    new SpringBootRun()\\n        .withJvmArgs(\\"-Xmx2g\\", \\"-XX:+UseG1GC\\", \\"-XX:MaxGCPauseMillis=200\\")\\n        .withProfiles(\\"prod\\")\\n        .withEnvironment(\\"APP_PORT\\", \\"9091\\")\\n        .runOn(started, commands, \\"myapp\\");\\n  }\\n}"},"docs-snippets-from-tests/spring-boot-myapp/scripts/src/java/scripts/RunMyappDev.java":{"name":"docs-snippets-from-tests/spring-boot-myapp/scripts/src/java/scripts/RunMyappDev.java","snippet":"package scripts;\\n\\nimport bleep.plugin.springboot.SpringBootRun;\\nimport bleepscript.BleepScript;\\nimport bleepscript.Commands;\\nimport bleepscript.Started;\\nimport java.util.List;\\n\\n/** Run myapp in dev mode: dev profile, smaller heap, live resource edits. */\\npublic class RunMyappDev extends BleepScript {\\n  public RunMyappDev() {\\n    super(\\"run-myapp-dev\\");\\n  }\\n\\n  @Override\\n  public void run(Started started, Commands commands, List<String> args) {\\n    new SpringBootRun()\\n        .withJvmArgs(\\"-Xmx512m\\")\\n        .withProfiles(\\"dev\\")\\n        .withAddResources(true)\\n        .withEnvironment(\\"APP_PORT\\", \\"9090\\")\\n        .runOn(started, commands, \\"myapp\\");\\n  }\\n}","fullContent":"package scripts;\\n\\nimport bleep.plugin.springboot.SpringBootRun;\\nimport bleepscript.BleepScript;\\nimport bleepscript.Commands;\\nimport bleepscript.Started;\\nimport java.util.List;\\n\\n/** Run myapp in dev mode: dev profile, smaller heap, live resource edits. */\\npublic class RunMyappDev extends BleepScript {\\n  public RunMyappDev() {\\n    super(\\"run-myapp-dev\\");\\n  }\\n\\n  @Override\\n  public void run(Started started, Commands commands, List<String> args) {\\n    new SpringBootRun()\\n        .withJvmArgs(\\"-Xmx512m\\")\\n        .withProfiles(\\"dev\\")\\n        .withAddResources(true)\\n        .withEnvironment(\\"APP_PORT\\", \\"9090\\")\\n        .runOn(started, commands, \\"myapp\\");\\n  }\\n}"},"docs-snippets-from-tests/spring-boot-myapp/scripts/src/java/scripts/PackageMyapp.java":{"name":"docs-snippets-from-tests/spring-boot-myapp/scripts/src/java/scripts/PackageMyapp.java","snippet":"package scripts;\\n\\nimport bleep.plugin.springboot.SpringBootRepackage;\\nimport bleepscript.BleepScript;\\nimport bleepscript.Commands;\\nimport bleepscript.Started;\\nimport java.util.List;\\n\\n/** Build an executable fat JAR with layered Docker support. */\\npublic class PackageMyapp extends BleepScript {\\n  public PackageMyapp() {\\n    super(\\"package-myapp\\");\\n  }\\n\\n  @Override\\n  public void run(Started started, Commands commands, List<String> args) {\\n    new SpringBootRepackage().withLayered(true).repackageOn(started, commands, \\"myapp\\");\\n  }\\n}","fullContent":"package scripts;\\n\\nimport bleep.plugin.springboot.SpringBootRepackage;\\nimport bleepscript.BleepScript;\\nimport bleepscript.Commands;\\nimport bleepscript.Started;\\nimport java.util.List;\\n\\n/** Build an executable fat JAR with layered Docker support. */\\npublic class PackageMyapp extends BleepScript {\\n  public PackageMyapp() {\\n    super(\\"package-myapp\\");\\n  }\\n\\n  @Override\\n  public void run(Started started, Commands commands, List<String> args) {\\n    new SpringBootRepackage().withLayered(true).repackageOn(started, commands, \\"myapp\\");\\n  }\\n}"},"docs-snippets-from-tests/quarkus-myapp/scripts/src/java/scripts/RunMyappDev.java":{"name":"docs-snippets-from-tests/quarkus-myapp/scripts/src/java/scripts/RunMyappDev.java","snippet":"package scripts;\\n\\nimport bleep.plugin.quarkus.QuarkusRun;\\nimport bleepscript.BleepScript;\\nimport bleepscript.Commands;\\nimport bleepscript.Started;\\nimport java.util.List;\\n\\n/** Run myapp in Quarkus dev mode: augmentation in-process, live reload from bleep\'s source dirs. */\\npublic class RunMyappDev extends BleepScript {\\n  public RunMyappDev() {\\n    super(\\"run-myapp-dev\\");\\n  }\\n\\n  @Override\\n  public void run(Started started, Commands commands, List<String> args) {\\n    new QuarkusRun().withJvmArgs(\\"-Xmx512m\\").runOn(started, commands, \\"myapp\\");\\n  }\\n}","fullContent":"package scripts;\\n\\nimport bleep.plugin.quarkus.QuarkusRun;\\nimport bleepscript.BleepScript;\\nimport bleepscript.Commands;\\nimport bleepscript.Started;\\nimport java.util.List;\\n\\n/** Run myapp in Quarkus dev mode: augmentation in-process, live reload from bleep\'s source dirs. */\\npublic class RunMyappDev extends BleepScript {\\n  public RunMyappDev() {\\n    super(\\"run-myapp-dev\\");\\n  }\\n\\n  @Override\\n  public void run(Started started, Commands commands, List<String> args) {\\n    new QuarkusRun().withJvmArgs(\\"-Xmx512m\\").runOn(started, commands, \\"myapp\\");\\n  }\\n}"},"docs-snippets-from-tests/quarkus-myapp/scripts/src/java/scripts/PackageMyapp.java":{"name":"docs-snippets-from-tests/quarkus-myapp/scripts/src/java/scripts/PackageMyapp.java","snippet":"package scripts;\\n\\nimport bleep.plugin.quarkus.QuarkusPackage;\\nimport bleepscript.BleepScript;\\nimport bleepscript.Commands;\\nimport bleepscript.Started;\\nimport java.util.List;\\n\\n/** Production build: writes the fast-jar quarkus-app/ layout plus quarkus-artifact.properties. */\\npublic class PackageMyapp extends BleepScript {\\n  public PackageMyapp() {\\n    super(\\"package-myapp\\");\\n  }\\n\\n  @Override\\n  public void run(Started started, Commands commands, List<String> args) {\\n    new QuarkusPackage().packageOn(started, commands, \\"myapp\\");\\n  }\\n}","fullContent":"package scripts;\\n\\nimport bleep.plugin.quarkus.QuarkusPackage;\\nimport bleepscript.BleepScript;\\nimport bleepscript.Commands;\\nimport bleepscript.Started;\\nimport java.util.List;\\n\\n/** Production build: writes the fast-jar quarkus-app/ layout plus quarkus-artifact.properties. */\\npublic class PackageMyapp extends BleepScript {\\n  public PackageMyapp() {\\n    super(\\"package-myapp\\");\\n  }\\n\\n  @Override\\n  public void run(Started started, Commands commands, List<String> args) {\\n    new QuarkusPackage().packageOn(started, commands, \\"myapp\\");\\n  }\\n}"},"docs-snippets-from-tests/spring-boot-myapp/myapp-test/src/java/com/example/myapp/ItemServiceTest.java":{"name":"docs-snippets-from-tests/spring-boot-myapp/myapp-test/src/java/com/example/myapp/ItemServiceTest.java","snippet":"package com.example.myapp;\\n\\nimport static org.junit.jupiter.api.Assertions.assertEquals;\\nimport static org.junit.jupiter.api.Assertions.assertNotNull;\\nimport static org.junit.jupiter.api.Assertions.assertThrows;\\nimport static org.junit.jupiter.api.Assertions.assertTrue;\\n\\nimport java.util.List;\\nimport org.junit.jupiter.api.Test;\\nimport org.springframework.beans.factory.annotation.Autowired;\\nimport org.springframework.boot.test.context.SpringBootTest;\\nimport org.springframework.test.context.ActiveProfiles;\\n\\n@SpringBootTest\\n@ActiveProfiles(\\"test\\")\\nclass ItemServiceTest {\\n  @Autowired ItemService service;\\n\\n  @Test\\n  void createsAndListsItems() {\\n    Item bread = service.create(\\"bread\\", 5);\\n    assertNotNull(bread.id());\\n    assertEquals(\\"bread\\", bread.name());\\n    assertEquals(5, bread.quantity());\\n\\n    Item milk = service.create(\\"milk\\", 2);\\n\\n    List<Item> all = service.all();\\n    assertTrue(all.contains(bread));\\n    assertTrue(all.contains(milk));\\n  }\\n\\n  @Test\\n  void adjustsQuantity() {\\n    Item it = service.create(\\"water\\", 10);\\n    Item after = service.adjust(it.id(), -3);\\n    assertEquals(7, after.quantity());\\n  }\\n\\n  @Test\\n  void rejectsNegativeQuantityOnAdjust() {\\n    Item it = service.create(\\"egg\\", 1);\\n    assertThrows(IllegalArgumentException.class, () -> service.adjust(it.id(), -2));\\n  }\\n\\n  @Test\\n  void rejectsBlankName() {\\n    assertThrows(IllegalArgumentException.class, () -> service.create(\\"  \\", 1));\\n  }\\n}","fullContent":"package com.example.myapp;\\n\\nimport static org.junit.jupiter.api.Assertions.assertEquals;\\nimport static org.junit.jupiter.api.Assertions.assertNotNull;\\nimport static org.junit.jupiter.api.Assertions.assertThrows;\\nimport static org.junit.jupiter.api.Assertions.assertTrue;\\n\\nimport java.util.List;\\nimport org.junit.jupiter.api.Test;\\nimport org.springframework.beans.factory.annotation.Autowired;\\nimport org.springframework.boot.test.context.SpringBootTest;\\nimport org.springframework.test.context.ActiveProfiles;\\n\\n@SpringBootTest\\n@ActiveProfiles(\\"test\\")\\nclass ItemServiceTest {\\n  @Autowired ItemService service;\\n\\n  @Test\\n  void createsAndListsItems() {\\n    Item bread = service.create(\\"bread\\", 5);\\n    assertNotNull(bread.id());\\n    assertEquals(\\"bread\\", bread.name());\\n    assertEquals(5, bread.quantity());\\n\\n    Item milk = service.create(\\"milk\\", 2);\\n\\n    List<Item> all = service.all();\\n    assertTrue(all.contains(bread));\\n    assertTrue(all.contains(milk));\\n  }\\n\\n  @Test\\n  void adjustsQuantity() {\\n    Item it = service.create(\\"water\\", 10);\\n    Item after = service.adjust(it.id(), -3);\\n    assertEquals(7, after.quantity());\\n  }\\n\\n  @Test\\n  void rejectsNegativeQuantityOnAdjust() {\\n    Item it = service.create(\\"egg\\", 1);\\n    assertThrows(IllegalArgumentException.class, () -> service.adjust(it.id(), -2));\\n  }\\n\\n  @Test\\n  void rejectsBlankName() {\\n    assertThrows(IllegalArgumentException.class, () -> service.create(\\"  \\", 1));\\n  }\\n}"},"docs-snippets-from-tests/spring-boot-myapp/myapp-test/src/java/com/example/myapp/ItemControllerTest.java":{"name":"docs-snippets-from-tests/spring-boot-myapp/myapp-test/src/java/com/example/myapp/ItemControllerTest.java","snippet":"package com.example.myapp;\\n\\nimport static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;\\nimport static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;\\nimport static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;\\nimport static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;\\n\\nimport org.junit.jupiter.api.Test;\\nimport org.springframework.beans.factory.annotation.Autowired;\\nimport org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\\nimport org.springframework.boot.test.context.SpringBootTest;\\nimport org.springframework.http.MediaType;\\nimport org.springframework.test.context.ActiveProfiles;\\nimport org.springframework.test.web.servlet.MockMvc;\\n\\n@SpringBootTest\\n@AutoConfigureMockMvc\\n@ActiveProfiles(\\"test\\")\\nclass ItemControllerTest {\\n  @Autowired MockMvc mvc;\\n\\n  @Test\\n  void postCreatesAndGetListsItem() throws Exception {\\n    mvc.perform(\\n            post(\\"/items\\")\\n                .contentType(MediaType.APPLICATION_JSON)\\n                .content(\\"{\\\\\\"name\\\\\\":\\\\\\"apple\\\\\\",\\\\\\"quantity\\\\\\":12}\\"))\\n        .andExpect(status().isOk())\\n        .andExpect(jsonPath(\\"$.name\\").value(\\"apple\\"))\\n        .andExpect(jsonPath(\\"$.quantity\\").value(12));\\n\\n    mvc.perform(get(\\"/items\\"))\\n        .andExpect(status().isOk())\\n        .andExpect(jsonPath(\\"$[?(@.name==\'apple\')].quantity\\").value(12));\\n  }\\n\\n  @Test\\n  void invalidPostReturnsBadRequest() throws Exception {\\n    mvc.perform(\\n            post(\\"/items\\")\\n                .contentType(MediaType.APPLICATION_JSON)\\n                .content(\\"{\\\\\\"name\\\\\\":\\\\\\"\\\\\\",\\\\\\"quantity\\\\\\":1}\\"))\\n        .andExpect(status().isBadRequest());\\n  }\\n}","fullContent":"package com.example.myapp;\\n\\nimport static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;\\nimport static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;\\nimport static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;\\nimport static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;\\n\\nimport org.junit.jupiter.api.Test;\\nimport org.springframework.beans.factory.annotation.Autowired;\\nimport org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\\nimport org.springframework.boot.test.context.SpringBootTest;\\nimport org.springframework.http.MediaType;\\nimport org.springframework.test.context.ActiveProfiles;\\nimport org.springframework.test.web.servlet.MockMvc;\\n\\n@SpringBootTest\\n@AutoConfigureMockMvc\\n@ActiveProfiles(\\"test\\")\\nclass ItemControllerTest {\\n  @Autowired MockMvc mvc;\\n\\n  @Test\\n  void postCreatesAndGetListsItem() throws Exception {\\n    mvc.perform(\\n            post(\\"/items\\")\\n                .contentType(MediaType.APPLICATION_JSON)\\n                .content(\\"{\\\\\\"name\\\\\\":\\\\\\"apple\\\\\\",\\\\\\"quantity\\\\\\":12}\\"))\\n        .andExpect(status().isOk())\\n        .andExpect(jsonPath(\\"$.name\\").value(\\"apple\\"))\\n        .andExpect(jsonPath(\\"$.quantity\\").value(12));\\n\\n    mvc.perform(get(\\"/items\\"))\\n        .andExpect(status().isOk())\\n        .andExpect(jsonPath(\\"$[?(@.name==\'apple\')].quantity\\").value(12));\\n  }\\n\\n  @Test\\n  void invalidPostReturnsBadRequest() throws Exception {\\n    mvc.perform(\\n            post(\\"/items\\")\\n                .contentType(MediaType.APPLICATION_JSON)\\n                .content(\\"{\\\\\\"name\\\\\\":\\\\\\"\\\\\\",\\\\\\"quantity\\\\\\":1}\\"))\\n        .andExpect(status().isBadRequest());\\n  }\\n}"},"docs-snippets-from-tests/spring-boot-myapp/myapp/src/java/com/example/myapp/MyApp.java":{"name":"docs-snippets-from-tests/spring-boot-myapp/myapp/src/java/com/example/myapp/MyApp.java","snippet":"package com.example.myapp;\\n\\nimport org.springframework.boot.SpringApplication;\\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\\n\\n@SpringBootApplication\\npublic class MyApp {\\n  public static void main(String[] args) {\\n    SpringApplication.run(MyApp.class, args);\\n  }\\n}","fullContent":"package com.example.myapp;\\n\\nimport org.springframework.boot.SpringApplication;\\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\\n\\n@SpringBootApplication\\npublic class MyApp {\\n  public static void main(String[] args) {\\n    SpringApplication.run(MyApp.class, args);\\n  }\\n}"},"docs-snippets-from-tests/spring-boot-myapp/myapp/src/java/com/example/myapp/ItemService.java":{"name":"docs-snippets-from-tests/spring-boot-myapp/myapp/src/java/com/example/myapp/ItemService.java","snippet":"package com.example.myapp;\\n\\nimport java.util.List;\\nimport org.springframework.stereotype.Service;\\n\\n@Service\\npublic class ItemService {\\n  private final ItemRepository repo;\\n\\n  public ItemService(ItemRep
1ository repo) {\\n    this.repo = repo;\\n  }\\n\\n  public List<Item> all() {\\n    return repo.findAll();\\n  }\\n\\n  public Item create(String name, int quantity) {\\n    if (name == null || name.isBlank()) {\\n      throw new IllegalArgumentException(\\"name is required\\");\\n    }\\n    if (quantity < 0) {\\n      throw new IllegalArgumentException(\\"quantity must be non-negative\\");\\n    }\\n    return repo.insert(name, quantity);\\n  }\\n\\n  public Item adjust(long id, int delta) {\\n    Item current =\\n        repo.findById(id).orElseThrow(() -> new IllegalArgumentException(\\"no item \\" + id));\\n    int next = current.quantity() + delta;\\n    if (next < 0) {\\n      throw new IllegalArgumentException(\\"adjust would push quantity below zero\\");\\n    }\\n    return repo.update(new Item(current.id(), current.name(), next));\\n  }\\n}","fullContent":"package com.example.myapp;\\n\\nimport java.util.List;\\nimport org.springframework.stereotype.Service;\\n\\n@Service\\npublic class ItemService {\\n  private final ItemRepository repo;\\n\\n  public ItemService(ItemRepository repo) {\\n    this.repo = repo;\\n  }\\n\\n  public List<Item> all() {\\n    return repo.findAll();\\n  }\\n\\n  public Item create(String name, int quantity) {\\n    if (name == null || name.isBlank()) {\\n      throw new IllegalArgumentException(\\"name is required\\");\\n    }\\n    if (quantity < 0) {\\n      throw new IllegalArgumentException(\\"quantity must be non-negative\\");\\n    }\\n    return repo.insert(name, quantity);\\n  }\\n\\n  public Item adjust(long id, int delta) {\\n    Item current =\\n        repo.findById(id).orElseThrow(() -> new IllegalArgumentException(\\"no item \\" + id));\\n    int next = current.quantity() + delta;\\n    if (next < 0) {\\n      throw new IllegalArgumentException(\\"adjust would push quantity below zero\\");\\n    }\\n    return repo.update(new Item(current.id(), current.name(), next));\\n  }\\n}"},"docs-snippets-from-tests/spring-boot-myapp/myapp/src/java/com/example/myapp/ItemRepository.java":{"name":"docs-snippets-from-tests/spring-boot-myapp/myapp/src/java/com/example/myapp/ItemRepository.java","snippet":"package com.example.myapp;\\n\\nimport java.util.List;\\nimport java.util.Optional;\\nimport org.springframework.jdbc.core.JdbcTemplate;\\nimport org.springframework.jdbc.core.RowMapper;\\nimport org.springframework.stereotype.Repository;\\n\\n@Repository\\npublic class ItemRepository {\\n  private static final RowMapper<Item> ROW =\\n      (rs, n) -> new Item(rs.getLong(\\"id\\"), rs.getString(\\"name\\"), rs.getInt(\\"quantity\\"));\\n\\n  private final JdbcTemplate jdbc;\\n\\n  public ItemRepository(JdbcTemplate jdbc) {\\n    this.jdbc = jdbc;\\n  }\\n\\n  public List<Item> findAll() {\\n    return jdbc.query(\\"SELECT id, name, quantity FROM items ORDER BY id\\", ROW);\\n  }\\n\\n  public Optional<Item> findById(long id) {\\n    return jdbc.query(\\"SELECT id, name, quantity FROM items WHERE id = ?\\", ROW, id).stream()\\n        .findFirst();\\n  }\\n\\n  public Item insert(String name, int quantity) {\\n    Long id =\\n        jdbc.queryForObject(\\n            \\"INSERT INTO items (name, quantity) VALUES (?, ?) RETURNING id\\",\\n            Long.class,\\n            name,\\n            quantity);\\n    return new Item(id, name, quantity);\\n  }\\n\\n  public Item update(Item item) {\\n    jdbc.update(\\n        \\"UPDATE items SET name = ?, quantity = ? WHERE id = ?\\",\\n        item.name(),\\n        item.quantity(),\\n        item.id());\\n    return item;\\n  }\\n}","fullContent":"package com.example.myapp;\\n\\nimport java.util.List;\\nimport java.util.Optional;\\nimport org.springframework.jdbc.core.JdbcTemplate;\\nimport org.springframework.jdbc.core.RowMapper;\\nimport org.springframework.stereotype.Repository;\\n\\n@Repository\\npublic class ItemRepository {\\n  private static final RowMapper<Item> ROW =\\n      (rs, n) -> new Item(rs.getLong(\\"id\\"), rs.getString(\\"name\\"), rs.getInt(\\"quantity\\"));\\n\\n  private final JdbcTemplate jdbc;\\n\\n  public ItemRepository(JdbcTemplate jdbc) {\\n    this.jdbc = jdbc;\\n  }\\n\\n  public List<Item>
1 findAll() {\\n    return jdbc.query(\\"SELECT id, name, quantity FROM items ORDER BY id\\", ROW);\\n  }\\n\\n  public Optional<Item> findById(long id) {\\n    return jdbc.query(\\"SELECT id, name, quantity FROM items WHERE id = ?\\", ROW, id).stream()\\n        .findFirst();\\n  }\\n\\n  public Item insert(String name, int quantity) {\\n    Long id =\\n        jdbc.queryForObject(\\n            \\"INSERT INTO items (name, quantity) VALUES (?, ?) RETURNING id\\",\\n            Long.class,\\n            name,\\n            quantity);\\n    return new Item(id, name, quantity);\\n  }\\n\\n  public Item update(Item item) {\\n    jdbc.update(\\n        \\"UPDATE items SET name = ?, quantity = ? WHERE id = ?\\",\\n        item.name(),\\n        item.quantity(),\\n        item.id());\\n    return item;\\n  }\\n}"},"docs-snippets-from-tests/spring-boot-myapp/myapp/src/java/com/example/myapp/ItemController.java":{"name":"docs-snippets-from-tests/spring-boot-myapp/myapp/src/java/com/example/myapp/ItemController.java","snippet":"package com.example.myapp;\\n\\nimport java.util.List;\\nimport org.springframework.http.ResponseEntity;\\nimport org.springframework.web.bind.annotation.ExceptionHandler;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PathVariable;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestMapping;\\nimport org.springframework.web.bind.annotation.RestController;\\n\\n@RestController\\n@RequestMapping(\\"/items\\")\\npublic class ItemController {\\n  private final ItemService service;\\n\\n  public ItemController(ItemService service) {\\n    this.service = service;\\n  }\\n\\n  @GetMapping\\n  public List<Item> all() {\\n    return service.all();\\n  }\\n\\n  @PostMapping\\n  public ResponseEntity<Item> create(@RequestBody CreateRequest req) {\\n    return ResponseEntity.ok(service.create(req.name(), req.quantity()));\\n  }\\n\\n  @PostMapping(\\"/{id}/adjust\\")\\n  public ResponseEntity<Item> adjust(@PathVariable long id, @RequestBody AdjustRequest req) {\\n    return ResponseEntity.ok(service.adjust(id, req.delta()));\\n  }\\n\\n  @ExceptionHandler(IllegalArgumentException.class)\\n  ResponseEntity<String> handleBadRequest(IllegalArgumentException e) {\\n    return ResponseEntity.badRequest().body(e.getMessage());\\n  }\\n\\n  public record CreateRequest(String name, int quantity) {}\\n\\n  public record AdjustRequest(int delta) {}\\n}","fullContent":"package com.example.myapp;\\n\\nimport java.util.List;\\nimport org.springframework.http.ResponseEntity;\\nimport org.springframework.web.bind.annotation.ExceptionHandler;\\nimport org.springframework.web.bind.annotation.GetMapping;\\nimport org.springframework.web.bind.annotation.PathVariable;\\nimport org.springframework.web.bind.annotation.PostMapping;\\nimport org.springframework.web.bind.annotation.RequestBody;\\nimport org.springframework.web.bind.annotation.RequestMapping;\\nimport org.springframework.web.bind.annotation.RestController;\\n\\n@RestController\\n@RequestMapping(\\"/items\\")\\npublic class ItemController {\\n  private final ItemService service;\\n\\n  public ItemController(ItemService service) {\\n    this.service = service;\\n  }\\n\\n  @GetMapping\\n  public List<Item> all() {\\n    return service.all();\\n  }\\n\\n  @PostMapping\\n  public ResponseEntity<Item> create(@RequestBody CreateRequest req) {\\n    return ResponseEntity.ok(service.create(req.name(), req.quantity()));\\n  }\\n\\n  @PostMapping(\\"/{id}/adjust\\")\\n  public ResponseEntity<Item> adjust(@PathVariable long id, @RequestBody AdjustRequest req) {\\n    return ResponseEntity.ok(service.adjust(id, req.delta()));\\n  }\\n\\n  @ExceptionHandler(IllegalArgumentException.class)\\n  ResponseEntity<String> handleBadRequest(IllegalArgumentException e) {\\n    return ResponseEntity.badRequest().body(e.getMessage());\\n  }\\n\\n  public record CreateRequest(String name, int quantity) {}
1\\n\\n  public record AdjustRequest(int delta) {}\\n}"},"docs-snippets-from-tests/spring-boot-myapp/myapp/src/java/com/example/myapp/Item.java":{"name":"docs-snippets-from-tests/spring-boot-myapp/myapp/src/java/com/example/myapp/Item.java","snippet":"package com.example.myapp;\\n\\npublic record Item(Long id, String name, int quantity) {}","fullContent":"package com.example.myapp;\\n\\npublic record Item(Long id, String name, int quantity) {}"},"docs-snippets-from-tests/quarkus-myapp/myapp-test/src/java/com/example/myapp/GreetingResourceTest.java":{"name":"docs-snippets-from-tests/quarkus-myapp/myapp-test/src/java/com/example/myapp/GreetingResourceTest.java","snippet":"package com.example.myapp;\\n\\nimport io.quarkus.test.common.http.TestHTTPResource;\\nimport io.quarkus.test.junit.QuarkusTest;\\nimport jakarta.inject.Inject;\\nimport java.net.URL;\\nimport java.net.http.HttpClient;\\nimport java.net.http.HttpRequest;\\nimport java.net.http.HttpResponse;\\nimport org.junit.jupiter.api.Assertions;\\nimport org.junit.jupiter.api.Test;\\n\\n//start\\n@QuarkusTest\\nclass GreetingResourceTest {\\n  @TestHTTPResource(\\"/hello\\")\\n  URL helloUrl;\\n\\n  @Inject GreetingService service;\\n\\n  @Test\\n  void helloEndpointServesGreeting() throws Exception {\\n    HttpResponse<String> response =\\n        HttpClient.newHttpClient()\\n            .send(\\n                HttpRequest.newBuilder(helloUrl.toURI()).GET().build(),\\n                HttpResponse.BodyH
1andlers.ofString());\\n    Assertions.assertEquals(200, response.statusCode());\\n    Assertions.assertEquals(\\"Hello from Quarkus\\", response.body());\\n  }\\n\\n  @Test\\n  void serviceIsInjectable() {\\n    Assertions.assertEquals(\\"Hello from Quarkus\\", service.greeting());\\n  }\\n}\\n//stop","fullContent":"package com.example.myapp;\\n\\nimport io.quarkus.test.common.http.TestHTTPResource;\\nimport io.quarkus.test.junit.QuarkusTest;\\nimport jakarta.inject.Inject;\\nimport java.net.URL;\\nimport java.net.http.HttpClient;\\nimport java.net.http.HttpRequest;\\nimport java.net.http.HttpResponse;\\nimport org.junit.jupiter.api.Assertions;\\nimport org.junit.jupiter.api.Test;\\n\\n//start\\n@QuarkusTest\\nclass GreetingResourceTest {\\n  @TestHTTPResource(\\"/hello\\")\\n  URL helloUrl;\\n\\n  @Inject GreetingService service;\\n\\n  @Test\\n  void helloEndpointServesGreeting() throws Exception {\\n    HttpResponse<String> response =\\n        HttpClient.newHttpClient()\\n            .send(\\n                HttpRequest.newBuilder(helloUrl.toURI()).GET().build(),\\n                HttpResponse.BodyH
1andlers.ofString());\\n    Assertions.assertEquals(200, response.statusCode());\\n    Assertions.assertEquals(\\"Hello from Quarkus\\", response.body());\\n  }\\n\\n  @Test\\n  void serviceIsInjectable() {\\n    Assertions.assertEquals(\\"Hello from Quarkus\\", service.greeting());\\n  }\\n}\\n//stop"},"docs-snippets-from-tests/quarkus-myapp/myapp/src/java/com/example/myapp/GreetingService.java":{"name":"docs-snippets-from-tests/quarkus-myapp/myapp/src/java/com/example/myapp/GreetingService.java","snippet":"package com.example.myapp;\\n\\nimport jakarta.enterprise.context.ApplicationScoped;\\n\\n//start\\n@ApplicationScoped\\npublic class GreetingService {\\n  public String greeting() {\\n    return \\"Hello from Quarkus\\";\\n  }\\n}\\n//stop","fullContent":"package com.example.myapp;\\n\\nimport jakarta.enterprise.context.ApplicationScoped;\\n\\n//start\\n@ApplicationScoped\\npublic class GreetingService {\\n  public String greeting() {\\n    return \\"Hello from Quarkus\\";\\n  }\\n}\\n//stop"},"docs-snippets-from-tests/quarkus-myapp/myapp/src/java/com/example/myapp/GreetingResource.java":{"name":"docs-snippets-from-tests/quarkus-myapp/myapp/src/java/com/example/myapp/GreetingResource.java","snippet":"package com.example.myapp;\\n\\nimport jakarta.inject.Inject;\\nimport jakarta.ws.rs.GET;\\nimport jakarta.ws.rs.Path;\\nimport jakarta.ws.rs.Produces;\\nimport jakarta.ws.rs.core.MediaType;\\n\\n//start\\n@Path(\\"/hello\\")\\npublic class GreetingResource {\\n  private final GreetingService service;\\n\\n  @Inject\\n  public GreetingResource(GreetingService service) {\\n    this.service = service;\\n  }\\n\\n  @GET\\n  @Produces(MediaType.TEXT_PLAIN)\\n  public String hello() {\\n    return service.greeting();\\n  }\\n}\\n//stop","fullContent":"package com.example.myapp;\\n\\nimport jakarta.inject.Inject;\\nimport jakarta.ws.rs.GET;\\nimport jakarta.ws.rs.Path;\\nimport jakarta.ws.rs.Produces;\\nimport jakarta.ws.rs.core.MediaType;\\n\\n//start\\n@Path(\\"/hello\\")\\npublic class GreetingResource {\\n  private final GreetingService service;\\n\\n  @Inject\\n  public GreetingResource(GreetingService service) {\\n    this.service = service;\\n  }\\n\\n  @GET\\n  @Produces(MediaType.TEXT_PLAIN)\\n  public String hello() {\\n    return service.greeting();\\n  }\\n}\\n//stop"},"docs-snippets-from-tests/your-first-kotlin-project/MainTest.kt":{"name":"docs-snippets-from-tests/your-first-kotlin-project/MainTest.kt","snippet":"package com.example\\n\\nimport io.kotest.core.spec.style.FunSpec\\nimport io.kotest.matchers.shouldBe\\n\\nclass MainTest : FunSpec({\\n  test(\\"greets by name\\") {\\n    Main.greet(\\"World\\") shouldBe \\"Hello, World!\\"\\n  }\\n})","fullContent":"package com.example\\n\\nimport io.kotest.core.spec.style.FunSpec\\nimport io.kotest.matchers.shouldBe\\n\\nclass MainTest : FunSpec({\\n  test(\\"greets by name\\") {\\n    Main.greet(\\"World\\") shouldBe \\"Hello, World!\\"\\n  }\\n})"},"docs-snippets-from-tests/your-first-kotlin-project/Main.kt":{"name":"docs-snippets-from-tests/your-first-kotlin-project/Main.kt","snippet":"package com.example\\n\\nobject Main {\\n  fun greet(name: String): String = \\"Hello, $name!\\"\\n}\\n\\nfun main() {\\n  println(Main.greet(\\"World\\"))\\n}","fullContent":"package com.example\\n\\nobject Main {\\n  fun greet(name: String): String = \\"Hello, $name!\\"\\n}\\n\\nfun main() {\\n  println(Main.greet(\\"World\\"))\\n}"},"docs-snippets-from-tests/sourcegen-kotlin/Main.kt":{"name":"docs-snippets-from-tests/sourcegen-kotlin/Main.kt","snippet":"package com.example\\n\\nimport generated.Constants\\n\\nfun main() {\\n  println(\\"answer: ${Constants.ANSWER}\\")\\n}","fullContent":"package com.example\\n\\nimport generated.Constants\\n\\nfun main() {\\n  println(\\"answer: ${Constants.ANSWER}\\")\\n}"},"docs-snippets-from-tests/sourcegen-kotlin/GenConstants.kt":{"name":"docs-snippets-from-tests/sourcegen-kotlin/GenConstants.kt","snippet":"package scripts\\n\\nimport bleepscript.BleepCodegenScript\\nimport bleepscript.CodegenTarget\\nimport bleepscript.Commands\\nimport bleepscript.Started\\nimport java.nio.file.Files\\n\\nclass GenConstants : BleepCodegenScript(\\"GenConstants\\") {\\n  override fun run(started: Started, commands: Commands, targets: List<CodegenTarget>, args: List<String>) {\\n    for (target in targets) {\\n      val file = target.sources().resolve(\\"generated/Constants.kt\\")\\n      Files.createDirectories(file.parent)\\n      Files.writeString(file,\\n        \\"package generated\\\\n\\\\n\\" +\\n        \\"object Constants {\\\\n\\" +\\n        \\"  const val ANSWER: Int = 42\\\\n\\" +\\n        \\"}\\\\n\\"\\n      )\\n    }\\n  }\\n}","fullContent":"package scripts\\n\\nimport bleepscript.BleepCodegenScript\\nimport bleepscript.CodegenTarget\\nimport bleepscript.Commands\\nimport bleepscript.Started\\nimport java.nio.file.Files\\n\\nclass GenConstants : BleepCodegenScript(\\"GenConstants\\") {\\n  override fun run(started: Started, commands: Commands, targets: List<CodegenTarget>, args: List<String>) {\\n    for (target in targets) {\\n      val file = target.sources().resolve(\\"generated/Constants.kt\\")\\n      Files.createDirectories(file.parent)\\n      Files.writeString(file,\\n        \\"package generated\\\\n\\\\n\\" +\\n        \\"object Constants {\\\\n\\" +\\n        \\"  const val ANSWER: Int = 42\\\\n\\" +\\n        \\"}\\\\n\\"\\n      )\\n    }\\n  }\\n}"},"docs-snippets-from-tests/proguard-publish-kotlin/ProguardPublish.kt":{"name":"docs-snippets-from-tests/proguard-publish-kotlin/ProguardPublish.kt","snippet":"package scripts\\n\\nimport bleepscript.BleepScript\\nimport bleepscript.BleepscriptServices\\nimport bleepscript.Commands\\nimport bleepscript.CrossProjectName\\nimport bleepscript.PackagedLibrary\\nimport bleepscript.Packaging\\nimport bleepscript.PublishLayout\\nimport bleepscript.Started\\nimport java.util.Optional\\n\\n
1/**\\n * Compose: compile, package, [Proguard.shrink] the main JAR, publish.\\n *\\n * The \\"plugin\\" lives next door in [Proguard]. This script is just glue: arg\\n * parsing + four bleepscript API calls.\\n *\\n * Usage: `bleep proguard-publish <projectName> <version> <groupId>`.\\n */\\nclass ProguardPublish : BleepScript(\\"proguard-publish\\") {\\n  override fun run(started: Started, commands: Commands, args: List<String>) {\\n    require(args.size >= 3) {\\n      \\"Usage: bleep proguard-publish <projectName> <version> <groupId>\\"\\n    }\\n    val projectName = args[0]\\n    val version = args[1]\\n    val groupId = args[2]\\n\\n    val project = CrossProjectName(projectName, Optional.empty())\\n    val log = started.logger().withContext(\\"project\\", projectName)\\n\\n    commands.compile(listOf(project))\\n\\n    log.info(\\"packaging\\")\\n    val library = Packaging.packageProject(\\n      started,\\n      project,\\n      groupId,\\n      version,\\n      PublishLayout.Maven.INSTANCE,\\n      BleepscriptServices.Holder.INSTANCE.defaultManifestCreator()\\n    )\\n\\n    val originalJar = library.jarFile()\\n    log.info(\\"main JAR: ${library.jarFilePath().asString()} (${originalJar.size} bytes)\\")\\n\\n    val shrunk = Proguard.create(started).shrink(originalJar)\\n    log.info(\\"ProGuard output: ${shrunk.size} bytes (saved ${originalJar.size - shrunk.size})\\")\\n\\n    Packaging.publishToLocalMaven(library.withJarFile(shrunk))\\n    log.info(\\"Published $groupId:$projectName:$version\\")\\n  }\\n}","fullContent":"package scripts\\n\\nimport bleepscript.BleepScript\\nimport bleepscript.BleepscriptServices\\nimport bleepscript.Commands\\nimport bleepscript.CrossProjectName\\nimport bleepscript.PackagedLibrary\\nimport bleepscript.Packaging\\nimport bleepscript.PublishLayout\\nimport bleepscript.Started\\nimport java.util.Optional\\n\\n/**\\n * Compose: compile, package, [Proguard.shrink] the main JAR, publish.\\n *\\n * The \\"plugin\\" lives next door in [Proguard]. This script is just glue: arg\\n * parsing + four bleepscript API calls.\\n *\\n * Usage: `bleep proguard-publish <projectName> <version> <groupId>`.\\n */\\nclass ProguardPublish : BleepScript(\\"proguard-publish\\") {\\n  override fun run(started: Started, commands: Commands, args: List<String>) {\\n    require(args.size >= 3) {\\n      \\"Usage: bleep proguard-publish <projectName> <version> <groupId>\\"\\n    }\\n    val projectName = args[0]\\n    val version = args[1]\\n    val groupId = args[2]\\n\\n    val project = CrossProjectName(projectName, Optional.empty())\\n    val log = started.logger().withContext(\\"project\\", projectName)\\n\\n    commands.compile(listOf(project))\\n\\n    log.info(\\"packaging\\")\\n    val library = Packaging.packageProject(\\n      started,\\n      project,\\n      groupId,\\n      version,\\n      PublishLayout.Maven.INSTANCE,\\n      BleepscriptServices.Holder.INSTANCE.defaultManifestCreator()\\n    )\\n\\n    val originalJar = library.jarFile()\\n    log.info(\\"main JAR: ${library.jarFilePath().asString()} (${originalJar.size} bytes)\\")\\n\\n    val shrunk = Proguard.create(started).shrink(originalJar)\\n    log.info(\\"ProGuard output: ${shrunk.size} bytes (saved ${originalJar.size - shrunk.size})\\")\\n\\n    Packaging.publishToLocalMaven(library.withJarFile(shrunk))\\n    log.info(\\"Published $groupId:$projectName:$version\\")\\n  }\\n}"},"docs-snippets-from-tests/proguard-publish-kotlin/Proguard.kt":{"name":"docs-snippets-from-tests/proguard-publish-kotlin/Proguard.kt","snippet":"package scripts\\n\\nimport bleepscript.Cli\\nimport bleepscript.Coursier\\nimport bleepscript.Started\\nimport java.io.File\\nimport java.nio.file.Files\\nimport java.nio.file.Path\\nimport kotlin.io.path.deleteExisting\\n\\n/**\\n * A reusable ProGuard helper. Takes JAR bytes, returns shrunk JAR bytes. Reusable\\n * across projects: copy this file, depend on it via `sources:` in bleep.yaml, or\\n * publish it as a library.\\n *\\n * This is what a \\"plugin\\" looks like when you don\'t have a plugin API: a regular\\n * class with a regular method. No registration, no lifecycle, no autoplugin\\n * trigger \u2014 just code you can call.\\n *\\n * Instantiate via [create] \u2014 the factory fetches ProGuard once and caches the\\n * classpath. Reuse one instance across multiple shrink calls in the same script.\\n */\\nclass Proguard private constructor(\\n  private val started: Started,\\n  private val proguardVersion: String,\\n  private val classpath: String,\\n) {\\n\\n  /**\\n   * Run ProGuard over the given JAR bytes; return the shrunk JAR bytes. Writes\\n   * input/output JARs to a temp directory and forks a JVM through bleep\'s cli\\n   * wrapper.\\n   */\\n  fun shrink(inputJarBytes: ByteArray): ByteArray {\\n    val workdir: Path = Files.createTempDirectory(\\"proguard\\")\\n    try {\\n      val inputJar = workdir.resolve(\\"input.jar\\")\\n      val outputJar = workdir.resolve(\\"output.jar\\")\\n      val configFile = workdir.resolve(\\"config.pro\\")\\n      Files.write(inputJar, inputJarBytes)\\n      Files.writeString(configFile, config(inputJar, outputJar))\\n\\n      started.logger().info(\\"running ProGuard $proguardVersion\\")\\n      Cli.command(\\"proguard\\")\\n        .args(\\n          started.jvmCommand().toString(),\\n          \\"-cp\\", classpath,\\n          \\"proguard.ProGuard\\",\\n          \\"@${configFile.toAbsolutePath()}\\"\\n        )\\n        .cwd(workdir)\\n        .run(started)\\n\\n      return Files.readAllBytes(outputJar)\\n    } finally {\\n      Files.walk(workdir).use { stream ->
1\\n        stream.sorted(Comparator.reverseOrder()).forEach { it.deleteExisting() }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * Minimal ProGuard config: shrink only (no obfuscation or optimization), keep\\n   * all public members so the published artifact stays byte-compatible. Customize\\n   * for real use.\\n   */\\n  private fun config(inputJar: Path, outputJar: Path): String =\\n    listOf(\\n      \\"-injars ${inputJar.toAbsolutePath()}\\",\\n      \\"-outjars ${outputJar.toAbsolutePath()}\\",\\n      \\"-dontoptimize\\",\\n      \\"-dontobfuscate\\",\\n      \\"-dontwarn\\",\\n      \\"-keep class ** { *; }\\"\\n    ).joinToString(\\"\\\\n\\")\\n\\n  companion object {\\n    const val DEFAULT_VERSION = \\"7.7.0\\"\\n\\n    /** Resolve and cache the ProGuard classpath. */\\n    fun create(started: Started, proguardVersion: String = DEFAULT_VERSION): Proguard {\\n      val jars = Coursier.fetchClasspath(\\n        started, \\"com.guardsquare:proguard-base:$proguardVersion\\"\\n      )\\n      val classpath = jars.joinToString(File.pathSeparator) { it.toString() }\\n      return Proguard(started, proguardVersion, classpath)\\n    }\\n  }\\n}","fullContent":"package scripts\\n\\nimport bleepscript.Cli\\nimport bleepscript.Coursier\\nimport bleepscript.Started\\nimport java.io.File\\nimport java.nio.file.Files\\nimport java.nio.file.Path\\nimport kotlin.io.path.deleteExisting\\n\\n/**\\n * A reusable ProGuard helper. Takes JAR bytes, returns shrunk JAR bytes. Reusable\\n * across projects: copy this file, depend on it via `sources:` in bleep.yaml, or\\n * publish it as a library.\\n *\\n * This is what a \\"plugin\\" looks like when you don\'t have a plugin API: a regular\\n * class with a regular method. No registration, no lifecycle, no autoplugin\\n * trigger \u2014 just code you can call.\\n *\\n * Instantiate via [create] \u2014 the factory fetches ProGuard once and caches the\\n * classpath. Reuse one instance across multiple shrink calls in the same script.\\n */\\nclass Proguard private constructor(\\n  private val started: Started,\\n  private val proguardVersion: String,\\n  private val classpath: String,\\n) {\\n\\n  /**\\n   * Run ProGuard over the given JAR bytes; return the shrunk JAR bytes. Writes\\n   * input/output JARs to a temp directory and forks a JVM through bleep\'s cli\\n   * wrapper.\\n   */\\n  fun shrink(inputJarBytes: ByteArray): ByteArray {\\n    val workdir: Path = Files.createTempDirectory(\\"proguard\\")\\n    try {\\n      val inputJar = workdir.resolve(\\"input.jar\\")\\n      val outputJar = workdir.resolve(\\"output.jar\\")\\n      val configFile = workdir.resolve(\\"config.pro\\")\\n      Files.write(inputJar, inputJarBytes)\\n      Files.writeString(configFile, config(inputJar, outputJar))\\n\\n      started.logger().info(\\"running ProGuard $proguardVersion\\")\\n      Cli.command(\\"proguard\\")\\n        .args(\\n          started.jvmCommand().toString(),\\n          \\"-cp\\", classpath,\\n          \\"proguard.ProGuard\\",\\n          \\"@${configFile.toAbsolutePath()}\\"\\n        )\\n        .cwd(workdir)\\n        .run(started)\\n\\n      return Files.readAllBytes(outputJar)\\n    } finally {\\n      Files.walk(workdir).use { stream ->\\n        stream.sorted(Comparator.reverseOrder()).forEach { it.deleteExisting() }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * Minimal ProGuard config: shrink only (no obfuscation or optimization), keep\\n   * all public members so the published artifact stays byte-compatible. Customize\\n   * for real use.\\n   */\\n  private fun config(inputJar: Path, outputJar: Path): String =\\n    listOf(\\n      \\"-injars ${inputJar.toAbsolutePath()}\\",\\n      \\"-outjars ${outputJar.toAbsolutePath()}\\",\\n      \\"-dontoptimize\\",\\n      \\"-dontobfuscate\\",\\n      \\"-dontwarn\\",\\n      \\"-keep class ** { *; }\\"\\n    ).joinToString(\\"\\\\n\\")\\n\\n  companion object {\\n    const val DEFAULT_VERSION = \\"7.7.0\\"\\n\\n    /** Resolve and cache the ProGuard classpath. */\\n    fun create(started: Started, proguardVersion: String = DEFAULT_VERSION): Proguard {\\n      val jars = Coursier.fetchClass
1path(\\n        started, \\"com.guardsquare:proguard-base:$proguardVersion\\"\\n      )\\n      val classpath = jars.joinToString(File.pathSeparator) { it.toString() }\\n      return Proguard(started, proguardVersion, classpath)\\n    }\\n  }\\n}"},"docs-snippets-from-tests/proguard-publish-kotlin/MyLib.kt":{"name":"docs-snippets-from-tests/proguard-publish-kotlin/MyLib.kt","snippet":"package com.example\\n\\nobject MyLib {\\n  fun greet(name: String): String = \\"Hello, $name!\\"\\n}","fullContent":"package com.example\\n\\nobject MyLib {\\n  fun greet(name: String): String = \\"Hello, $name!\\"\\n}"},"docs-snippets-from-tests/first-script-kotlin/Main.kt":{"name":"docs-snippets-from-tests/first-script-kotlin/Main.kt","snippet":"package com.example\\n\\nfun main() {\\n  println(\\"Hello from bleep!\\")\\n}","fullContent":"package com.example\\n\\nfun main() {\\n  println(\\"Hello from bleep!\\")\\n}"},"docs-snippets-from-tests/first-script-kotlin/HelloScript.kt":{"name":"docs-snippets-from-tests/first-script-kotlin/HelloScript.kt","snippet":"package scripts\\n\\nimport bleepscript.BleepScript\\nimport bleepscript.Commands\\nimport bleepscript.Started\\n\\nclass HelloScript : BleepScript(\\"hello\\") {\\n  override fun run(started: Started, commands: Commands, args: List<String>) {\\n    val projectCount = started.build().explodedProjects().size\\n    started.logger().info(\\"This build has $projectCount projects\\")\\n    if (args.isEmpty()) {\\n      started.logger().info(\\"Hello, world!\\")\\n    } else {\\n      started.logger().info(\\"Hello, ${args.joinToString(\\" \\")}!\\")\\n    }\\n  }\\n}","fullContent":"package scripts\\n\\nimport bleepscript.BleepScript\\nimport bleepscript.Commands\\nimport bleepscript.Started\\n\\nclass HelloScript : BleepScript(\\"hello\\") {\\n  override fun run(started: Started, commands: Commands, args: List<String>) {\\n    val projectCount = started.build().explodedProjects().size\\n    started.logger().info(\\"This build has $projectCount projects\\")\\n    if (args.isEmpty()) {\\n      started.logger().info(\\"Hello, world!\\")\\n    } else {\\n      started.logger().info(\\"Hello, ${args.joinToString(\\" \\")}!\\")\\n    }\\n  }\\n}"},"docs-snippets-from-tests/cross-building-kotlin/Main.kt":{"name":"docs-snippets-from-tests/cross-building-kotlin/Main.kt","snippet":"package com.example\\n\\nfun main() {\\n  val green = \\"\\\\u001B[32m\\"\\n  val cyan = \\"\\\\u001B[36m\\"\\n  val reset = \\"\\\\u001B[0m\\"\\n  println(\\"${green}Hello${reset} from ${cyan}bleep${reset}!\\")\\n}","fullContent":"package com.example\\n\\nfun main() {\\n  val green = \\"\\\\u001B[32m\\"\\n  val cyan = \\"\\\\u001B[36m\\"\\n  val reset = \\"\\\\u001B[0m\\"\\n  println(\\"${green}Hello${reset} from ${cyan}bleep${reset}!\\")\\n}"},"docs-snippets-from-tests/your-first-scala-project/MainTest.scala":{"name":"docs-snippets-from-tests/your-first-scala-project/MainTest.scala","snippet":"package com.example\\n\\nclass MainTest extends munit.FunSuite {\\n  test(\\"greets by name\\") {\\n    assertEquals(Main.greet(\\"World\\"), \\"Hello, World!\\")\\n  }\\n}","fullContent":"package com.example\\n\\nclass MainTest extends munit.FunSuite {\\n  test(\\"greets by name\\") {\\n    assertEquals(Main.greet(\\"World\\"), \\"Hello, World!\\")\\n  }\\n}"},"docs-snippets-from-tests/your-first-scala-project/Main.scala":{"name":"docs-snippets-from-tests/your-first-scala-project/Main.scala","snippet":"package com.example\\n\\nobject Main {\\n  def greet(name: String): String = s\\"Hello, $name!\\"\\n}\\n\\n@main def helloMain(): Unit =\\n  println(Main.greet(\\"World\\"))","fullContent":"package com.example\\n\\nobject Main {\\n  def greet(name: String): String = s\\"Hello, $name!\\"\\n}\\n\\n@main def helloMain(): Unit =\\n  println(Main.greet(\\"World\\"))"},"docs-snippets-from-tests/sourcegen-scala/Main.scala":{"name":"docs-snippets-from-tests/sourcegen-scala/Main.scala","snippet":"package com.example\\n\\nimport generated.Constants\\n\\n@main def main(): Unit =\\n  println(s\\"answer: ${Constants.ANSWER}\\")","fullContent":"package com.example\\n\\nimport generated.Constants\\n\\n@main def main(): Unit =\\n  println(s\\"answer: ${Constants.ANSWER}\\")"},"docs-snippets-from-tests/sourcegen-scala/GenConstants.scala":{"name":"docs-snippets-from-tests/sourcegen-scala/GenConstants.scala","snippet":"package scripts\\n\\nimport bleepscript.{BleepCodegenScript, CodegenTarget, Commands, Started}\\n\\nimport java.nio.file.Files\\nimport scala.jdk.CollectionConverters.*\\n\\nclass GenConstants extends BleepCodegenScript(\\"GenConstants\\") {\\n  override def run(started: Started, commands: Commands, targets: java.util.List[CodegenTarget], args: java.util.List[String]): Unit =\\n    targets.asScala.foreach { target =>\\n      val file = target.sources.resolve(\\"generated/Constants.scala\\")\\n      Files.createDirectories(file.getParent)\\n      Files.writeString(file,\\n        \\"package generated\\\\n\\" +\\n        \\"\\\\n\\" +\\n        \\"object Constants:\\\\n\\" +\\n        \\"  val ANSWER: Int = 42\\\\n\\"\\n      )\\n    }\\n}","fullContent":"package scripts\\n\\nimport bleepscript.{BleepCodegenScript, CodegenTarget, Commands, Started}\\n\\nimport java.nio.file.Files\\nimport scala.jdk.CollectionConverters.*\\n\\nclass GenConstants extends BleepCodegenScript(\\"GenConstants\\") {\\n  override def run(started: Started, commands: Commands, targets: java.util.List[CodegenTarget], args: java.util.List[String]): Unit =\\n    targets.asScala.foreach { target =>\\n      val file = target.sources.resolve(\\"generated/Constants.scala\\")\\n      Files.createDirectories(file.getParent)\\n      Files.writeString(file,\\n        \\"package generated\\\\n\\" +\\n        \\"\\\\n\\" +\\n        \\"object Constants:\\\\n\\" +\\n        \\"  val ANSWER: Int = 42\\\\n\\"\\n      )\\n    }\\n}"},"docs-snippets-from-tests/proguard-publish-scala/ProguardPublish.scala":{"name":"docs-snippets-from-tests/proguard-publish-scala/ProguardPublish.scala","snippet":"package scripts\\n\\nimport bleepscript.{\\n  BleepScript,\\n  BleepscriptServices,\\n  Commands,\\n  CrossProjectName,\\n  Packaging,\\n  PublishLayout,\\n  Started\\n}\\n\\nimport java.util.Optional\\nimport scala.jdk.CollectionConverters.*\\n\\n/** Compose: compile, package, [[Proguard.shrink]] the main JAR, publish.\\n  *\\n  * The \\"plugin\\" lives next door in [[Proguard]]. This script is just glue: arg\\n  * parsing + four bleepscript API calls.\\n  *\\n  * Usage: `bleep proguard-publish <projectName> <version> <groupId>`.\\n  */\\nclass ProguardPublish extends BleepScript(\\"proguard-publish\\"):\\n\\n  override def run(started: Started, commands: Commands, args: java.util.List[String]): Unit =\\n    val argList = args.asScala.toList\\n    require(argList.length >= 3, \\"Usage: bleep proguard-publish <projectName> <version> <groupId>\\")\\n    val List(projectName, version, groupId, _*) = argList\\n\\n    val project = new CrossProjectName(projectName, Optional.empty())\\n    val log = started.logger.withContext(\\"project\\", projectName)\\n\\n    commands.compile(java.util.List.of(project))\\n\\n    log.info(\\"packaging\\")\\n    val library = Packaging.packageProject(\\
1n      started,\\n      project,\\n      groupId,\\n      version,\\n      PublishLayout.Ivy.INSTANCE,\\n      BleepscriptServices.Holder.INSTANCE.defaultManifestCreator()\\n    )\\n\\n    val originalJar = library.jarFile\\n    log.info(s\\"main JAR: ${library.jarFilePath.asString} (${originalJar.length} bytes)\\")\\n\\n    val shrunk = Proguard(started).shrink(originalJar)\\n    log.info(s\\"ProGuard output: ${shrunk.length} bytes (saved ${originalJar.length - shrunk.length})\\")\\n\\n    Packaging.publishToLocalIvy(library.withJarFile(shrunk))\\n    log.info(s\\"Published $groupId:$projectName:$version\\")","fullContent":"package scripts\\n\\nimport bleepscript.{\\n  BleepScript,\\n  BleepscriptServices,\\n  Commands,\\n  CrossProjectName,\\n  Packaging,\\n  PublishLayout,\\n  Started\\n}\\n\\nimport java.util.Optional\\nimport scala.jdk.CollectionConverters.*\\n\\n/** Compose: compile, package, [[Proguard.shrink]] the main JAR, publish.\\n  *\\n  * The \\"plugin\\" lives next door in [[Proguard]]. This script is just glue: arg\\n  * parsing + four bleepscript API calls.\\n  *\\n  * Usage: `bleep proguard-publish <projectName> <version> <groupId>`.\\n  */\\nclass ProguardPublish extends BleepScript(\\"proguard-publish\\"):\\n\\n  override def run(started: Started, commands: Commands, args: java.util.List[String]): Unit =\\n    val argList = args.asScala.toList\\n    require(argList.length >= 3, \\"Usage: bleep proguard-publish <projectName> <version> <groupId>\\")\\n    val List(projectName, version, groupId, _*) = argList\\n\\n    val project = new CrossProjectName(projectName, Optional.empty())\\n    val log = started.logger.withContext(\\"project\\", projectName)\\n\\n    commands.compile(java.util.List.of(project))\\n\\n    log.info(\\"packaging\\")\\n    val library = Packaging.packageProject(\\n      started,\\n      project,\\n      groupId,\\n      version,\\n      PublishLayout.Ivy.INSTANCE,\\n      BleepscriptServices.Holder.INSTANCE.defaultManifestCreator()\\n    )\\n\\n    val originalJar = library.jarFile\\n    log.info(s\\"main JAR: ${library.jarFilePath.asString} (${originalJar.length} bytes)\\")\\n\\n    val shrunk = Proguard(started).shrink(originalJar)\\n    log.info(s\\"ProGuard output: ${shrunk.length} bytes (saved ${originalJar.length - shrunk.length})\\")\\n\\n    Packaging.publishToLocalIvy(library.withJarFile(shrunk))\\n    log.info(s\\"Published $groupId:$projectName:$version\\")"},"docs-snippets-from-tests/proguard-publish-scala/Proguard.scala":{"name":"docs-snippets-from-tests/proguard-publish-scala/Proguard.scala","snippet":"package scripts\\n\\nimport bleepscript.{Cli, Coursier, Started}\\n\\nimport java.io.File\\nimport java.nio.file.{Files, Path}\\nimport java.util.Comparator\\nimport scala.jdk.CollectionConverters.*\\nimport scala.util.Using\\n\\n/** A reusable ProGuard helper. Takes JAR bytes, returns shrunk JAR bytes.\\n  * Reusable across projects: copy this file, depend on it via `sources:` in\\n  * bleep.yaml, or publish it as a library.\\n  *\\n  * This is what a \\"plugin\\" looks like when you don\'t have a plugin API: a\\n  * regular class with a regular method. No registration, no lifecycle, no\\n  * autoplugin trigger \u2014 just code you can call.\\n  *\\n  * Instantiate via [[Proguard.apply]] \u2014 the factory fetches ProGuard once and\\n  * caches the classpath. Reuse one instance across multiple shrink calls in\\n  * the same script.\\n  */\\nclass Proguard private (started: Started, proguardVersion: String, classpath: String):\\n\\n  /** Run ProGuard over the given JAR bytes; return the shrunk JAR bytes.\\n    * Writes input/output JARs to a temp directory and forks a JVM through\\n    * bleep\'s cli wrapper.\\n    */\\n  def shrink(inputJarBytes: Array[Byte]): Array[Byte] =\\n    val workdir = Files.createTempDirectory(\\"proguard\\")\\n    try\\n      val inputJar = workdir.resolve(\\"input.jar\\")\\n      val outputJar = workdir.resolve(\\"output.jar\\")\\n      val configFile = workdir.resolve(\\"config.pro\\")\\n      Files.write(inputJar, inputJarBytes)\\n      Files.writeString(configFile, Proguard.config(inputJar, outputJar))\\n\\n      started.logger.info(s\\"running ProGuard $proguardVersion\\")\\n      Cli.command(\\"proguard\\")\\n        .args(\\n          started.jvmCommand.toString,\\n          \\"-cp\\",\\n          classpath,\\n          \\"proguard.ProGuard\\",\\n          s\\"@${configFile.toAbsolutePath}\\"\\n        )\\n        .cwd(workdir)\\n        .run(started)\\n\\n      Files.readAllBytes(outputJar)\\n    finally\\n      Using.resource(Files.walk(workdir)): stream =>\\n        stream.sorted(Comparator.reverseOrder).forEach(Files.delete)\\n\\nobject Proguard:\\n  val DefaultVersion = \\"7.7.0\\"\\n\\n  /** Resolve and cache the ProGuard classpath. */\\n  def apply(started: Started, proguardVersion: String = DefaultVersion): Proguard =\\n    val jars = Coursier.fetchClass
1path(started, s\\"com.guardsquare:proguard-base:$proguardVersion\\")\\n    val classpath = jars.asScala.map(_.toString).mkString(File.pathSeparator)\\n    new Proguard(started, proguardVersion, classpath)\\n\\n  /** Minimal ProGuard config: shrink only (no obfuscation or optimization),\\n    * keep all public members so the published artifact stays byte-compatible.\\n    * Customize for real use.\\n    */\\n  private def config(inputJar: Path, outputJar: Path): String =\\n    List(\\n      s\\"-injars ${inputJar.toAbsolutePath}\\",\\n      s\\"-outjars ${outputJar.toAbsolutePath}\\",\\n      \\"-dontoptimize\\",\\n      \\"-dontobfuscate\\",\\n      \\"-dontwarn\\",\\n      \\"-keep class ** { *; }\\"\\n    ).mkString(\\"\\\\n\\")","fullContent":"package scripts\\n\\nimport bleepscript.{Cli, Coursier, Started}\\n\\nimport java.io.File\\nimport java.nio.file.{Files, Path}\\nimport java.util.Comparator\\nimport scala.jdk.CollectionConverters.*\\nimport scala.util.Using\\n\\n/** A reusable ProGuard helper. Takes JAR bytes, returns shrunk JAR bytes.\\n  * Reusable across projects: copy this file, depend on it via `sources:` in\\n  * bleep.yaml, or publish it as a library.\\n  *\\n  * This is what a \\"plugin\\" looks like when you don\'t have a plugin API: a\\n  * regular class with a regular method. No registration, no lifecycle, no\\n  * autoplugin trigger \u2014 just code you can call.\\n  *\\n  * Instantiate via [[Proguard.apply]] \u2014 the factory fetches ProGuard once and\\n  * caches the classpath. Reuse one instance across multiple shrink calls in\\n  * the same script.\\n  */\\nclass Proguard private (started: Started, proguardVersion: String, classpath: String):\\n\\n  /** Run ProGuard over the given JAR bytes; return the shrunk JAR bytes.\\n    * Writes input/output JARs to a temp directory and forks a JVM through\\n    * bleep\'s cli wrapper.\\n    */\\n  def shrink(inputJarBytes: Array[Byte]): Array[Byte] =\\n    val workdir = Files.createTempDirectory(\\"proguard\\")\\n    try\\n      val inputJar = workdir.resolve(\\"input.jar\\")\\n      val outputJar = workdir.resolve(\\"output.jar\\")\\n      val configFile = workdir.resolve(\\"config.pro\\")\\n      Files.write(inputJar, inputJarBytes)\\n      Files.writeString(configFile, Proguard.config(inputJar, outputJar))\\n\\n      started.logger.info(s\\"running ProGuard $proguardVersion\\")\\n      Cli.command(\\"proguard\\")\\n        .args(\\n          started.jvmCommand.toString,\\n          \\"-cp\\",\\n          classpath,\\n          \\"proguard.ProGuard\\",\\n          s\\"@${configFile.toAbsolutePath}\\"\\n        )\\n        .cwd(workdir)\\n        .run(started)\\n\\n      Files.readAllBytes(outputJar)\\n    finally\\n      Using.resource(Files.walk(workdir)): stream =>\\n        stream.sorted(Comparator.reverseOrder).forEach(Files.delete)\\n\\nobject Proguard:\\n  val DefaultVersion = \\"7.7.0\\"\\n\\n  /** Resolve and cache the ProGuard classpath. */\\n  def apply(started: Started, proguardVersion: String = DefaultVersion): Proguard =\\n    val jars = Coursier.fetchClasspath(started, s\\"com.guardsquare:proguard-base:$proguardVersion\\")\\n    val classpath = jars.asScala.map(_.toString).mkString(File.pathSeparator)\\n    new Proguard(started, proguardVersion, classpath)\\n\\n  /** Minimal ProGuard config: shrink only (no obfuscation or optimization),\\n    * keep all public members so the published artifact stays byte-compatible.\\n    * Customize for real use.\\n    */\\n  private def config(inputJar: Path, outputJar: Path): String =\\n    List(\\n      s\\"-injars ${inputJar.toAbsolutePath}\\",\\n      s\\"-outjars ${outputJar.toAbsolutePath}\\",\\n      \\"-dontoptimize\\",\\n      \\"-dontobfuscate\\",\\n      \\"-dontwarn\\",\\n      \\"-keep class ** { *; }\\"\\n    ).mkString(\\"\\\\n\\")"},"docs-snippets-from-tests/proguard-publish-scala/MyLib.scala":{"name":"docs-snippets-from-tests/proguard-publish-scala/MyLib.scala","snippet":"package com.example\\n\\nobject MyLib:\\n  def greet(name: String): String = s\\"Hello, $name!\\"","fullContent":"package com.example\\n\\nobject MyLib:\\n  def greet(name: String): String = s\\"Hello, $name!\\""},"docs-snippets-from-tests/per-cross-customization/JvmOnly.scala":{"name":"docs-snippets-from-tests/per-cross-customization/JvmOnly.scala","snippet":"package mylib\\n\\nobject JvmOnly {\\n  def info: String = \\"running on the JVM\\"\\n}","fullContent":"package mylib\\n\\nobject JvmOnly {\\n  def info: String = \\"running on the JVM\\"\\n}"},"docs-snippets-from-tests/per-cross-customization/Greeting.scala":{"name":"docs-snippets-from-tests/per-cross-customization/Greeting.scala","snippet":"package mylib\\n\\nobject Greeting {\\n  def hello(name: String): String = s\\"Hello, $name!\\"\\n}","fullContent":"package mylib\\n\\nobject Greeting {\\n  def hello(name: String): String = s\\"Hello, $name!\\"\\n}"},"docs-snippets-from-tests/first-script-scala/Main.scala":{"name":"docs-snippets-from-tests/first-script-scala/Main.scala","snippet":"package myapp\\n\\n@main def helloMain(): Unit =\\n  println(\\"Hello from bleep!\\")","fullContent":"package myapp\\n\\n@main def helloMain(): Unit =\\n  println(\\"Hello from bleep!\\")"},"docs-snippets-from-tests/first-script-scala/HelloScript.scala":{"name":"docs-snippets-from-tests/first-script-scala/HelloScript.scala","snippet":"package scripts\\n\\nimport bleepscript.{BleepScript, Commands, Started}\\n\\nimport scala.jdk.CollectionConverters.*\\n\\nclass HelloScript extends BleepScript(\\"hello\\") {\\n  override def run(started: Started, commands: Commands, args: java.util.List[String]): Unit = {\\n    val projectCount = started.build.explodedProjects.size\\n    started.logger.info(s\\"This build has $projectCount projects\\")\\n    args.asScala.toList match {\\n      case Nil => started.logger.info(\\"Hello, world!\\")\\n      case xs  => started.logger.info(s\\"Hello, ${xs.mkString(\\" \\")}!\\")\\n    }\\n  }\\n}","fullContent":"package scripts\\n\\nimport bleepscript.{BleepScript, Commands, Started}\\n\\nimport scala.jdk.CollectionConverters.*\\n\\nclass HelloScript extends BleepScript(\\"hello\\") {\\n  override def run(started: Started, commands: Commands, args: java.util.List[String]): Unit = {\\n    val projectCount = started.build.explodedProjects.size\\n    started.logger.info(s\\"This build has $projectCount projects\\")\\n    args.asScala.toList match {\\n      case Nil => started.logger.info(\\"Hello, world!\\")\\n      case xs  => started.logger.info(s\\"Hello, ${xs.mkString(\\" \\")}!\\")\\n    }\\n  }\\n}"},"docs-snippets-from-tests/cross-building-scala/GreetingTest.scala":{"name":"docs-snippets-from-tests/cross-building-scala/GreetingTest.scala","snippet":"package mylib\\n\\nclass GreetingTest extends munit.FunSuite {\\n  test(\\"hello\\") {\\n    assertEquals(Greeting.hello(\\"world\\"), \\"Hello, world!\\")\\n  }\\n}","fullContent":"package mylib\\n\\nclass GreetingTest extends munit.FunSuite {\\n  test(\\"hello\\") {\\n    assertEquals(Greeting.hello(\\"world\\"), \\"Hello, world!\\")\\n  }\\n}"},"docs-snippets-from-tests/cross-building-scala/Greeting.scala":{"name":"docs-snippets-from-tests/cross-building-scala/Greeting.scala","snippet":"package mylib\\n\\nobject Greeting {\\n  def hello(name: String): String = s\\"Hello, $name!\\"\\n}","fullContent":"package mylib\\n\\nobject Greeting {\\n  def hello(name: String): String = s\\"Hello, $name!\\"\\n}"},"docs-snippets-from-tests/spring-boot-myapp/myapp-test/src/resources/application-test.properties":{"name":"docs-snippets-from-tests/spring-boot-myapp/myapp-test/src/resources/application-test.properties","snippet":"logging.level.com.example=DEBUG\\nspring.main.banner-mode=off","fullContent":"logging.level.com.example=DEBUG\\nspring.main.banner-mode=off"},"docs-snippets-from-tests/spring-boot-myapp/myapp/src/resources/application.properties":{"name":"docs-snippets-from-tests/spring-boot-myapp/myapp/src/resources/application.properties","snippet":"spring.a
1pplication.name=myapp\\n# Port: default 9090, override via APP_PORT env var or -Dserver.port=...\\n# Per-profile overrides go in application-<profile>.properties.\\nserver.port=${APP_PORT:9090}\\nspring.datasource.url=jdbc:duckdb:\\nspring.datasource.driver-class-name=org.duckdb.DuckDBDriver\\nspring.sql.init.mode=always\\nspring.sql.init.schema-locations=classpath:schema.sql\\nmanagement.endpoints.web.exposure.include=info,health","fullContent":"spring.application.name=myapp\\n# Port: default 9090, override via APP_PORT env var or -Dserver.port=...\\n# Per-profile overrides go in application-<profile>.properties.\\nserver.port=${APP_PORT:9090}\\nspring.datasource.url=jdbc:duckdb:\\nspring.datasource.driver-class-name=org.duckdb.DuckDBDriver\\nspring.sql.init.mode=always\\nspring.sql.init.schema-locations=classpath:schema.sql\\nmanagement.endpoints.web.exposure.include=info,health"},"docs-snippets-from-tests/spring-boot-myapp/myapp/src/resources/application-prod.properties":{"name":"docs-snippets-from-tests/spring-boot-myapp/myapp/src/resources/application-prod.properties","snippet":"logging.level.root=WARN\\nlogging.level.com.example=INFO","fullContent":"logging.level.root=WARN\\nlogging.level.com.example=INFO"},"docs-snippets-from-tests/spring-boot-myapp/myapp/src/resources/application-dev.properties":{"name":"docs-snippets-from-tests/spring-boot-myapp/myapp/src/resources/application-dev.properties","snippet":"logging.level.com.example=DEBUG\\nlogging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG","fullContent":"logging.level.com.example=DEBUG\\nlogging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG"},"docs-snippets-from-tests/quarkus-myapp/myapp/src/resources/application.properties":{"name":"docs-snippets-from-tests/quarkus-myapp/myapp/src/resources/application.properties","snippet":"quarkus.banner.enabled=false\\nquarkus.analytics.disabled=true\\nquarkus.http.test-port=0","fullContent":"quarkus.banner.enabled=false\\nquarkus.analytics.disabled=true\\nquarkus.http.test-port=0"},"docs-snippets-from-tests/spring-boot-myapp/myapp/src/resources/schema.sql":{"name":"docs-snippets-from-tests/spring-boot-myapp/myapp/src/resources/schema.sql","snippet":"CREATE SEQUENCE IF NOT EXISTS items_id_seq;\\nCREATE TABLE IF NOT EXISTS items (\\n  id BIGINT PRIMARY KEY DEFAULT nextval(\'items_id_seq\'),\\n  name VARCHAR NOT NULL,\\n  quantity INTEGER NOT NULL CHECK (quantity >= 0)\\n);","fullContent":"CREATE SEQUENCE IF NOT EXISTS items_id_seq;\\nCREATE TABLE IF NOT EXISTS items (\\n  id BIGINT PRIMARY KEY DEFAULT nextval(\'items_id_seq\'),\\n  name VARCHAR NOT NULL,\\n  quantity INTEGER NOT NULL CHECK (quantity >= 0)\\n);"}}');var m=t(4848);const d=c;function u(e,n){return`docs-snippets-${n}/src/${n}/bleep/docs/${e}${"java"===n?".java":"kotlin"===n?".kt":".scala"}`}function g(e,n){const t=d[e];if(!t)throw new Error(`Snippet file not found: "${e}".\n\nMake sure the file exists in docs-snippets-{java,kotlin,scala} or docs-snippets-from-tests/.\nAvailable files: ${Object.keys(d).slice(0,5).join(", ")}...`);return n?t.fullContent:t.snippet}function h(e){const[n,t]=(0,s.useState)(!1);if("path"in e&&void 0!==e.path)return(0,m.jsx)("div",{className:o,children:(0,m.jsx)("div",{className:p,children:(0,m.jsx)(i.A,{language:e.lang,children:g(e.path,!1)})})});const{file:c,lang:d,hideFullFile:h}=e,b=d?[d]:["java","kotlin","scala"],v=b.map(e=>({lang:e,path:u(c,e)})),j=(0,m.jsx)(m.Fragment,{children:1===b.length?(0,m.jsx)(i.A,{language:v[0].lang,children:g(v[0].path,n)}):(0,m.jsx)(r.A,{groupId:"language",children:v.map(({lang:e,path:t})=>(0,m.jsx)(a.A,{value:e,label:e.charAt(0).toUpperCase()+e.slice(1),children:(0,m.jsx)(i.A,{language:e,children:g(t,n)})},e))})});return(0,m.jsx)("div",{className:o,children:(0,m.jsxs)("div",{className:p,children:[j,!h&&(0,m.jsxs)("label",{className:l,children:[(0,m.jsx)("input",{type:"checkbox",checked:n,onChange:e=>t(e.target.checked)}),(0,m.jsx)("span",{children:"Show entire file"})]})]})})}},8194(e,n,t){t.r(n),t.d(n,{default:()=>C});var s=t(6540),r=t(8774),a=t(1656),i=t(4334),o=t(3905),p=t(7231),l=t(8484),c=t(5648),m=t(4848);function d({rows:e}){return(0,m.jsx)("div",{className:c.A.vignette,children:e.map((e,n)=>e.gap?(0,m.jsx)("div",{className:c.A.vgGap},n):(0,m.jsxs)("div",{className:c.A.vgRow,children:[(0,m.jsx)("span",{className:e.hot?c.A.vgActorHot:c.A.vgActor,children:e.actor}),(0,m.jsxs)("span",{className:c.A.vgLines,children:[(0,m.jsx)("span",{className:e.deed?c.A.vgDeed:c.A.vgCall,children:e.deed||e.call}),e.result&&(0,m.jsxs)("span",{className:c.A.vgResult,children:["\u2192 ",(0,m.jsx)("span",{className:e.bad?c.A.vgBad:e.good?c.A.vgGood:void 0,children:e.result}),e.note&&(0,m.jsx)("span",{className:c.A.vgNote,children:"  \u2190 "+e.note})]})]})]},n))})}function u({children:e,delay:n,as:t,className:r,...a}
1){const i=t||"div",o=r||"",p=(0,s.useRef)(null),[l,d]=(0,s.useState)(!1);return(0,s.useEffect)(()=>{if("undefined"==typeof IntersectionObserver)return void d(!0);const e=p.current;if(!e)return;const n=new IntersectionObserver(([t])=>{t.isIntersecting&&(d(!0),n.unobserve(e))},{threshold:.12,rootMargin:"0px 0px -8% 0px"});return n.observe(e),()=>n.disconnect()},[]),(0,m.jsx)(i,{ref:p,className:`${c.A.reveal} ${l?c.A.isVisible:""} ${o}`,style:n?{transitionDelay:`${n}ms`}:void 0,...a,children:e})}function g({eyebrow:e,title:n,children:t}){return(0,m.jsxs)("header",{className:c.A.sectionHead,children:[e&&(0,m.jsx)(u,{children:(0,m.jsx)("span",{className:c.A.eyebrow,children:e})}),(0,m.jsx)(u,{delay:60,children:(0,m.jsx)("h2",{className:c.A.sectionTitle,children:n})}),t&&(0,m.jsx)(u,{delay:120,children:(0,m.jsx)("p",{className:c.A.sectionLede,children:t})})]})}function h(){const e=(0,s.useRef)(null);return(0,s.useEffect)(()=>{const n=e.current;if(!n)return;let t=0;const s=e=>{cancelAnimationFrame(t),t=requestAnimationFrame(()=>{const t=n.getBoundingClientRect(),s=(e.clientX-t.left)/t.width*100,r=(e.clientY-t.top)/t.height*100;n.style.setProperty("--x",`${s}%`),n.style.setProperty("--y",`${r}%`)})};return n.addEventListener("mousemove",s),()=>{n.removeEventListener("mousemove",s),cancelAnimationFrame(t)}},[]),(0,m.jsxs)("header",{ref:e,className:c.A.hero,children:[(0,m.jsx)("div",{className:c.A.heroAurora,"aria-hidden":"true"}),(0,m.jsx)("div",{className:c.A.heroGlow,"aria-hidden":"true"}),(0,m.jsxs)("div",{className:`${c.A.heroInner} ${c.A.heroEnter}`,children:[(0,m.jsx)("div",{className:c.A.heroMeta,children:(0,m.jsx)("span",{children:"Bleep \u2014 a build tool for Java, Kotlin & Scala"})}),(0,m.jsxs)("h1",{className:c.A.heroTitle,children:["Everything got faster.",(0,m.jsx)("br",{}),"Except the ",(0,m.jsx)("em",{children:"build"}),"."]}),(0,m.jsxs)("p",{className:c.A.heroTagline,children:["Coding agents write at a thousand words a minute, fan out into six git worktrees, and then sit there, watching a build tool configure itself. We build five million lines of JVM code for a living and we got tired of waiting too. So we built a build tool with a native binary that bootstraps in ten milliseconds, answers an agent in ",l.LU.qs," tokens at worst, and forks a warm copy of your entire compiled world in under a minute. This page is the sales pitch. Every number on it is measured."]}),(0,m.jsxs)("div",{className:c.A.heroButtons,children:[(0,m.jsx)(r.A,{className:c.A.btnPrimary,to:"/docs/installing/",children:"Install"}),(0,m.jsx)(r.A,{className:c.A.btnSecondary,to:"#receipts",children:"The receipts"}),(0,m.jsx)(r.A,{className:c.A.btnSecondary,to:"/",children:"The sober version"})]}),(0,m.jsxs)("div",{className:c.A.heroFacts,children:[(0,m.jsxs)("div",{className:c.A.heroFact,children:[(0,m.jsx)("span",{className:c.A.heroFactLabel,children:"CLI startup"}),(0,m.jsxs)("span",{className:c.A.heroFactValue,children:[l.EX.yt," ",(0,m.jsx)("em",{children:"ms"})]}),(0,m.jsx)("span",{className:c.A.heroFactSub,children:"native binary, no JVM"})]}),(0,m.jsxs)("div",{className:c.A.heroFact,children:[(0,m.jsx)("span",{className:c.A.heroFactLabel,children:"new worktree, compiled"}),(0,m.jsxs)("span",{className:c.A.heroFactValue,children:[l.EX.A8," ",(0,m.jsx)("em",{children:"\u2192"})," ",l.EX.UX," s"]}),(0,m.jsxs)("span",{className:c.A.heroFactSub,children:["cold rebuild vs copy-state, ",l.QO.oo," lines"]})]}),(0,m.jsxs)("div",{className:c.A.heroFact,children:[(0,m.jsx)("span",{className:c.A.heroFactLabel,children:"tokens per answer"}),(0,m.jsxs)("span",{className:c.A.heroFactValue,children:[l.LU.FY,(0,m.jsx)("em",{children:"\u2013"}),l.LU.qs]}),(0,m.jsx)("span",{className:c.A.heroFactSub,children:"green \u2192 failure with full diff"})]}),(0,m.jsxs)("div",{className:c.A.heroFact,children:[(0,m.jsx)("span",{className:c.A.heroFactLabel,children:"build files"}),(0,m.jsx)("span",{className:c.A.heroFactValue,children:(0,m.jsx)("em",{children:"1"})}),(0,m.jsx)("span",{className:c.A.heroFactSub,children:"plain YAML, whole repo"})]})]})]})]})}function b(){return(0,m.jsx)("section",{className:c.A.section,children:(0,m.jsxs)("div",{className:c.A.container,children:[(0,m.jsxs)(g,{eyebrow:"Why speed is the whole game",title:(0,m.jsxs)(m.Fragment,{children:["A build minute costs more than a ",(0,m.jsx)("em",{children:"minute"}),"."]}),children:["You know this one from the inside: you hit compile, it takes forty seconds, you glance at Slack, and twenty minutes later you remember what you were doing. The research agrees with your gut."," ",(0,m.jsx)(r.A,{to:"https://chrisparnin.me/pdf/parnin-sqj11.pdf",children:"Parnin studied ten thousand programming sessions"}),": after an interruption, the median programmer needs 10\u201315 minutes to make the next edit."," ",(0,m.jsx)(r.A,{to:"https://github.blog/engineering/infrastru
1cture/experiment-the-hidden-costs-of-waiting-on-slow-build-times/",children:"GitHub priced the waiting"})," ","at roughly $400 of developer time per slow build. And the agent era sharpened it: code generation exploded while merged throughput didn\u2019t \u2014 validation is the bottleneck now, and the build sits in the middle of every validation."," ",(0,m.jsx)(r.A,{to:"https://cloud.google.com/blog/products/ai-machine-learning/announcing-the-2025-dora-report",children:"DORA\u2019s verdict"}),": AI multiplies the conditions you already have. Teams with fast feedback loops turned agents into 20\u201330% gains. Teams without got a faster way to wait."]}),(0,m.jsx)(u,{children:(0,m.jsxs)("p",{className:c.A.pullQuote,children:["The build is the heartbeat of the loop.",(0,m.jsx)("br",{}),"It should be too fast to ",(0,m.jsx)("em",{children:"notice"}),"."]})})]})})}function v(){return(0,m.jsx)("section",{className:`${c.A.section} ${c.A.sectionPaper}`,children:(0,m.jsxs)("div",{className:c.A.container,children:[(0,m.jsx)(g,{eyebrow:"Field notes",title:(0,m.jsxs)(m.Fragment,{children:["Everyone can ",(0,m.jsx)("em",{children:"see"})," the problem."]}),children:"We didn\u2019t invent the pain. Here it is in the ecosystem\u2019s own words, links included \u2014 and what falls out when the build tool is designed for it instead of patched around."}),(0,m.jsx)(u,{children:(0,m.jsxs)("div",{className:c.A.mcpGrid,children:[(0,m.jsxs)("article",{className:c.A.mcpCard,children:[(0,m.jsxs)("h3",{className:c.A.mcpCardTitle,children:["The daemon that logs itself to ",(0,m.jsx)("em",{children:"death"})]}),(0,m.jsxs)("p",{className:c.A.mcpCardBody,children:["An open Gradle issue, verbatim title:"," ",(0,m.jsx)(r.A,{to:"https://github.com/gradle/gradle/issues/15621",children:"\u201cdaemon hangs unrecoverably if it receives console output too fast\u201d"}),". A build daemon taken down by its own log volume. Bleep\u2019s daemon emits typed events; the transcript lands on disk as data, and the terminal gets a live summary, not a firehose."]})]}),(0,m.jsxs)("article",{className:c.A.mcpCard,children:[(0,m.jsxs)("h3",{className:c.A.mcpCardTitle,children:["Teams ship software to ",(0,m.jsx)("em",{children:"hide"})," their build\u2019s output"]}),(0,m.jsxs)("p",{className:c.A.mcpCardBody,children:["Agent-infra companies"," ",(0,m.jsx)(r.A,{to:"https://www.humanlayer.dev/blog/context-efficient-backpressure",children:"build custom backpressure wrappers"})," ","so Maven and Gradle logs (\u201cnotoriously verbose\u201d, their words) stop shredding agent context. An entire product category exists to apologize for build output. Bleep\u2019s worst answer measures",l.LU.qs," tokens, because that\u2019s all it says."]})]}),(0,m.jsxs)("article",{className:c.A.mcpCard,children:[(0,m.jsxs)("h3",{className:c.A.mcpCardTitle,children:["MCP servers that ",(0,m.jsx)("em",{children:"read about"})," your build"]}),(0,m.jsxs)("p",{className:c.A.mcpCardBody,children:["Gradle\u2019s enterprise"," ",(0,m.jsx)(r.A,{to:"https://develocity.ai/product/mcp-servers/",children:"Develocity MCP server"})," ","is analytics over build scans \u2014 it tells agents about builds. Maven and Bazel get third-party wrappers that re-parse CLI text. Bleep ",(0,m.jsx)("em",{children:"is"})," the MCP server: compile, test, run, diff. Built in, free, and it does the work."]})]})]})})]})})}function j(){return(0,m.jsx)("section",{id:"receipts",className:c.A.section,children:(0,m.jsxs)("div",{className:c.A.container,children:[(0,m.jsxs)(g,{eyebrow:"Receipts",title:(0,m.jsxs)(m.Fragment,{children:["Numbers from a real repo, not a ",(0,m.jsx)("em",{children:"benchmark"})," repo."]}),children:["Measured on the repo bleep\u2019s authors work in daily \u2014"," ",l.QO.JI.eV," lines of Java and"," ",l.QO.VS.eV," of Scala across"," ",l.QO.dt," projects \u2014 on the laptop it was typed on, against today\u2019s master. We can measure this any day, because the build"," ",(0,m.jsx)(r.A,{to:"/docs/usage/run-history",children:"records its own runs"})," ","and diffs its own timing. A build tool that couldn\u2019t would have to ask you to trust it."]}),(0,m.jsx)(u,{children:(0,m.jsxs)("div",{className:c.A.numbersGrid,children:[(0,m.jsxs)("div",{className:c.A.numberCell,children:[(0,m.jsx)("span",{className:c.A.numberKicker,children:"CLI startup"}),(0,m.jsxs)("span",{className:c.A.numberValue,children:["10",(0,m.jsx)("span",{className:c.A.numberValueUnit,children:"ms"})]}),(0,m.jsx)("p",{className:c.A.numberCaption,children:"Native binary. Build model loaded, dependencies resolved from cache \u2014 done before a JVM w
1ould have said hello."})]}),(0,m.jsxs)("div",{className:c.A.numberCell,children:[(0,m.jsx)("span",{className:c.A.numberKicker,children:"\u201cis everything green?\u201d"}),(0,m.jsxs)("span",{className:c.A.numberValue,children:[l.EX.DY,(0,m.jsx)("span",{className:c.A.numberValueUnit,children:"s"})]}),(0,m.jsxs)("p",{className:c.A.numberCaption,children:["A no-op compile across all ",l.QO.dt," ","projects, ",l.QO.eV,"lines. That\u2019s the whole tax for asking."]})]}),(0,m.jsxs)("div",{className:c.A.numberCell,children:[(0,m.jsx)("span",{className:c.A.numberKicker,children:"fork \u2192 verified green"}),(0,m.jsxs)("span",{className:c.A.numberValue,children:[l.EX.UX,(0,m.jsx)("span",{className:c.A.numberValueUnit,children:"s"})]}),(0,m.jsxs)("p",{className:c.A.numberCaption,children:["The whole fork: ",(0,m.jsx)("code",{children:"git worktree add"}),", then"," ",(0,m.jsx)("code",{children:"bleep copy-state"})," \u2014 ",l.EX.I5,"\xa0GB of compiled state, cloned in ",l.EX.aR,"\xa0s \u2014 then a full compile verifying all ",l.QO.dt," projects green. The same fork without copy-state compiles cold for"," ",l.EX.lK," \u2014 five times longer. No fork pays cold twice."]})]}),(0,m.jsxs)("div",{className:c.A.numberCell,children:[(0,m.jsx)("span",{className:c.A.numberKicker,children:"tokens per agent answer"}),(0,m.jsxs)("span",{className:c.A.numberValue,children:[l.LU.qs,(0,m.jsx)("span",{className:c.A.numberValueUnit,children:"tok max"})]}),(0,m.jsxs)("p",{className:c.A.numberCaption,children:["Measured over the live MCP server: a green compile answers in ",l.LU.FY," tokens; a failure with its full what-changed diff is ",l.LU.qs,". A raw build log is tens of thousands."]})]})]})}),(0,m.jsx)(u,{delay:120,children:(0,m.jsx)("p",{className:c.A.compareCta,children:(0,m.jsx)(r.A,{className:c.A.compareCtaLink,to:"/docs/guides/worktrees",children:"The worktree benchmark, step by step \xa0\u2192"})})})]})})}function y(){return(0,m.jsx)("section",{className:`${c.A.section} ${c.A.sectionPaper}`,children:(0,m.jsxs)("div",{className:c.A.container,children:[(0,m.jsxs)(g,{eyebrow:"Is your stack in?",title:(0,m.jsxs)(m.Fragment,{children:["Java, Kotlin, Scala \u2014 ",(0,m.jsx)("em",{children:"first-class"}),"."]}),children:["The question right after the numbers: is ",(0,m.jsx)("em",{children:"my"})," thing supported? Compile, test, run, publish, IDE import, cross-build, scripts and sourcegen are first-class for all three languages. The details, honestly labeled:"]}),(0,m.jsx)(u,{children:(0,m.jsxs)("div",{className:c.A.mcpGrid,children:[(0,m.jsxs)("article",{className:c.A.mcpCard,children:[(0,m.jsx)("h3",{className:c.A.mcpCardTitle,children:"Java"}),(0,m.jsxs)("p",{className:c.A.mcpCardBody,children:[(0,m.jsx)("strong",{children:"First-class"}),": javac and ECJ, annotation processors (Lombok, MapStruct, Dagger, Immutables, \u2026), Spring Boot via"," ",(0,m.jsx)(r.A,{to:"/docs/spring-boot-proves-the-model/",children:"bleep-plugin-spring-boot"}),", Quarkus via"," ",(0,m.jsx)(r.A,{to:"/docs/tutorials/quarkus/",children:"bleep-plugin-quarkus"}),", Maven import.",(0,m.jsx)("br",{}),(0,m.jsx)("strong",{children:"Supported"}),": BOM /"," ",(0,m.jsx)("code",{children:"dependencyManagement"})," imports \u2014 declare"," ",(0,m.jsx)("code",{children:"boms:"})," and write dependencies without a version.",(0,m.jsx)("br",{}),(0,m.jsx)("strong",{children:"Not in scope"}),": Android."]})]}),(0,m.jsxs)("article",{className:c.A.mcpCard,children:[(0,m.jsx)("h3",{className:c.A.mcpCardTitle,children:"Kotlin"}),(0,m.jsxs)("p",{className:c.A.mcpCardBody,children:[(0,m.jsx)("strong",{children:"First-class"}),": kotlinc 2.x, compiler plugins (",(0,m.jsx)("code",{children:"allopen"}),", ",(0,m.jsx)("code",{children:"jpa"}),","," ",(0,m.jsx)("code",{children:"spring"}),", ",(0,m.jsx)("code",{children:"noarg"}),","," ",(0,m.jsx)("code",{children:"serialization"}),"),"," ",(0,m.jsx)(r.A,{to:"/docs/usage/annotation-processing#kotlin-ksp",children:"KSP processors"})," ","(Room, Hilt, Moshi codegen, Koin KSP, kotlin-inject, \u2026), Kotlin/JS via ",(0,m.jsx)("code",{children:"cross:"}),".",(0,m.jsx)("br",{}),(0,m.jsx)("strong",{children:"Partial"}),": KSP runs from scratch each compile; Kotlin/Native targets exist but the ecosystem expects Gradle; no Gradle import yet \u2014 hand-port today.",(0,m.jsx)("br",{}),(0,m.jsx)("strong",{children:"Not in scope"}),": KAPT (migrate to KSP), Android."]})]}),(0,m.jsxs)("article",{className:c.A.mcpCard,children:[(0,m.jsx)("h3",{className:c.A.mcpCardTitle,children:"Scala"}),(0,m.jsxs)("p",{className:c.A.mcpCardBody,children:[(0,m.jsx)("strong",{children:"First-class"}),": Scala 2.13 + Scala 3 cross-builds, Scala.js, Scala Native, scalafmt, scalafix, Zinc incremental, sbt import, ports of sbt-ci-release / sbt-sonatype / sbt-pgp / sbt-dynver / sbt-native-image / mdoc.",(0,m.jsx)("br",{}),(0,m.jsx)("strong",{children:"Partial"}),":"," ",(0,m.jsx)("code",{children:"projectMatrix"}),"-style third axes beyond JVM/JS/Native \xd7 2.13/3.",(0,m.jsx)("br",{}),(0,m.jsx)("strong",{children:"Not in scope"}),": publishing as an sbt plugin artifact (consuming sbt plugins works)."]})]})]})}),(0,m.jsx)(u,{delay:120,children:(0,m.jsx)("p",{className:c.A.compareCta,children:(0,m.jsx)(r.A,{className:c.A.compareCtaLink,to:"/docs/appendix/status/",children:"Full project status & what\u2019s not yet covered \xa0\u2192"})})})]})})}function f(){return(0,m.jsx)("section",{className:c.A.section,children:(0,m.jsxs)("div",{className:c.A.container,children:[(0,m.jsx)(g,{eyebrow:"How it can be this fast",title:(0,m.jsxs)(m.Fragment,{children:["Simplicity is the ",(0,m.jsx)("em",{children:"weapon"}),"."]}),children:"Your whole build is one YAML file. Not a program that eventually produces a build \u2014 the build itself, as data. Everything a build plugin ever did is either source generation or a program you run. That single decision is where all the speed comes from: nothing to configure, nothing to interpret, nothing to warm up, nothing that can hide."}),(0,m.jsx)(u,{children:(0,m.jsxs)("ul",{className:c.A.heroNoList,style:{justifyContent:"center",marginTop:"0.5rem"},children:[(0,m.jsx)("li",{children:"code in the build"}),(0,m.jsx)("li",{children:"build plugins"}),(0,m.jsx)("li",{children:"project scopes"}),(0,m.jsx)("li",{children:"task graph"}),(0,m.jsx)("li",{children:"DSL"}),(0,m.jsx)("li",{children:"configuration phase"})]})}),(0,m.jsx)(u,{delay:80,children:(0,m.jsxs)("div",{className:c.A.specimenFrame,style:{marginTop:"2.5rem"},children:[(0,m.jsx)("div",{className:c.A.specimenHead,children:(0,m.jsx)("span",{className:c.A.specimenHeadAside,children:"a complete, working build \u2014 from the docs\u2019 own integration tests"})}),(0,m.jsx)("div",{className:c.A.specimenSnippet,children:(0,m.jsx)(i.A,{path:"docs-snippets-from-tests/your-first-kotlin-project/bleep.yaml",lang:"yaml"})})]})}),(0,m.jsx)(u,{delay:100,children:(0,m.jsxs)("div",{className:c.A.dossierGrid,style:{marginTop:"2.5rem"},children:[(0,m.jsxs)("article",{className:`${c.A.dossierCard} ${c.A.dossierCardTenet}`,children:[(0,m.jsxs)("div",{className:c.A.dossierHead,children:[(0,m.jsxs)("span",{className:c.A.dossierKicker,children:[(0,m.jsx)("span",{className:c.A.dossierDot}),(0,m.jsx)("span",{children:"Tenet"})]}),(0,m.jsx)("span",{className:c.A.dossierNum,children:"1"})]}),(0,m.jsxs)("h3",{className:c.A.dossierTitle,children:["The build is ",(0,m.jsx)("em",{children:"data"}),"."]}),(0,m.jsx)("p",{className:c.A.dossierBody,children:"Readable top to bottom by anyone on the team, and by any agent in one pass. Grep it, diff it, rewrite it with tooling. A build you can read is a build you can trust."}),(0,m.jsx)("div",{className:c.A.dossierAccent,"aria-hidden":"true"})]}),(0,m.jsxs)("article",{className:`${c.A.dossierCard} ${c.A.dossierCardTenet}`,children:[(0,m.jsxs)("div",{className:c.A.dossierHead,children:[(0,m.jsxs)("span",{className:c.A.dossierKicker,children:[(0,m.jsx)("span",{className:c.A.dossierDot}),(0,m.jsx)("span",{children:"Tenet"})]}),(0,m.jsx)("span",{className:c.A.dossierNum,children:"2"})]}),(0,m.jsxs)("h3",{className:c.A.dossierTitle,children:["Everything else is ",(0,m.jsx)("em",{children:"code"}),"."]}),(0,m.jsxs)("p",{className:c.A.dossierBody,children:["Docker images, doc generation, release orchestration: programs in your repo, in your language, debuggable in your IDE. Not plugins in someone else\u2019s lifecycle, debugged with ",(0,m.jsx)("code",{children:"println"}),"."]}),(0,m.jsx)("div",{className:c.A.dossierAccent,"aria-hidden":"true"})]}),(0,m.jsxs)("article",{className:`${c.A.dossierCard} ${c.A.dossierCardTenet}`,children:[(0,m.jsxs)("div",{className:c.A.dossierHead,children:[(0,m.jsxs)("span",{className:c.A.dossierKicker,children:[(0,m.jsx)("span",{className:c.A.dossierDot}),(0,m.jsx)("span",{children:"Tenet"})]}),(0,m.jsx)("span",{className:c.A.dossierNum,children:"3"})]}),(0,m.jsxs)("h3",{className:c.A.dossierTitle,children:["Fail ",(0,m.jsx)("em",{children:"loudly"}),"."]}),(0,m.jsxs)("p",{className:c.A.dossierBody,children:["No graceful degradation, no silently stale outputs, no \u201cit probably worked\u201d. If something is wrong, bleep throws. Humans appreciate this. Agents"," ",(0,m.jsx)("em",{children:"depend"})," on it \u2014 a tool that degrades quietly sends them chasing ghosts."]}),(0,m.jsx)("div",{className:c.A.dossierAccent,"aria-hidden":"true"})]})]})}),(0,m.jsx)(u,{delay:140,children:(0,m.jsxs)("p",{className:c.A.sectionLede,style:{marginTop:"2.25rem",textAlign:"center"},children:["\u201cBut my build plugin!\u201d We checked. We analyzed each of the"," ",(0,m.jsx)(r.A,{to:"/docs/compared-to-other-build-tools/maven-plugin-coverage/",children:"top 50 Maven plugins"}),", implemented the hardest cases (",(0,m.jsx)(r.A,{to:"/docs/spring-boot-proves-the-model/",children:"Spring Boot"})," ","and ",(0,m.jsx)(r.A,{to:"/docs/tutorials/quarkus/",children:"Quarkus"}),"), and ship"," ",(0,m.jsx)(r.A,{to:"/docs/appendix/status/",children:"codebase
1s of millions of lines"})," ","on this model."]})})]})})}function k(){return(0,m.jsx)("section",{className:`${c.A.section} ${c.A.sectionPaper}`,children:(0,m.jsxs)("div",{className:c.A.container,children:[(0,m.jsxs)(g,{eyebrow:"Also: you",title:(0,m.jsxs)(m.Fragment,{children:["The same speed in your ",(0,m.jsx)("em",{children:"IDE"})," and terminal."]}),children:["Agents run headless. You don\u2019t. Open the project and the IDE import takes a second or two, because bleep reads"," ",(0,m.jsx)("code",{children:"bleep.yaml"})," and hands the model straight over BSP \u2014 no configuration phase, no plugin resolution, no progress bar with your afternoon on it. Switch to a branch with a different Kotlin version and the reload is milliseconds. And when you run tests, you watch them run."]}),(0,m.jsx)(u,{children:(0,m.jsx)("div",{className:c.A.testRunnerVideo,children:(0,m.jsx)("video",{src:"https://github.com/user-attachments/assets/06ba4fa0-2ab0-4199-ac24-3806d6c80206",controls:!0,loop:!0,muted:!0,playsInline:!0,preload:"metadata","aria-label":"bleep test runner showing parallel execution and live progress"})})}),(0,m.jsx)(u,{delay:100,children:(0,m.jsxs)("div",{className:c.A.mcpGrid,children:[(0,m.jsxs)("article",{className:c.A.mcpCard,children:[(0,m.jsxs)("h3",{className:c.A.mcpCardTitle,children:["IDE imports in ",(0,m.jsx)("em",{children:"seconds"})]}),(0,m.jsx)("p",{className:c.A.mcpCardBody,children:"First import into IntelliJ or any BSP editor: a second or two. Branch reload: milliseconds. In Gradle or sbt the same actions cost a configuration phase, plugin loading, and an IDE model rebuild \u2014 minutes, on real projects, several times a day."})]}),(0,m.jsxs)("article",{className:c.A.mcpCard,children:[(0,m.jsxs)("h3",{className:c.A.mcpCardTitle,children:["Tests run ",(0,m.jsx)("em",{children:"everywhere"})," at once"]}),(0,m.jsx)("p",{className:c.A.mcpCardBody,children:"Suites compile and run in parallel across every CPU, in forked JVMs with their own classpaths. The terminal stays live: which suites are compiling, which are running, which failed \u2014 the moment it happens, not at the end."})]}),(0,m.jsxs)("article",{className:c.A.mcpCard,children:[(0,m.jsxs)("h3",{className:c.A.mcpCardTitle,children:["A summary you can ",(0,m.jsx)("em",{children:"act on"})]}),(0,m.jsxs)("p",{className:c.A.mcpCardBody,children:["Exact suite and test names, pass/fail counts per project, and ",(0,m.jsx)("code",{children:"bleep test --diff"})," prints only what changed since the previous run \u2014 rendered as prose for your eyes, the newly failing test named with its assertion; agents get the same diff as data with"," ",(0,m.jsx)("code",{children:"--output json"}),". JUnit XML is one flag away for CI."]})]})]})})]})})}function x(){return(0,m.jsx)("section",{className:c.A.section,children:(0,m.jsxs)("div",{className:c.A.container,children:[(0,m.jsxs)(g,{eyebrow:"Where it matters most",title:(0,m.jsxs)(m.Fragment,{children:["Written for the ",(0,m.jsx)("em",{children:"biggest"})," repos out there."]}),children:["Big repos are where the important software lives \u2014 systems with twenty years of history and no appetite for adventure \u2014 and where build pain compounds hardest: every wart multiplied by a thousand modules and a hundred engineers. The industrial-strength alternative has a price tag on the record:"," ",(0,m.jsx)(r.A,{to:"https://news.ycombinator.com/item?id=41975870",children:"\u201cRolling out Bazel at my prior employer took about one person decade of engineering time\u201d"}),". Bleep is designed at scale and lives at scale, daily \u2014 with no dedicated build team required."]}),(0,m.jsx)(u,{children:(0,m.jsxs)("div",{className:c.A.mcpGrid,children:[(0,m.jsxs)("article",{className:c.A.mcpCard,children:[(0,m.jsxs)("h3",{className:c.A.mcpCardTitle,children:["One ",(0,m.jsx)("em",{children:"hot daemon"})," per machine"]}),(0,m.jsx)("p",{className:c.A.mcpCardBody,children:"Every checkout, every worktree, every IDE window and agent shares one compile server that keeps incremental state hot and stores identical dependency analyses exactly once. Ten worktrees don\u2019t cost ten JVMs."})]}),(0,m.jsxs)("article",{className:c.A.mcpCard,children:[(0,m.jsxs)("h3",{className:c.A.mcpCardTitle,children:["CI that ",(0,m.jsx)("em",{children:"skips"})]}),(0,m.jsxs)("p",{className:c.A.mcpCardBody,children:[(0,m.jsx)("code",{children:"bleep build invali
1dated"})," names exactly the projects a diff touched \u2014 both build loads are instant, because the build is data. The"," ",(0,m.jsx)(r.A,{to:"/docs/usage/remote-cache",children:"remote cache"})," ","pulls everything a previous run already compiled. You pay to build the change, not the repo."]})]}),(0,m.jsxs)("article",{className:c.A.mcpCard,children:[(0,m.jsxs)("h3",{className:c.A.mcpCardTitle,children:["Migration is ",(0,m.jsx)("em",{children:"one command"})]}),(0,m.jsxs)("p",{className:c.A.mcpCardBody,children:[(0,m.jsx)("code",{children:"bleep import-sbt"})," reads an sbt build,"," ",(0,m.jsx)("code",{children:"bleep import-maven"})," a Maven one, and writes the equivalent ",(0,m.jsx)("code",{children:"bleep.yaml"})," \u2014 project graph derived, templates inferred. Compiling and testing on day one, even at hundreds of modules."]})]})]})})]})})}function w(){return(0,m.jsx)("section",{className:`${c.A.section} ${c.A.sectionPaper}`,children:(0,m.jsxs)("div",{className:c.A.container,children:[(0,m.jsxs)(g,{eyebrow:"The agent era",title:(0,m.jsxs)(m.Fragment,{children:["Your agents\u2019 favorite ",(0,m.jsx)("em",{children:"build tool"}),"."]}),children:["Agentic development has a shape: an orchestrator fans subagents into git worktrees, each hammering compile-test loops in parallel. Bleep ships the whole apparatus for that shape, built in. One MCP registration covers every checkout you\u2019ll ever create. Every call names its workspace, so a subagent can\u2019t silently build the wrong checkout. New worktrees clone the parent\u2019s compiled state instead of rebuilding the world. And every run becomes a transcript the agent can query \u2014 or ",(0,m.jsx)("em",{children:"diff"}),"."]}),(0,m.jsx)(u,{children:(0,m.jsxs)("p",{className:c.A.mcpStat,children:[(0,m.jsx)("span",{className:c.A.mcpStatFigure,children:"build runs you can diff"}),(0,m.jsx)("span",{className:c.A.mcpStatRest,children:"\u201cwhat changed since the last green run?\u201d is one call, answered as data. No other build tool has this shape \u2014 the nearest attempt, Develocity\u2019s build-scan comparison, is paid analytics in someone else\u2019s cloud."})]})}),(0,m.jsx)(u,{delay:60,children:(0,m.jsx)(d,{rows:[{actor:"agent",deed:"breaks a test, reruns \u2014 diffBase pins the last green run, so the answer rides along"},{actor:"",call:"bleep.test { directory: ~/repo/wt/api, diffBase: 18 }",result:'{ historyId: 19, failed: 1, diff: { summary: "1 newlyFailing", newlyFailing: [{ test: "PricingTest.10 percent off at 100 and above", from: "passed", to: "failed", message: "expected 216, obtained 204" }] } }',bad:!0,note:"run + what-changed in one call: the break, name and assertion, nothing else"},{gap:!0},{actor:"agent",deed:"reverts, reruns"},{actor:"",call:"bleep.test { directory: ~/repo/wt/api, diffBase: 18 }",result:'{ historyId: 20, passed: 14, diff: { identical: true, summary: "No logical differences." } }',good:!0,note:"~800ms of timing noise between the runs, zero false diffs"}]})}),(0,m.jsx)(u,{delay:70,children:(0,m.jsxs)("div",{style:{marginTop:"2rem"},children:[(0,m.jsx)("p",{className:c.A.sectionLede,style:{textAlign:"center",marginBottom:"1rem"},children:"Or just watch it. Twenty-seven seconds: an agent in its own worktree proves its change as a diff \u2014 against its previous run, then against the worktree it was forked from."}),(0,m.jsx)(o.M,{src:p.A,cols:100,rows:32,fit:"width"})]})}),(0,m.jsx)(u,{delay:80,children:(0,m.jsxs)("div",{className:c.A.mcpGrid,children:[(0,m.jsxs)("article",{className:c.A.mcpCard,children:[(0,m.jsxs)("h3",{className:c.A.mcpCardTitle,children:["Answers, not ",(0,m.jsx)("em",{children:"logs"})]}),(0,m.jsxs)("p",{className:c.A.mcpCardBody,children:["Compile and test return counts, the first errors, and a"," ",(0,m.jsx)("code",{children:"historyId"})," \u2014 a couple hundred tokens. Failures stream the moment they happen. The full transcript is regex-searchable server-side, so no agent ever pipes a build log to a file and greps past the answer again."]})]}),(0,m.jsxs)("article",{className:c.A.mcpCard,children:[(0,m.jsxs)("h3",{className:c.A.mcpCardTitle,children:["Forks start ",(0,m.jsx)("em",{children:"warm"})]}),(0,m.jsxs)("p",{className:c.A.mcpCardBody,children:[(0,m.jsx)("code",{children:"bleep.copy-state"})," clones the parent worktree\u2019s compiled state under the compile server\u2019s own locks \u2014 clonefile-fast, safe mid-compile. Fork to verified green in"," ",l.EX.UX," seconds on"," ",l.QO.eV," lines. Subagents earn their keep from the first minute."]})]}),(0,m.jsxs)("article",{className:c.A.mcpCard,children:[(0,m.jsxs)("h3",{className:c.A.mcpCardTitle,children:["The loop is ",(0,m.jsx)("em",{children:"one call"})]}),(0,m.jsxs)("p",{className:c.A.mcpCardBody,children:["Pass ",(0,m.jsx)("code",{children:"diffBase"})," to compile or test and the response carries what your edit changed: newly failing, fixed, new diagnostics \u2014 nothing else. Timing jitter is filtered by construction, so the diff never cries wolf. Humans get the same loop as"," ",(0,m.jsx)("code",{children:"bleep test --diff"}),"."]})]})]})}),(0,m.jsx)(u,{delay:100,children:(0,m.jsxs)("p",{className:c.A.toolRoster,children:[(0,m.jsxs)("span",{className:c.A.toolRosterLabel,children:["the whole surface, 18 tools \u2014"," "]}),(0,m.jsx)(r.A,{to:"/docs/usage/mcp-server/",children:"bleep.compile \xb7 test \xb7 run \xb7 projects \xb7 test.suites \xb7 build.effective/resolved \xb7 history.list/show/diff/diff-timing \xb7 copy-state \xb7 fmt \xb7 clean \xb7 sourcegen \xb7 scripts \xb7 programs \xb7 restart"})]})}),(0,m.jsx)(u,{delay:120,children:(0,m.jsx)("p",{className:c.A.sectionLede,style:{marginTop:"2.25rem",textAlign:"center"},children:"Bleep is developed by sessions of parallel agents in git worktrees, building bleep with bleep. Everything above is how this tool gets maintained, daily."})})]})})}function S(){return(0,m.jsx)("section",{className:c.A.section,children:(0,m.jsx)("div",{className:c.A.containerNarrow,children:(0,m.jsxs)(g,{eyebrow:"The part where we admit things",title:(0,m.jsxs)(m.Fragment,{children:["What bleep is ",(0,m.jsx)("em",{children:"not"}),"."]}),children:["Marketing pages that admit nothing are asking you to do the discounting yourself. Save the trip: bleep is for Java, Kotlin, and Scala on the JVM (with JS and Native cross-builds). No Android. No Gradle import yet \u2014 Maven and sbt import exist, Gradle is a hand-port today. The"," ",(0,m.jsx)(r.A,{to:"/docs/appendix/status/",children:"status page"})," keeps the full account. If your dealbreaker is on it, we\u2019d rather you find out here than three days in \u2014 and if it isn\u2019t, everything above is waiting. One more, in reverse: if bleep ever stops being right for you, your whole build is portable YAML and Maven coordinates \u2014 leaving is a mechanical translation, and we didn\u2019t just write the"," ",(0,m.jsx)(r.A,{to:"/docs/guides/exit-strategy",children:"exit strategy"})," ","down, we implemented it: the repo carries"," ",(0,m.jsx)("code",{children:"bleep export-maven"}),", and run against bleep\u2019s own build it emits POMs that compile every module and pass the tests under stock Maven \u2014 source generators included. That is a run we do by hand, not an automated test, and the"," ",(0,m.jsx)(r.A,{to:"/docs/guides/exit-strategy",children:"guide"})," lists what the exporter does not translate. Betting on a young tool should never mean betting the repo, so the escape hatch is code you can read and run."]})})})}
1function A(){const[e,n]=(0,s.useState)(!1),[t,a]=(0,s.useState)(!1),i="curl -fsSL https://bleep.build/install | sh",o="claude mcp add --scope user bleep -- bleep mcp-server";return(0,m.jsx)("section",{className:c.A.cta,children:(0,m.jsxs)("div",{className:c.A.container,children:[(0,m.jsxs)(g,{eyebrow:"The close",title:(0,m.jsxs)(m.Fragment,{children:["Two lines. Then go ",(0,m.jsx)("em",{children:"build"})," something huge."]}),children:["Open source, MIT. The first line installs the binary. The second gives every agent on your machine a build tool that answers in ",l.LU.qs," tokens or fewer. There is no third line."]}),(0,m.jsx)(u,{children:(0,m.jsxs)("div",{className:c.A.installStack,children:[(0,m.jsxs)("div",{className:c.A.installFrame,children:[(0,m.jsx)("span",{className:c.A.installPrompt,children:"$"}),(0,m.jsx)("span",{className:c.A.installCmd,children:i}),(0,m.jsx)("button",{type:"button",onClick:()=>{navigator.clipboard?.writeText(i),n(!0),setTimeout(()=>n(!1),1600)},className:`${c.A.installCopy} ${e?c.A.copied:""}`,children:e?"Copied":"Copy"})]}),(0,m.jsxs)("div",{className:c.A.installFrame,children:[(0,m.jsx)("span",{className:c.A.installPrompt,children:"$"}),(0,m.jsx)("span",{className:c.A.installCmd,children:o}),(0,m.jsx)("button",{type:"button",onClick:()=>{navigator.clipboard?.writeText(o),a(!0),setTimeout(()=>a(!1),1600)},className:`${c.A.installCopy} ${t?c.A.copied:""}`,children:t?"Copied":"Copy"})]})]})}),(0,m.jsx)(u,{delay:120,children:(0,m.jsxs)("div",{className:c.A.ctaButtons,children:[(0,m.jsx)(r.A,{className:c.A.btnPrimary,to:"/docs/installing/",children:"Install guide"}),(0,m.jsx)(r.A,{className:c.A.btnSecondary,to:"/docs/tutorials/your-first-project/",children:"First project"}),(0,m.jsx)(r.A,{className:c.A.btnSecondary,to:"https://github.com/oyvindberg/bleep",children:"GitHub"})]})})]})})}function C(){return(0,m.jsx)(a.A,{title:"Why bleep",description:"The case for bleep at full volume: ten-millisecond startup, one-file builds, agent answers measured in hundreds of tokens, and warm worktree forks on five-million-line repos. Every number measured.",children:(0,m.jsxs)("div",{className:c.A.page,children:[(0,m.jsx)(h,{}),(0,m.jsxs)("main",{children:[(0,m.jsx)(b,{}),(0,m.jsx)(v,{}),(0,m.jsx)(j,{}),(0,m.jsx)(y,{}),(0,m.jsx)(f,{}),(0,m.jsx)(k,{}),(0,m.jsx)(x,{}),(0,m.jsx)(w,{}),(0,m.jsx)(S,{}),(0,m.jsx)(A,{})]})]})})}},7231(e,n,t){t.d(n,{A:()=>s});const s=t.p+"d868ff0be4d8dfef2eff82cbf3030a70.cast"},5648(e,n,t){t.d(n,{A:()=>s});const s={page:"page_IdJK",reveal:"reveal_VdDc",isVisible:"isVisible_uyTB",sectionHead:"sectionHead_ZZjR",eyebrow:"eyebrow_kY3W",sectionTitle:"sectionTitle_Ut5p",sectionLede:"sectionLede_zXD3",section:"section_Q9Zo",sectionPaper:"sectionPaper_klpt",container:"container_bfhl",containerNarrow:"containerNarrow_OHZI",hero:"hero_aEcG",heroGlow:"heroGlow_CLW8",heroAurora:"heroAurora_L8Y5",aurora:"aurora_FDZX",heroInner:"heroInner_V4lS",heroMeta:"heroMeta_PBQM",heroTitle:"heroTitle_qg2I",heroTagline:"heroTagline_QIlK",heroButtons:"heroButtons_r52D",heroNoList:"heroNoList_mgyC",heroEnter:"heroEnter_Zo2m",heroRise:"heroRise_ddQL",heroFacts:"heroFacts_XgxM",heroFact:"heroFact_dySP",heroFactLabel:"heroFactLabel_LTRT",heroFactValue:"heroFactValue_s2tx",heroFactSub:"heroFactSub_kbPz",btnPrimary:"btnPrimary_hBjO",btnSecondary:"btnSecondary_mRVh",dossierGrid:"dossierGrid_EmC4",dossierCard:"dossierCard_6O3f",dossierCardRefuse:"dossierCardRefuse_cFn9",dossierCardTenet:"dossierCardTenet_uI0C",dossierHead:"dossierHead_GEzd",dossierKicker:"dossierKicker_YdlI",dossierDot:"dossierDot_H1fH",dossierNum:"dossierNum_TLGc",dossierTitle:"dossierTitle_pRWQ",dossierBody:"dossierBody_ufgP",dossierList:"dossierList_Qxv1",dossierAccent:"dossierAccent_l7mn",tenetSection:"tenetSection_OX9k",specimenSplit:"specimenSplit_Next",specimenFrame:"specimenFrame_S4on",specimenHead:"specimenHead_LioW",specimenHeadAside:"specimenHeadAside_Egja",specimenTabs:"specimenTabs_IDSj",specimenTab:"specimenTab_DFds",specimenTabActive:"specimenTabActive_JSTY",specimenSnippet:"specimenSnippet_Q7iB",specimenNotes:"specimenNotes_dQwd",specimenNote:"specimenNote_pSuY",roundtripPills:"roundtripPills_bClq",roundtripPillRow:"roundtripPillRow_C7gM",roundtripPillKind:"roundtripPillKind_CUlf",roundtripPillKindDot:"roundtripPillKindDot_FAyj",roundtripPillKindMutate:"roundtripPillKindMutate_OBDI",roundtripPillKindInspect:"roundtripPillKindInspect_h52J",roundtripPillVerbs:"roun
1dtripPillVerbs_dXjS",templatesCallout:"templatesCallout_uxqB",numbersGrid:"numbersGrid_V6_6",numberCell:"numberCell_NwpQ",numberKicker:"numberKicker_ATE2",numberValue:"numberValue_zePU",numberValueUnit:"numberValueUnit_N1tS",numberCaption:"numberCaption_p0gN",pullQuote:"pullQuote_Lt8b",testRunnerVideo:"testRunnerVideo_NUas",mcpGrid:"mcpGrid_SIzG",mcpCard:"mcpCard_VRRF",mcpCardTitle:"mcpCardTitle_RZVE",mcpCardBody:"mcpCardBody_wt8i",compareCta:"compareCta_WhpS",compareCtaLink:"compareCtaLink_j909",cta:"cta__fRr",installFrame:"installFrame_kTtc",installPrompt:"installPrompt_jzbo",installCmd:"installCmd_U_Ha",installCopy:"installCopy__Knj",copied:"copied_w7nX",ctaButtons:"ctaButtons_vsp7",installStack:"installStack_yslR",mcpStat:"mcpStat_HAmo",mcpStatFigure:"mcpStatFigure_IoNi",mcpStatRest:"mcpStatRest_vAge",vignette:"vignette_m3rD",vgRow:"vgRow_dzhb",vgGap:"vgGap_fl9o",vgActor:"vgActor_r7Qv",vgActorHot:"vgActorHot_z9Ng",vgLines:"vgLines_gzAQ",vgCall:"vgCall_i11K",vgResult:"vgResult_lQ1J",vgGood:"vgGood_RxGN",vgBad:"vgBad_STpH",vgNote:"vgNote_oQkP",vgDeed:"vgDeed_uNq0",toolRoster:"toolRoster_hIJr",toolRosterLabel:"toolRosterLabel_PmBX",heroStamp:"heroStamp_XWHc",specimenBody:"specimenBody_okG8",compareTabs:"compareTabs_voW4",compareTab:"compareTab_n2xU",compareTabActive:"compareTabActive_M1Wt",comparePanel:"comparePanel_c0Iq",compareVerdict:"compareVerdict_w6lF"}},8484(e){e.exports=JSON.parse('{"sR":"2026-08-15","LB":{"KK":17072788,"QI":"17M","O":64707},"QO":{"Mn":5131841,"eV":"5.1 million","oo":"5.1M","aq":11928,"dt":132,"JI":{"eV":"4.9M","O4":"4.6M","rg":"353k"},"VS":{"eV":"169k"}},"EX":{"yt":10,"DY":9,"gh":6.2,"aR":14.5,"I5":1.8,"$_":33,"UX":54,"A8":268,"lK":"4 min 22 s"},"qJ":{"Xz":71,"Cy":3529,"Yo":585},"LU":{"FY":25,"qs":265,"QT":"25\u2013265","Ou":"31,000"},"kn":{"CW":86,"CN":439,"g4":60}}')}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.