[{"data":1,"prerenderedAt":2176},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fconfiguration\u002Fruntime-config":314,"\u002Fdocs\u002Fconfiguration\u002Fruntime-config-surround":2171},[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":162,"body":316,"description":2164,"extension":2165,"meta":2166,"navigation":2167,"pageType":2168,"path":163,"seo":2169,"stem":164,"__hash__":2170},"docs\u002F1.docs\u002F4.configuration\u002F3.runtime-config.md",{"type":317,"value":318,"toc":2148},"minimark",[319,352,424,453,458,480,527,531,537,899,903,910,1030,1033,1073,1089,1093,1101,1201,1204,1275,1279,1288,1293,1305,1398,1402,1433,1439,1484,1488,1500,1548,1594,1598,1616,1674,1709,1713,1722,1809,1824,1851,1855,1871,1922,1927,1931,1940,2104,2108,2144],[320,321,322,323,327,328,331,332,335,336,339,340,343,344,347,348,351],"p",{},"The ",[324,325,326],"code",{},":runtime"," module reads its operational settings from the ",[324,329,330],{},"runtime.*"," block of ",[324,333,334],{},"application.yaml",": the built-in HTTP server, Micrometer metrics, the ",[324,337,338],{},"\u002Finfo"," and ",[324,341,342],{},"\u002Fconfig"," endpoint visibility, and the broker\u002FSchema-Registry health checks. This page is a task-oriented walkthrough of that block. Two related top-level blocks — ",[324,345,346],{},"logging.*"," and the Kafka client passthrough under ",[324,349,350],{},"stoatflow.kafka.*"," — round out what you need to operate a runtime app.",[353,354,355],"tldr-panel",{},[356,357,358,372,384,398,406,414],"ul",{},[359,360,361,367,368,371],"li",{},[362,363,364],"strong",{},[324,365,366],{},"runtime.http"," — the admin\u002Fmetrics HTTP server (host, port, backlog, debug endpoints). Defaults to ",[324,369,370],{},"0.0.0.0:8080",".",[359,373,374,379,380,383],{},[362,375,376],{},[324,377,378],{},"runtime.metrics"," — Prometheus export via ",[324,381,382],{},"\u002Fmetrics"," (prefix, common tags, JVM metrics).",[359,385,386,391,392,394,395,397],{},[362,387,388],{},[324,389,390],{},"runtime.endpoints"," — what ",[324,393,338],{}," shows and whether ",[324,396,342],{}," is reachable.",[359,399,400,405],{},[362,401,402],{},[324,403,404],{},"runtime.health"," — broker and Schema-Registry health-check timeouts.",[359,407,408,413],{},[362,409,410],{},[324,411,412],{},"logging.level"," — per-logger levels, applied to Logback at startup.",[359,415,416,417,420,421,371],{},"Every key has a default — a minimal ",[324,418,419],{},"runtime:"," block is enough to get going. Full key list: ",[422,423,281],"a",{"href":282},[425,426,429],"callout",{"color":427,"icon":428},"info","i-lucide-info",[320,430,431,433,434,437,438,441,442,445,446,449,450,371],{},[324,432,330],{}," is the ",[362,435,436],{},"infrastructure"," half of the config. The ",[362,439,440],{},"engine"," half (lanes, commit barriers, state, watermarks) lives under ",[324,443,444],{},"stoatflow.*"," — see ",[422,447,448],{"href":158},"Core configuration",". For the conceptual split, read ",[422,451,452],{"href":73},"Configuration model",[454,455,457],"h2",{"id":456},"where-runtime-config-comes-from","Where runtime config comes from",[320,459,460,463,464,466,467,469,470,472,473,476,477,479],{},[324,461,462],{},"StoatFlowRuntime.fromConfig(...)"," loads ",[324,465,334],{}," from the classpath, layers environment variables on top, and starts the HTTP + metrics server before your topology. The ",[324,468,330],{}," block is only consulted by the ",[324,471,326],{}," module — a ",[324,474,475],{},":core","-only application has no HTTP server, no metrics endpoint, and no ",[324,478,419],{}," block to configure.",[320,481,482,483,485,486,489,490,492,493,495,496,499,500,503,504,507,508,510,511,514,515,518,519,522,523,526],{},"Every ",[324,484,330],{}," key maps to an environment variable using the same ",[324,487,488],{},"__","-separated convention as the engine config: double underscore (",[324,491,488],{},") is a path separator, single underscore is a word boundary (kebab-case). The first segment is the config root, and it must name the block being targeted — for ",[324,494,330],{}," keys that root is ",[324,497,498],{},"runtime",", so ",[324,501,502],{},"runtime.http.port"," becomes ",[324,505,506],{},"RUNTIME__HTTP__PORT",". (Engine keys under ",[324,509,444],{}," use the ",[324,512,513],{},"STOATFLOW__"," root; logging levels use ",[324,516,517],{},"LOGGING__LEVEL__",".) A variable that does not start with one of these three recognised roots is ignored — ",[324,520,521],{},"STOATFLOW__RUNTIME__HTTP__PORT"," would resolve to the nonexistent path ",[324,524,525],{},"stoatflow.runtime.http.port"," and silently fail to set the port. Environment variables take precedence over YAML — convenient for per-environment overrides without rebuilding the image.",[454,528,530],{"id":529},"the-full-runtime-shape","The full runtime.* shape",[320,532,533,534,536],{},"Every key shown here is at its default value, so this block is equivalent to omitting ",[324,535,419],{}," entirely. Trim it down to just the keys you actually change.",[538,539,544],"pre",{"className":540,"code":541,"language":542,"meta":543,"style":543},"language-yaml shiki shiki-themes vitesse-light","runtime:\n  http:\n    enabled: true        # serve the HTTP admin + metrics server\n    host: 0.0.0.0        # bind address (all interfaces)\n    port: 8080\n    backlog: 50          # max pending socket connections\n    debug:\n      enabled: true      # register \u002Fdebug\u002Fthreads and \u002Fdebug\u002Fbarriers\n\n  metrics:\n    enabled: true        # expose \u002Fmetrics in Prometheus format\n    prefix: stoatflow    # prefix for all metric names\n    recording-level: info  # info | debug | trace\n    bind-jvm-metrics: true # JVM memory, GC, threads\n    common-tags: {}      # tags applied to every metric\n\n  endpoints:\n    info:\n      show-app: true\n      show-java: true\n      show-kafka: true\n      show-uptime: true\n      show-state: true\n      show-watermarks: true\n      show-topology: true\n      show-endpoints: true\n    config:\n      enabled: true      # serve the \u002Fconfig endpoint\n\n  health:\n    kafka-broker:\n      timeout-ms: 2000\n    schema-registry:\n      timeout-ms: 5000\n","yaml","",[324,545,546,558,566,583,598,609,623,631,644,651,659,671,686,700,713,727,732,740,748,759,769,779,789,799,809,819,829,837,849,854,862,870,881,889],{"__ignoreMap":543},[547,548,551,554],"span",{"class":549,"line":550},"line",1,[547,552,498],{"class":553},"su6XF",[547,555,557],{"class":556},"sYZai",":\n",[547,559,561,564],{"class":549,"line":560},2,[547,562,563],{"class":553},"  http",[547,565,557],{"class":556},[547,567,569,572,575,579],{"class":549,"line":568},3,[547,570,571],{"class":553},"    enabled",[547,573,574],{"class":556},":",[547,576,578],{"class":577},"sbBg2"," true",[547,580,582],{"class":581},"s8zF2","        # serve the HTTP admin + metrics server\n",[547,584,586,589,591,595],{"class":549,"line":585},4,[547,587,588],{"class":553},"    host",[547,590,574],{"class":556},[547,592,594],{"class":593},"s-TwI"," 0.0.0.0",[547,596,597],{"class":581},"        # bind address (all interfaces)\n",[547,599,601,604,606],{"class":549,"line":600},5,[547,602,603],{"class":553},"    port",[547,605,574],{"class":556},[547,607,608],{"class":593}," 8080\n",[547,610,612,615,617,620],{"class":549,"line":611},6,[547,613,614],{"class":553},"    backlog",[547,616,574],{"class":556},[547,618,619],{"class":593}," 50",[547,621,622],{"class":581},"          # max pending socket connections\n",[547,624,626,629],{"class":549,"line":625},7,[547,627,628],{"class":553},"    debug",[547,630,557],{"class":556},[547,632,634,637,639,641],{"class":549,"line":633},8,[547,635,636],{"class":553},"      enabled",[547,638,574],{"class":556},[547,640,578],{"class":577},[547,642,643],{"class":581},"      # register \u002Fdebug\u002Fthreads and \u002Fdebug\u002Fbarriers\n",[547,645,647],{"class":549,"line":646},9,[547,648,650],{"emptyLinePlaceholder":649},true,"\n",[547,652,654,657],{"class":549,"line":653},10,[547,655,656],{"class":553},"  metrics",[547,658,557],{"class":556},[547,660,662,664,666,668],{"class":549,"line":661},11,[547,663,571],{"class":553},[547,665,574],{"class":556},[547,667,578],{"class":577},[547,669,670],{"class":581},"        # expose \u002Fmetrics in Prometheus format\n",[547,672,674,677,679,683],{"class":549,"line":673},12,[547,675,676],{"class":553},"    prefix",[547,678,574],{"class":556},[547,680,682],{"class":681},"spphp"," stoatflow",[547,684,685],{"class":581},"    # prefix for all metric names\n",[547,687,689,692,694,697],{"class":549,"line":688},13,[547,690,691],{"class":553},"    recording-level",[547,693,574],{"class":556},[547,695,696],{"class":681}," info",[547,698,699],{"class":581},"  # info | debug | trace\n",[547,701,703,706,708,710],{"class":549,"line":702},14,[547,704,705],{"class":553},"    bind-jvm-metrics",[547,707,574],{"class":556},[547,709,578],{"class":577},[547,711,712],{"class":581}," # JVM memory, GC, threads\n",[547,714,716,719,721,724],{"class":549,"line":715},15,[547,717,718],{"class":553},"    common-tags",[547,720,574],{"class":556},[547,722,723],{"class":556}," {}",[547,725,726],{"class":581},"      # tags applied to every metric\n",[547,728,730],{"class":549,"line":729},16,[547,731,650],{"emptyLinePlaceholder":649},[547,733,735,738],{"class":549,"line":734},17,[547,736,737],{"class":553},"  endpoints",[547,739,557],{"class":556},[547,741,743,746],{"class":549,"line":742},18,[547,744,745],{"class":553},"    info",[547,747,557],{"class":556},[547,749,751,754,756],{"class":549,"line":750},19,[547,752,753],{"class":553},"      show-app",[547,755,574],{"class":556},[547,757,758],{"class":577}," true\n",[547,760,762,765,767],{"class":549,"line":761},20,[547,763,764],{"class":553},"      show-java",[547,766,574],{"class":556},[547,768,758],{"class":577},[547,770,772,775,777],{"class":549,"line":771},21,[547,773,774],{"class":553},"      show-kafka",[547,776,574],{"class":556},[547,778,758],{"class":577},[547,780,782,785,787],{"class":549,"line":781},22,[547,783,784],{"class":553},"      show-uptime",[547,786,574],{"class":556},[547,788,758],{"class":577},[547,790,792,795,797],{"class":549,"line":791},23,[547,793,794],{"class":553},"      show-state",[547,796,574],{"class":556},[547,798,758],{"class":577},[547,800,802,805,807],{"class":549,"line":801},24,[547,803,804],{"class":553},"      show-watermarks",[547,806,574],{"class":556},[547,808,758],{"class":577},[547,810,812,815,817],{"class":549,"line":811},25,[547,813,814],{"class":553},"      show-topology",[547,816,574],{"class":556},[547,818,758],{"class":577},[547,820,822,825,827],{"class":549,"line":821},26,[547,823,824],{"class":553},"      show-endpoints",[547,826,574],{"class":556},[547,828,758],{"class":577},[547,830,832,835],{"class":549,"line":831},27,[547,833,834],{"class":553},"    config",[547,836,557],{"class":556},[547,838,840,842,844,846],{"class":549,"line":839},28,[547,841,636],{"class":553},[547,843,574],{"class":556},[547,845,578],{"class":577},[547,847,848],{"class":581},"      # serve the \u002Fconfig endpoint\n",[547,850,852],{"class":549,"line":851},29,[547,853,650],{"emptyLinePlaceholder":649},[547,855,857,860],{"class":549,"line":856},30,[547,858,859],{"class":553},"  health",[547,861,557],{"class":556},[547,863,865,868],{"class":549,"line":864},31,[547,866,867],{"class":553},"    kafka-broker",[547,869,557],{"class":556},[547,871,873,876,878],{"class":549,"line":872},32,[547,874,875],{"class":553},"      timeout-ms",[547,877,574],{"class":556},[547,879,880],{"class":593}," 2000\n",[547,882,884,887],{"class":549,"line":883},33,[547,885,886],{"class":553},"    schema-registry",[547,888,557],{"class":556},[547,890,892,894,896],{"class":549,"line":891},34,[547,893,875],{"class":553},[547,895,574],{"class":556},[547,897,898],{"class":593}," 5000\n",[454,900,902],{"id":901},"http-server-runtimehttp","HTTP server (runtime.http)",[320,904,905,906,909],{},"The runtime starts a JDK built-in HTTP server on a virtual-thread executor. It serves health probes, metrics, topology introspection, and the pause\u002Funpause controls. See ",[422,907,908],{"href":186},"REST API"," for the full endpoint catalogue.",[911,912,913,929],"table",{},[914,915,916],"thead",{},[917,918,919,923,926],"tr",{},[920,921,922],"th",{},"Key",[920,924,925],{},"Default",[920,927,928],{},"Purpose",[930,931,932,955,977,991,1006],"tbody",{},[917,933,934,940,945],{},[935,936,937],"td",{},[324,938,939],{},"runtime.http.enabled",[935,941,942],{},[324,943,944],{},"true",[935,946,947,948,951,952,954],{},"Set ",[324,949,950],{},"false"," to run with no HTTP server at all. You lose health probes, ",[324,953,382],{},", and the admin endpoints — only do this for an embedded\u002Flibrary use case.",[917,956,957,962,967],{},[935,958,959],{},[324,960,961],{},"runtime.http.host",[935,963,964],{},[324,965,966],{},"0.0.0.0",[935,968,969,970,972,973,976],{},"Bind address. ",[324,971,966],{}," binds all interfaces (the right choice inside a container). Use ",[324,974,975],{},"127.0.0.1"," to restrict to loopback.",[917,978,979,983,988],{},[935,980,981],{},[324,982,502],{},[935,984,985],{},[324,986,987],{},"8080",[935,989,990],{},"Listen port.",[917,992,993,998,1003],{},[935,994,995],{},[324,996,997],{},"runtime.http.backlog",[935,999,1000],{},[324,1001,1002],{},"50",[935,1004,1005],{},"Maximum pending connections in the socket backlog.",[917,1007,1008,1013,1017],{},[935,1009,1010],{},[324,1011,1012],{},"runtime.http.debug.enabled",[935,1014,1015],{},[324,1016,944],{},[935,1018,1019,1020,339,1023,1026,1027,1029],{},"Registers ",[324,1021,1022],{},"\u002Fdebug\u002Fthreads",[324,1024,1025],{},"\u002Fdebug\u002Fbarriers",". When ",[324,1028,950],{},", both return 404. Disable to reduce attack surface on hardened deployments — there is no hot-path cost either way.",[320,1031,1032],{},"A typical production override binds a fixed port and turns the debug endpoints off:",[538,1034,1036],{"className":540,"code":1035,"language":542,"meta":543,"style":543},"runtime:\n  http:\n    port: 8080\n    debug:\n      enabled: false\n",[324,1037,1038,1044,1050,1058,1064],{"__ignoreMap":543},[547,1039,1040,1042],{"class":549,"line":550},[547,1041,498],{"class":553},[547,1043,557],{"class":556},[547,1045,1046,1048],{"class":549,"line":560},[547,1047,563],{"class":553},[547,1049,557],{"class":556},[547,1051,1052,1054,1056],{"class":549,"line":568},[547,1053,603],{"class":553},[547,1055,574],{"class":556},[547,1057,608],{"class":593},[547,1059,1060,1062],{"class":549,"line":585},[547,1061,628],{"class":553},[547,1063,557],{"class":556},[547,1065,1066,1068,1070],{"class":549,"line":600},[547,1067,636],{"class":553},[547,1069,574],{"class":556},[547,1071,1072],{"class":577}," false\n",[425,1074,1076],{"color":427,"icon":1075},"i-lucide-shield",[320,1077,1078,339,1080,1082,1083,1086,1087,371],{},[324,1079,1022],{},[324,1081,1025],{}," are pull-only snapshots used to diagnose a stuck commit pipeline. They are safe to leave on, but if your threat model limits what the admin port exposes, gating them with ",[324,1084,1085],{},"runtime.http.debug.enabled: false"," is the supported way to remove them. See ",[422,1088,908],{"href":186},[454,1090,1092],{"id":1091},"metrics-runtimemetrics","Metrics (runtime.metrics)",[320,1094,1095,1096,1098,1099,371],{},"Metrics are collected with Micrometer and exposed at ",[324,1097,382],{}," in Prometheus text format. Scrape it from your existing monitoring stack — there is no agent to install. For the metric catalogue, see ",[422,1100,195],{"href":196},[911,1102,1103,1113],{},[914,1104,1105],{},[917,1106,1107,1109,1111],{},[920,1108,922],{},[920,1110,925],{},[920,1112,928],{},[930,1114,1115,1132,1147,1172,1186],{},[917,1116,1117,1122,1126],{},[935,1118,1119],{},[324,1120,1121],{},"runtime.metrics.enabled",[935,1123,1124],{},[324,1125,944],{},[935,1127,1128,1129,1131],{},"Master switch for metric collection and the ",[324,1130,382],{}," endpoint.",[917,1133,1134,1139,1144],{},[935,1135,1136],{},[324,1137,1138],{},"runtime.metrics.prefix",[935,1140,1141],{},[324,1142,1143],{},"stoatflow",[935,1145,1146],{},"Prefix applied to every metric name. Change it if your conventions require a different namespace.",[917,1148,1149,1154,1158],{},[935,1150,1151],{},[324,1152,1153],{},"runtime.metrics.recording-level",[935,1155,1156],{},[324,1157,427],{},[935,1159,1160,1161,1163,1164,1167,1168,1171],{},"Detail level: ",[324,1162,427],{}," (essential operational metrics, production-safe), ",[324,1165,1166],{},"debug"," (higher-cardinality troubleshooting metrics), ",[324,1169,1170],{},"trace"," (deep internals, development only).",[917,1173,1174,1179,1183],{},[935,1175,1176],{},[324,1177,1178],{},"runtime.metrics.bind-jvm-metrics",[935,1180,1181],{},[324,1182,944],{},[935,1184,1185],{},"Binds JVM memory, GC, and thread metrics into the registry.",[917,1187,1188,1193,1198],{},[935,1189,1190],{},[324,1191,1192],{},"runtime.metrics.common-tags",[935,1194,1195],{},[324,1196,1197],{},"{}",[935,1199,1200],{},"A map of tags applied to every metric — useful for environment, region, or service identification.",[320,1202,1203],{},"Common tags are how you keep one Prometheus\u002FGrafana setup readable across many deployments:",[538,1205,1207],{"className":540,"code":1206,"language":542,"meta":543,"style":543},"runtime:\n  metrics:\n    prefix: stoatflow\n    recording-level: info\n    common-tags:\n      env: production\n      region: eu-west-1\n      service: order-processor\n",[324,1208,1209,1215,1221,1230,1239,1245,1255,1265],{"__ignoreMap":543},[547,1210,1211,1213],{"class":549,"line":550},[547,1212,498],{"class":553},[547,1214,557],{"class":556},[547,1216,1217,1219],{"class":549,"line":560},[547,1218,656],{"class":553},[547,1220,557],{"class":556},[547,1222,1223,1225,1227],{"class":549,"line":568},[547,1224,676],{"class":553},[547,1226,574],{"class":556},[547,1228,1229],{"class":681}," stoatflow\n",[547,1231,1232,1234,1236],{"class":549,"line":585},[547,1233,691],{"class":553},[547,1235,574],{"class":556},[547,1237,1238],{"class":681}," info\n",[547,1240,1241,1243],{"class":549,"line":600},[547,1242,718],{"class":553},[547,1244,557],{"class":556},[547,1246,1247,1250,1252],{"class":549,"line":611},[547,1248,1249],{"class":553},"      env",[547,1251,574],{"class":556},[547,1253,1254],{"class":681}," production\n",[547,1256,1257,1260,1262],{"class":549,"line":625},[547,1258,1259],{"class":553},"      region",[547,1261,574],{"class":556},[547,1263,1264],{"class":681}," eu-west-1\n",[547,1266,1267,1270,1272],{"class":549,"line":633},[547,1268,1269],{"class":553},"      service",[547,1271,574],{"class":556},[547,1273,1274],{"class":681}," order-processor\n",[454,1276,1278],{"id":1277},"endpoint-visibility-runtimeendpoints","Endpoint visibility (runtime.endpoints)",[320,1280,1281,1282,1284,1285,1287],{},"This block controls what the human-facing ",[324,1283,338],{}," endpoint discloses and whether ",[324,1286,342],{}," is served. It does not affect health, metrics, or topology endpoints.",[1289,1290,1292],"h3",{"id":1291},"info-fields","\u002Finfo fields",[320,1294,1295,1298,1299,1301,1302,1304],{},[324,1296,1297],{},"runtime.endpoints.info.*"," are individual booleans (all ",[324,1300,944],{}," by default) that include or omit a section from the ",[324,1303,338],{}," JSON response:",[911,1306,1307,1316],{},[914,1308,1309],{},[917,1310,1311,1313],{},[920,1312,922],{},[920,1314,1315],{},"Includes",[930,1317,1318,1328,1338,1348,1358,1368,1378,1388],{},[917,1319,1320,1325],{},[935,1321,1322],{},[324,1323,1324],{},"show-app",[935,1326,1327],{},"Application id",[917,1329,1330,1335],{},[935,1331,1332],{},[324,1333,1334],{},"show-java",[935,1336,1337],{},"Java runtime version and vendor",[917,1339,1340,1345],{},[935,1341,1342],{},[324,1343,1344],{},"show-kafka",[935,1346,1347],{},"Bootstrap servers",[917,1349,1350,1355],{},[935,1351,1352],{},[324,1353,1354],{},"show-uptime",[935,1356,1357],{},"Process uptime",[917,1359,1360,1365],{},[935,1361,1362],{},[324,1363,1364],{},"show-state",[935,1366,1367],{},"StoatFlow application state with transition history",[917,1369,1370,1375],{},[935,1371,1372],{},[324,1373,1374],{},"show-watermarks",[935,1376,1377],{},"Global and per-partition watermark state",[917,1379,1380,1385],{},[935,1381,1382],{},[324,1383,1384],{},"show-topology",[935,1386,1387],{},"Topology traits and active optimizations",[917,1389,1390,1395],{},[935,1391,1392],{},[324,1393,1394],{},"show-endpoints",[935,1396,1397],{},"The list of available HTTP endpoints",[1289,1399,1401],{"id":1400},"config-endpoint","\u002Fconfig endpoint",[911,1403,1404,1414],{},[914,1405,1406],{},[917,1407,1408,1410,1412],{},[920,1409,922],{},[920,1411,925],{},[920,1413,928],{},[930,1415,1416],{},[917,1417,1418,1423,1427],{},[935,1419,1420],{},[324,1421,1422],{},"runtime.endpoints.config.enabled",[935,1424,1425],{},[324,1426,944],{},[935,1428,1429,1430,1432],{},"Serves the ",[324,1431,342],{}," endpoint, which returns the merged effective configuration with sensitive values masked. Supports JSON and YAML via content negotiation.",[320,1434,1435,1436,1438],{},"To trim what an exposed admin port reveals — for example, hide the bootstrap servers from ",[324,1437,338],{}," and turn off the config dump entirely:",[538,1440,1442],{"className":540,"code":1441,"language":542,"meta":543,"style":543},"runtime:\n  endpoints:\n    info:\n      show-kafka: false\n    config:\n      enabled: false\n",[324,1443,1444,1450,1456,1462,1470,1476],{"__ignoreMap":543},[547,1445,1446,1448],{"class":549,"line":550},[547,1447,498],{"class":553},[547,1449,557],{"class":556},[547,1451,1452,1454],{"class":549,"line":560},[547,1453,737],{"class":553},[547,1455,557],{"class":556},[547,1457,1458,1460],{"class":549,"line":568},[547,1459,745],{"class":553},[547,1461,557],{"class":556},[547,1463,1464,1466,1468],{"class":549,"line":585},[547,1465,774],{"class":553},[547,1467,574],{"class":556},[547,1469,1072],{"class":577},[547,1471,1472,1474],{"class":549,"line":600},[547,1473,834],{"class":553},[547,1475,557],{"class":556},[547,1477,1478,1480,1482],{"class":549,"line":611},[547,1479,636],{"class":553},[547,1481,574],{"class":556},[547,1483,1072],{"class":577},[454,1485,1487],{"id":1486},"health-checks-runtimehealth","Health checks (runtime.health)",[320,1489,1490,1491,1493,1494,339,1497,371],{},"The readiness and liveness probes aggregate a set of health indicators. Two of them have configurable timeouts here. See ",[422,1492,190],{"href":191}," for how the indicators map to ",[324,1495,1496],{},"\u002Fhealth\u002Flive",[324,1498,1499],{},"\u002Fhealth\u002Fready",[911,1501,1502,1512],{},[914,1503,1504],{},[917,1505,1506,1508,1510],{},[920,1507,922],{},[920,1509,925],{},[920,1511,928],{},[930,1513,1514,1529],{},[917,1515,1516,1521,1526],{},[935,1517,1518],{},[324,1519,1520],{},"runtime.health.kafka-broker.timeout-ms",[935,1522,1523],{},[324,1524,1525],{},"2000",[935,1527,1528],{},"Timeout for the broker connectivity check (via AdminClient).",[917,1530,1531,1536,1541],{},[935,1532,1533],{},[324,1534,1535],{},"runtime.health.schema-registry.timeout-ms",[935,1537,1538],{},[324,1539,1540],{},"5000",[935,1542,1543,1544,1547],{},"Timeout for the Schema Registry connectivity check. This indicator auto-enables only when ",[324,1545,1546],{},"stoatflow.schema-registry-url"," is set.",[538,1549,1551],{"className":540,"code":1550,"language":542,"meta":543,"style":543},"runtime:\n  health:\n    kafka-broker:\n      timeout-ms: 3000\n    schema-registry:\n      timeout-ms: 5000\n",[324,1552,1553,1559,1565,1571,1580,1586],{"__ignoreMap":543},[547,1554,1555,1557],{"class":549,"line":550},[547,1556,498],{"class":553},[547,1558,557],{"class":556},[547,1560,1561,1563],{"class":549,"line":560},[547,1562,859],{"class":553},[547,1564,557],{"class":556},[547,1566,1567,1569],{"class":549,"line":568},[547,1568,867],{"class":553},[547,1570,557],{"class":556},[547,1572,1573,1575,1577],{"class":549,"line":585},[547,1574,875],{"class":553},[547,1576,574],{"class":556},[547,1578,1579],{"class":593}," 3000\n",[547,1581,1582,1584],{"class":549,"line":600},[547,1583,886],{"class":553},[547,1585,557],{"class":556},[547,1587,1588,1590,1592],{"class":549,"line":611},[547,1589,875],{"class":553},[547,1591,574],{"class":556},[547,1593,898],{"class":593},[454,1595,1597],{"id":1596},"logging-levels-logginglevel","Logging levels (logging.level)",[320,1599,1600,1602,1603,339,1605,1607,1608,1611,1612,1615],{},[324,1601,412],{}," is a top-level block (a sibling of ",[324,1604,1143],{},[324,1606,498],{},", not nested under either). It maps logger names to levels and applies them to Logback at startup, overriding whatever ",[324,1609,1610],{},"logback.xml"," set. Use ",[324,1613,1614],{},"ROOT"," for the root logger.",[538,1617,1619],{"className":540,"code":1618,"language":542,"meta":543,"style":543},"logging:\n  level:\n    ROOT: INFO\n    io.stoatflow: DEBUG\n    org.apache.kafka: WARN\n    org.apache.kafka.clients.consumer: INFO\n",[324,1620,1621,1628,1635,1645,1655,1665],{"__ignoreMap":543},[547,1622,1623,1626],{"class":549,"line":550},[547,1624,1625],{"class":553},"logging",[547,1627,557],{"class":556},[547,1629,1630,1633],{"class":549,"line":560},[547,1631,1632],{"class":553},"  level",[547,1634,557],{"class":556},[547,1636,1637,1640,1642],{"class":549,"line":568},[547,1638,1639],{"class":553},"    ROOT",[547,1641,574],{"class":556},[547,1643,1644],{"class":681}," INFO\n",[547,1646,1647,1650,1652],{"class":549,"line":585},[547,1648,1649],{"class":553},"    io.stoatflow",[547,1651,574],{"class":556},[547,1653,1654],{"class":681}," DEBUG\n",[547,1656,1657,1660,1662],{"class":549,"line":600},[547,1658,1659],{"class":553},"    org.apache.kafka",[547,1661,574],{"class":556},[547,1663,1664],{"class":681}," WARN\n",[547,1666,1667,1670,1672],{"class":549,"line":611},[547,1668,1669],{"class":553},"    org.apache.kafka.clients.consumer",[547,1671,574],{"class":556},[547,1673,1644],{"class":681},[320,1675,1676,1677,1680,1681,1680,1684,1680,1687,1680,1690,1693,1694,1697,1698,1700,1701,1704,1705,1708],{},"Valid levels are ",[324,1678,1679],{},"TRACE",", ",[324,1682,1683],{},"DEBUG",[324,1685,1686],{},"INFO",[324,1688,1689],{},"WARN",[324,1691,1692],{},"ERROR",", and ",[324,1695,1696],{},"OFF",". Per-logger levels can also be set via environment variables with the ",[324,1699,517],{}," prefix — for example ",[324,1702,1703],{},"LOGGING__LEVEL__ORG_APACHE_KAFKA_CLIENTS=DEBUG"," sets ",[324,1706,1707],{},"org.apache.kafka.clients"," to DEBUG. The single-underscore segments become dots in the logger name. Environment variables take precedence over YAML when both name the same logger.",[454,1710,1712],{"id":1711},"kafka-client-passthrough-stoatflowkafka","Kafka client passthrough (stoatflow.kafka)",[320,1714,1715,1716,1718,1719,1721],{},"Kafka client tuning lives under ",[324,1717,350],{}," (the engine half), not under ",[324,1720,330],{}," — but it is part of operating a runtime app, so it is worth knowing where it is. The three maps pass properties straight through to the underlying Kafka clients, applied on top of StoatFlow's framework defaults:",[538,1723,1725],{"className":540,"code":1724,"language":542,"meta":543,"style":543},"stoatflow:\n  kafka:\n    consumer:\n      max.poll.records: 1000\n      fetch.min.bytes: 65536\n    producer:\n      compression.type: lz4\n      linger.ms: 50\n    restoration-consumer:\n      max.poll.records: 5000\n",[324,1726,1727,1733,1740,1747,1757,1767,1774,1784,1794,1801],{"__ignoreMap":543},[547,1728,1729,1731],{"class":549,"line":550},[547,1730,1143],{"class":553},[547,1732,557],{"class":556},[547,1734,1735,1738],{"class":549,"line":560},[547,1736,1737],{"class":553},"  kafka",[547,1739,557],{"class":556},[547,1741,1742,1745],{"class":549,"line":568},[547,1743,1744],{"class":553},"    consumer",[547,1746,557],{"class":556},[547,1748,1749,1752,1754],{"class":549,"line":585},[547,1750,1751],{"class":553},"      max.poll.records",[547,1753,574],{"class":556},[547,1755,1756],{"class":593}," 1000\n",[547,1758,1759,1762,1764],{"class":549,"line":600},[547,1760,1761],{"class":553},"      fetch.min.bytes",[547,1763,574],{"class":556},[547,1765,1766],{"class":593}," 65536\n",[547,1768,1769,1772],{"class":549,"line":611},[547,1770,1771],{"class":553},"    producer",[547,1773,557],{"class":556},[547,1775,1776,1779,1781],{"class":549,"line":625},[547,1777,1778],{"class":553},"      compression.type",[547,1780,574],{"class":556},[547,1782,1783],{"class":681}," lz4\n",[547,1785,1786,1789,1791],{"class":549,"line":633},[547,1787,1788],{"class":553},"      linger.ms",[547,1790,574],{"class":556},[547,1792,1793],{"class":593}," 50\n",[547,1795,1796,1799],{"class":549,"line":646},[547,1797,1798],{"class":553},"    restoration-consumer",[547,1800,557],{"class":556},[547,1802,1803,1805,1807],{"class":549,"line":653},[547,1804,1751],{"class":553},[547,1806,574],{"class":556},[547,1808,898],{"class":593},[320,1810,1811,1812,1680,1815,1680,1818,1821,1822,371],{},"A few forced overrides (for example ",[324,1813,1814],{},"bootstrap.servers",[324,1816,1817],{},"group.id",[324,1819,1820],{},"enable.auto.commit=false",", and the transactional settings under exactly-once) cannot be overridden here — they are required for correctness. The full resolution order and the list of forced values are on ",[422,1823,172],{"href":173},[425,1825,1827],{"color":1826,"icon":80},"warning",[320,1828,1829,1830,1680,1833,1836,1837,1840,1841,1844,1845,1848,1849,371],{},"These maps preserve dotted Kafka property names verbatim (",[324,1831,1832],{},"linger.ms",[324,1834,1835],{},"max.poll.records","). When setting them via environment variables, use the dedicated ",[324,1838,1839],{},"STOATFLOW__KAFKA__PRODUCER__*"," \u002F ",[324,1842,1843],{},"STOATFLOW__KAFKA__CONSUMER__*"," form (e.g. ",[324,1846,1847],{},"STOATFLOW__KAFKA__PRODUCER__LINGER_MS=50",") — the generic env path would mangle the dotted keys. Details on ",[422,1850,172],{"href":173},[454,1852,1854],{"id":1853},"license-stoatflowlicense","License (stoatflow.license)",[320,1856,1857,1858,1860,1861,1863,1864,1866,1867,1870],{},"The license block is also under ",[324,1859,444],{},", not ",[324,1862,330],{},", but the ",[324,1865,326],{}," module bridges it to the engine and exposes license state via the ",[324,1868,1869],{},"\u002Flicense"," endpoint and the license health indicator. The minimal form references the key from an environment variable:",[538,1872,1874],{"className":540,"code":1873,"language":542,"meta":543,"style":543},"stoatflow:\n  license:\n    key: ${STOATFLOW_LICENSE_KEY}\n    environment: prod          # required for the Production tier\n    cache-dir: \u002Fvar\u002Flib\u002Fstoatflow\u002Fstate\u002Flicense-cache\n",[324,1875,1876,1882,1889,1899,1912],{"__ignoreMap":543},[547,1877,1878,1880],{"class":549,"line":550},[547,1879,1143],{"class":553},[547,1881,557],{"class":556},[547,1883,1884,1887],{"class":549,"line":560},[547,1885,1886],{"class":553},"  license",[547,1888,557],{"class":556},[547,1890,1891,1894,1896],{"class":549,"line":568},[547,1892,1893],{"class":553},"    key",[547,1895,574],{"class":556},[547,1897,1898],{"class":681}," ${STOATFLOW_LICENSE_KEY}\n",[547,1900,1901,1904,1906,1909],{"class":549,"line":585},[547,1902,1903],{"class":553},"    environment",[547,1905,574],{"class":556},[547,1907,1908],{"class":681}," prod",[547,1910,1911],{"class":581},"          # required for the Production tier\n",[547,1913,1914,1917,1919],{"class":549,"line":600},[547,1915,1916],{"class":553},"    cache-dir",[547,1918,574],{"class":556},[547,1920,1921],{"class":681}," \u002Fvar\u002Flib\u002Fstoatflow\u002Fstate\u002Flicense-cache\n",[320,1923,1924,1925,371],{},"The full set of license keys, environment variables, and system properties — plus the production-tier requirements — is documented on ",[422,1926,23],{"href":24},[454,1928,1930],{"id":1929},"worked-example","Worked example",[320,1932,1933,1934,1936,1937,1939],{},"A production-leaning ",[324,1935,498],{}," + ",[324,1938,1625],{}," block: fixed port, debug endpoints off, environment tags on every metric, and a quieter Kafka client logger.",[538,1941,1943],{"className":540,"code":1942,"language":542,"meta":543,"style":543},"runtime:\n  http:\n    host: 0.0.0.0\n    port: 8080\n    debug:\n      enabled: false\n  metrics:\n    enabled: true\n    recording-level: info\n    common-tags:\n      env: production\n      region: eu-west-1\n  endpoints:\n    config:\n      enabled: false\n  health:\n    kafka-broker:\n      timeout-ms: 3000\n\nlogging:\n  level:\n    io.stoatflow: INFO\n    org.apache.kafka: WARN\n",[324,1944,1945,1951,1957,1966,1974,1980,1988,1994,2002,2010,2016,2024,2032,2038,2044,2052,2058,2064,2072,2076,2082,2088,2096],{"__ignoreMap":543},[547,1946,1947,1949],{"class":549,"line":550},[547,1948,498],{"class":553},[547,1950,557],{"class":556},[547,1952,1953,1955],{"class":549,"line":560},[547,1954,563],{"class":553},[547,1956,557],{"class":556},[547,1958,1959,1961,1963],{"class":549,"line":568},[547,1960,588],{"class":553},[547,1962,574],{"class":556},[547,1964,1965],{"class":593}," 0.0.0.0\n",[547,1967,1968,1970,1972],{"class":549,"line":585},[547,1969,603],{"class":553},[547,1971,574],{"class":556},[547,1973,608],{"class":593},[547,1975,1976,1978],{"class":549,"line":600},[547,1977,628],{"class":553},[547,1979,557],{"class":556},[547,1981,1982,1984,1986],{"class":549,"line":611},[547,1983,636],{"class":553},[547,1985,574],{"class":556},[547,1987,1072],{"class":577},[547,1989,1990,1992],{"class":549,"line":625},[547,1991,656],{"class":553},[547,1993,557],{"class":556},[547,1995,1996,1998,2000],{"class":549,"line":633},[547,1997,571],{"class":553},[547,1999,574],{"class":556},[547,2001,758],{"class":577},[547,2003,2004,2006,2008],{"class":549,"line":646},[547,2005,691],{"class":553},[547,2007,574],{"class":556},[547,2009,1238],{"class":681},[547,2011,2012,2014],{"class":549,"line":653},[547,2013,718],{"class":553},[547,2015,557],{"class":556},[547,2017,2018,2020,2022],{"class":549,"line":661},[547,2019,1249],{"class":553},[547,2021,574],{"class":556},[547,2023,1254],{"class":681},[547,2025,2026,2028,2030],{"class":549,"line":673},[547,2027,1259],{"class":553},[547,2029,574],{"class":556},[547,2031,1264],{"class":681},[547,2033,2034,2036],{"class":549,"line":688},[547,2035,737],{"class":553},[547,2037,557],{"class":556},[547,2039,2040,2042],{"class":549,"line":702},[547,2041,834],{"class":553},[547,2043,557],{"class":556},[547,2045,2046,2048,2050],{"class":549,"line":715},[547,2047,636],{"class":553},[547,2049,574],{"class":556},[547,2051,1072],{"class":577},[547,2053,2054,2056],{"class":549,"line":729},[547,2055,859],{"class":553},[547,2057,557],{"class":556},[547,2059,2060,2062],{"class":549,"line":734},[547,2061,867],{"class":553},[547,2063,557],{"class":556},[547,2065,2066,2068,2070],{"class":549,"line":742},[547,2067,875],{"class":553},[547,2069,574],{"class":556},[547,2071,1579],{"class":593},[547,2073,2074],{"class":549,"line":750},[547,2075,650],{"emptyLinePlaceholder":649},[547,2077,2078,2080],{"class":549,"line":761},[547,2079,1625],{"class":553},[547,2081,557],{"class":556},[547,2083,2084,2086],{"class":549,"line":771},[547,2085,1632],{"class":553},[547,2087,557],{"class":556},[547,2089,2090,2092,2094],{"class":549,"line":781},[547,2091,1649],{"class":553},[547,2093,574],{"class":556},[547,2095,1644],{"class":681},[547,2097,2098,2100,2102],{"class":549,"line":791},[547,2099,1659],{"class":553},[547,2101,574],{"class":556},[547,2103,1664],{"class":681},[454,2105,2107],{"id":2106},"next-steps","Next steps",[356,2109,2110,2118,2123,2129,2139],{},[359,2111,2112,2114,2115,2117],{},[422,2113,448],{"href":158}," — the ",[324,2116,444],{}," engine half (lanes, barriers, state, watermarks).",[359,2119,2120,2122],{},[422,2121,172],{"href":173}," — the full consumer\u002Fproducer\u002Frestoration passthrough and resolution order.",[359,2124,2125,2128],{},[422,2126,2127],{"href":168},"Defaults and presets"," — what you get out of the box and the RocksDB presets.",[359,2130,2131,339,2133,2135,2136,2138],{},[422,2132,908],{"href":186},[422,2134,195],{"href":196}," — what the HTTP server and ",[324,2137,382],{}," actually serve.",[359,2140,2141,2143],{},[422,2142,281],{"href":282}," — the complete, generated key list with every default.",[2145,2146,2147],"style",{},"html pre.shiki code .su6XF, html code.shiki .su6XF{--shiki-default:#998418}html pre.shiki code .sYZai, html code.shiki .sYZai{--shiki-default:#999999}html pre.shiki code .sbBg2, html code.shiki .sbBg2{--shiki-default:#1E754F}html pre.shiki code .s8zF2, html code.shiki .s8zF2{--shiki-default:#A0ADA0}html pre.shiki code .s-TwI, html code.shiki .s-TwI{--shiki-default:#2F798A}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);}",{"title":543,"searchDepth":560,"depth":560,"links":2149},[2150,2151,2152,2153,2154,2158,2159,2160,2161,2162,2163],{"id":456,"depth":560,"text":457},{"id":529,"depth":560,"text":530},{"id":901,"depth":560,"text":902},{"id":1091,"depth":560,"text":1092},{"id":1277,"depth":560,"text":1278,"children":2155},[2156,2157],{"id":1291,"depth":568,"text":1292},{"id":1400,"depth":568,"text":1401},{"id":1486,"depth":560,"text":1487},{"id":1596,"depth":560,"text":1597},{"id":1711,"depth":560,"text":1712},{"id":1853,"depth":560,"text":1854},{"id":1929,"depth":560,"text":1930},{"id":2106,"depth":560,"text":2107},"The runtime.* section of application.yaml — HTTP server, metrics, info\u002Fconfig endpoints, health checks — plus logging levels and Kafka client passthrough.","md",{},{"icon":165},"how-to",{"title":162,"description":2164},"6vSgPg_0u9fPwwnsH7xJ1gUVKcIXdNGDLs2bTTZWdR0",[2172,2174],{"title":157,"path":158,"stem":159,"description":2173,"icon":160,"children":-1},"The :core engine knobs every StoatFlow app sets — application id, brokers, default serdes, lanes, commit-barrier cadence, state dir, changelog, processing guarantee, and event-time coordination — with defaults from source.",{"title":167,"path":168,"stem":169,"description":2175,"icon":170,"children":-1},"Why a minimal StoatFlow config runs well — the opinionated defaults, the parts that self-tune within bounds you set, and the RocksDB presets and tuning knobs you can change.",1783713359976]