[{"data":1,"prerenderedAt":2205},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Freference\u002Fgradle-plugin-reference":314,"\u002Fdocs\u002Freference\u002Fgradle-plugin-reference-surround":2200},[4,38,86,149,176,219,257,273],{"title":5,"path":6,"stem":7,"children":8,"icon":37},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F1.getting-started\u002F1.index",[9,12,17,22,27,32],{"title":10,"path":6,"stem":7,"icon":11},"Getting started","i-lucide-flag",{"title":13,"path":14,"stem":15,"icon":16},"Modules overview","\u002Fdocs\u002Fgetting-started\u002Fmodules-overview","1.docs\u002F1.getting-started\u002F2.modules-overview","i-lucide-boxes",{"title":18,"path":19,"stem":20,"icon":21},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","1.docs\u002F1.getting-started\u002F3.installation","i-lucide-download",{"title":23,"path":24,"stem":25,"icon":26},"License configuration","\u002Fdocs\u002Fgetting-started\u002Flicense-configuration","1.docs\u002F1.getting-started\u002F4.license-configuration","i-lucide-key-round",{"title":28,"path":29,"stem":30,"icon":31},"Your first app","\u002Fdocs\u002Fgetting-started\u002Ffirst-app","1.docs\u002F1.getting-started\u002F5.first-app","i-lucide-square-play",{"title":33,"path":34,"stem":35,"icon":36},"Project setup","\u002Fdocs\u002Fgetting-started\u002Fproject-setup","1.docs\u002F1.getting-started\u002F6.project-setup","i-lucide-package",false,{"title":39,"path":40,"stem":41,"children":42,"icon":45},"Core Concepts","\u002Fdocs\u002Fconcepts","1.docs\u002F2.concepts\u002F1.index",[43,46,51,56,61,66,71,76,81],{"title":44,"path":40,"stem":41,"icon":45},"Core concepts","i-lucide-book-open",{"title":47,"path":48,"stem":49,"icon":50},"Architecture","\u002Fdocs\u002Fconcepts\u002Farchitecture","1.docs\u002F2.concepts\u002F2.architecture","i-lucide-layers",{"title":52,"path":53,"stem":54,"icon":55},"Exactly-once semantics","\u002Fdocs\u002Fconcepts\u002Fexactly-once","1.docs\u002F2.concepts\u002F3.exactly-once","i-lucide-shield-check",{"title":57,"path":58,"stem":59,"icon":60},"Lanes and parallelism","\u002Fdocs\u002Fconcepts\u002Flanes-and-parallelism","1.docs\u002F2.concepts\u002F4.lanes-and-parallelism","i-lucide-split",{"title":62,"path":63,"stem":64,"icon":65},"State and thread-safety","\u002Fdocs\u002Fconcepts\u002Fstate-and-thread-safety","1.docs\u002F2.concepts\u002F5.state-and-thread-safety","i-lucide-lock",{"title":67,"path":68,"stem":69,"icon":70},"Event time and watermarks","\u002Fdocs\u002Fconcepts\u002Fevent-time-and-watermarks","1.docs\u002F2.concepts\u002F6.event-time-and-watermarks","i-lucide-clock",{"title":72,"path":73,"stem":74,"icon":75},"The configuration model","\u002Fdocs\u002Fconcepts\u002Fconfiguration-model","1.docs\u002F2.concepts\u002F7.configuration-model","i-lucide-sliders-horizontal",{"title":77,"path":78,"stem":79,"icon":80},"The error-handling model","\u002Fdocs\u002Fconcepts\u002Ferror-handling-model","1.docs\u002F2.concepts\u002F8.error-handling-model","i-lucide-triangle-alert",{"title":82,"path":83,"stem":84,"icon":85},"How StoatFlow differs from Kafka Streams","\u002Fdocs\u002Fconcepts\u002Fhow-stoatflow-differs-from-ks","1.docs\u002F2.concepts\u002F9.how-stoatflow-differs-from-ks","i-lucide-arrow-left-right",{"title":87,"path":88,"stem":89,"children":90,"icon":93},"Building Topologies","\u002Fdocs\u002Fbuilding","1.docs\u002F3.building\u002F1.index",[91,94,99,104,109,114,119,124,129,134,139,144],{"title":92,"path":88,"stem":89,"icon":93},"Building topologies","i-lucide-blocks",{"title":95,"path":96,"stem":97,"icon":98},"Error handling and DLQ","\u002Fdocs\u002Fbuilding\u002Ferror-handling-dlq","1.docs\u002F3.building\u002F10.error-handling-dlq","i-lucide-circle-x",{"title":100,"path":101,"stem":102,"icon":103},"State stores","\u002Fdocs\u002Fbuilding\u002Fstate-stores","1.docs\u002F3.building\u002F11.state-stores","i-lucide-database",{"title":105,"path":106,"stem":107,"icon":108},"Testing topologies","\u002Fdocs\u002Fbuilding\u002Ftesting","1.docs\u002F3.building\u002F12.testing","i-lucide-flask-conical",{"title":110,"path":111,"stem":112,"icon":113},"Sources and sinks","\u002Fdocs\u002Fbuilding\u002Fstreams-builder","1.docs\u002F3.building\u002F2.streams-builder","i-lucide-import",{"title":115,"path":116,"stem":117,"icon":118},"KStream and KTable operations","\u002Fdocs\u002Fbuilding\u002Fkstream-ktable","1.docs\u002F3.building\u002F3.kstream-ktable","i-lucide-waypoints",{"title":120,"path":121,"stem":122,"icon":123},"Aggregations","\u002Fdocs\u002Fbuilding\u002Faggregations","1.docs\u002F3.building\u002F4.aggregations","i-lucide-sigma",{"title":125,"path":126,"stem":127,"icon":128},"Windowing","\u002Fdocs\u002Fbuilding\u002Fwindowing","1.docs\u002F3.building\u002F5.windowing","i-lucide-calendar-clock",{"title":130,"path":131,"stem":132,"icon":133},"Joins","\u002Fdocs\u002Fbuilding\u002Fjoins","1.docs\u002F3.building\u002F6.joins","i-lucide-git-merge",{"title":135,"path":136,"stem":137,"icon":138},"The Processor API","\u002Fdocs\u002Fbuilding\u002Fprocessor-api","1.docs\u002F3.building\u002F7.processor-api","i-lucide-cpu",{"title":140,"path":141,"stem":142,"icon":143},"Scheduled sources","\u002Fdocs\u002Fbuilding\u002Fscheduled-sources","1.docs\u002F3.building\u002F8.scheduled-sources","i-lucide-timer",{"title":145,"path":146,"stem":147,"icon":148},"Serdes and Avro","\u002Fdocs\u002Fbuilding\u002Fserdes","1.docs\u002F3.building\u002F9.serdes","i-lucide-binary",{"title":150,"path":151,"stem":152,"children":153,"icon":75},"Configuration","\u002Fdocs\u002Fconfiguration","1.docs\u002F4.configuration\u002F1.index",[154,156,161,166,171],{"title":155,"path":151,"stem":152,"icon":75},"How configuration works",{"title":157,"path":158,"stem":159,"icon":160},"Engine configuration (:core)","\u002Fdocs\u002Fconfiguration\u002Fcore-config","1.docs\u002F4.configuration\u002F2.core-config","i-lucide-settings-2",{"title":162,"path":163,"stem":164,"icon":165},"Runtime configuration (:runtime)","\u002Fdocs\u002Fconfiguration\u002Fruntime-config","1.docs\u002F4.configuration\u002F3.runtime-config","i-lucide-server-cog",{"title":167,"path":168,"stem":169,"icon":170},"Defaults, adaptivity, and presets","\u002Fdocs\u002Fconfiguration\u002Fdefaults-and-presets","1.docs\u002F4.configuration\u002F4.defaults-and-presets","i-lucide-gauge",{"title":172,"path":173,"stem":174,"icon":175},"Kafka client configuration","\u002Fdocs\u002Fconfiguration\u002Fkafka-client-config","1.docs\u002F4.configuration\u002F5.kafka-client-config","i-lucide-plug",{"title":177,"path":178,"stem":179,"children":180,"icon":183},"Running in Production","\u002Fdocs\u002Fruntime","1.docs\u002F5.runtime\u002F1.index",[181,184,189,194,199,204,209,214],{"title":182,"path":178,"stem":179,"icon":183},"The runtime","i-lucide-server",{"title":185,"path":186,"stem":187,"icon":188},"The REST API","\u002Fdocs\u002Fruntime\u002Frest-api","1.docs\u002F5.runtime\u002F2.rest-api","i-lucide-globe",{"title":190,"path":191,"stem":192,"icon":193},"Health checks","\u002Fdocs\u002Fruntime\u002Fhealth-checks","1.docs\u002F5.runtime\u002F3.health-checks","i-lucide-heart-pulse",{"title":195,"path":196,"stem":197,"icon":198},"Metrics","\u002Fdocs\u002Fruntime\u002Fmetrics","1.docs\u002F5.runtime\u002F4.metrics","i-lucide-activity",{"title":200,"path":201,"stem":202,"icon":203},"Pause and resume","\u002Fdocs\u002Fruntime\u002Fpause-unpause","1.docs\u002F5.runtime\u002F5.pause-unpause","i-lucide-pause",{"title":205,"path":206,"stem":207,"icon":208},"Plugins and lifecycle hooks","\u002Fdocs\u002Fruntime\u002Fplugins","1.docs\u002F5.runtime\u002F6.plugins","i-lucide-puzzle",{"title":210,"path":211,"stem":212,"icon":213},"Docker images","\u002Fdocs\u002Fruntime\u002Fdocker","1.docs\u002F5.runtime\u002F7.docker","i-lucide-container",{"title":215,"path":216,"stem":217,"icon":218},"GraalVM native image","\u002Fdocs\u002Fruntime\u002Fnative-image","1.docs\u002F5.runtime\u002F8.native-image","i-lucide-zap",{"title":220,"path":221,"stem":222,"children":223,"icon":226},"Deploying & Operating","\u002Fdocs\u002Foperating","1.docs\u002F6.operating\u002F1.index",[224,227,232,237,242,247,252],{"title":225,"path":221,"stem":222,"icon":226},"Deploying and operating","i-lucide-life-buoy",{"title":228,"path":229,"stem":230,"icon":231},"Running on Kubernetes","\u002Fdocs\u002Foperating\u002Fkubernetes","1.docs\u002F6.operating\u002F2.kubernetes","i-lucide-ship",{"title":233,"path":234,"stem":235,"icon":236},"High availability","\u002Fdocs\u002Foperating\u002Fhigh-availability","1.docs\u002F6.operating\u002F3.high-availability","i-lucide-copy",{"title":238,"path":239,"stem":240,"icon":241},"Liveness and readiness probes","\u002Fdocs\u002Foperating\u002Fprobes","1.docs\u002F6.operating\u002F4.probes","i-lucide-stethoscope",{"title":243,"path":244,"stem":245,"icon":246},"Observability","\u002Fdocs\u002Foperating\u002Fobservability","1.docs\u002F6.operating\u002F5.observability","i-lucide-telescope",{"title":248,"path":249,"stem":250,"icon":251},"Tuning under load","\u002Fdocs\u002Foperating\u002Ftuning","1.docs\u002F6.operating\u002F6.tuning","i-lucide-sliders",{"title":253,"path":254,"stem":255,"icon":256},"Production checklist","\u002Fdocs\u002Foperating\u002Fproduction-checklist","1.docs\u002F6.operating\u002F7.production-checklist","i-lucide-clipboard-check",{"title":258,"path":259,"stem":260,"children":261,"icon":85},"Migrating from Kafka Streams","\u002Fdocs\u002Fmigration","1.docs\u002F7.migration\u002F1.index",[262,263,268],{"title":258,"path":259,"stem":260,"icon":85},{"title":264,"path":265,"stem":266,"icon":267},"Migration without carrying state","\u002Fdocs\u002Fmigration\u002Fwithout-data-migration","1.docs\u002F7.migration\u002F2.without-data-migration","i-lucide-sparkles",{"title":269,"path":270,"stem":271,"icon":272},"Migration carrying state","\u002Fdocs\u002Fmigration\u002Fwith-data-migration","1.docs\u002F7.migration\u002F3.with-data-migration","i-lucide-database-backup",{"title":274,"path":275,"stem":276,"children":277,"icon":279},"Reference","\u002Fdocs\u002Freference","1.docs\u002F8.reference\u002F1.index",[278,280,285,290,295,300,305,309],{"title":274,"path":275,"stem":276,"icon":279},"i-lucide-list",{"title":281,"path":282,"stem":283,"icon":284},"Configuration reference","\u002Fdocs\u002Freference\u002Fconfiguration-reference","1.docs\u002F8.reference\u002F2.configuration-reference","i-lucide-table",{"title":286,"path":287,"stem":288,"icon":289},"REST API reference","\u002Fdocs\u002Freference\u002Frest-api-reference","1.docs\u002F8.reference\u002F3.rest-api-reference","i-lucide-network",{"title":291,"path":292,"stem":293,"icon":294},"Gradle plugin reference","\u002Fdocs\u002Freference\u002Fgradle-plugin-reference","1.docs\u002F8.reference\u002F4.gradle-plugin-reference","i-lucide-box",{"title":296,"path":297,"stem":298,"icon":299},"Maven reference","\u002Fdocs\u002Freference\u002Fmaven-reference","1.docs\u002F8.reference\u002F5.maven-reference","i-simple-icons-apachemaven",{"title":301,"path":302,"stem":303,"icon":304},"Kafka Streams compatibility matrix","\u002Fdocs\u002Freference\u002Fks-compatibility-matrix","1.docs\u002F8.reference\u002F6.ks-compatibility-matrix","i-lucide-table-2",{"title":306,"path":307,"stem":308,"icon":170},"Metrics reference","\u002Fdocs\u002Freference\u002Fmetrics-reference","1.docs\u002F8.reference\u002F7.metrics-reference",{"title":310,"path":311,"stem":312,"icon":313},"Glossary","\u002Fdocs\u002Freference\u002Fglossary","1.docs\u002F8.reference\u002F8.glossary","i-lucide-book-a",{"id":315,"title":291,"body":316,"description":2193,"extension":2194,"meta":2195,"navigation":2196,"pageType":2197,"path":292,"seo":2198,"stem":293,"__hash__":2199},"docs\u002F1.docs\u002F8.reference\u002F4.gradle-plugin-reference.md",{"type":317,"value":318,"toc":2178},"minimark",[319,336,345,455,466,471,477,799,804,892,897,1136,1141,1294,1298,1301,1442,1446,1501,1514,1518,1707,1736,1740,1745,1903,1921,1928,1932,1944,2060,2074,2078,2084,2146,2150,2174],[320,321,322,323,327,328,331,332,335],"p",{},"The ",[324,325,326],"code",{},"io.stoatflow"," convention plugin encapsulates StoatFlow's build conventions: the JDK 25 toolchain, the required preview + native-access JVM flags, a runnable fat JAR, and opt-in Docker (Jib) and GraalVM native-image builds. Configure it through the typed ",[324,329,330],{},"stoatflow { }"," extension (Kotlin DSL). For the Maven equivalent — the same conventions via a parent POM — see the ",[333,334,296],"a",{"href":297},".",[320,337,338,339,341,342,335],{},"Apply it after registering the plugin-marker repository — see ",[333,340,33],{"href":34}," and ",[333,343,18],{"href":344},"\u002Fdocs\u002Fgetting-started\u002Finstallation#_3-configure-the-jvm-toolchain",[346,347,352],"pre",{"className":348,"code":349,"language":350,"meta":351,"style":351},"language-kotlin shiki shiki-themes vitesse-light","\u002F\u002F build.gradle.kts\nplugins {\n    kotlin(\"jvm\") version \"2.4.0\"   \u002F\u002F omit for a Java-only project\n    id(\"io.stoatflow\") version \"\u003Cstoatflow-version>\"\n}\n\nstoatflow {\n    mainClass.set(\"com.example.MainKt\")\n}\n","kotlin","",[324,353,354,363,374,396,412,418,425,433,450],{"__ignoreMap":351},[355,356,359],"span",{"class":357,"line":358},"line",1,[355,360,362],{"class":361},"s8zF2","\u002F\u002F build.gradle.kts\n",[355,364,366,370],{"class":357,"line":365},2,[355,367,369],{"class":368},"sySUi","plugins",[355,371,373],{"class":372},"suHK_"," {\n",[355,375,377,380,383,387,390,393],{"class":357,"line":376},3,[355,378,379],{"class":368},"    kotlin",[355,381,382],{"class":372},"(",[355,384,386],{"class":385},"spphp","\"jvm\"",[355,388,389],{"class":372},") version ",[355,391,392],{"class":385},"\"2.4.0\"",[355,394,395],{"class":361},"   \u002F\u002F omit for a Java-only project\n",[355,397,399,402,404,407,409],{"class":357,"line":398},4,[355,400,401],{"class":368},"    id",[355,403,382],{"class":372},[355,405,406],{"class":385},"\"io.stoatflow\"",[355,408,389],{"class":372},[355,410,411],{"class":385},"\"\u003Cstoatflow-version>\"\n",[355,413,415],{"class":357,"line":414},5,[355,416,417],{"class":372},"}\n",[355,419,421],{"class":357,"line":420},6,[355,422,424],{"emptyLinePlaceholder":423},true,"\n",[355,426,428,431],{"class":357,"line":427},7,[355,429,430],{"class":368},"stoatflow",[355,432,373],{"class":372},[355,434,436,439,442,444,447],{"class":357,"line":435},8,[355,437,438],{"class":372},"    mainClass.",[355,440,441],{"class":368},"set",[355,443,382],{"class":372},[355,445,446],{"class":385},"\"com.example.MainKt\"",[355,448,449],{"class":372},")\n",[355,451,453],{"class":357,"line":452},9,[355,454,417],{"class":372},[320,456,457,458,461,462,465],{},"The current release is ",[459,460],"stoatflow-version",{}," — substitute it for the ",[324,463,464],{},"\u003Cstoatflow-version>"," placeholder.",[467,468,470],"h2",{"id":469},"extension-dsl","Extension DSL",[320,472,473,474,476],{},"The plugin registers a ",[324,475,330],{}," extension. The full surface, with every default:",[346,478,480],{"className":348,"code":479,"language":350,"meta":351,"style":351},"stoatflow {\n    mainClass.set(\"com.example.MainKt\")             \u002F\u002F default: unset\n\n    docker {\n        enabled.set(true)                           \u002F\u002F default: false\n        imageName.set(\"my-app\")                     \u002F\u002F default: project.name\n        port.set(8080)                              \u002F\u002F default: 8080\n        user.set(\"1000:1000\")                       \u002F\u002F default: 1000:1000\n        baseImage.set(\"eclipse-temurin:25-jre-noble\") \u002F\u002F default shown (JVM\u002FJib only)\n        stateDir.set(\"\u002Fdata\u002Fstate\")                 \u002F\u002F default: \u002Fdata\u002Fstate\n        rocksdbMb.set(256)                          \u002F\u002F default: auto-detect (see below)\n        reproducibleBuild.set(true)                 \u002F\u002F default: true\n        jvmFlags.set(listOf(\"-XX:+UseG1GC\"))        \u002F\u002F overridable; preview\u002Fnative-access always added\n    }\n\n    nativeImage {\n        enabled.set(true)                           \u002F\u002F default: false\n        gc.set(\"G1\")                                \u002F\u002F default: absent (Serial GC)\n        runtimeTarget.set(\"runtime\")                \u002F\u002F default: runtime; or \"runtime-lean\"\n        additionalInitializeAtRunTime.add(\"com.example.MyClass\")\n        removeInitializeAtRunTime.add(\"org.rocksdb.RocksDB\")\n    }\n}\n",[324,481,482,488,504,508,515,534,552,571,589,607,626,645,662,686,692,697,705,720,739,758,774,789,794],{"__ignoreMap":351},[355,483,484,486],{"class":357,"line":358},[355,485,430],{"class":368},[355,487,373],{"class":372},[355,489,490,492,494,496,498,501],{"class":357,"line":365},[355,491,438],{"class":372},[355,493,441],{"class":368},[355,495,382],{"class":372},[355,497,446],{"class":385},[355,499,500],{"class":372},")             ",[355,502,503],{"class":361},"\u002F\u002F default: unset\n",[355,505,506],{"class":357,"line":376},[355,507,424],{"emptyLinePlaceholder":423},[355,509,510,513],{"class":357,"line":398},[355,511,512],{"class":368},"    docker",[355,514,373],{"class":372},[355,516,517,520,522,524,528,531],{"class":357,"line":414},[355,518,519],{"class":372},"        enabled.",[355,521,441],{"class":368},[355,523,382],{"class":372},[355,525,527],{"class":526},"sbBg2","true",[355,529,530],{"class":372},")                           ",[355,532,533],{"class":361},"\u002F\u002F default: false\n",[355,535,536,539,541,543,546,549],{"class":357,"line":420},[355,537,538],{"class":372},"        imageName.",[355,540,441],{"class":368},[355,542,382],{"class":372},[355,544,545],{"class":385},"\"my-app\"",[355,547,548],{"class":372},")                     ",[355,550,551],{"class":361},"\u002F\u002F default: project.name\n",[355,553,554,557,559,561,565,568],{"class":357,"line":427},[355,555,556],{"class":372},"        port.",[355,558,441],{"class":368},[355,560,382],{"class":372},[355,562,564],{"class":563},"s-TwI","8080",[355,566,567],{"class":372},")                              ",[355,569,570],{"class":361},"\u002F\u002F default: 8080\n",[355,572,573,576,578,580,583,586],{"class":357,"line":435},[355,574,575],{"class":372},"        user.",[355,577,441],{"class":368},[355,579,382],{"class":372},[355,581,582],{"class":385},"\"1000:1000\"",[355,584,585],{"class":372},")                       ",[355,587,588],{"class":361},"\u002F\u002F default: 1000:1000\n",[355,590,591,594,596,598,601,604],{"class":357,"line":452},[355,592,593],{"class":372},"        baseImage.",[355,595,441],{"class":368},[355,597,382],{"class":372},[355,599,600],{"class":385},"\"eclipse-temurin:25-jre-noble\"",[355,602,603],{"class":372},") ",[355,605,606],{"class":361},"\u002F\u002F default shown (JVM\u002FJib only)\n",[355,608,610,613,615,617,620,623],{"class":357,"line":609},10,[355,611,612],{"class":372},"        stateDir.",[355,614,441],{"class":368},[355,616,382],{"class":372},[355,618,619],{"class":385},"\"\u002Fdata\u002Fstate\"",[355,621,622],{"class":372},")                 ",[355,624,625],{"class":361},"\u002F\u002F default: \u002Fdata\u002Fstate\n",[355,627,629,632,634,636,639,642],{"class":357,"line":628},11,[355,630,631],{"class":372},"        rocksdbMb.",[355,633,441],{"class":368},[355,635,382],{"class":372},[355,637,638],{"class":563},"256",[355,640,641],{"class":372},")                          ",[355,643,644],{"class":361},"\u002F\u002F default: auto-detect (see below)\n",[355,646,648,651,653,655,657,659],{"class":357,"line":647},12,[355,649,650],{"class":372},"        reproducibleBuild.",[355,652,441],{"class":368},[355,654,382],{"class":372},[355,656,527],{"class":526},[355,658,622],{"class":372},[355,660,661],{"class":361},"\u002F\u002F default: true\n",[355,663,665,668,670,672,675,677,680,683],{"class":357,"line":664},13,[355,666,667],{"class":372},"        jvmFlags.",[355,669,441],{"class":368},[355,671,382],{"class":372},[355,673,674],{"class":368},"listOf",[355,676,382],{"class":372},[355,678,679],{"class":385},"\"-XX:+UseG1GC\"",[355,681,682],{"class":372},"))        ",[355,684,685],{"class":361},"\u002F\u002F overridable; preview\u002Fnative-access always added\n",[355,687,689],{"class":357,"line":688},14,[355,690,691],{"class":372},"    }\n",[355,693,695],{"class":357,"line":694},15,[355,696,424],{"emptyLinePlaceholder":423},[355,698,700,703],{"class":357,"line":699},16,[355,701,702],{"class":368},"    nativeImage",[355,704,373],{"class":372},[355,706,708,710,712,714,716,718],{"class":357,"line":707},17,[355,709,519],{"class":372},[355,711,441],{"class":368},[355,713,382],{"class":372},[355,715,527],{"class":526},[355,717,530],{"class":372},[355,719,533],{"class":361},[355,721,723,726,728,730,733,736],{"class":357,"line":722},18,[355,724,725],{"class":372},"        gc.",[355,727,441],{"class":368},[355,729,382],{"class":372},[355,731,732],{"class":385},"\"G1\"",[355,734,735],{"class":372},")                                ",[355,737,738],{"class":361},"\u002F\u002F default: absent (Serial GC)\n",[355,740,742,745,747,749,752,755],{"class":357,"line":741},19,[355,743,744],{"class":372},"        runtimeTarget.",[355,746,441],{"class":368},[355,748,382],{"class":372},[355,750,751],{"class":385},"\"runtime\"",[355,753,754],{"class":372},")                ",[355,756,757],{"class":361},"\u002F\u002F default: runtime; or \"runtime-lean\"\n",[355,759,761,764,767,769,772],{"class":357,"line":760},20,[355,762,763],{"class":372},"        additionalInitializeAtRunTime.",[355,765,766],{"class":368},"add",[355,768,382],{"class":372},[355,770,771],{"class":385},"\"com.example.MyClass\"",[355,773,449],{"class":372},[355,775,777,780,782,784,787],{"class":357,"line":776},21,[355,778,779],{"class":372},"        removeInitializeAtRunTime.",[355,781,766],{"class":368},[355,783,382],{"class":372},[355,785,786],{"class":385},"\"org.rocksdb.RocksDB\"",[355,788,449],{"class":372},[355,790,792],{"class":357,"line":791},22,[355,793,691],{"class":372},[355,795,797],{"class":357,"line":796},23,[355,798,417],{"class":372},[800,801,802],"h3",{"id":430},[324,803,330],{},[805,806,807,826],"table",{},[808,809,810],"thead",{},[811,812,813,817,820,823],"tr",{},[814,815,816],"th",{},"Property",[814,818,819],{},"Type",[814,821,822],{},"Default",[814,824,825],{},"Description",[827,828,829,862,878],"tbody",{},[811,830,831,837,842,848],{},[832,833,834],"td",{},[324,835,836],{},"mainClass",[832,838,839],{},[324,840,841],{},"Property\u003CString>",[832,843,844],{},[845,846,847],"em",{},"(unset)",[832,849,850,851,854,855,857,858,861],{},"Application entry point. Wired as a lazy provider into the ",[324,852,853],{},"application"," plugin's ",[324,856,836],{},", the shadow-jar ",[324,859,860],{},"Main-Class"," manifest attribute, and (when enabled) the Docker and native-image main class. Required for a runnable JAR or any image.",[811,863,864,869,872,875],{},[832,865,866],{},[324,867,868],{},"docker { }",[832,870,871],{},"nested",[832,873,874],{},"—",[832,876,877],{},"Opt-in Jib Docker image build. See below.",[811,879,880,885,887,889],{},[832,881,882],{},[324,883,884],{},"nativeImage { }",[832,886,871],{},[832,888,874],{},[832,890,891],{},"Opt-in GraalVM native-image build. See below.",[800,893,895],{"id":894},"docker",[324,896,868],{},[805,898,899,911],{},[808,900,901],{},[811,902,903,905,907,909],{},[814,904,816],{},[814,906,819],{},[814,908,822],{},[814,910,825],{},[827,912,913,936,961,980,1003,1022,1045,1077,1105],{},[811,914,915,920,925,930],{},[832,916,917],{},[324,918,919],{},"enabled",[832,921,922],{},[324,923,924],{},"Property\u003CBoolean>",[832,926,927],{},[324,928,929],{},"false",[832,931,932,933,935],{},"When ",[324,934,527],{},", applies the Jib plugin and the StoatFlow image conventions.",[811,937,938,943,947,952],{},[832,939,940],{},[324,941,942],{},"imageName",[832,944,945],{},[324,946,841],{},[832,948,949],{},[324,950,951],{},"project.name",[832,953,954,955,341,958,335],{},"Target image name. Tagged ",[324,956,957],{},"latest",[324,959,960],{},"\u003Cproject.version>",[811,962,963,968,973,977],{},[832,964,965],{},[324,966,967],{},"port",[832,969,970],{},[324,971,972],{},"Property\u003CInt>",[832,974,975],{},[324,976,564],{},[832,978,979],{},"Exposed container port (the runtime's HTTP admin \u002F metrics server).",[811,981,982,987,991,996],{},[832,983,984],{},[324,985,986],{},"user",[832,988,989],{},[324,990,841],{},[832,992,993],{},[324,994,995],{},"1000:1000",[832,997,998,999,1002],{},"Non-root run-as user (",[324,1000,1001],{},"uid:gid",").",[811,1004,1005,1010,1014,1019],{},[832,1006,1007],{},[324,1008,1009],{},"baseImage",[832,1011,1012],{},[324,1013,841],{},[832,1015,1016],{},[324,1017,1018],{},"eclipse-temurin:25-jre-noble",[832,1020,1021],{},"JVM base image (JVM\u002FJib path only; the native runtime base stays distroless).",[811,1023,1024,1029,1033,1038],{},[832,1025,1026],{},[324,1027,1028],{},"stateDir",[832,1030,1031],{},[324,1032,841],{},[832,1034,1035],{},[324,1036,1037],{},"\u002Fdata\u002Fstate",[832,1039,1040,1041,1044],{},"RocksDB state directory; set as ",[324,1042,1043],{},"STOATFLOW_STATE_DIR",". Mount a volume here.",[811,1046,1047,1052,1056,1061],{},[832,1048,1049],{},[324,1050,1051],{},"rocksdbMb",[832,1053,1054],{},[324,1055,972],{},[832,1057,1058],{},[845,1059,1060],{},"auto-detect",[832,1062,1063,1064,1067,1068,1072,1073,1076],{},"Off-heap RocksDB reservation (MiB) → ",[324,1065,1066],{},"STOATFLOW_ROCKSDB_MB",". Unset = ",[1069,1070,1071],"strong",{},"256 if RocksDB is on the runtime classpath, else the env var is omitted","; ",[324,1074,1075],{},"0"," always omits it; an explicit value always wins.",[811,1078,1079,1084,1088,1092],{},[832,1080,1081],{},[324,1082,1083],{},"reproducibleBuild",[832,1085,1086],{},[324,1087,924],{},[832,1089,1090],{},[324,1091,527],{},[832,1093,1094,1095,1098,1099,1101,1102,1002],{},"Pins the image ",[324,1096,1097],{},"creationTime"," to the HEAD commit timestamp. ",[324,1100,929],{}," = wall-clock (",[324,1103,1104],{},"USE_CURRENT_TIMESTAMP",[811,1106,1107,1112,1117,1122],{},[832,1108,1109],{},[324,1110,1111],{},"jvmFlags",[832,1113,1114],{},[324,1115,1116],{},"ListProperty\u003CString>",[832,1118,1119],{},[324,1120,1121],{},"[\"-XX:+UseG1GC\"]",[832,1123,1124,1125,1128,1129,341,1132,1135],{},"Container JVM flags. ",[1069,1126,1127],{},"Overridable"," — but ",[324,1130,1131],{},"--enable-preview",[324,1133,1134],{},"--enable-native-access=ALL-UNNAMED"," are always added on top.",[800,1137,1139],{"id":1138},"nativeimage",[324,1140,884],{},[805,1142,1143,1155],{},[808,1144,1145],{},[811,1146,1147,1149,1151,1153],{},[814,1148,816],{},[814,1150,819],{},[814,1152,822],{},[814,1154,825],{},[827,1156,1157,1180,1209,1242,1269],{},[811,1158,1159,1163,1167,1171],{},[832,1160,1161],{},[324,1162,919],{},[832,1164,1165],{},[324,1166,924],{},[832,1168,1169],{},[324,1170,929],{},[832,1172,932,1173,1175,1176,1179],{},[324,1174,527],{},", applies the GraalVM native-build plugin and registers the ",[324,1177,1178],{},"nativeDockerBuild"," task.",[811,1181,1182,1187,1191,1196],{},[832,1183,1184],{},[324,1185,1186],{},"gc",[832,1188,1189],{},[324,1190,841],{},[832,1192,1193],{},[845,1194,1195],{},"absent",[832,1197,1198,1199,1202,1203,1205,1206],{},"GC algorithm, passed as ",[324,1200,1201],{},"--gc=\u003Cvalue>",". Absent = the native image default (Serial GC). Set ",[324,1204,732],{}," for stateful (RocksDB) workloads — ",[1069,1207,1208],{},"G1 needs Oracle GraalVM.",[811,1210,1211,1216,1220,1225],{},[832,1212,1213],{},[324,1214,1215],{},"runtimeTarget",[832,1217,1218],{},[324,1219,841],{},[832,1221,1222],{},[324,1223,1224],{},"runtime",[832,1226,1227,1228,1230,1231,1234,1235,1237,1238,1241],{},"Docker target stage for ",[324,1229,1178],{}," (",[324,1232,1233],{},"--target","): ",[324,1236,1224],{}," (busybox distroless + container-aware heap entrypoint) or ",[324,1239,1240],{},"runtime-lean"," (minimal distroless, no heap entrypoint — SubstrateVM sizes the heap itself).",[811,1243,1244,1249,1253,1258],{},[832,1245,1246],{},[324,1247,1248],{},"additionalInitializeAtRunTime",[832,1250,1251],{},[324,1252,1116],{},[832,1254,1255],{},[324,1256,1257],{},"[]",[832,1259,1260,1261,1264,1265,1268],{},"Extra fully-qualified class names ",[1069,1262,1263],{},"added"," to the curated ",[324,1266,1267],{},"--initialize-at-run-time"," base.",[811,1270,1271,1276,1280,1284],{},[832,1272,1273],{},[324,1274,1275],{},"removeInitializeAtRunTime",[832,1277,1278],{},[324,1279,1116],{},[832,1281,1282],{},[324,1283,1257],{},[832,1285,1286,1287,1289,1290,1293],{},"Curated ",[324,1288,1267],{}," entries to ",[1069,1291,1292],{},"drop"," — lets a consumer remove a problematic entry without forking the plugin.",[467,1295,1297],{"id":1296},"what-the-plugin-applies","What the plugin applies",[320,1299,1300],{},"Applied unconditionally on every project the plugin is added to:",[805,1302,1303,1313],{},[808,1304,1305],{},[811,1306,1307,1310],{},[814,1308,1309],{},"Concern",[814,1311,1312],{},"Effect",[827,1314,1315,1332,1359,1369,1392,1407,1422],{},[811,1316,1317,1322],{},[832,1318,1319,1321],{},[324,1320,853],{}," plugin",[832,1323,1324,1325,1327,1328,1331],{},"Applied. ",[324,1326,836],{}," wired from the extension; ",[324,1329,1330],{},"applicationDefaultJvmArgs"," set to the preview JVM args (below).",[811,1333,1334,1339],{},[832,1335,1336,1321],{},[324,1337,1338],{},"com.gradleup.shadow",[832,1340,1341,1342,1345,1346,1349,1350,1353,1354,1356,1357,1002],{},"Applied. Configures ",[324,1343,1344],{},"ShadowJar"," with ",[324,1347,1348],{},"archiveClassifier = \"all\"",", ",[324,1351,1352],{},"mergeServiceFiles()",", and a ",[324,1355,860],{}," manifest attribute (from ",[324,1358,836],{},[811,1360,1361,1364],{},[832,1362,1363],{},"Java toolchain",[832,1365,1366,335],{},[324,1367,1368],{},"JavaLanguageVersion.of(25)",[811,1370,1371,1374],{},[832,1372,1373],{},"Kotlin toolchain",[832,1375,1376,1379,1380,1383,1384,1387,1388,1391],{},[324,1377,1378],{},"jvmToolchain(25)"," — applied (reflectively) ",[1069,1381,1382],{},"only"," when the ",[324,1385,1386],{},"org.jetbrains.kotlin.jvm"," plugin is present. The Kotlin Gradle plugin is ",[1069,1389,1390],{},"not"," bundled; you bring your own.",[811,1393,1394,1400],{},[832,1395,1396,1399],{},[324,1397,1398],{},"JavaCompile"," tasks",[832,1401,1402,1404,1405,1179],{},[324,1403,1131],{}," added to compiler args on every ",[324,1406,1398],{},[811,1408,1409,1415],{},[832,1410,1411,1414],{},[324,1412,1413],{},"test"," task",[832,1416,1417,1418,1421],{},"JUnit Platform with the ",[324,1419,1420],{},"IntegrationTest"," tag excluded; the test JVM args (below) applied.",[811,1423,1424,1429],{},[832,1425,1426,1414],{},[324,1427,1428],{},"integrationTest",[832,1430,1431,1432,1435,1436,1439,1440,335],{},"Registered (when the ",[324,1433,1434],{},"java"," plugin is present); runs only ",[324,1437,1438],{},"@Tag(\"IntegrationTest\")"," tests, after ",[324,1441,1413],{},[800,1443,1445],{"id":1444},"jvm-args","JVM args",[805,1447,1448,1458],{},[808,1449,1450],{},[811,1451,1452,1455],{},[814,1453,1454],{},"Context",[814,1456,1457],{},"Flags",[827,1459,1460,1483],{},[811,1461,1462,1468],{},[832,1463,1464,1465,1467],{},"Application run (",[324,1466,1330],{},") and Docker container",[832,1469,1470,1349,1472,1474,1475,1478,1479,1482],{},[324,1471,1131],{},[324,1473,1134],{},", plus ",[324,1476,1477],{},"docker { jvmFlags }"," (default ",[324,1480,1481],{},"-XX:+UseG1GC",")",[811,1484,1485,1492],{},[832,1486,1487,1488,1349,1490,1482],{},"Test tasks (",[324,1489,1413],{},[324,1491,1428],{},[832,1493,1494,1349,1496,1349,1498],{},[324,1495,1131],{},[324,1497,1134],{},[324,1499,1500],{},"-Dnet.bytebuddy.experimental=true",[320,1502,1503,1505,1506,1508,1509,1511,1512,335],{},[324,1504,1131],{}," is required because StoatFlow builds on JDK preview features; ",[324,1507,1134],{}," is required because RocksDB's state store uses the Foreign Function & Memory API. See ",[333,1510,18],{"href":344}," for the rationale behind ",[324,1513,1481],{},[467,1515,1517],{"id":1516},"tasks-the-plugin-contributes","Tasks the plugin contributes",[805,1519,1520,1536],{},[808,1521,1522],{},[811,1523,1524,1527,1530,1533],{},[814,1525,1526],{},"Task",[814,1528,1529],{},"Group",[814,1531,1532],{},"Available when",[814,1534,1535],{},"Purpose",[827,1537,1538,1555,1579,1602,1626,1652,1687],{},[811,1539,1540,1545,1547,1552],{},[832,1541,1542],{},[324,1543,1544],{},"run",[832,1546,853],{},[832,1548,1549,1550,1482],{},"always (from ",[324,1551,853],{},[832,1553,1554],{},"Runs the app with the preview JVM args.",[811,1556,1557,1562,1565,1569],{},[832,1558,1559],{},[324,1560,1561],{},"shadowJar",[832,1563,1564],{},"shadow",[832,1566,1549,1567,1482],{},[324,1568,1564],{},[832,1570,1571,1572,1575,1576,1578],{},"Builds the runnable fat JAR (",[324,1573,1574],{},"-all"," classifier, merged service files, ",[324,1577,860],{}," manifest).",[811,1580,1581,1585,1588,1594],{},[832,1582,1583],{},[324,1584,1428],{},[832,1586,1587],{},"verification",[832,1589,1590,1591,1593],{},"the ",[324,1592,1434],{}," plugin is present",[832,1595,1596,1597,1599,1600,335],{},"Runs JUnit Platform tests tagged ",[324,1598,1420],{}," (Docker \u002F Testcontainers). Runs after ",[324,1601,1413],{},[811,1603,1604,1609,1614,1619],{},[832,1605,1606],{},[324,1607,1608],{},"copyStoatFlowEntrypoint",[832,1610,1611],{},[845,1612,1613],{},"(none)",[832,1615,1616],{},[324,1617,1618],{},"docker.enabled = true",[832,1620,1621,1622,1625],{},"Stages the container-aware heap entrypoint into the Jib extra directory. All ",[324,1623,1624],{},"jib*"," tasks depend on it.",[811,1627,1628,1639,1641,1646],{},[832,1629,1630,1349,1633,1349,1636],{},[324,1631,1632],{},"jib",[324,1634,1635],{},"jibDockerBuild",[324,1637,1638],{},"jibBuildTar",[832,1640,874],{},[832,1642,1643,1645],{},[324,1644,1618],{}," (from Jib)",[832,1647,1648,1649,1651],{},"Build the image. ",[324,1650,1635],{}," targets the local Docker daemon.",[811,1653,1654,1658,1661,1666],{},[832,1655,1656],{},[324,1657,1178],{},[832,1659,1660],{},"build",[832,1662,1663],{},[324,1664,1665],{},"nativeImage.enabled = true",[832,1667,1668,1669,1672,1673,1676,1677,1680,1681,341,1684,335],{},"Builds a native image ",[1069,1670,1671],{},"inside Docker"," from the prebuilt fat JAR, against the bundled generic ",[324,1674,1675],{},"Dockerfile.native"," (staged into ",[324,1678,1679],{},"build\u002Fstoatflow-native\u002F","). Tags ",[324,1682,1683],{},"\u003CimageName>:native",[324,1685,1686],{},"\u003CimageName>:\u003Cversion>-native",[811,1688,1689,1697,1699,1704],{},[832,1690,1691,1349,1694],{},[324,1692,1693],{},"nativeCompile",[324,1695,1696],{},"nativeRun",[832,1698,874],{},[832,1700,1701,1703],{},[324,1702,1665],{}," (from GraalVM)",[832,1705,1706],{},"Build \u002F run the native image directly on the host GraalVM toolchain.",[1708,1709,1712],"callout",{"color":1710,"icon":1711},"info","i-lucide-info",[320,1713,1714,341,1717,1720,1721,1724,1725,1727,1728,1730,1731,1733,1734,335],{},[324,1715,1716],{},"docker.enabled",[324,1718,1719],{},"nativeImage.enabled"," are read in a single ",[324,1722,1723],{},"afterEvaluate"," (the only deferral the plugin needs), because they're set in the build-script body — the Jib and GraalVM plugins are applied only when the corresponding flag is ",[324,1726,527],{},". ",[324,1729,836],{}," and the ShadowJar ",[324,1732,860],{}," are wired as lazy providers, not in ",[324,1735,1723],{},[467,1737,1739],{"id":1738},"docker-image-defaults","Docker image defaults",[320,1741,932,1742,1744],{},[324,1743,1618],{},", the Jib build is configured with:",[805,1746,1747,1757],{},[808,1748,1749],{},[811,1750,1751,1754],{},[814,1752,1753],{},"Aspect",[814,1755,1756],{},"Value",[827,1758,1759,1770,1788,1806,1819,1830,1840,1851,1862,1876,1889],{},[811,1760,1761,1764],{},[832,1762,1763],{},"Base image",[832,1765,1766,1478,1768,1482],{},[324,1767,1009],{},[324,1769,1018],{},[811,1771,1772,1775],{},[832,1773,1774],{},"Platform",[832,1776,1777,1780,1781,1784,1785],{},[324,1778,1779],{},"linux\u002Farm64"," on ",[324,1782,1783],{},"aarch64"," hosts, otherwise ",[324,1786,1787],{},"linux\u002Famd64",[811,1789,1790,1793],{},[832,1791,1792],{},"Target image",[832,1794,1795,1797,1798,1800,1801,341,1803],{},[324,1796,942],{}," (or ",[324,1799,951],{},"), tagged ",[324,1802,957],{},[324,1804,1805],{},"project.version",[811,1807,1808,1812],{},[832,1809,1810],{},[324,1811,1097],{},[832,1813,1814,1815,1818],{},"HEAD commit timestamp when ",[324,1816,1817],{},"reproducibleBuild = true"," (default), else wall-clock",[811,1820,1821,1824],{},[832,1822,1823],{},"Entrypoint",[832,1825,1826,1829],{},[324,1827,1828],{},"\u002Fapp\u002Fstoatflow-entrypoint.sh"," (bundled container-aware heap script)",[811,1831,1832,1835],{},[832,1833,1834],{},"Working directory",[832,1836,1837],{},[324,1838,1839],{},"\u002Fapp",[811,1841,1842,1845],{},[832,1843,1844],{},"Exposed port",[832,1846,1847,1478,1849,1482],{},[324,1848,967],{},[324,1850,564],{},[811,1852,1853,1856],{},[832,1854,1855],{},"User",[832,1857,1858,1478,1860,1482],{},[324,1859,986],{},[324,1861,995],{},[811,1863,1864,1867],{},[832,1865,1866],{},"JVM flags",[832,1868,1869,1349,1871,1873,1874],{},[324,1870,1131],{},[324,1872,1134],{},", + ",[324,1875,1477],{},[811,1877,1878,1883],{},[832,1879,1880,1881],{},"Env: ",[324,1882,1043],{},[832,1884,1885,1478,1887,1482],{},[324,1886,1028],{},[324,1888,1037],{},[811,1890,1891,1895],{},[832,1892,1880,1893],{},[324,1894,1066],{},[832,1896,1897,1899,1900,1902],{},[324,1898,1051],{},", or ",[324,1901,638],{}," when RocksDB is auto-detected on the runtime classpath (omitted otherwise)",[1708,1904,1906],{"color":1905,"icon":80},"warning",[320,1907,1908,1911,1912,1914,1915,1917,1918,335],{},[1069,1909,1910],{},"Configuration cache."," The plugin is configuration-cache clean for the plain and native paths. ",[324,1913,1635],{}," is ",[1069,1916,1390],{}," CC-compatible — an upstream jib-gradle-plugin limitation, not StoatFlow's. Run docker builds without ",[324,1919,1920],{},"--configuration-cache",[320,1922,1923,1924,1927],{},"See ",[333,1925,1926],{"href":211},"Docker"," for the full container guide.",[467,1929,1931],{"id":1930},"native-image-defaults","Native image defaults",[320,1933,932,1934,1936,1937,1940,1941,1943],{},[324,1935,1665],{},", the GraalVM build is configured from the bundled ",[324,1938,1939],{},"native-image.args"," (the single source of truth, identical for Gradle, Maven, and the containerized build), plus the dynamic ",[324,1942,1186],{}," \u002F add \u002F remove deltas:",[805,1945,1946,1954],{},[808,1947,1948],{},[811,1949,1950,1952],{},[814,1951,1753],{},[814,1953,1756],{},[827,1955,1956,1963,1992,2021,2035,2046],{},[811,1957,1958,1961],{},[832,1959,1960],{},"Toolchain detection",[832,1962,919],{},[811,1964,1965,1968],{},[832,1966,1967],{},"Static build args",[832,1969,1970,1349,1973,1349,1976,1979,1980,1349,1983,1986,1987,1349,1989],{},[324,1971,1972],{},"-H:+JNI",[324,1974,1975],{},"-H:+ReportExceptionStackTraces",[324,1977,1978],{},"-H:+AddAllCharsets",", the Kotlin resource includes (",[324,1981,1982],{},"*.kotlin_builtins",[324,1984,1985],{},"META-INF\u002F*.kotlin_module","), ",[324,1988,1131],{},[324,1990,1991],{},"--no-fallback",[811,1993,1994,1998],{},[832,1995,1996],{},[324,1997,1267],{},[832,1999,2000,1349,2003,1349,2006,1349,2009,1349,2012,2015,2016,2018,2019],{},[324,2001,2002],{},"org.rocksdb",[324,2004,2005],{},"org.rocksdb.RocksDB",[324,2007,2008],{},"org.rocksdb.util.Environment",[324,2010,2011],{},"io.stoatflow.core.state.rocksdb.backend.ffm.FfmRocksDbNative",[324,2013,2014],{},"org.apache.kafka.common.security.authenticator.SaslClientAuthenticator"," — plus ",[324,2017,1248],{},", minus ",[324,2020,1275],{},[811,2022,2023,2028],{},[832,2024,2025],{},[324,2026,2027],{},"--gc",[832,2029,2030,2031,2034],{},"added only when ",[324,2032,2033],{},"nativeImage { gc }"," is set",[811,2036,2037,2042],{},[832,2038,2039],{},[324,2040,2041],{},"SOURCE_DATE_EPOCH",[832,2043,1814,2044],{},[324,2045,1817],{},[811,2047,2048,2051],{},[832,2049,2050],{},"Runtime stage",[832,2052,2053,2055,2056,1478,2058,1482],{},[324,2054,1233],{}," from ",[324,2057,1215],{},[324,2059,1224],{},[320,2061,322,2062,2064,2065,341,2067,2069,2070,2073],{},[324,2063,1178],{}," task tags the resulting image ",[324,2066,1683],{},[324,2068,1686],{},". See ",[333,2071,2072],{"href":216},"Native image"," for the full guide.",[467,2075,2077],{"id":2076},"version-compatibility","Version compatibility",[320,2079,2080,2081,2083],{},"The plugin pins the build tools it bundles. As of ",[459,2082],{}," the pins are:",[805,2085,2086,2096],{},[808,2087,2088],{},[811,2089,2090,2093],{},[814,2091,2092],{},"Tool",[814,2094,2095],{},"Version",[827,2097,2098,2106,2116,2127,2138],{},[811,2099,2100,2103],{},[832,2101,2102],{},"Gradle",[832,2104,2105],{},"9.5+ (developed and tested on 9.6.1)",[811,2107,2108,2113],{},[832,2109,2110,2111,1482],{},"Shadow (",[324,2112,1338],{},[832,2114,2115],{},"9.4.3",[811,2117,2118,2124],{},[832,2119,2120,2121,1482],{},"Jib (",[324,2122,2123],{},"com.google.cloud.tools.jib",[832,2125,2126],{},"3.5.2",[811,2128,2129,2135],{},[832,2130,2131,2132,1482],{},"GraalVM Native (",[324,2133,2134],{},"org.graalvm.buildtools.native",[832,2136,2137],{},"1.1.3",[811,2139,2140,2143],{},[832,2141,2142],{},"Kotlin Gradle plugin",[832,2144,2145],{},"2.4.0 (you bring your own; the plugin doesn't bundle it)",[467,2147,2149],{"id":2148},"related","Related",[2151,2152,2153,2159,2164,2169],"ul",{},[2154,2155,2156,2158],"li",{},[333,2157,33],{"href":34}," — applying the conventions in a fresh project (Gradle or Maven).",[2154,2160,2161,2163],{},[333,2162,296],{"href":297}," — the same conventions for Maven projects.",[2154,2165,2166,2168],{},[333,2167,1926],{"href":211}," — building and running the container image.",[2154,2170,2171,2173],{},[333,2172,2072],{"href":216}," — ahead-of-time compilation with GraalVM.",[2175,2176,2177],"style",{},"html pre.shiki code .s8zF2, html code.shiki .s8zF2{--shiki-default:#A0ADA0}html pre.shiki code .sySUi, html code.shiki .sySUi{--shiki-default:#59873A}html pre.shiki code .suHK_, html code.shiki .suHK_{--shiki-default:#393A34}html pre.shiki code .spphp, html code.shiki .spphp{--shiki-default:#B56959}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sbBg2, html code.shiki .sbBg2{--shiki-default:#1E754F}html pre.shiki code .s-TwI, html code.shiki .s-TwI{--shiki-default:#2F798A}",{"title":351,"searchDepth":365,"depth":365,"links":2179},[2180,2185,2188,2189,2190,2191,2192],{"id":469,"depth":365,"text":470,"children":2181},[2182,2183,2184],{"id":430,"depth":376,"text":330},{"id":894,"depth":376,"text":868},{"id":1138,"depth":376,"text":884},{"id":1296,"depth":365,"text":1297,"children":2186},[2187],{"id":1444,"depth":376,"text":1445},{"id":1516,"depth":365,"text":1517},{"id":1738,"depth":365,"text":1739},{"id":1930,"depth":365,"text":1931},{"id":2076,"depth":365,"text":2077},{"id":2148,"depth":365,"text":2149},"The io.stoatflow convention plugin — the full stoatflow { } extension DSL, the plugins and JVM flags it applies, the tasks it contributes, and the Docker and native-image defaults.","md",{},{"icon":294},"reference",{"title":291,"description":2193},"iw4SPeADiZ7vP7o7QmTNvIDnQpDhCdRYH468UpR5CfI",[2201,2203],{"title":286,"path":287,"stem":288,"description":2202,"icon":289,"children":-1},"Every HTTP endpoint the StoatFlow runtime exposes — path, method, purpose, response shape, content negotiation, status codes, and gating.",{"title":296,"path":297,"stem":298,"description":2204,"icon":299,"children":-1},"StoatFlow's Maven support — the stoatflow-bom, the stoatflow-parent convention POM, and the stoatflow-maven-plugin. The three artifacts, every \u003Cproperties> key, the four goals, and the pinned plugin versions.",1783713364567]