[{"data":1,"prerenderedAt":847},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fgetting-started\u002Fai-assistants":334,"\u002Fdocs\u002Fgetting-started\u002Fai-assistants-surround":842},[4,43,91,154,181,224,262,293],{"title":5,"path":6,"stem":7,"children":8,"icon":42},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F1.getting-started\u002F1.index",[9,12,17,22,27,32,37],{"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",{"title":38,"path":39,"stem":40,"icon":41},"AI assistants","\u002Fdocs\u002Fgetting-started\u002Fai-assistants","1.docs\u002F1.getting-started\u002F7.ai-assistants","i-lucide-bot",false,{"title":44,"path":45,"stem":46,"children":47,"icon":50},"Core Concepts","\u002Fdocs\u002Fconcepts","1.docs\u002F2.concepts\u002F1.index",[48,51,56,61,66,71,76,81,86],{"title":49,"path":45,"stem":46,"icon":50},"Core concepts","i-lucide-book-open",{"title":52,"path":53,"stem":54,"icon":55},"Architecture","\u002Fdocs\u002Fconcepts\u002Farchitecture","1.docs\u002F2.concepts\u002F2.architecture","i-lucide-layers",{"title":57,"path":58,"stem":59,"icon":60},"Exactly-once semantics","\u002Fdocs\u002Fconcepts\u002Fexactly-once","1.docs\u002F2.concepts\u002F3.exactly-once","i-lucide-shield-check",{"title":62,"path":63,"stem":64,"icon":65},"Lanes and parallelism","\u002Fdocs\u002Fconcepts\u002Flanes-and-parallelism","1.docs\u002F2.concepts\u002F4.lanes-and-parallelism","i-lucide-split",{"title":67,"path":68,"stem":69,"icon":70},"State and thread-safety","\u002Fdocs\u002Fconcepts\u002Fstate-and-thread-safety","1.docs\u002F2.concepts\u002F5.state-and-thread-safety","i-lucide-lock",{"title":72,"path":73,"stem":74,"icon":75},"Event time and watermarks","\u002Fdocs\u002Fconcepts\u002Fevent-time-and-watermarks","1.docs\u002F2.concepts\u002F6.event-time-and-watermarks","i-lucide-clock",{"title":77,"path":78,"stem":79,"icon":80},"The configuration model","\u002Fdocs\u002Fconcepts\u002Fconfiguration-model","1.docs\u002F2.concepts\u002F7.configuration-model","i-lucide-sliders-horizontal",{"title":82,"path":83,"stem":84,"icon":85},"The error-handling model","\u002Fdocs\u002Fconcepts\u002Ferror-handling-model","1.docs\u002F2.concepts\u002F8.error-handling-model","i-lucide-triangle-alert",{"title":87,"path":88,"stem":89,"icon":90},"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":92,"path":93,"stem":94,"children":95,"icon":98},"Building Topologies","\u002Fdocs\u002Fbuilding","1.docs\u002F3.building\u002F1.index",[96,99,104,109,114,119,124,129,134,139,144,149],{"title":97,"path":93,"stem":94,"icon":98},"Building topologies","i-lucide-blocks",{"title":100,"path":101,"stem":102,"icon":103},"Error handling and DLQ","\u002Fdocs\u002Fbuilding\u002Ferror-handling-dlq","1.docs\u002F3.building\u002F10.error-handling-dlq","i-lucide-circle-x",{"title":105,"path":106,"stem":107,"icon":108},"State stores","\u002Fdocs\u002Fbuilding\u002Fstate-stores","1.docs\u002F3.building\u002F11.state-stores","i-lucide-database",{"title":110,"path":111,"stem":112,"icon":113},"Testing topologies","\u002Fdocs\u002Fbuilding\u002Ftesting","1.docs\u002F3.building\u002F12.testing","i-lucide-flask-conical",{"title":115,"path":116,"stem":117,"icon":118},"Sources and sinks","\u002Fdocs\u002Fbuilding\u002Fstreams-builder","1.docs\u002F3.building\u002F2.streams-builder","i-lucide-import",{"title":120,"path":121,"stem":122,"icon":123},"KStream and KTable operations","\u002Fdocs\u002Fbuilding\u002Fkstream-ktable","1.docs\u002F3.building\u002F3.kstream-ktable","i-lucide-waypoints",{"title":125,"path":126,"stem":127,"icon":128},"Aggregations","\u002Fdocs\u002Fbuilding\u002Faggregations","1.docs\u002F3.building\u002F4.aggregations","i-lucide-sigma",{"title":130,"path":131,"stem":132,"icon":133},"Windowing","\u002Fdocs\u002Fbuilding\u002Fwindowing","1.docs\u002F3.building\u002F5.windowing","i-lucide-calendar-clock",{"title":135,"path":136,"stem":137,"icon":138},"Joins","\u002Fdocs\u002Fbuilding\u002Fjoins","1.docs\u002F3.building\u002F6.joins","i-lucide-git-merge",{"title":140,"path":141,"stem":142,"icon":143},"The Processor API","\u002Fdocs\u002Fbuilding\u002Fprocessor-api","1.docs\u002F3.building\u002F7.processor-api","i-lucide-cpu",{"title":145,"path":146,"stem":147,"icon":148},"Scheduled sources","\u002Fdocs\u002Fbuilding\u002Fscheduled-sources","1.docs\u002F3.building\u002F8.scheduled-sources","i-lucide-timer",{"title":150,"path":151,"stem":152,"icon":153},"Serdes and Avro","\u002Fdocs\u002Fbuilding\u002Fserdes","1.docs\u002F3.building\u002F9.serdes","i-lucide-binary",{"title":155,"path":156,"stem":157,"children":158,"icon":80},"Configuration","\u002Fdocs\u002Fconfiguration","1.docs\u002F4.configuration\u002F1.index",[159,161,166,171,176],{"title":160,"path":156,"stem":157,"icon":80},"How configuration works",{"title":162,"path":163,"stem":164,"icon":165},"Engine configuration (:core)","\u002Fdocs\u002Fconfiguration\u002Fcore-config","1.docs\u002F4.configuration\u002F2.core-config","i-lucide-settings-2",{"title":167,"path":168,"stem":169,"icon":170},"Runtime configuration (:runtime)","\u002Fdocs\u002Fconfiguration\u002Fruntime-config","1.docs\u002F4.configuration\u002F3.runtime-config","i-lucide-server-cog",{"title":172,"path":173,"stem":174,"icon":175},"Defaults, adaptivity, and presets","\u002Fdocs\u002Fconfiguration\u002Fdefaults-and-presets","1.docs\u002F4.configuration\u002F4.defaults-and-presets","i-lucide-gauge",{"title":177,"path":178,"stem":179,"icon":180},"Kafka client configuration","\u002Fdocs\u002Fconfiguration\u002Fkafka-client-config","1.docs\u002F4.configuration\u002F5.kafka-client-config","i-lucide-plug",{"title":182,"path":183,"stem":184,"children":185,"icon":188},"Running in Production","\u002Fdocs\u002Fruntime","1.docs\u002F5.runtime\u002F1.index",[186,189,194,199,204,209,214,219],{"title":187,"path":183,"stem":184,"icon":188},"The runtime","i-lucide-server",{"title":190,"path":191,"stem":192,"icon":193},"The REST API","\u002Fdocs\u002Fruntime\u002Frest-api","1.docs\u002F5.runtime\u002F2.rest-api","i-lucide-globe",{"title":195,"path":196,"stem":197,"icon":198},"Health checks","\u002Fdocs\u002Fruntime\u002Fhealth-checks","1.docs\u002F5.runtime\u002F3.health-checks","i-lucide-heart-pulse",{"title":200,"path":201,"stem":202,"icon":203},"Metrics","\u002Fdocs\u002Fruntime\u002Fmetrics","1.docs\u002F5.runtime\u002F4.metrics","i-lucide-activity",{"title":205,"path":206,"stem":207,"icon":208},"Pause and resume","\u002Fdocs\u002Fruntime\u002Fpause-unpause","1.docs\u002F5.runtime\u002F5.pause-unpause","i-lucide-pause",{"title":210,"path":211,"stem":212,"icon":213},"Plugins and lifecycle hooks","\u002Fdocs\u002Fruntime\u002Fplugins","1.docs\u002F5.runtime\u002F6.plugins","i-lucide-puzzle",{"title":215,"path":216,"stem":217,"icon":218},"Docker images","\u002Fdocs\u002Fruntime\u002Fdocker","1.docs\u002F5.runtime\u002F7.docker","i-lucide-container",{"title":220,"path":221,"stem":222,"icon":223},"GraalVM native image","\u002Fdocs\u002Fruntime\u002Fnative-image","1.docs\u002F5.runtime\u002F8.native-image","i-lucide-zap",{"title":225,"path":226,"stem":227,"children":228,"icon":231},"Deploying & Operating","\u002Fdocs\u002Foperating","1.docs\u002F6.operating\u002F1.index",[229,232,237,242,247,252,257],{"title":230,"path":226,"stem":227,"icon":231},"Deploying and operating","i-lucide-life-buoy",{"title":233,"path":234,"stem":235,"icon":236},"Running on Kubernetes","\u002Fdocs\u002Foperating\u002Fkubernetes","1.docs\u002F6.operating\u002F2.kubernetes","i-lucide-ship",{"title":238,"path":239,"stem":240,"icon":241},"High availability","\u002Fdocs\u002Foperating\u002Fhigh-availability","1.docs\u002F6.operating\u002F3.high-availability","i-lucide-copy",{"title":243,"path":244,"stem":245,"icon":246},"Liveness and readiness probes","\u002Fdocs\u002Foperating\u002Fprobes","1.docs\u002F6.operating\u002F4.probes","i-lucide-stethoscope",{"title":248,"path":249,"stem":250,"icon":251},"Observability","\u002Fdocs\u002Foperating\u002Fobservability","1.docs\u002F6.operating\u002F5.observability","i-lucide-telescope",{"title":253,"path":254,"stem":255,"icon":256},"Tuning under load","\u002Fdocs\u002Foperating\u002Ftuning","1.docs\u002F6.operating\u002F6.tuning","i-lucide-sliders",{"title":258,"path":259,"stem":260,"icon":261},"Production checklist","\u002Fdocs\u002Foperating\u002Fproduction-checklist","1.docs\u002F6.operating\u002F7.production-checklist","i-lucide-clipboard-check",{"title":263,"path":264,"stem":265,"children":266,"icon":90},"Migrating from Kafka Streams","\u002Fdocs\u002Fmigration","1.docs\u002F7.migration\u002F1.index",[267,268,273,278,283,288],{"title":263,"path":264,"stem":265,"icon":90},{"title":269,"path":270,"stem":271,"icon":272},"Automated port","\u002Fdocs\u002Fmigration\u002Fautomated-port","1.docs\u002F7.migration\u002F2.automated-port","i-lucide-wand-sparkles",{"title":274,"path":275,"stem":276,"icon":277},"Migration without carrying state","\u002Fdocs\u002Fmigration\u002Fwithout-data-migration","1.docs\u002F7.migration\u002F3.without-data-migration","i-lucide-sparkles",{"title":279,"path":280,"stem":281,"icon":282},"Migration carrying state","\u002Fdocs\u002Fmigration\u002Fwith-data-migration","1.docs\u002F7.migration\u002F4.with-data-migration","i-lucide-database-backup",{"title":284,"path":285,"stem":286,"icon":287},"The migration tool","\u002Fdocs\u002Fmigration\u002Fmigration-tool","1.docs\u002F7.migration\u002F5.migration-tool","i-lucide-truck",{"title":289,"path":290,"stem":291,"icon":292},"Reusing your Kafka Streams dashboards","\u002Fdocs\u002Fmigration\u002Freusing-kafka-streams-dashboards","1.docs\u002F7.migration\u002F6.reusing-kafka-streams-dashboards","i-lucide-line-chart",{"title":294,"path":295,"stem":296,"children":297,"icon":299},"Reference","\u002Fdocs\u002Freference","1.docs\u002F8.reference\u002F1.index",[298,300,305,310,315,320,325,329],{"title":294,"path":295,"stem":296,"icon":299},"i-lucide-list",{"title":301,"path":302,"stem":303,"icon":304},"Configuration reference","\u002Fdocs\u002Freference\u002Fconfiguration-reference","1.docs\u002F8.reference\u002F2.configuration-reference","i-lucide-table",{"title":306,"path":307,"stem":308,"icon":309},"REST API reference","\u002Fdocs\u002Freference\u002Frest-api-reference","1.docs\u002F8.reference\u002F3.rest-api-reference","i-lucide-network",{"title":311,"path":312,"stem":313,"icon":314},"Gradle plugin reference","\u002Fdocs\u002Freference\u002Fgradle-plugin-reference","1.docs\u002F8.reference\u002F4.gradle-plugin-reference","i-lucide-box",{"title":316,"path":317,"stem":318,"icon":319},"Maven reference","\u002Fdocs\u002Freference\u002Fmaven-reference","1.docs\u002F8.reference\u002F5.maven-reference","i-simple-icons-apachemaven",{"title":321,"path":322,"stem":323,"icon":324},"Kafka Streams compatibility matrix","\u002Fdocs\u002Freference\u002Fks-compatibility-matrix","1.docs\u002F8.reference\u002F6.ks-compatibility-matrix","i-lucide-table-2",{"title":326,"path":327,"stem":328,"icon":175},"Metrics reference","\u002Fdocs\u002Freference\u002Fmetrics-reference","1.docs\u002F8.reference\u002F7.metrics-reference",{"title":330,"path":331,"stem":332,"icon":333},"Glossary","\u002Fdocs\u002Freference\u002Fglossary","1.docs\u002F8.reference\u002F8.glossary","i-lucide-book-a",{"id":335,"title":38,"body":336,"description":835,"extension":836,"meta":837,"navigation":838,"pageType":839,"path":39,"seo":840,"stem":40,"__hash__":841},"docs\u002F1.docs\u002F1.getting-started\u002F7.ai-assistants.md",{"type":337,"value":338,"toc":825},"minimark",[339,366,428,433,436,528,535,539,554,653,663,667,682,689,710,768,777,781],[340,341,342,343,347,348,352,353,356,357,360,361,365],"p",{},"StoatFlow is source-compatible with Kafka Streams 4.3 via an import swap — which is exactly why AI coding assistants get it ",[344,345,346],"em",{},"confidently wrong",". Every mainstream model is trained on ",[349,350,351],"code",{},"org.apache.kafka.streams.*",", so it reaches for the wrong import root, the Kafka Streams ",[349,354,355],{},"at_least_once"," default, ",[349,358,359],{},"replicas: N"," scaling, Maven Central coordinates, and Kafka Streams watermark semantics — all of which are wrong on StoatFlow. The ",[362,363,364],"strong",{},"StoatFlow AI Assistant Skills"," pack puts the right answers in front of your assistant.",[367,368,369],"tldr-panel",{},[370,371,372,379,393,406,412],"ul",{},[373,374,375,378],"li",{},[362,376,377],{},"What:"," a public, versioned pack of skills \u002F rules files — six task-cut skills (build, test, port, configure, set up, operate) + a shared primer.",[373,380,381,384,385,388,389,392],{},[362,382,383],{},"Install (Claude Code):"," ",[349,386,387],{},"\u002Fplugin marketplace add stoatflow\u002Fskills"," → ",[349,390,391],{},"\u002Fplugin install stoatflow@stoatflow",".",[373,394,395,384,398,401,402,405],{},[362,396,397],{},"Install (any agent):",[349,399,400],{},"npx skills add stoatflow\u002Fskills",", or copy the ",[349,403,404],{},"AGENTS.md"," \u002F editor rule file into your repo.",[373,407,408,411],{},[362,409,410],{},"Pin the version:"," the pack ships in lockstep with StoatFlow releases — use the tag matching your version.",[373,413,414,417,418,427],{},[362,415,416],{},"Nothing to install?"," Point your agent at ",[419,420,424],"a",{"href":421,"rel":422},"https:\u002F\u002Fstoatflow.io\u002Fllms.txt",[423],"nofollow",[349,425,426],{},"stoatflow.io\u002Fllms.txt"," — these docs, machine-readable.",[429,430,432],"h2",{"id":431},"what-it-does","What it does",[340,434,435],{},"The pack overrides the Kafka-Streams priors that produce subtly-wrong StoatFlow code. Its six skills fire on what you're doing:",[437,438,439,452],"table",{},[440,441,442],"thead",{},[443,444,445,449],"tr",{},[446,447,448],"th",{},"Skill",[446,450,451],{},"Fires when you're…",[453,454,455,466,480,494,508,518],"tbody",{},[443,456,457,463],{},[458,459,460],"td",{},[349,461,462],{},"stoatflow-build-topology",[458,464,465],{},"writing topology code — DSL, Processor API, serdes, state stores, DLQ",[443,467,468,473],{},[458,469,470],{},[349,471,472],{},"stoatflow-test",[458,474,475,476,479],{},"writing tests — ",[349,477,478],{},"TopologyTestDriver",", integration tests",[443,481,482,487],{},[458,483,484],{},[349,485,486],{},"stoatflow-port-from-ks",[458,488,489,490,493],{},"porting a Kafka Streams \u002F KSML app — code ",[362,491,492],{},"and"," state",[443,495,496,501],{},[458,497,498],{},[349,499,500],{},"stoatflow-configure",[458,502,503,504,507],{},"configuring an app — ",[349,505,506],{},"application.yaml",", guarantees, lanes, HA",[443,509,510,515],{},[458,511,512],{},[349,513,514],{},"stoatflow-project-setup",[458,516,517],{},"wiring the build — the private Maven repo, license, JDK 25, Docker, native image",[443,519,520,525],{},[458,521,522],{},[349,523,524],{},"stoatflow-operate",[458,526,527],{},"deploying and running it — single-instance Kubernetes, HA, probes, metrics, tuning",[340,529,530,531,534],{},"Because the pack is drift-checked against the porting guide, the ",[419,532,533],{"href":322},"compatibility matrix",", and the config schema on every release, it stays accurate instead of rotting into authoritative stale answers.",[429,536,538],{"id":537},"install","Install",[540,541,544],"callout",{"color":542,"icon":543},"info","i-lucide-shield",[340,545,546,547,550,551,392],{},"The pack is free and open (Apache-2.0). It only ",[344,548,549],{},"documents"," StoatFlow — you still need customer credentials to resolve the library itself from ",[349,552,553],{},"maven.stoatflow.io",[437,555,556,565],{},[440,557,558],{},[443,559,560,563],{},[446,561,562],{},"Tool",[446,564,538],{},[453,566,567,580,591,604,623,638],{},[443,568,569,574],{},[458,570,571],{},[362,572,573],{},"Claude Code",[458,575,576,388,578],{},[349,577,387],{},[349,579,391],{},[443,581,582,587],{},[458,583,584],{},[362,585,586],{},"Any agent (skills CLI)",[458,588,589],{},[349,590,400],{},[443,592,593,598],{},[458,594,595],{},[362,596,597],{},"Codex \u002F AGENTS.md tools",[458,599,600,601,603],{},"copy ",[349,602,404],{}," into your app repo",[443,605,606,611],{},[458,607,608],{},[362,609,610],{},"Cursor",[458,612,600,613,388,616,619,620,622],{},[349,614,615],{},"cursor\u002Frules\u002Fstoatflow.mdc",[349,617,618],{},".cursor\u002Frules\u002F"," (or use ",[349,621,404],{},")",[443,624,625,630],{},[458,626,627],{},[362,628,629],{},"GitHub Copilot",[458,631,600,632,388,635],{},[349,633,634],{},"copilot\u002Fstoatflow.instructions.md",[349,636,637],{},".github\u002Finstructions\u002F",[443,639,640,645],{},[458,641,642],{},[362,643,644],{},"JetBrains AI \u002F Junie",[458,646,600,647,388,650],{},[349,648,649],{},"jetbrains\u002Fguidelines.md",[349,651,652],{},".junie\u002Fguidelines.md",[340,654,655,656,392],{},"All of these live in the public repo ",[419,657,660],{"href":658,"rel":659},"https:\u002F\u002Fgithub.com\u002Fstoatflow\u002Fskills",[423],[349,661,662],{},"stoatflow\u002Fskills",[429,664,666],{"id":665},"pin-the-matching-version","Pin the matching version",[340,668,669,670,673,674,681],{},"The pack version ",[362,671,672],{},"is"," the StoatFlow version it targets. Each artifact carries a ",[344,675,676,677,680],{},"\"Targets StoatFlow ",[678,679],"stoatflow-version",{},"\""," banner. If your StoatFlow version differs from the pack you installed, switch to the pack's matching tag so the divergence rules and config reference line up with your release.",[429,683,685,686],{"id":684},"the-other-half-llmstxt","The other half: ",[349,687,688],{},"llms.txt",[340,690,691,692,695,696,699,700,705,706,709],{},"The pack is the ",[362,693,694],{},"instruction"," side — files your assistant loads ",[344,697,698],{},"before"," it writes code.\n",[419,701,703],{"href":421,"rel":702},[423],[349,704,426],{}," is the ",[362,707,708],{},"retrieval"," side: a machine-readable\nindex of this documentation, for agents that fetch a URL when they need an answer.",[437,711,712,722],{},[440,713,714],{},[443,715,716,719],{},[446,717,718],{},"File",[446,720,721],{},"What it is",[453,723,724,737,751],{},[443,725,726,734],{},[458,727,728],{},[419,729,731],{"href":421,"rel":730},[423],[349,732,733],{},"\u002Fllms.txt",[458,735,736],{},"Curated index — every docs page with its title and description, grouped by section",[443,738,739,748],{},[458,740,741],{},[419,742,745],{"href":743,"rel":744},"https:\u002F\u002Fstoatflow.io\u002Fllms-full.txt",[423],[349,746,747],{},"\u002Fllms-full.txt",[458,749,750],{},"The same documentation concatenated into one markdown bundle, for direct ingestion",[443,752,753,758],{},[458,754,755],{},[349,756,757],{},"\u002Fraw\u002F\u003Cpage>.md",[458,759,760,761],{},"Any indexed page as raw markdown — e.g. ",[419,762,765],{"href":763,"rel":764},"https:\u002F\u002Fstoatflow.io\u002Fraw\u002Fdocs\u002Fconcepts\u002Fexactly-once.md",[423],[349,766,767],{},"\u002Fraw\u002Fdocs\u002Fconcepts\u002Fexactly-once.md",[340,769,770,771,776],{},"They follow the ",[419,772,775],{"href":773,"rel":774},"https:\u002F\u002Fllmstxt.org\u002F",[423],"llms.txt convention",", cost nothing to use, and need no install.\nAll three are regenerated on every deploy, so they never lag the docs.",[429,778,780],{"id":779},"next-steps","Next steps",[370,782,783,800,817],{},[373,784,785,790,791,796,797,799],{},[362,786,787],{},[419,788,789],{"href":19},"Install StoatFlow"," and ",[362,792,793],{},[419,794,795],{"href":34},"set up your project"," — the build wiring the ",[349,798,514],{}," skill also teaches.",[373,801,802,806,807,809,810,790,813,816],{},[362,803,804],{},[419,805,263],{"href":264}," — the ",[349,808,486],{}," skill drives the same ",[419,811,812],{"href":270},"import codemod",[419,814,815],{"href":285},"state migration"," conversationally.",[373,818,819,820,824],{},"Something the pack got wrong? ",[419,821,823],{"href":822},"\u002Fcontact","Get in touch"," — the pack is maintained upstream and improves every release.",{"title":826,"searchDepth":827,"depth":827,"links":828},"",2,[829,830,831,832,834],{"id":431,"depth":827,"text":432},{"id":537,"depth":827,"text":538},{"id":665,"depth":827,"text":666},{"id":684,"depth":827,"text":833},"The other half: llms.txt",{"id":779,"depth":827,"text":780},"Install the StoatFlow skills pack so Claude Code, Cursor, Copilot, and other AI coding assistants write correct StoatFlow code instead of hallucinated Kafka Streams.","md",{},{"icon":41},"how-to",{"title":38,"description":835},"00eBvpA16d0ACi-vghtinKtXBtfndmqroWAPNPVGdqw",[843,845],{"title":33,"path":34,"stem":35,"description":844,"icon":36,"children":-1},"Apply StoatFlow's build conventions with Gradle or Maven — the JDK 25 toolchain, the required JVM flags, a runnable fat JAR, and opt-in reproducible Docker and GraalVM native images, from a few lines of config.",{"title":49,"path":45,"stem":46,"description":846,"icon":50,"children":-1},"A map of the StoatFlow concept pages and the order to read them in — from the single-instance architecture through exactly-once, lanes, state, event time, configuration, and error handling.",1786987421718]