[{"data":1,"prerenderedAt":702},["ShallowReactive",2],{"docs-nav":3,"docs:\u002Fdocs\u002Fconcepts\u002Fconfiguration-ownership":139},[4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58,61,64,67,70,73,76,79,82,85,88,91,94,97,100,103,106,109,112,115,118,121,124,127,130,133,136],{"path":5,"title":6},"\u002Fdocs\u002Faccess-gating","Protect a local route",{"path":8,"title":9},"\u002Fdocs\u002Farchitecture\u002Fsecurity-and-trust","Security and trust",{"path":11,"title":12},"\u002Fdocs\u002Fconcepts\u002Fbuilds-and-deployments","Build and deploy",{"path":14,"title":15},"\u002Fdocs\u002Fconcepts\u002Fconfiguration-ownership","Where configuration belongs",{"path":17,"title":18},"\u002Fdocs\u002Fconcepts\u002Fenvironments-and-secrets","Environment values and secrets",{"path":20,"title":21},"\u002Fdocs\u002Fconcepts\u002Fmental-model","How projects fit together",{"path":23,"title":24},"\u002Fdocs\u002Fconcepts\u002Fplans-and-apply","Plans and apply",{"path":26,"title":27},"\u002Fdocs\u002Fconcepts\u002Ftargets-and-runtimes","Choose a target and runtime",{"path":29,"title":30},"\u002Fdocs\u002Fcontribute\u002Freleases","Publish a release",{"path":32,"title":33},"\u002Fdocs\u002Fdevelopment-mounts","Development mounts",{"path":35,"title":36},"\u002Fdocs\u002Fgetting-started","Getting started",{"path":38,"title":39},"\u002Fdocs\u002Fhelp\u002Ffaq","FAQ",{"path":41,"title":42},"\u002Fdocs\u002Fhelp\u002Ftroubleshooting","Troubleshooting",{"path":44,"title":45},"\u002Fdocs\u002Fhow-to\u002Fdeploy-production","Prepare a deployment environment",{"path":47,"title":48},"\u002Fdocs\u002Fhow-to\u002Fswarm-cluster","Run on a multi-node Swarm",{"path":50,"title":51},"\u002Fdocs","mm documentation",{"path":53,"title":54},"\u002Fdocs\u002Fjobs-and-schedules","Jobs and schedules",{"path":56,"title":57},"\u002Fdocs\u002Flocal-dashboard","Local dashboard",{"path":59,"title":60},"\u002Fdocs\u002Flocal-https","Local HTTPS",{"path":62,"title":63},"\u002Fdocs\u002Flocal-services","Local services",{"path":65,"title":66},"\u002Fdocs\u002Fmcp","Let an AI agent work on your project",{"path":68,"title":69},"\u002Fdocs\u002Fmulti-project-hosts","Run multiple projects on one host",{"path":71,"title":72},"\u002Fdocs\u002Fonboarding","Set up a project",{"path":74,"title":75},"\u002Fdocs\u002Fopenbao","Use OpenBao",{"path":77,"title":78},"\u002Fdocs\u002Fproject\u002Fcontributing","Contributing",{"path":80,"title":81},"\u002Fdocs\u002Fproject\u002Flicense","License",{"path":83,"title":84},"\u002Fdocs\u002Fproject\u002Fsecurity","Security",{"path":86,"title":87},"\u002Fdocs\u002Freference\u002Fcapability-matrix","Supported features and platforms",{"path":89,"title":90},"\u002Fdocs\u002Freference\u002Fcli","CLI command reference",{"path":92,"title":93},"\u002Fdocs\u002Freference\u002Fconfiguration","Configuration",{"path":95,"title":96},"\u002Fdocs\u002Freference\u002Fenvironment-variables","Environment variables",{"path":98,"title":99},"\u002Fdocs\u002Freference\u002Ferrors-and-exit-codes","Errors and exit codes",{"path":101,"title":102},"\u002Fdocs\u002Freference\u002Fknown-issues","Known limitations",{"path":104,"title":105},"\u002Fdocs\u002Fremote-access","Manage remote access",{"path":107,"title":108},"\u002Fdocs\u002Fremote-daemon","Set up a remote host",{"path":110,"title":111},"\u002Fdocs\u002Fruntime-observability","Status, logs, and commands",{"path":113,"title":114},"\u002Fdocs\u002Fsecret-delivery","Pass secrets to your app",{"path":116,"title":117},"\u002Fdocs\u002Fsecret-providers","Choose a secret store",{"path":119,"title":120},"\u002Fdocs\u002Fstart\u002Finstall","Install mm",{"path":122,"title":123},"\u002Fdocs\u002Fterminal-ui","Terminal UI",{"path":125,"title":126},"\u002Fdocs\u002Ftutorials\u002Fdotnet-web-api",".NET web API example",{"path":128,"title":129},"\u002Fdocs\u002Ftutorials\u002Ffirst-local-app","First local app",{"path":131,"title":132},"\u002Fdocs\u002Ftutorials\u002Flaravel-rust","Laravel and Rust example",{"path":134,"title":135},"\u002Fdocs\u002Ftutorials\u002Fnode-fullstack","Node full stack example",{"path":137,"title":138},"\u002Fdocs\u002Fvault","Use HashiCorp Vault",{"id":140,"title":15,"body":141,"description":695,"extension":696,"meta":697,"navigation":698,"path":14,"seo":699,"stem":700,"__hash__":701},"docs\u002Fdocs\u002Fconcepts\u002Fconfiguration-ownership.md",{"type":142,"value":143,"toc":690},"minimark",[144,149,162,187,194,215,219,290,293,418,424,569,580,584,599,612,619,630,679,686],[145,146,148],"h2",{"id":147},"project-settings","Project settings",[150,151,152,153,157,158,161],"p",{},"Keep the project file at ",[154,155,156],"code",{},".config\u002Fmm.yaml"," and commit it. mm searches the current\ndirectory and its parents for that exact path. It requires ",[154,159,160],{},"schema-version: 1","\nand rejects unknown keys, so typos are reported instead of ignored.",[163,164,169],"pre",{"className":165,"code":166,"language":167,"meta":168,"style":168},"language-sh shiki shiki-themes mm","mm config validate\n","sh","",[154,170,171],{"__ignoreMap":168},[172,173,176,180,184],"span",{"class":174,"line":175},"line",1,[172,177,179],{"class":178},"svrjQ","mm",[172,181,183],{"class":182},"sv8ni"," config",[172,185,186],{"class":182}," validate\n",[150,188,189,190,193],{},"To select a project from elsewhere, use ",[154,191,192],{},"mm --root PATH config validate",".\nPaths inside the configuration must stay inside the project; symlink escapes\nare not allowed.",[150,195,196,197,200,201,204,205,208,209,214],{},"A large project can move any top-level key into its own committed file, for\nexample ",[154,198,199],{},"stacks:"," into ",[154,202,203],{},".config\u002Fmm\u002Fstacks.yaml",", so it can have its own\nreviewers. ",[154,206,207],{},"mm config split stacks"," reviews the move. See\n",[210,211,213],"a",{"href":212},"..\u002Freference\u002Fconfiguration#split-a-large-configuration","split a large configuration",".",[145,216,218],{"id":217},"compose-or-mmyaml","Compose or mm.yaml?",[220,221,222,235],"table",{},[223,224,225],"thead",{},[226,227,228,232],"tr",{},[229,230,231],"th",{},"Setting",[229,233,234],{},"Put it in",[236,237,238,247,254,263,272,281],"tbody",{},[226,239,240,244],{},[241,242,243],"td",{},"Container command, health check, restart policy, ordinary volumes",[241,245,246],{},"Compose",[226,248,249,252],{},[241,250,251],{},"Third-party image, such as PostgreSQL",[241,253,246],{},[226,255,256,259],{},[241,257,258],{},"Image repository for code mm builds",[241,260,261],{},[154,262,156],{},[226,264,265,268],{},[241,266,267],{},"Environment templates, bindings, and secret references",[241,269,270],{},[154,271,156],{},[226,273,274,277],{},[241,275,276],{},"Managed networks and their service connections",[241,278,279],{},[154,280,156],{},[226,282,283,286],{},[241,284,285],{},"Domains and HTTP routes",[241,287,288],{},[154,289,156],{},[150,291,292],{},"For example, Compose describes how an API runs:",[163,294,298],{"className":295,"code":296,"language":297,"meta":168,"style":168},"language-yaml shiki shiki-themes mm","# compose.yaml\nservices:\n  api:\n    command: [\".\u002Fapp\", \"serve\"]\n    healthcheck:\n      test: [\"CMD\", \".\u002Fapp\", \"health\"]\n    volumes:\n      - api-data:\u002Fvar\u002Flib\u002Fapi\nvolumes:\n  api-data: {}\n","yaml",[154,299,300,306,317,325,349,357,382,390,399,407],{"__ignoreMap":168},[172,301,302],{"class":174,"line":175},[172,303,305],{"class":304},"sP7nD","# compose.yaml\n",[172,307,309,313],{"class":174,"line":308},2,[172,310,312],{"class":311},"sWZmh","services",[172,314,316],{"class":315},"sIbZ0",":\n",[172,318,320,323],{"class":174,"line":319},3,[172,321,322],{"class":311},"  api",[172,324,316],{"class":315},[172,326,328,331,334,337,340,343,346],{"class":174,"line":327},4,[172,329,330],{"class":311},"    command",[172,332,333],{"class":315},":",[172,335,336],{"class":315}," [",[172,338,339],{"class":182},"\".\u002Fapp\"",[172,341,342],{"class":315},",",[172,344,345],{"class":182}," \"serve\"",[172,347,348],{"class":315},"]\n",[172,350,352,355],{"class":174,"line":351},5,[172,353,354],{"class":311},"    healthcheck",[172,356,316],{"class":315},[172,358,360,363,365,367,370,372,375,377,380],{"class":174,"line":359},6,[172,361,362],{"class":311},"      test",[172,364,333],{"class":315},[172,366,336],{"class":315},[172,368,369],{"class":182},"\"CMD\"",[172,371,342],{"class":315},[172,373,374],{"class":182}," \".\u002Fapp\"",[172,376,342],{"class":315},[172,378,379],{"class":182}," \"health\"",[172,381,348],{"class":315},[172,383,385,388],{"class":174,"line":384},7,[172,386,387],{"class":311},"    volumes",[172,389,316],{"class":315},[172,391,393,396],{"class":174,"line":392},8,[172,394,395],{"class":315},"      -",[172,397,398],{"class":182}," api-data:\u002Fvar\u002Flib\u002Fapi\n",[172,400,402,405],{"class":174,"line":401},9,[172,403,404],{"class":311},"volumes",[172,406,316],{"class":315},[172,408,410,413,415],{"class":174,"line":409},10,[172,411,412],{"class":311},"  api-data",[172,414,333],{"class":315},[172,416,417],{"class":315}," {}\n",[150,419,420,421,423],{},"This fragment of ",[154,422,156],{}," connects it to a build and managed network:",[163,425,427],{"className":295,"code":426,"language":297,"meta":168,"style":168},"networks:\n  backend: {}\nstacks:\n  app:\n    files: [compose.yaml]\n    networks: [backend]\nmodules:\n  api:\n    path: services\u002Fapi\n    build:\n      image: ghcr.io\u002Fexample\u002Fapi\n    services:\n      api:\n        stack: app\n        networks: [backend]\n",[154,428,429,436,445,452,459,473,487,494,500,510,517,528,536,544,555],{"__ignoreMap":168},[172,430,431,434],{"class":174,"line":175},[172,432,433],{"class":311},"networks",[172,435,316],{"class":315},[172,437,438,441,443],{"class":174,"line":308},[172,439,440],{"class":311},"  backend",[172,442,333],{"class":315},[172,444,417],{"class":315},[172,446,447,450],{"class":174,"line":319},[172,448,449],{"class":311},"stacks",[172,451,316],{"class":315},[172,453,454,457],{"class":174,"line":327},[172,455,456],{"class":311},"  app",[172,458,316],{"class":315},[172,460,461,464,466,468,471],{"class":174,"line":351},[172,462,463],{"class":311},"    files",[172,465,333],{"class":315},[172,467,336],{"class":315},[172,469,470],{"class":182},"compose.yaml",[172,472,348],{"class":315},[172,474,475,478,480,482,485],{"class":174,"line":359},[172,476,477],{"class":311},"    networks",[172,479,333],{"class":315},[172,481,336],{"class":315},[172,483,484],{"class":182},"backend",[172,486,348],{"class":315},[172,488,489,492],{"class":174,"line":384},[172,490,491],{"class":311},"modules",[172,493,316],{"class":315},[172,495,496,498],{"class":174,"line":392},[172,497,322],{"class":311},[172,499,316],{"class":315},[172,501,502,505,507],{"class":174,"line":401},[172,503,504],{"class":311},"    path",[172,506,333],{"class":315},[172,508,509],{"class":182}," services\u002Fapi\n",[172,511,512,515],{"class":174,"line":409},[172,513,514],{"class":311},"    build",[172,516,316],{"class":315},[172,518,520,523,525],{"class":174,"line":519},11,[172,521,522],{"class":311},"      image",[172,524,333],{"class":315},[172,526,527],{"class":182}," ghcr.io\u002Fexample\u002Fapi\n",[172,529,531,534],{"class":174,"line":530},12,[172,532,533],{"class":311},"    services",[172,535,316],{"class":315},[172,537,539,542],{"class":174,"line":538},13,[172,540,541],{"class":311},"      api",[172,543,316],{"class":315},[172,545,547,550,552],{"class":174,"line":546},14,[172,548,549],{"class":311},"        stack",[172,551,333],{"class":315},[172,553,554],{"class":182}," app\n",[172,556,558,561,563,565,567],{"class":174,"line":557},15,[172,559,560],{"class":311},"        networks",[172,562,333],{"class":315},[172,564,336],{"class":315},[172,566,484],{"class":182},[172,568,348],{"class":315},[150,570,571,572,575,576,579],{},"mm supplies the image, environment, and managed network settings when deploying.\nDo not duplicate them in source Compose. Source Compose cannot declare\n",[154,573,574],{},"environment",", ",[154,577,578],{},"env_file",", mm-managed networks, or reserved mm labels.\nNested Compose includes are also unsupported.",[145,581,583],{"id":582},"private-workstation-settings","Private workstation settings",[150,585,586,587,590,591,594,595,214],{},"For per-checkout project customizations, use ",[154,588,589],{},".config\u002Fmm.overrides.yaml"," beside\nthe shared configuration. For example, set ",[154,592,593],{},"build.platforms: [linux\u002Farm64]"," on\nan Apple Silicon workstation. The override is a partial configuration: mappings\nmerge by key and lists replace their shared counterparts. See the\n",[210,596,598],{"href":597},"..\u002Freference\u002Fconfiguration#local-overrides","configuration reference",[150,600,601,604,605,608,609,611],{},[154,602,603],{},"mm init"," reviews and installs the corresponding project ",[154,606,607],{},".gitignore"," rule.\nExisting repositories should commit that rule once; each developer's override\nthen remains untracked. Shared config editors continue to edit ",[154,610,156],{},",\nor the split file that declares the key.",[150,613,614,615,618],{},"Targets, runtime preferences, credentials, encrypted secrets, certificates, and\noperation history normally live under ",[154,616,617],{},"~\u002F.mm",". They are not project files and\nmust not be committed.",[150,620,621,622,625,626,629],{},"Use ",[154,623,624],{},"MM_HOME"," or ",[154,627,628],{},"--mm-home"," for a separate private state directory:",[163,631,633],{"className":165,"code":632,"language":167,"meta":168,"style":168},"export MM_HOME=\"$HOME\u002F.mm-work\"\nmm target list\nmm target preference show\n",[154,634,635,657,667],{"__ignoreMap":168},[172,636,637,641,644,647,650,654],{"class":174,"line":175},[172,638,640],{"class":639},"sBV6d","export",[172,642,643],{"class":311}," MM_HOME",[172,645,646],{"class":315},"=",[172,648,649],{"class":182},"\"",[172,651,653],{"class":652},"sRW9m","$HOME",[172,655,656],{"class":182},"\u002F.mm-work\"\n",[172,658,659,661,664],{"class":174,"line":308},[172,660,179],{"class":178},[172,662,663],{"class":182}," target",[172,665,666],{"class":182}," list\n",[172,668,669,671,673,676],{"class":174,"line":319},[172,670,179],{"class":178},[172,672,663],{"class":182},[172,674,675],{"class":182}," preference",[172,677,678],{"class":182}," show\n",[150,680,681,682,214],{},"The project can refer to a target or secret by name without containing its\nconnection credentials. See ",[210,683,685],{"href":684},".\u002Fenvironments-and-secrets","environments and secrets",[687,688,689],"style",{},"html pre.shiki code .svrjQ, html code.shiki .svrjQ{--shiki-default:var(--mm-code-function)}html pre.shiki code .sv8ni, html code.shiki .sv8ni{--shiki-default:var(--mm-code-string)}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 .sP7nD, html code.shiki .sP7nD{--shiki-default:var(--mm-code-comment)}html pre.shiki code .sWZmh, html code.shiki .sWZmh{--shiki-default:var(--mm-code-key)}html pre.shiki code .sIbZ0, html code.shiki .sIbZ0{--shiki-default:var(--mm-code-punctuation)}html pre.shiki code .sBV6d, html code.shiki .sBV6d{--shiki-default:var(--mm-code-keyword)}html pre.shiki code .sRW9m, html code.shiki .sRW9m{--shiki-default:var(--mm-code-variable)}",{"title":168,"searchDepth":308,"depth":308,"links":691},[692,693,694],{"id":147,"depth":308,"text":148},{"id":217,"depth":308,"text":218},{"id":582,"depth":308,"text":583},"Decide what goes in Compose, mm.yaml, and private workstation state.","md",{},true,{"title":15,"description":695},"docs\u002Fconcepts\u002Fconfiguration-ownership","U7vkXDVP_Hl2HIiIUspj645vlFlqiFC5xzJMhlGtkbM",1794512545913]