[{"data":1,"prerenderedAt":1334},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fgetting-started\u002Finstallation":38,"\u002Fdocs\u002Fgetting-started\u002Finstallation-surround":1329},[4],{"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},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","1.docs\u002F1.getting-started\u002F2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"License configuration","\u002Fdocs\u002Fgetting-started\u002Flicense-configuration","1.docs\u002F1.getting-started\u002F3.license-configuration","i-lucide-key-round",{"title":23,"path":24,"stem":25,"icon":26},"Your first app","\u002Fdocs\u002Fgetting-started\u002Ffirst-app","1.docs\u002F1.getting-started\u002F4.first-app","i-lucide-square-play",{"title":28,"path":29,"stem":30,"icon":31},"Architecture","\u002Fdocs\u002Fgetting-started\u002Farchitecture","1.docs\u002F1.getting-started\u002F5.architecture","i-lucide-layers",{"title":33,"path":34,"stem":35,"icon":36},"Migrating from Kafka Streams","\u002Fdocs\u002Fgetting-started\u002Fmigration","1.docs\u002F1.getting-started\u002F6.migration","i-lucide-shuffle",false,{"id":39,"title":13,"body":40,"description":1323,"extension":1324,"meta":1325,"navigation":1326,"path":14,"seo":1327,"stem":15,"__hash__":1328},"docs\u002F1.docs\u002F1.getting-started\u002F2.installation.md",{"type":41,"value":42,"toc":1309},"minimark",[43,56,111,116,156,176,180,186,241,246,345,349,540,558,562,580,725,766,770,781,802,809,820,830,946,952,1040,1044,1047,1272,1276,1305],[44,45,46,47,51,52,55],"p",{},"This guide gets your build ready to use StoatFlow: wire up the private Maven repository with your credentials, add the dependency, and configure the JVM toolchain. Then ",[48,49,50],"a",{"href":19},"configure your license"," and ",[48,53,54],{"href":24},"build your first app",".",[57,58,59],"tldr-panel",{},[60,61,62,70,81,94],"ul",{},[63,64,65,69],"li",{},[66,67,68],"strong",{},"Prerequisites:"," JDK 25+, a reachable Kafka 4.x cluster, and your onboarding email (Maven token + license key).",[63,71,72,75,76,80],{},[66,73,74],{},"Repo:"," ",[77,78,79],"code",{},"https:\u002F\u002Fmaven.stoatflow.io\u002Freleases",", authenticated with the read-only token from your onboarding email.",[63,82,83,75,86,89,90,93],{},[66,84,85],{},"Dependency:",[77,87,88],{},"io.stoatflow:stoatflow-runtime"," (batteries-included) or ",[77,91,92],{},"io.stoatflow:stoatflow-core"," (DSL only).",[63,95,96,99,100,51,103,106,107,110],{},[66,97,98],{},"Run:"," needs the ",[77,101,102],{},"--enable-preview",[77,104,105],{},"--enable-native-access=ALL-UNNAMED"," JVM flags — the ",[77,108,109],{},"io.stoatflow"," Gradle plugin sets them for you.",[112,113,115],"h2",{"id":114},"prerequisites","Prerequisites",[60,117,118,124,134],{},[63,119,120,123],{},[66,121,122],{},"JDK 25 or newer."," StoatFlow uses JDK preview features (virtual threads, structured concurrency), so a 25+ toolchain is mandatory — not just for building, but at runtime.",[63,125,126,129,130,133],{},[66,127,128],{},"Apache Kafka 4.x",", reachable from where you run the app. For local development the quickest option is a single-node KRaft broker via Docker (",[77,131,132],{},"localhost:9092",").",[63,135,136,139,140,143,144,147,148,151,152,55],{},[66,137,138],{},"Your onboarding email."," It contains your read-only Maven ",[66,141,142],{},"token"," (username ",[77,145,146],{},"customer-\u003Cyour-slug>"," + secret) and your ",[66,149,150],{},"license key",". Don't have one yet? ",[48,153,155],{"href":154},"\u002Fcontact","Get in touch",[157,158,161],"callout",{"color":159,"icon":160},"warning","i-lucide-shield",[44,162,163,164,167,168,171,172,175],{},"Treat the Maven token and license key as secrets. The steps below keep them in your ",[66,165,166],{},"home directory"," (",[77,169,170],{},"~\u002F.gradle\u002Fgradle.properties",", ",[77,173,174],{},"~\u002F.m2\u002Fsettings.xml","), never in a file you commit.",[112,177,179],{"id":178},"_1-register-the-private-maven-repository","1. Register the private Maven repository",[44,181,182,183,185],{},"StoatFlow artifacts are served from a private, authenticated repository at ",[77,184,79],{},". You can wire it up two ways — directly on each developer machine (below), or once through your corporate artifact manager.",[157,187,190,195,209,235],{"color":188,"icon":189},"info","i-lucide-building-2",[44,191,192],{},[66,193,194],{},"Corporate environments — proxy it through your artifact manager.",[44,196,197,198,200,201,204,205,208],{},"If your organisation runs a central repository (JFrog Artifactory, Sonatype Nexus, or similar), add ",[77,199,79],{}," as a ",[66,202,203],{},"remote \u002F proxy repository"," and surface it through the ",[66,206,207],{},"virtual (group) repository"," your developers already resolve against. That way:",[60,210,211,218,225],{},[63,212,213,214,217],{},"your StoatFlow token is configured ",[66,215,216],{},"once",", centrally — never copied onto individual machines;",[63,219,220,221,224],{},"developers need ",[66,222,223],{},"no local credentials and no build changes"," — they resolve through the corporate repo exactly as they do today;",[63,226,227,228,230,231,234],{},"dependencies (and the ",[77,229,109],{}," Gradle plugin) ",[66,232,233],{},"pull through and cache"," via the proxy, with authentication handled there.",[44,236,237,240],{},[66,238,239],{},"Trial vs. production:"," the per-developer setup below is the fastest way to start a trial. Once you've agreed a contract and are moving toward production, switch to the corporate-proxy setup.",[242,243,245],"h3",{"id":244},"store-your-credentials","Store your credentials",[247,248,250,280],"code-tabs",{"group":249},"build",[251,252,258],"pre",{"className":253,"code":254,"filename":255,"language":256,"meta":257,"style":257},"language-properties shiki shiki-themes vitesse-light","# ~\u002F.gradle\u002Fgradle.properties   — your HOME dir, never committed\nstoatflowRepoUser=customer-your-slug\nstoatflowRepoToken=PASTE_YOUR_MAVEN_TOKEN_FROM_THE_ONBOARDING_EMAIL\n","Gradle","properties","",[77,259,260,268,274],{"__ignoreMap":257},[261,262,265],"span",{"class":263,"line":264},"line",1,[261,266,267],{},"# ~\u002F.gradle\u002Fgradle.properties   — your HOME dir, never committed\n",[261,269,271],{"class":263,"line":270},2,[261,272,273],{},"stoatflowRepoUser=customer-your-slug\n",[261,275,277],{"class":263,"line":276},3,[261,278,279],{},"stoatflowRepoToken=PASTE_YOUR_MAVEN_TOKEN_FROM_THE_ONBOARDING_EMAIL\n",[251,281,286],{"className":282,"code":283,"filename":284,"language":285,"meta":257,"style":257},"language-xml shiki shiki-themes vitesse-light","\u003C!-- ~\u002F.m2\u002Fsettings.xml   — your HOME dir, never committed -->\n\u003Csettings>\n  \u003Cservers>\n    \u003Cserver>\n      \u003Cid>stoatflow-releases\u003C\u002Fid>\n      \u003Cusername>customer-your-slug\u003C\u002Fusername>\n      \u003Cpassword>PASTE_YOUR_MAVEN_TOKEN_FROM_THE_ONBOARDING_EMAIL\u003C\u002Fpassword>\n    \u003C\u002Fserver>\n  \u003C\u002Fservers>\n\u003C\u002Fsettings>\n","Maven","xml",[77,287,288,293,298,303,309,315,321,327,333,339],{"__ignoreMap":257},[261,289,290],{"class":263,"line":264},[261,291,292],{},"\u003C!-- ~\u002F.m2\u002Fsettings.xml   — your HOME dir, never committed -->\n",[261,294,295],{"class":263,"line":270},[261,296,297],{},"\u003Csettings>\n",[261,299,300],{"class":263,"line":276},[261,301,302],{},"  \u003Cservers>\n",[261,304,306],{"class":263,"line":305},4,[261,307,308],{},"    \u003Cserver>\n",[261,310,312],{"class":263,"line":311},5,[261,313,314],{},"      \u003Cid>stoatflow-releases\u003C\u002Fid>\n",[261,316,318],{"class":263,"line":317},6,[261,319,320],{},"      \u003Cusername>customer-your-slug\u003C\u002Fusername>\n",[261,322,324],{"class":263,"line":323},7,[261,325,326],{},"      \u003Cpassword>PASTE_YOUR_MAVEN_TOKEN_FROM_THE_ONBOARDING_EMAIL\u003C\u002Fpassword>\n",[261,328,330],{"class":263,"line":329},8,[261,331,332],{},"    \u003C\u002Fserver>\n",[261,334,336],{"class":263,"line":335},9,[261,337,338],{},"  \u003C\u002Fservers>\n",[261,340,342],{"class":263,"line":341},10,[261,343,344],{},"\u003C\u002Fsettings>\n",[242,346,348],{"id":347},"point-your-build-at-the-repository","Point your build at the repository",[247,350,351,495],{"group":249},[251,352,356],{"className":353,"code":354,"filename":255,"language":355,"meta":257,"style":257},"language-kotlin shiki shiki-themes vitesse-light","\u002F\u002F settings.gradle.kts\ndependencyResolutionManagement {\n    repositories {\n        mavenCentral()\n        maven {\n            url = uri(\"https:\u002F\u002Fmaven.stoatflow.io\u002Freleases\")\n            credentials {\n                username = providers.gradleProperty(\"stoatflowRepoUser\").get()\n                password = providers.gradleProperty(\"stoatflowRepoToken\").get()\n            }\n        }\n    }\n}\n","kotlin",[77,357,358,364,374,381,389,396,418,425,450,472,477,483,489],{"__ignoreMap":257},[261,359,360],{"class":263,"line":264},[261,361,363],{"class":362},"s8zF2","\u002F\u002F settings.gradle.kts\n",[261,365,366,370],{"class":263,"line":270},[261,367,369],{"class":368},"sySUi","dependencyResolutionManagement",[261,371,373],{"class":372},"suHK_"," {\n",[261,375,376,379],{"class":263,"line":276},[261,377,378],{"class":368},"    repositories",[261,380,373],{"class":372},[261,382,383,386],{"class":263,"line":305},[261,384,385],{"class":368},"        mavenCentral",[261,387,388],{"class":372},"()\n",[261,390,391,394],{"class":263,"line":311},[261,392,393],{"class":368},"        maven",[261,395,373],{"class":372},[261,397,398,401,405,408,411,415],{"class":263,"line":317},[261,399,400],{"class":372},"            url ",[261,402,404],{"class":403},"sYZai","=",[261,406,407],{"class":368}," uri",[261,409,410],{"class":372},"(",[261,412,414],{"class":413},"spphp","\"https:\u002F\u002Fmaven.stoatflow.io\u002Freleases\"",[261,416,417],{"class":372},")\n",[261,419,420,423],{"class":263,"line":323},[261,421,422],{"class":368},"            credentials",[261,424,373],{"class":372},[261,426,427,430,432,435,438,440,443,445,448],{"class":263,"line":329},[261,428,429],{"class":372},"                username ",[261,431,404],{"class":403},[261,433,434],{"class":372}," providers.",[261,436,437],{"class":368},"gradleProperty",[261,439,410],{"class":372},[261,441,442],{"class":413},"\"stoatflowRepoUser\"",[261,444,133],{"class":372},[261,446,447],{"class":368},"get",[261,449,388],{"class":372},[261,451,452,455,457,459,461,463,466,468,470],{"class":263,"line":335},[261,453,454],{"class":372},"                password ",[261,456,404],{"class":403},[261,458,434],{"class":372},[261,460,437],{"class":368},[261,462,410],{"class":372},[261,464,465],{"class":413},"\"stoatflowRepoToken\"",[261,467,133],{"class":372},[261,469,447],{"class":368},[261,471,388],{"class":372},[261,473,474],{"class":263,"line":341},[261,475,476],{"class":372},"            }\n",[261,478,480],{"class":263,"line":479},11,[261,481,482],{"class":372},"        }\n",[261,484,486],{"class":263,"line":485},12,[261,487,488],{"class":372},"    }\n",[261,490,492],{"class":263,"line":491},13,[261,493,494],{"class":372},"}\n",[251,496,498],{"className":282,"code":497,"filename":284,"language":285,"meta":257,"style":257},"\u003C!-- pom.xml -->\n\u003Crepositories>\n  \u003Crepository>\n    \u003Cid>stoatflow-releases\u003C\u002Fid>\n    \u003Curl>https:\u002F\u002Fmaven.stoatflow.io\u002Freleases\u003C\u002Furl>\n    \u003Creleases>\u003Cenabled>true\u003C\u002Fenabled>\u003C\u002Freleases>\n  \u003C\u002Frepository>\n\u003C\u002Frepositories>\n",[77,499,500,505,510,515,520,525,530,535],{"__ignoreMap":257},[261,501,502],{"class":263,"line":264},[261,503,504],{},"\u003C!-- pom.xml -->\n",[261,506,507],{"class":263,"line":270},[261,508,509],{},"\u003Crepositories>\n",[261,511,512],{"class":263,"line":276},[261,513,514],{},"  \u003Crepository>\n",[261,516,517],{"class":263,"line":305},[261,518,519],{},"    \u003Cid>stoatflow-releases\u003C\u002Fid>\n",[261,521,522],{"class":263,"line":311},[261,523,524],{},"    \u003Curl>https:\u002F\u002Fmaven.stoatflow.io\u002Freleases\u003C\u002Furl>\n",[261,526,527],{"class":263,"line":317},[261,528,529],{},"    \u003Creleases>\u003Cenabled>true\u003C\u002Fenabled>\u003C\u002Freleases>\n",[261,531,532],{"class":263,"line":323},[261,533,534],{},"  \u003C\u002Frepository>\n",[261,536,537],{"class":263,"line":329},[261,538,539],{},"\u003C\u002Frepositories>\n",[44,541,542,543,546,547,550,551,546,554,557],{},"The ",[77,544,545],{},"\u003Cid>"," in ",[77,548,549],{},"pom.xml"," must match the ",[77,552,553],{},"\u003Cserver>\u003Cid>",[77,555,556],{},"settings.xml"," — that's how Maven applies your credentials.",[112,559,561],{"id":560},"_2-add-the-dependency","2. Add the dependency",[44,563,564,565,570,571,574,575,579],{},"Most applications want ",[66,566,567],{},[77,568,569],{},"stoatflow-runtime"," — the batteries-included wrapper (YAML config, HTTP admin + health endpoints, Prometheus metrics, graceful shutdown). It transitively pulls in ",[77,572,573],{},"stoatflow-core",", so it's the only dependency you need. If you want just the DSL and engine with no runtime scaffolding, depend on ",[66,576,577],{},[77,578,573],{}," instead.",[247,581,582,648],{"group":249},[251,583,585],{"className":353,"code":584,"filename":255,"language":355,"meta":257,"style":257},"\u002F\u002F build.gradle.kts\ndependencies {\n    implementation(\"io.stoatflow:stoatflow-runtime:$stoatflowVersion\")\n    \u002F\u002F ...or DSL only:\n    \u002F\u002F implementation(\"io.stoatflow:stoatflow-core:$stoatflowVersion\")\n\n    \u002F\u002F In-memory topology testing (no broker required):\n    testImplementation(\"io.stoatflow:stoatflow-test-utils:$stoatflowVersion\")\n}\n",[77,586,587,592,599,611,616,621,627,632,644],{"__ignoreMap":257},[261,588,589],{"class":263,"line":264},[261,590,591],{"class":362},"\u002F\u002F build.gradle.kts\n",[261,593,594,597],{"class":263,"line":270},[261,595,596],{"class":368},"dependencies",[261,598,373],{"class":372},[261,600,601,604,606,609],{"class":263,"line":276},[261,602,603],{"class":368},"    implementation",[261,605,410],{"class":372},[261,607,608],{"class":413},"\"io.stoatflow:stoatflow-runtime:$stoatflowVersion\"",[261,610,417],{"class":372},[261,612,613],{"class":263,"line":305},[261,614,615],{"class":362},"    \u002F\u002F ...or DSL only:\n",[261,617,618],{"class":263,"line":311},[261,619,620],{"class":362},"    \u002F\u002F implementation(\"io.stoatflow:stoatflow-core:$stoatflowVersion\")\n",[261,622,623],{"class":263,"line":317},[261,624,626],{"emptyLinePlaceholder":625},true,"\n",[261,628,629],{"class":263,"line":323},[261,630,631],{"class":362},"    \u002F\u002F In-memory topology testing (no broker required):\n",[261,633,634,637,639,642],{"class":263,"line":329},[261,635,636],{"class":368},"    testImplementation",[261,638,410],{"class":372},[261,640,641],{"class":413},"\"io.stoatflow:stoatflow-test-utils:$stoatflowVersion\"",[261,643,417],{"class":372},[261,645,646],{"class":263,"line":335},[261,647,494],{"class":372},[251,649,651],{"className":282,"code":650,"filename":284,"language":285,"meta":257,"style":257},"\u003C!-- pom.xml -->\n\u003Cdependencies>\n  \u003Cdependency>\n    \u003CgroupId>io.stoatflow\u003C\u002FgroupId>\n    \u003CartifactId>stoatflow-runtime\u003C\u002FartifactId>\n    \u003Cversion>${stoatflow.version}\u003C\u002Fversion>\n  \u003C\u002Fdependency>\n  \u003C!-- In-memory topology testing (no broker required): -->\n  \u003Cdependency>\n    \u003CgroupId>io.stoatflow\u003C\u002FgroupId>\n    \u003CartifactId>stoatflow-test-utils\u003C\u002FartifactId>\n    \u003Cversion>${stoatflow.version}\u003C\u002Fversion>\n    \u003Cscope>test\u003C\u002Fscope>\n  \u003C\u002Fdependency>\n\u003C\u002Fdependencies>\n",[77,652,653,657,662,667,672,677,682,687,692,696,700,705,709,714,719],{"__ignoreMap":257},[261,654,655],{"class":263,"line":264},[261,656,504],{},[261,658,659],{"class":263,"line":270},[261,660,661],{},"\u003Cdependencies>\n",[261,663,664],{"class":263,"line":276},[261,665,666],{},"  \u003Cdependency>\n",[261,668,669],{"class":263,"line":305},[261,670,671],{},"    \u003CgroupId>io.stoatflow\u003C\u002FgroupId>\n",[261,673,674],{"class":263,"line":311},[261,675,676],{},"    \u003CartifactId>stoatflow-runtime\u003C\u002FartifactId>\n",[261,678,679],{"class":263,"line":317},[261,680,681],{},"    \u003Cversion>${stoatflow.version}\u003C\u002Fversion>\n",[261,683,684],{"class":263,"line":323},[261,685,686],{},"  \u003C\u002Fdependency>\n",[261,688,689],{"class":263,"line":329},[261,690,691],{},"  \u003C!-- In-memory topology testing (no broker required): -->\n",[261,693,694],{"class":263,"line":335},[261,695,666],{},[261,697,698],{"class":263,"line":341},[261,699,671],{},[261,701,702],{"class":263,"line":479},[261,703,704],{},"    \u003CartifactId>stoatflow-test-utils\u003C\u002FartifactId>\n",[261,706,707],{"class":263,"line":485},[261,708,681],{},[261,710,711],{"class":263,"line":491},[261,712,713],{},"    \u003Cscope>test\u003C\u002Fscope>\n",[261,715,717],{"class":263,"line":716},14,[261,718,686],{},[261,720,722],{"class":263,"line":721},15,[261,723,724],{},"\u003C\u002Fdependencies>\n",[157,726,728],{"color":188,"icon":727},"i-lucide-info",[44,729,730,731,734,735,738,739,546,742,745,746,546,749,751,752,171,754,171,756,759,760,763,764,55],{},"StoatFlow is in ",[66,732,733],{},"alpha",". The current version is ",[736,737],"stoatflow-version",{}," — set it as ",[77,740,741],{},"stoatflowVersion",[77,743,744],{},"gradle.properties"," (or ",[77,747,748],{},"\u003Cstoatflow.version>",[77,750,549],{},"), or use the exact version from your onboarding email if it differs. The published modules are ",[77,753,573],{},[77,755,569],{},[77,757,758],{},"stoatflow-test-utils",", and ",[77,761,762],{},"stoatflow-test-runtime",", all under group ",[77,765,109],{},[112,767,769],{"id":768},"_3-configure-the-jvm-toolchain","3. Configure the JVM toolchain",[44,771,772,773,776,777,780],{},"StoatFlow needs a ",[66,774,775],{},"JDK 25 toolchain"," and two JVM flags at ",[66,778,779],{},"both compile and run time",":",[60,782,783,788,793],{},[63,784,785,787],{},[77,786,102],{}," — StoatFlow is built on JDK preview features.",[63,789,790,792],{},[77,791,105],{}," — RocksDB's state store uses the Foreign Function & Memory API.",[63,794,795,798,799,801],{},[77,796,797],{},"-XX:+UseG1GC"," keeps GC pauses short and predictable — which matters for stream processing, where a long stop-the-world pause stalls commit barriers and inflates end-to-end latency. The JVM only auto-selects G1 on \"server-class\" hardware (≥ 2 CPUs and ≥ ~2 GB of memory), falling back to the single-threaded Serial collector below that — so set it explicitly to get consistent pause behaviour even on a single core or a small container. (The ",[77,800,109],{}," Gradle plugin already applies this flag to the Docker image it builds.)",[242,803,805,806,808],{"id":804},"option-a-the-iostoatflow-gradle-plugin-recommended","Option A — the ",[77,807,109],{}," Gradle plugin (recommended)",[44,810,811,812,815,816,819],{},"The convention plugin applies the JDK 25 toolchain, the preview + native-access JVM args (compile, test, and run), and a runnable fat-jar (",[77,813,814],{},"shadow",") — so you don't hand-maintain any of it. It's ",[66,817,818],{},"Gradle-only"," (Maven projects use Option B).",[44,821,822,823,826,827,780],{},"Add a ",[77,824,825],{},"pluginManagement"," repository for the plugin marker in ",[77,828,829],{},"settings.gradle.kts",[251,831,833],{"className":353,"code":832,"language":355,"meta":257,"style":257},"\u002F\u002F settings.gradle.kts\npluginManagement {\n    repositories {\n        gradlePluginPortal()\n        mavenCentral()\n        maven {\n            url = uri(\"https:\u002F\u002Fmaven.stoatflow.io\u002Freleases\")\n            credentials {\n                username = providers.gradleProperty(\"stoatflowRepoUser\").get()\n                password = providers.gradleProperty(\"stoatflowRepoToken\").get()\n            }\n        }\n    }\n}\n",[77,834,835,839,845,851,858,864,870,884,890,910,930,934,938,942],{"__ignoreMap":257},[261,836,837],{"class":263,"line":264},[261,838,363],{"class":362},[261,840,841,843],{"class":263,"line":270},[261,842,825],{"class":368},[261,844,373],{"class":372},[261,846,847,849],{"class":263,"line":276},[261,848,378],{"class":368},[261,850,373],{"class":372},[261,852,853,856],{"class":263,"line":305},[261,854,855],{"class":368},"        gradlePluginPortal",[261,857,388],{"class":372},[261,859,860,862],{"class":263,"line":311},[261,861,385],{"class":368},[261,863,388],{"class":372},[261,865,866,868],{"class":263,"line":317},[261,867,393],{"class":368},[261,869,373],{"class":372},[261,871,872,874,876,878,880,882],{"class":263,"line":323},[261,873,400],{"class":372},[261,875,404],{"class":403},[261,877,407],{"class":368},[261,879,410],{"class":372},[261,881,414],{"class":413},[261,883,417],{"class":372},[261,885,886,888],{"class":263,"line":329},[261,887,422],{"class":368},[261,889,373],{"class":372},[261,891,892,894,896,898,900,902,904,906,908],{"class":263,"line":335},[261,893,429],{"class":372},[261,895,404],{"class":403},[261,897,434],{"class":372},[261,899,437],{"class":368},[261,901,410],{"class":372},[261,903,442],{"class":413},[261,905,133],{"class":372},[261,907,447],{"class":368},[261,909,388],{"class":372},[261,911,912,914,916,918,920,922,924,926,928],{"class":263,"line":341},[261,913,454],{"class":372},[261,915,404],{"class":403},[261,917,434],{"class":372},[261,919,437],{"class":368},[261,921,410],{"class":372},[261,923,465],{"class":413},[261,925,133],{"class":372},[261,927,447],{"class":368},[261,929,388],{"class":372},[261,931,932],{"class":263,"line":479},[261,933,476],{"class":372},[261,935,936],{"class":263,"line":485},[261,937,482],{"class":372},[261,939,940],{"class":263,"line":491},[261,941,488],{"class":372},[261,943,944],{"class":263,"line":716},[261,945,494],{"class":372},[44,947,948,949,780],{},"Then apply it in ",[77,950,951],{},"build.gradle.kts",[251,953,955],{"className":353,"code":954,"language":355,"meta":257,"style":257},"\u002F\u002F build.gradle.kts\nplugins {\n    kotlin(\"jvm\") version \"2.3.21\"   \u002F\u002F omit for a Java-only project\n    id(\"io.stoatflow\") version \"$stoatflowVersion\"\n}\n\nstoatflow {\n    mainClass.set(\"com.example.MainKt\")  \u002F\u002F your application entry point\n}\n",[77,956,957,961,968,987,1002,1006,1010,1017,1036],{"__ignoreMap":257},[261,958,959],{"class":263,"line":264},[261,960,591],{"class":362},[261,962,963,966],{"class":263,"line":270},[261,964,965],{"class":368},"plugins",[261,967,373],{"class":372},[261,969,970,973,975,978,981,984],{"class":263,"line":276},[261,971,972],{"class":368},"    kotlin",[261,974,410],{"class":372},[261,976,977],{"class":413},"\"jvm\"",[261,979,980],{"class":372},") version ",[261,982,983],{"class":413},"\"2.3.21\"",[261,985,986],{"class":362},"   \u002F\u002F omit for a Java-only project\n",[261,988,989,992,994,997,999],{"class":263,"line":305},[261,990,991],{"class":368},"    id",[261,993,410],{"class":372},[261,995,996],{"class":413},"\"io.stoatflow\"",[261,998,980],{"class":372},[261,1000,1001],{"class":413},"\"$stoatflowVersion\"\n",[261,1003,1004],{"class":263,"line":311},[261,1005,494],{"class":372},[261,1007,1008],{"class":263,"line":317},[261,1009,626],{"emptyLinePlaceholder":625},[261,1011,1012,1015],{"class":263,"line":323},[261,1013,1014],{"class":368},"stoatflow",[261,1016,373],{"class":372},[261,1018,1019,1022,1025,1027,1030,1033],{"class":263,"line":329},[261,1020,1021],{"class":372},"    mainClass.",[261,1023,1024],{"class":368},"set",[261,1026,410],{"class":372},[261,1028,1029],{"class":413},"\"com.example.MainKt\"",[261,1031,1032],{"class":372},")  ",[261,1034,1035],{"class":362},"\u002F\u002F your application entry point\n",[261,1037,1038],{"class":263,"line":335},[261,1039,494],{"class":372},[242,1041,1043],{"id":1042},"option-b-configure-it-yourself","Option B — configure it yourself",[44,1045,1046],{},"If you'd rather not use the plugin, set the toolchain and JVM args directly:",[247,1048,1049,1177],{"group":249},[251,1050,1052],{"className":353,"code":1051,"filename":255,"language":355,"meta":257,"style":257},"\u002F\u002F build.gradle.kts\njava {\n    toolchain { languageVersion = JavaLanguageVersion.of(25) }\n}\ntasks.withType\u003CJavaCompile> { options.compilerArgs.add(\"--enable-preview\") }\n\napplication {\n    applicationDefaultJvmArgs = listOf(\n        \"--enable-preview\",\n        \"--enable-native-access=ALL-UNNAMED\",\n        \"-XX:+UseG1GC\",\n    )\n}\n",[77,1053,1054,1058,1065,1090,1094,1122,1126,1133,1146,1154,1161,1168,1173],{"__ignoreMap":257},[261,1055,1056],{"class":263,"line":264},[261,1057,591],{"class":362},[261,1059,1060,1063],{"class":263,"line":270},[261,1061,1062],{"class":368},"java",[261,1064,373],{"class":372},[261,1066,1067,1070,1073,1075,1078,1081,1083,1087],{"class":263,"line":276},[261,1068,1069],{"class":368},"    toolchain",[261,1071,1072],{"class":372}," { languageVersion ",[261,1074,404],{"class":403},[261,1076,1077],{"class":372}," JavaLanguageVersion.",[261,1079,1080],{"class":368},"of",[261,1082,410],{"class":372},[261,1084,1086],{"class":1085},"s-TwI","25",[261,1088,1089],{"class":372},") }\n",[261,1091,1092],{"class":263,"line":305},[261,1093,494],{"class":372},[261,1095,1096,1099,1102,1105,1109,1112,1115,1117,1120],{"class":263,"line":311},[261,1097,1098],{"class":372},"tasks.",[261,1100,1101],{"class":368},"withType",[261,1103,1104],{"class":372},"\u003C",[261,1106,1108],{"class":1107},"sUxyF","JavaCompile",[261,1110,1111],{"class":372},"> { options.compilerArgs.",[261,1113,1114],{"class":368},"add",[261,1116,410],{"class":372},[261,1118,1119],{"class":413},"\"--enable-preview\"",[261,1121,1089],{"class":372},[261,1123,1124],{"class":263,"line":317},[261,1125,626],{"emptyLinePlaceholder":625},[261,1127,1128,1131],{"class":263,"line":323},[261,1129,1130],{"class":368},"application",[261,1132,373],{"class":372},[261,1134,1135,1138,1140,1143],{"class":263,"line":329},[261,1136,1137],{"class":372},"    applicationDefaultJvmArgs ",[261,1139,404],{"class":403},[261,1141,1142],{"class":368}," listOf",[261,1144,1145],{"class":372},"(\n",[261,1147,1148,1151],{"class":263,"line":335},[261,1149,1150],{"class":413},"        \"--enable-preview\"",[261,1152,1153],{"class":372},",\n",[261,1155,1156,1159],{"class":263,"line":341},[261,1157,1158],{"class":413},"        \"--enable-native-access=ALL-UNNAMED\"",[261,1160,1153],{"class":372},[261,1162,1163,1166],{"class":263,"line":479},[261,1164,1165],{"class":413},"        \"-XX:+UseG1GC\"",[261,1167,1153],{"class":372},[261,1169,1170],{"class":263,"line":485},[261,1171,1172],{"class":372},"    )\n",[261,1174,1175],{"class":263,"line":491},[261,1176,494],{"class":372},[251,1178,1180],{"className":282,"code":1179,"filename":284,"language":285,"meta":257,"style":257},"\u003C!-- pom.xml -->\n\u003Cproperties>\n  \u003Cmaven.compiler.release>25\u003C\u002Fmaven.compiler.release>\n\u003C\u002Fproperties>\n\n\u003Cbuild>\n  \u003Cplugins>\n    \u003Cplugin>\n      \u003CgroupId>org.apache.maven.plugins\u003C\u002FgroupId>\n      \u003CartifactId>maven-compiler-plugin\u003C\u002FartifactId>\n      \u003Cconfiguration>\n        \u003CcompilerArgs>\u003Carg>--enable-preview\u003C\u002Farg>\u003C\u002FcompilerArgs>\n      \u003C\u002Fconfiguration>\n    \u003C\u002Fplugin>\n  \u003C\u002Fplugins>\n\u003C\u002Fbuild>\n\n\u003C!-- Run with: java --enable-preview --enable-native-access=ALL-UNNAMED -XX:+UseG1GC -jar your-app.jar -->\n",[77,1181,1182,1186,1191,1196,1201,1205,1210,1215,1220,1225,1230,1235,1240,1245,1250,1255,1261,1266],{"__ignoreMap":257},[261,1183,1184],{"class":263,"line":264},[261,1185,504],{},[261,1187,1188],{"class":263,"line":270},[261,1189,1190],{},"\u003Cproperties>\n",[261,1192,1193],{"class":263,"line":276},[261,1194,1195],{},"  \u003Cmaven.compiler.release>25\u003C\u002Fmaven.compiler.release>\n",[261,1197,1198],{"class":263,"line":305},[261,1199,1200],{},"\u003C\u002Fproperties>\n",[261,1202,1203],{"class":263,"line":311},[261,1204,626],{"emptyLinePlaceholder":625},[261,1206,1207],{"class":263,"line":317},[261,1208,1209],{},"\u003Cbuild>\n",[261,1211,1212],{"class":263,"line":323},[261,1213,1214],{},"  \u003Cplugins>\n",[261,1216,1217],{"class":263,"line":329},[261,1218,1219],{},"    \u003Cplugin>\n",[261,1221,1222],{"class":263,"line":335},[261,1223,1224],{},"      \u003CgroupId>org.apache.maven.plugins\u003C\u002FgroupId>\n",[261,1226,1227],{"class":263,"line":341},[261,1228,1229],{},"      \u003CartifactId>maven-compiler-plugin\u003C\u002FartifactId>\n",[261,1231,1232],{"class":263,"line":479},[261,1233,1234],{},"      \u003Cconfiguration>\n",[261,1236,1237],{"class":263,"line":485},[261,1238,1239],{},"        \u003CcompilerArgs>\u003Carg>--enable-preview\u003C\u002Farg>\u003C\u002FcompilerArgs>\n",[261,1241,1242],{"class":263,"line":491},[261,1243,1244],{},"      \u003C\u002Fconfiguration>\n",[261,1246,1247],{"class":263,"line":716},[261,1248,1249],{},"    \u003C\u002Fplugin>\n",[261,1251,1252],{"class":263,"line":721},[261,1253,1254],{},"  \u003C\u002Fplugins>\n",[261,1256,1258],{"class":263,"line":1257},16,[261,1259,1260],{},"\u003C\u002Fbuild>\n",[261,1262,1264],{"class":263,"line":1263},17,[261,1265,626],{"emptyLinePlaceholder":625},[261,1267,1269],{"class":263,"line":1268},18,[261,1270,1271],{},"\u003C!-- Run with: java --enable-preview --enable-native-access=ALL-UNNAMED -XX:+UseG1GC -jar your-app.jar -->\n",[112,1273,1275],{"id":1274},"next-steps","Next steps",[60,1277,1278,1285,1292,1299],{},[63,1279,1280,1284],{},[66,1281,1282],{},[48,1283,18],{"href":19}," — every license env var \u002F system property \u002F YAML key, for local development and CI\u002FCD.",[63,1286,1287,1291],{},[66,1288,1289],{},[48,1290,23],{"href":24}," — build and run a complete word-count app on the runtime.",[63,1293,1294,1298],{},[66,1295,1296],{},[48,1297,28],{"href":29}," — the single-instance model, lane dispatcher, and commit barriers.",[63,1300,1301,1302,1304],{},"Stuck? ",[48,1303,155],{"href":154}," — real people read every email during the alpha.",[1306,1307,1308],"style",{},"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 .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 .sYZai, html code.shiki .sYZai{--shiki-default:#999999}html pre.shiki code .spphp, html code.shiki .spphp{--shiki-default:#B56959}html pre.shiki code .s-TwI, html code.shiki .s-TwI{--shiki-default:#2F798A}html pre.shiki code .sUxyF, html code.shiki .sUxyF{--shiki-default:#2E8F82}",{"title":257,"searchDepth":270,"depth":270,"links":1310},[1311,1312,1316,1317,1322],{"id":114,"depth":270,"text":115},{"id":178,"depth":270,"text":179,"children":1313},[1314,1315],{"id":244,"depth":276,"text":245},{"id":347,"depth":276,"text":348},{"id":560,"depth":270,"text":561},{"id":768,"depth":270,"text":769,"children":1318},[1319,1321],{"id":804,"depth":276,"text":1320},"Option A — the io.stoatflow Gradle plugin (recommended)",{"id":1042,"depth":276,"text":1043},{"id":1274,"depth":270,"text":1275},"Add the private StoatFlow Maven repository, pull the dependency, and set up your Gradle or Maven build.","md",{},{"icon":16},{"title":13,"description":1323},"Iy1yzcWKYON45nhjWVEM9d-Id5qpX0XD8UBsiBkdzfI",[1330,1332],{"title":10,"path":6,"stem":7,"description":1331,"icon":11,"children":-1},"Install StoatFlow and ship your first topology — or migrate an existing Kafka Streams app.",{"title":18,"path":19,"stem":20,"description":1333,"icon":21,"children":-1},"Configure your StoatFlow license key for local development and CI\u002FCD — environment variables, system properties, key files, and application.yaml.",1780332013175]