Recipes without schema: 2 (or with schema: 1) use the pre-2.0 layout: worker topology under resources, the engine and its per-mode settings under backend, the discovery plane under infra, and placement as per-block booleans. Every field below still loads, because the 2.0 vocabularies (engine:, roles:, placement:, services:, dynamo.source) are normalized into exactly these fields before validation. Nothing here should appear in a new recipe: srtctl migrate -f <recipe> --in-place rewrites it, preserving comments and key order, and srtctl migrate --verify -f <path> proves the v1 and migrated documents resolve to the same config. The 2.0 layout is documented in schema-reference.md and config-reference.md.
These keys exist in both layouts, but the value means something else in 2.0. A schema 1 recipe keeps its historical meaning at load; srtctl migrate writes the 2.0 spelling.
Key
schema 1 value
2.0 spelling
2.0 meaning of the old value
frontend.type
sglang (the SGLang Model Gateway router)
sglang-router
sglang is the router-free single sglang.launch_server worker
trtllm_serve: which node runs the disaggregated orchestrator. "head" (default) -> nodes.head (first prefill/CTX node) "first_decode" -> first decode/GEN worker-leader node
dedicated_node
bool
False
If True, reserve a node exclusively for the frontend/orchestrator instead of running it on a worker node. Requires at least 2 nodes. Not supported together with resources.het_jobs: true. Default: False.
Which node runs the benchmark client: "head" (default) -> nodes.head (co-located with orchestrator by default) "last_decode" -> last decode/GEN worker-leader node (isolate the client off the CTX/orchestrator node). When the client lands on a different node than the orchestrator, use the injected $SRT_FRONTEND_HOST env in the benchmark command's URL.
client_dedicated_node
bool
False
If True, reserve a node exclusively for the benchmark client instead of running it on a worker node. Requires at least 2 nodes. Not supported together with resources.het_jobs: true. Default: False.
Optional dependency-declaration overrides applied to the dynamo Cargo.toml tree before a source build (requires hash). Each entry is a full <crate> = <spec> TOML line, e.g. 'dynamo-tokenizers = { git = "https://github.com/ai-dynamo/frontend-crates", branch = "..." }' The crate's existing declaration is replaced tree-wide, letting a source build pull a crate from an unmerged branch without waiting for a crates.io release.
backend.type selected the engine; the 2.0 layout writes engine: instead and moves the per-mode keys below onto roles.<role>. The engine-wide knobs (everything not listed here) are unchanged and documented under Engine types in schema-reference.md.
Extra trtllm-serve CLI flags per mode, appended verbatim to the worker command (frontend.type: trtllm_serve only -- dynamo.trtllm takes a different CLI). trtllm_config already covers everything that belongs in the engine YAML, which is nearly everything: trtllm-serve merges that file into LlmArgs. But a few of its options configure the OpenAI SERVER layer rather than the engine and have no LlmArgs field, so no YAML key can reach them. The one that matters in practice is --tool_parser (a click.Choice consumed directly by the server constructor); note that its sibling --reasoning_parser IS forwarded into get_llm_args() and so remains settable from trtllm_config. backend: type: trtllm prefill_extra_args: ["--tool_parser", "glm47"] decode_extra_args: ["--tool_parser", "glm47"]
Mooncake KV store — when set, srtslurm launches mooncake_master on the infra node and auto-injects MOONCAKE_MASTER / MOONCAKE_TE_META_DATA_SERVER / MOONCAKE_LOCAL_HOSTNAME on every vLLM worker.
kv_events_config
bool | dict[str, Any] | None
None
KV events config - enables --kv-events-config with auto-allocated ports. Required for Dynamo's event-driven KV-aware routing. Global true enables defaults for prefill and decode workers. Per-mode: {"prefill": true, "decode": {"topic": "custom"}}
store_config values are JSON-serialized into MOONCAKE_CONFIG_PATH and parsed by vLLM's MooncakeStoreConfig dataclass — fields are a mix of str (e.g. protocol), int (e.g. port), and human-readable sizes (e.g. "4GB"). Type as dict[str, Any] to avoid forcing users to quote numeric values.
Infrastructure configuration for etcd/nats placement.
Key
Type
Default
Description
etcd_nats_dedicated_node
bool
False
If True, run etcd and nats on a dedicated node instead of the head node. This reserves the first node exclusively for infrastructure services. Default: False.
nats_max_payload_mb
int | None
None
Maximum NATS message payload in MB. Default: None (uses NATS default of 1MB). Set to 24+ for disaggregated serving with long ISL (e.g. 65K+ tokens where prompt data exceeds 1MB in NATS messages).