[{"data":1,"prerenderedAt":4208},["ShallowReactive",2],{"navigation_docs":3,"-concepts-configuration":144,"-concepts-configuration-surround":4203},[4,35,84,109,124,134,139],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Get Started","\u002Fget-started","1.get-started",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fget-started\u002Fintroduction","1.get-started\u002F1.introduction","i-lucide-house",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fget-started\u002Finstallation","1.get-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick start","\u002Fget-started\u002Fquickstart","1.get-started\u002F3.quickstart","i-lucide-rocket",{"title":25,"path":26,"stem":27,"icon":28},"Project structure","\u002Fget-started\u002Fproject-structure","1.get-started\u002F4.project-structure","i-lucide-folder-tree",{"title":30,"path":31,"stem":32,"icon":33},"Dashboard","\u002Fget-started\u002Fdashboard","1.get-started\u002F5.dashboard","i-lucide-layout-dashboard",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Concepts","\u002Fconcepts","2.concepts",[40,45,50,55,60,65,69,74,79],{"title":41,"path":42,"stem":43,"icon":44},"Architecture","\u002Fconcepts\u002Farchitecture","2.concepts\u002F1.architecture","i-lucide-layers",{"title":46,"path":47,"stem":48,"icon":49},"Machines","\u002Fconcepts\u002Fmachines","2.concepts\u002F2.machines","i-lucide-server",{"title":51,"path":52,"stem":53,"icon":54},"Colony & users","\u002Fconcepts\u002Fcolony","2.concepts\u002F3.colony","i-lucide-users",{"title":56,"path":57,"stem":58,"icon":59},"Transport","\u002Fconcepts\u002Ftransport","2.concepts\u002F4.transport","i-lucide-network",{"title":61,"path":62,"stem":63,"icon":64},"Configuration","\u002Fconcepts\u002Fconfiguration","2.concepts\u002F5.configuration","i-lucide-settings",{"title":66,"path":67,"stem":68,"icon":23},"Deploy","\u002Fconcepts\u002Fdeploy","2.concepts\u002F6.deploy",{"title":70,"path":71,"stem":72,"icon":73},"Groups","\u002Fconcepts\u002Fgroups","2.concepts\u002F7.groups","i-lucide-boxes",{"title":75,"path":76,"stem":77,"icon":78},"Templates","\u002Fconcepts\u002Ftemplates","2.concepts\u002F8.templates","i-lucide-package-plus",{"title":80,"path":81,"stem":82,"icon":83},"Existing projects","\u002Fconcepts\u002Fexisting-projects","2.concepts\u002F9.existing-projects","i-lucide-folder-open",{"title":85,"path":86,"stem":87,"children":88,"page":34},"Remote","\u002Fremote","3.remote",[89,94,99,104],{"title":90,"path":91,"stem":92,"icon":93},"Remote machines","\u002Fremote\u002Foverview","3.remote\u002F1.overview","i-lucide-cloud",{"title":95,"path":96,"stem":97,"icon":98},"Remote deploy","\u002Fremote\u002Fdeploy","3.remote\u002F2.deploy","i-lucide-send",{"title":100,"path":101,"stem":102,"icon":103},"CI","\u002Fremote\u002Fci","3.remote\u002F3.ci","i-lucide-workflow",{"title":105,"path":106,"stem":107,"icon":108},"Tunnels","\u002Fremote\u002Ftunnel","3.remote\u002F4.tunnel","i-lucide-cable",{"title":110,"path":111,"stem":112,"children":113,"page":34},"Security","\u002Fsecurity","4.security",[114,119],{"title":115,"path":116,"stem":117,"icon":118},"Security model","\u002Fsecurity\u002Fmodel","4.security\u002F1.model","i-lucide-shield",{"title":120,"path":121,"stem":122,"icon":123},"Known issues","\u002Fsecurity\u002Fknown-issues","4.security\u002F2.known-issues","i-lucide-triangle-alert",{"title":125,"path":126,"stem":127,"children":128,"page":34},"Reference","\u002Freference","5.reference",[129],{"title":130,"path":131,"stem":132,"icon":133},"CLI reference","\u002Freference\u002Fcli","5.reference\u002F1.cli","i-lucide-terminal",{"title":135,"path":136,"stem":137,"icon":138},"Changelog","\u002Fchangelog","changelog","i-lucide-history",{"title":140,"path":141,"stem":142,"icon":143},"Communities","\u002Fcommunities","communities","i-lucide-heart-handshake",{"id":145,"title":61,"body":146,"description":4195,"extension":4196,"links":4197,"meta":4198,"navigation":4199,"path":62,"seo":4200,"stem":63,"__hash__":4202},"docs\u002F2.concepts\u002F5.configuration.md",{"type":147,"value":148,"toc":4174},"minimark",[149,153,162,1180,1185,1334,1340,1737,1749,1753,1798,1802,1823,1827,1834,1962,1966,1969,1977,2014,2029,2047,2069,2078,2085,2092,3082,3085,3229,3233,3403,3444,3467,3487,3490,3493,3537,3540,3582,3627,3634,3644,3658,3660,3680,3691,3698,3868,3926,3930,3933,3962,3968,3975,3978,3999,4019,4026,4144,4170],[150,151,152],"p",{},"Ant has two configuration files: one per project, one per machine.",[154,155,157,161],"h2",{"id":156},"antyaml-per-project",[158,159,160],"code",{},"ant.yaml"," (per project)",[163,164,169],"pre",{"className":165,"code":166,"language":167,"meta":168,"style":168},"language-yaml shiki shiki-themes material-theme-lighter github-light github-dark","version: 1                # schema version (optional)\napp: my-app               # required; unique per server\ngroup: backend            # optional; the client-side group this project belongs to\nkind: app                 # optional; \"app\" (default) or \"database\" (template stacks)\nmachine: prod             # optional; target a registered machine (default local)\ngit_url: https:\u002F\u002Fgithub.com\u002Facme\u002Fapi.git   # optional; canonical repo URL\n\nbuild:\n  context: .              # build context directory, relative to the project root\n  dockerfile: Dockerfile   # Dockerfile path, relative to context\n\ndeploy:\n  build: dockerfile       # dockerfile | nixpacks | buildpacks | railpack | none\n  run: container          # container | compose | stack\n  port: 3000              # container port exposed to the host \u002F reverse proxy\n  dockerfile: Dockerfile  # override build.dockerfile for the deploy stage\n  file: docker-compose.yml        # compose file (used when run: compose)\n  files: [compose.yml, compose.prod.yml]   # ordered compose layers\n  publish: loopback       # loopback (default) | all, host bind address\n  image: ghcr.io\u002Facme\u002Fapi:1.4.2    # pre-built image; required when build: none\n  replicas: 2             # desired instance count (compose\u002Fstack)\n  build_services: true    # rebuild compose services that declare build: (default true)\n  profiles: [worker]      # docker compose profiles to activate\n  zero_downtime: true     # start the new container and move routing before stopping the old\n  keep_images: 3          # app image tags retained (falls back to rollback.keep_releases)\n  build_env: [NODE_ENV=production, PUBLIC_URL]   # build-time args (bare KEY reads the env)\n  health_check:\n    path: \u002Fhealth\n    interval: 10s\n    timeout: 5s\n    retries: 3\n  resources:\n    cpu: \"0.5\"\n    memory: 512m\n  logging:\n    max_size: 10m\n    max_files: 3\n  registry:\n    type: external        # local | external\n    host: ghcr.io\n    repository: acme\u002Fapi\n    username: acme\n  image_signing:          # optional cosign verification before pull\u002Frun\n    mode: required        # off | warn | required\n    issuer: https:\u002F\u002Ftoken.actions.githubusercontent.com\n    identity: https:\u002F\u002Fgithub.com\u002Facme\u002Fapi\u002F.github\u002Fworkflows\u002Frelease.yml@refs\u002Fheads\u002Fmain\n    public_key: \u002Fpath\u002Fto\u002Fcosign.pub   # optional, for the key-pair flow\n  volumes:                # run: container only\n    - data:\u002Fvar\u002Flib\u002Fapp   # named volume (namespaced to \u003Cname>-data)\n    - .\u002Fuploads:\u002Fapp\u002Fuploads:ro\n    - source: cache\n      target: \u002Fvar\u002Fcache\u002Fapp\n      read_only: true\n      machine: prod       # scope the mount to one nest\n  networks:\n    - name: shared\n      driver: bridge\n      subnet: 172.30.0.0\u002F16\n      external: false\n  use_group_network: true     # join the group's network (default true)\n  use_machine_network: false  # join the machine-wide network (default false)\n\nrollback:\n  keep_releases: 5        # releases retained for `ant trail rollback`\n  pre_hook: .\u002Fscripts\u002Fpre-rollback.sh\n  post_hook: .\u002Fscripts\u002Fpost-rollback.sh\n\nnaming:\n  branch: false           # omit the git branch from resource names\n\ndeployments:\n  dev:\n    deploy: { port: 4000 }        # per-deployment deploy overrides (merge over the base)\n    build: { dockerfile: Dockerfile.dev }\n    server: prod                  # per-deployment target (overrides machine:)\n    port_offset: 1                # added to deploy.port for the host bind\n    auto_open: true               # open the browser after a local deploy\n    env:\n      - LOG_LEVEL=debug\n    env_file: [.env.local]        # lowest-precedence env source\n    secrets: [API_TOKEN]\n    domains:\n      - api.dev.localhost\n","yaml","",[158,170,171,192,207,221,235,249,263,270,279,293,307,312,320,334,348,362,374,388,414,428,442,456,471,489,502,516,539,547,558,569,580,591,599,617,628,636,647,657,665,679,690,701,712,723,737,748,759,773,784,796,804,817,828,839,852,860,873,884,895,906,919,933,938,946,960,971,982,987,995,1008,1013,1021,1029,1054,1074,1087,1100,1113,1121,1130,1148,1164,1172],{"__ignoreMap":168},[172,173,176,180,184,188],"span",{"class":174,"line":175},"line",1,[172,177,179],{"class":178},"sQzsp","version",[172,181,183],{"class":182},"sP7_E",":",[172,185,187],{"class":186},"srdBf"," 1",[172,189,191],{"class":190},"sutJx","                # schema version (optional)\n",[172,193,195,198,200,204],{"class":174,"line":194},2,[172,196,197],{"class":178},"app",[172,199,183],{"class":182},[172,201,203],{"class":202},"s_sjI"," my-app",[172,205,206],{"class":190},"               # required; unique per server\n",[172,208,210,213,215,218],{"class":174,"line":209},3,[172,211,212],{"class":178},"group",[172,214,183],{"class":182},[172,216,217],{"class":202}," backend",[172,219,220],{"class":190},"            # optional; the client-side group this project belongs to\n",[172,222,224,227,229,232],{"class":174,"line":223},4,[172,225,226],{"class":178},"kind",[172,228,183],{"class":182},[172,230,231],{"class":202}," app",[172,233,234],{"class":190},"                 # optional; \"app\" (default) or \"database\" (template stacks)\n",[172,236,238,241,243,246],{"class":174,"line":237},5,[172,239,240],{"class":178},"machine",[172,242,183],{"class":182},[172,244,245],{"class":202}," prod",[172,247,248],{"class":190},"             # optional; target a registered machine (default local)\n",[172,250,252,255,257,260],{"class":174,"line":251},6,[172,253,254],{"class":178},"git_url",[172,256,183],{"class":182},[172,258,259],{"class":202}," https:\u002F\u002Fgithub.com\u002Facme\u002Fapi.git",[172,261,262],{"class":190},"   # optional; canonical repo URL\n",[172,264,266],{"class":174,"line":265},7,[172,267,269],{"emptyLinePlaceholder":268},true,"\n",[172,271,273,276],{"class":174,"line":272},8,[172,274,275],{"class":178},"build",[172,277,278],{"class":182},":\n",[172,280,282,285,287,290],{"class":174,"line":281},9,[172,283,284],{"class":178},"  context",[172,286,183],{"class":182},[172,288,289],{"class":186}," .",[172,291,292],{"class":190},"              # build context directory, relative to the project root\n",[172,294,296,299,301,304],{"class":174,"line":295},10,[172,297,298],{"class":178},"  dockerfile",[172,300,183],{"class":182},[172,302,303],{"class":202}," Dockerfile",[172,305,306],{"class":190},"   # Dockerfile path, relative to context\n",[172,308,310],{"class":174,"line":309},11,[172,311,269],{"emptyLinePlaceholder":268},[172,313,315,318],{"class":174,"line":314},12,[172,316,317],{"class":178},"deploy",[172,319,278],{"class":182},[172,321,323,326,328,331],{"class":174,"line":322},13,[172,324,325],{"class":178},"  build",[172,327,183],{"class":182},[172,329,330],{"class":202}," dockerfile",[172,332,333],{"class":190},"       # dockerfile | nixpacks | buildpacks | railpack | none\n",[172,335,337,340,342,345],{"class":174,"line":336},14,[172,338,339],{"class":178},"  run",[172,341,183],{"class":182},[172,343,344],{"class":202}," container",[172,346,347],{"class":190},"          # container | compose | stack\n",[172,349,351,354,356,359],{"class":174,"line":350},15,[172,352,353],{"class":178},"  port",[172,355,183],{"class":182},[172,357,358],{"class":186}," 3000",[172,360,361],{"class":190},"              # container port exposed to the host \u002F reverse proxy\n",[172,363,365,367,369,371],{"class":174,"line":364},16,[172,366,298],{"class":178},[172,368,183],{"class":182},[172,370,303],{"class":202},[172,372,373],{"class":190},"  # override build.dockerfile for the deploy stage\n",[172,375,377,380,382,385],{"class":174,"line":376},17,[172,378,379],{"class":178},"  file",[172,381,183],{"class":182},[172,383,384],{"class":202}," docker-compose.yml",[172,386,387],{"class":190},"        # compose file (used when run: compose)\n",[172,389,391,394,396,399,402,405,408,411],{"class":174,"line":390},18,[172,392,393],{"class":178},"  files",[172,395,183],{"class":182},[172,397,398],{"class":182}," [",[172,400,401],{"class":202},"compose.yml",[172,403,404],{"class":182},",",[172,406,407],{"class":202}," compose.prod.yml",[172,409,410],{"class":182},"]",[172,412,413],{"class":190},"   # ordered compose layers\n",[172,415,417,420,422,425],{"class":174,"line":416},19,[172,418,419],{"class":178},"  publish",[172,421,183],{"class":182},[172,423,424],{"class":202}," loopback",[172,426,427],{"class":190},"       # loopback (default) | all, host bind address\n",[172,429,431,434,436,439],{"class":174,"line":430},20,[172,432,433],{"class":178},"  image",[172,435,183],{"class":182},[172,437,438],{"class":202}," ghcr.io\u002Facme\u002Fapi:1.4.2",[172,440,441],{"class":190},"    # pre-built image; required when build: none\n",[172,443,445,448,450,453],{"class":174,"line":444},21,[172,446,447],{"class":178},"  replicas",[172,449,183],{"class":182},[172,451,452],{"class":186}," 2",[172,454,455],{"class":190},"             # desired instance count (compose\u002Fstack)\n",[172,457,459,462,464,468],{"class":174,"line":458},22,[172,460,461],{"class":178},"  build_services",[172,463,183],{"class":182},[172,465,467],{"class":466},"syTEX"," true",[172,469,470],{"class":190},"    # rebuild compose services that declare build: (default true)\n",[172,472,474,477,479,481,484,486],{"class":174,"line":473},23,[172,475,476],{"class":178},"  profiles",[172,478,183],{"class":182},[172,480,398],{"class":182},[172,482,483],{"class":202},"worker",[172,485,410],{"class":182},[172,487,488],{"class":190},"      # docker compose profiles to activate\n",[172,490,492,495,497,499],{"class":174,"line":491},24,[172,493,494],{"class":178},"  zero_downtime",[172,496,183],{"class":182},[172,498,467],{"class":466},[172,500,501],{"class":190},"     # start the new container and move routing before stopping the old\n",[172,503,505,508,510,513],{"class":174,"line":504},25,[172,506,507],{"class":178},"  keep_images",[172,509,183],{"class":182},[172,511,512],{"class":186}," 3",[172,514,515],{"class":190},"          # app image tags retained (falls back to rollback.keep_releases)\n",[172,517,519,522,524,526,529,531,534,536],{"class":174,"line":518},26,[172,520,521],{"class":178},"  build_env",[172,523,183],{"class":182},[172,525,398],{"class":182},[172,527,528],{"class":202},"NODE_ENV=production",[172,530,404],{"class":182},[172,532,533],{"class":202}," PUBLIC_URL",[172,535,410],{"class":182},[172,537,538],{"class":190},"   # build-time args (bare KEY reads the env)\n",[172,540,542,545],{"class":174,"line":541},27,[172,543,544],{"class":178},"  health_check",[172,546,278],{"class":182},[172,548,550,553,555],{"class":174,"line":549},28,[172,551,552],{"class":178},"    path",[172,554,183],{"class":182},[172,556,557],{"class":202}," \u002Fhealth\n",[172,559,561,564,566],{"class":174,"line":560},29,[172,562,563],{"class":178},"    interval",[172,565,183],{"class":182},[172,567,568],{"class":202}," 10s\n",[172,570,572,575,577],{"class":174,"line":571},30,[172,573,574],{"class":178},"    timeout",[172,576,183],{"class":182},[172,578,579],{"class":202}," 5s\n",[172,581,583,586,588],{"class":174,"line":582},31,[172,584,585],{"class":178},"    retries",[172,587,183],{"class":182},[172,589,590],{"class":186}," 3\n",[172,592,594,597],{"class":174,"line":593},32,[172,595,596],{"class":178},"  resources",[172,598,278],{"class":182},[172,600,602,605,607,611,614],{"class":174,"line":601},33,[172,603,604],{"class":178},"    cpu",[172,606,183],{"class":182},[172,608,610],{"class":609},"sjJ54"," \"",[172,612,613],{"class":202},"0.5",[172,615,616],{"class":609},"\"\n",[172,618,620,623,625],{"class":174,"line":619},34,[172,621,622],{"class":178},"    memory",[172,624,183],{"class":182},[172,626,627],{"class":202}," 512m\n",[172,629,631,634],{"class":174,"line":630},35,[172,632,633],{"class":178},"  logging",[172,635,278],{"class":182},[172,637,639,642,644],{"class":174,"line":638},36,[172,640,641],{"class":178},"    max_size",[172,643,183],{"class":182},[172,645,646],{"class":202}," 10m\n",[172,648,650,653,655],{"class":174,"line":649},37,[172,651,652],{"class":178},"    max_files",[172,654,183],{"class":182},[172,656,590],{"class":186},[172,658,660,663],{"class":174,"line":659},38,[172,661,662],{"class":178},"  registry",[172,664,278],{"class":182},[172,666,668,671,673,676],{"class":174,"line":667},39,[172,669,670],{"class":178},"    type",[172,672,183],{"class":182},[172,674,675],{"class":202}," external",[172,677,678],{"class":190},"        # local | external\n",[172,680,682,685,687],{"class":174,"line":681},40,[172,683,684],{"class":178},"    host",[172,686,183],{"class":182},[172,688,689],{"class":202}," ghcr.io\n",[172,691,693,696,698],{"class":174,"line":692},41,[172,694,695],{"class":178},"    repository",[172,697,183],{"class":182},[172,699,700],{"class":202}," acme\u002Fapi\n",[172,702,704,707,709],{"class":174,"line":703},42,[172,705,706],{"class":178},"    username",[172,708,183],{"class":182},[172,710,711],{"class":202}," acme\n",[172,713,715,718,720],{"class":174,"line":714},43,[172,716,717],{"class":178},"  image_signing",[172,719,183],{"class":182},[172,721,722],{"class":190},"          # optional cosign verification before pull\u002Frun\n",[172,724,726,729,731,734],{"class":174,"line":725},44,[172,727,728],{"class":178},"    mode",[172,730,183],{"class":182},[172,732,733],{"class":202}," required",[172,735,736],{"class":190},"        # off | warn | required\n",[172,738,740,743,745],{"class":174,"line":739},45,[172,741,742],{"class":178},"    issuer",[172,744,183],{"class":182},[172,746,747],{"class":202}," https:\u002F\u002Ftoken.actions.githubusercontent.com\n",[172,749,751,754,756],{"class":174,"line":750},46,[172,752,753],{"class":178},"    identity",[172,755,183],{"class":182},[172,757,758],{"class":202}," https:\u002F\u002Fgithub.com\u002Facme\u002Fapi\u002F.github\u002Fworkflows\u002Frelease.yml@refs\u002Fheads\u002Fmain\n",[172,760,762,765,767,770],{"class":174,"line":761},47,[172,763,764],{"class":178},"    public_key",[172,766,183],{"class":182},[172,768,769],{"class":202}," \u002Fpath\u002Fto\u002Fcosign.pub",[172,771,772],{"class":190},"   # optional, for the key-pair flow\n",[172,774,776,779,781],{"class":174,"line":775},48,[172,777,778],{"class":178},"  volumes",[172,780,183],{"class":182},[172,782,783],{"class":190},"                # run: container only\n",[172,785,787,790,793],{"class":174,"line":786},49,[172,788,789],{"class":182},"    -",[172,791,792],{"class":202}," data:\u002Fvar\u002Flib\u002Fapp",[172,794,795],{"class":190},"   # named volume (namespaced to \u003Cname>-data)\n",[172,797,799,801],{"class":174,"line":798},50,[172,800,789],{"class":182},[172,802,803],{"class":202}," .\u002Fuploads:\u002Fapp\u002Fuploads:ro\n",[172,805,807,809,812,814],{"class":174,"line":806},51,[172,808,789],{"class":182},[172,810,811],{"class":178}," source",[172,813,183],{"class":182},[172,815,816],{"class":202}," cache\n",[172,818,820,823,825],{"class":174,"line":819},52,[172,821,822],{"class":178},"      target",[172,824,183],{"class":182},[172,826,827],{"class":202}," \u002Fvar\u002Fcache\u002Fapp\n",[172,829,831,834,836],{"class":174,"line":830},53,[172,832,833],{"class":178},"      read_only",[172,835,183],{"class":182},[172,837,838],{"class":466}," true\n",[172,840,842,845,847,849],{"class":174,"line":841},54,[172,843,844],{"class":178},"      machine",[172,846,183],{"class":182},[172,848,245],{"class":202},[172,850,851],{"class":190},"       # scope the mount to one nest\n",[172,853,855,858],{"class":174,"line":854},55,[172,856,857],{"class":178},"  networks",[172,859,278],{"class":182},[172,861,863,865,868,870],{"class":174,"line":862},56,[172,864,789],{"class":182},[172,866,867],{"class":178}," name",[172,869,183],{"class":182},[172,871,872],{"class":202}," shared\n",[172,874,876,879,881],{"class":174,"line":875},57,[172,877,878],{"class":178},"      driver",[172,880,183],{"class":182},[172,882,883],{"class":202}," bridge\n",[172,885,887,890,892],{"class":174,"line":886},58,[172,888,889],{"class":178},"      subnet",[172,891,183],{"class":182},[172,893,894],{"class":202}," 172.30.0.0\u002F16\n",[172,896,898,901,903],{"class":174,"line":897},59,[172,899,900],{"class":178},"      external",[172,902,183],{"class":182},[172,904,905],{"class":466}," false\n",[172,907,909,912,914,916],{"class":174,"line":908},60,[172,910,911],{"class":178},"  use_group_network",[172,913,183],{"class":182},[172,915,467],{"class":466},[172,917,918],{"class":190},"     # join the group's network (default true)\n",[172,920,922,925,927,930],{"class":174,"line":921},61,[172,923,924],{"class":178},"  use_machine_network",[172,926,183],{"class":182},[172,928,929],{"class":466}," false",[172,931,932],{"class":190},"  # join the machine-wide network (default false)\n",[172,934,936],{"class":174,"line":935},62,[172,937,269],{"emptyLinePlaceholder":268},[172,939,941,944],{"class":174,"line":940},63,[172,942,943],{"class":178},"rollback",[172,945,278],{"class":182},[172,947,949,952,954,957],{"class":174,"line":948},64,[172,950,951],{"class":178},"  keep_releases",[172,953,183],{"class":182},[172,955,956],{"class":186}," 5",[172,958,959],{"class":190},"        # releases retained for `ant trail rollback`\n",[172,961,963,966,968],{"class":174,"line":962},65,[172,964,965],{"class":178},"  pre_hook",[172,967,183],{"class":182},[172,969,970],{"class":202}," .\u002Fscripts\u002Fpre-rollback.sh\n",[172,972,974,977,979],{"class":174,"line":973},66,[172,975,976],{"class":178},"  post_hook",[172,978,183],{"class":182},[172,980,981],{"class":202}," .\u002Fscripts\u002Fpost-rollback.sh\n",[172,983,985],{"class":174,"line":984},67,[172,986,269],{"emptyLinePlaceholder":268},[172,988,990,993],{"class":174,"line":989},68,[172,991,992],{"class":178},"naming",[172,994,278],{"class":182},[172,996,998,1001,1003,1005],{"class":174,"line":997},69,[172,999,1000],{"class":178},"  branch",[172,1002,183],{"class":182},[172,1004,929],{"class":466},[172,1006,1007],{"class":190},"           # omit the git branch from resource names\n",[172,1009,1011],{"class":174,"line":1010},70,[172,1012,269],{"emptyLinePlaceholder":268},[172,1014,1016,1019],{"class":174,"line":1015},71,[172,1017,1018],{"class":178},"deployments",[172,1020,278],{"class":182},[172,1022,1024,1027],{"class":174,"line":1023},72,[172,1025,1026],{"class":178},"  dev",[172,1028,278],{"class":182},[172,1030,1032,1035,1037,1040,1043,1045,1048,1051],{"class":174,"line":1031},73,[172,1033,1034],{"class":178},"    deploy",[172,1036,183],{"class":182},[172,1038,1039],{"class":182}," {",[172,1041,1042],{"class":178}," port",[172,1044,183],{"class":182},[172,1046,1047],{"class":186}," 4000",[172,1049,1050],{"class":182}," }",[172,1052,1053],{"class":190},"        # per-deployment deploy overrides (merge over the base)\n",[172,1055,1057,1060,1062,1064,1066,1068,1071],{"class":174,"line":1056},74,[172,1058,1059],{"class":178},"    build",[172,1061,183],{"class":182},[172,1063,1039],{"class":182},[172,1065,330],{"class":178},[172,1067,183],{"class":182},[172,1069,1070],{"class":202}," Dockerfile.dev",[172,1072,1073],{"class":182}," }\n",[172,1075,1077,1080,1082,1084],{"class":174,"line":1076},75,[172,1078,1079],{"class":178},"    server",[172,1081,183],{"class":182},[172,1083,245],{"class":202},[172,1085,1086],{"class":190},"                  # per-deployment target (overrides machine:)\n",[172,1088,1090,1093,1095,1097],{"class":174,"line":1089},76,[172,1091,1092],{"class":178},"    port_offset",[172,1094,183],{"class":182},[172,1096,187],{"class":186},[172,1098,1099],{"class":190},"                # added to deploy.port for the host bind\n",[172,1101,1103,1106,1108,1110],{"class":174,"line":1102},77,[172,1104,1105],{"class":178},"    auto_open",[172,1107,183],{"class":182},[172,1109,467],{"class":466},[172,1111,1112],{"class":190},"               # open the browser after a local deploy\n",[172,1114,1116,1119],{"class":174,"line":1115},78,[172,1117,1118],{"class":178},"    env",[172,1120,278],{"class":182},[172,1122,1124,1127],{"class":174,"line":1123},79,[172,1125,1126],{"class":182},"      -",[172,1128,1129],{"class":202}," LOG_LEVEL=debug\n",[172,1131,1133,1136,1138,1140,1143,1145],{"class":174,"line":1132},80,[172,1134,1135],{"class":178},"    env_file",[172,1137,183],{"class":182},[172,1139,398],{"class":182},[172,1141,1142],{"class":202},".env.local",[172,1144,410],{"class":182},[172,1146,1147],{"class":190},"        # lowest-precedence env source\n",[172,1149,1151,1154,1156,1158,1161],{"class":174,"line":1150},81,[172,1152,1153],{"class":178},"    secrets",[172,1155,183],{"class":182},[172,1157,398],{"class":182},[172,1159,1160],{"class":202},"API_TOKEN",[172,1162,1163],{"class":182},"]\n",[172,1165,1167,1170],{"class":174,"line":1166},82,[172,1168,1169],{"class":178},"    domains",[172,1171,278],{"class":182},[172,1173,1175,1177],{"class":174,"line":1174},83,[172,1176,1126],{"class":182},[172,1178,1179],{"class":202}," api.dev.localhost\n",[1181,1182,1184],"h3",{"id":1183},"top-level-keys","Top-level keys",[1186,1187,1188,1201],"table",{},[1189,1190,1191],"thead",{},[1192,1193,1194,1198],"tr",{},[1195,1196,1197],"th",{},"Key",[1195,1199,1200],{},"Meaning",[1202,1203,1204,1218,1227,1240,1256,1269,1278,1295,1304,1313,1325],"tbody",{},[1192,1205,1206,1211],{},[1207,1208,1209],"td",{},[158,1210,179],{},[1207,1212,1213,1214,1217],{},"Schema version (currently ",[158,1215,1216],{},"1","). Optional. Unknown keys are rejected and a newer version is refused, so a typo or a file from a newer ant fails the load instead of silently dropping settings.",[1192,1219,1220,1224],{},[1207,1221,1222],{},[158,1223,197],{},[1207,1225,1226],{},"Project display name. Required, unique per server, used in resource names.",[1192,1228,1229,1233],{},[1207,1230,1231],{},[158,1232,212],{},[1207,1234,1235,1236,1239],{},"Optional client-side ",[1237,1238,212],"a",{"href":71}," the project belongs to.",[1192,1241,1242,1246],{},[1207,1243,1244],{},[158,1245,226],{},[1207,1247,1248,1249,1251,1252,1255],{},"Optional. ",[158,1250,197],{}," (the default) or ",[158,1253,1254],{},"database",", which marks a template stack in the UI.",[1192,1257,1258,1262],{},[1207,1259,1260],{},[158,1261,240],{},[1207,1263,1264,1265,1268],{},"Deploy target (a registered nest id, or ",[158,1266,1267],{},"local","). Empty means local.",[1192,1270,1271,1275],{},[1207,1272,1273],{},[158,1274,254],{},[1207,1276,1277],{},"Canonical git repository URL (metadata).",[1192,1279,1280,1284],{},[1207,1281,1282],{},[158,1283,275],{},[1207,1285,1286,1287,1290,1291,1294],{},"Where the source lives (",[158,1288,1289],{},"context",", ",[158,1292,1293],{},"dockerfile",").",[1192,1296,1297,1301],{},[1207,1298,1299],{},[158,1300,317],{},[1207,1302,1303],{},"Build\u002Frun settings (table below).",[1192,1305,1306,1310],{},[1207,1307,1308],{},[158,1309,943],{},[1207,1311,1312],{},"Release retention and rollback hooks.",[1192,1314,1315,1319],{},[1207,1316,1317],{},[158,1318,992],{},[1207,1320,1321,1322,1294],{},"Resource-name factors (",[158,1323,1324],{},"branch",[1192,1326,1327,1331],{},[1207,1328,1329],{},[158,1330,1018],{},[1207,1332,1333],{},"Per-environment overlays, keyed by environment name.",[1181,1335,1337,1339],{"id":1336},"deploy-keys",[158,1338,317],{}," keys",[1186,1341,1342,1350],{},[1189,1343,1344],{},[1192,1345,1346,1348],{},[1195,1347,1197],{},[1195,1349,1200],{},[1202,1351,1352,1377,1397,1407,1419,1451,1471,1485,1495,1509,1523,1533,1547,1561,1583,1600,1616,1647,1670,1695,1717,1727],{},[1192,1353,1354,1358],{},[1207,1355,1356],{},[158,1357,275],{},[1207,1359,1360,1361,1290,1363,1290,1366,1290,1369,1372,1373,1376],{},"Builder: ",[158,1362,1293],{},[158,1364,1365],{},"nixpacks",[158,1367,1368],{},"buildpacks",[158,1370,1371],{},"railpack",", or ",[158,1374,1375],{},"none"," (pre-built image).",[1192,1378,1379,1384],{},[1207,1380,1381],{},[158,1382,1383],{},"run",[1207,1385,1386,1387,1290,1390,1372,1393,1396],{},"Runtime: ",[158,1388,1389],{},"container",[158,1391,1392],{},"compose",[158,1394,1395],{},"stack"," (Swarm; remote only, images must be pullable).",[1192,1398,1399,1404],{},[1207,1400,1401],{},[158,1402,1403],{},"port",[1207,1405,1406],{},"Container port published to the host \u002F routed by Caddy.",[1192,1408,1409,1413],{},[1207,1410,1411],{},[158,1412,1293],{},[1207,1414,1415,1416,1294],{},"Dockerfile for the deploy stage (overrides ",[158,1417,1418],{},"build.dockerfile",[1192,1420,1421,1430],{},[1207,1422,1423,1426,1427],{},[158,1424,1425],{},"file"," \u002F ",[158,1428,1429],{},"files",[1207,1431,1432,1433,1436,1437,1440,1441,1443,1444,1446,1447,1450],{},"Compose file, or an ordered list layered as repeated ",[158,1434,1435],{},"-f",". Used when ",[158,1438,1439],{},"run: compose","; ",[158,1442,1383],{}," defaults to ",[158,1445,1389],{},", so set both (or let ",[158,1448,1449],{},"ant nest edit deploy --file"," do it).",[1192,1452,1453,1458],{},[1207,1454,1455],{},[158,1456,1457],{},"publish",[1207,1459,1460,1463,1464,1440,1467,1470],{},[158,1461,1462],{},"loopback"," (default) binds ",[158,1465,1466],{},"127.0.0.1",[158,1468,1469],{},"all"," binds every interface.",[1192,1472,1473,1478],{},[1207,1474,1475],{},[158,1476,1477],{},"image",[1207,1479,1480,1481,1484],{},"Pre-built image reference; required when ",[158,1482,1483],{},"build: none",".",[1192,1486,1487,1492],{},[1207,1488,1489],{},[158,1490,1491],{},"replicas",[1207,1493,1494],{},"Desired instance count for compose\u002Fstack.",[1192,1496,1497,1502],{},[1207,1498,1499],{},[158,1500,1501],{},"build_services",[1207,1503,1504,1505,1508],{},"Rebuild compose services declaring ",[158,1506,1507],{},"build:"," on deploy (default true).",[1192,1510,1511,1516],{},[1207,1512,1513],{},[158,1514,1515],{},"profiles",[1207,1517,1518,1519,1522],{},"docker compose ",[158,1520,1521],{},"--profile"," names to activate.",[1192,1524,1525,1530],{},[1207,1526,1527],{},[158,1528,1529],{},"zero_downtime",[1207,1531,1532],{},"Avoid dropping traffic during a deploy: a remote container deploy moves Caddy to an ephemeral port before replacing the old container (needs a domain), and a stack deploy gets Swarm's start-first rolling update. Remote compose still uses the staged swap.",[1192,1534,1535,1540],{},[1207,1536,1537],{},[158,1538,1539],{},"keep_images",[1207,1541,1542,1543,1546],{},"App image tags retained after a deploy; falls back to ",[158,1544,1545],{},"rollback.keep_releases",", then 10.",[1192,1548,1549,1554],{},[1207,1550,1551],{},[158,1552,1553],{},"build_env",[1207,1555,1556,1557,1560],{},"Build args passed to the builder (not the container). A bare ",[158,1558,1559],{},"KEY"," reads ant's env.",[1192,1562,1563,1568],{},[1207,1564,1565],{},[158,1566,1567],{},"health_check",[1207,1569,1570,1571,1290,1574,1290,1577,1290,1580,1484],{},"HTTP readiness probe: ",[158,1572,1573],{},"path",[158,1575,1576],{},"interval",[158,1578,1579],{},"timeout",[158,1581,1582],{},"retries",[1192,1584,1585,1590],{},[1207,1586,1587],{},[158,1588,1589],{},"resources",[1207,1591,1592,1595,1596,1599],{},[158,1593,1594],{},"cpu"," and ",[158,1597,1598],{},"memory"," limits.",[1192,1601,1602,1607],{},[1207,1603,1604],{},[158,1605,1606],{},"logging",[1207,1608,1609,1426,1612,1615],{},[158,1610,1611],{},"max_size",[158,1613,1614],{},"max_files"," json-file rotation.",[1192,1617,1618,1623],{},[1207,1619,1620],{},[158,1621,1622],{},"registry",[1207,1624,1625,1626,1290,1629,1290,1632,1290,1635,1638,1639,1642,1643,1646],{},"Registry to push\u002Fpull: ",[158,1627,1628],{},"type",[158,1630,1631],{},"host",[158,1633,1634],{},"repository",[158,1636,1637],{},"username",". A source-built remote deploy builds here, pushes ",[158,1640,1641],{},"\u003Chost>\u002F\u003Crepository>\u002F\u003Capp>:\u003Crelease>",", and the machine pulls it; the password comes from ",[158,1644,1645],{},"ANT_REGISTRY_PASSWORD"," and travels with the deploy as a short-lived worker-side credential, so private images pull without a login on the machine.",[1192,1648,1649,1654],{},[1207,1650,1651],{},[158,1652,1653],{},"image_signing",[1207,1655,1656,1657,1290,1660,1290,1663,1290,1666,1669],{},"cosign verification: ",[158,1658,1659],{},"mode",[158,1661,1662],{},"issuer",[158,1664,1665],{},"identity",[158,1667,1668],{},"public_key",". Runs on this machine and on the worker before it starts the image.",[1192,1671,1672,1677],{},[1207,1673,1674],{},[158,1675,1676],{},"volumes",[1207,1678,1679,1682,1683,1686,1687,1686,1690,1686,1693,1294],{},[158,1680,1681],{},"run: container"," mounts (short syntax or ",[158,1684,1685],{},"source","\u002F",[158,1688,1689],{},"target",[158,1691,1692],{},"read_only",[158,1694,240],{},[1192,1696,1697,1702],{},[1207,1698,1699],{},[158,1700,1701],{},"networks",[1207,1703,1704,1705,1290,1708,1290,1711,1290,1714,1484],{},"Extra docker networks: ",[158,1706,1707],{},"name",[158,1709,1710],{},"driver",[158,1712,1713],{},"subnet",[158,1715,1716],{},"external",[1192,1718,1719,1724],{},[1207,1720,1721],{},[158,1722,1723],{},"use_group_network",[1207,1725,1726],{},"Join the group's network (default true).",[1192,1728,1729,1734],{},[1207,1730,1731],{},[158,1732,1733],{},"use_machine_network",[1207,1735,1736],{},"Join the machine-wide network (default false).",[150,1738,1739,1741,1742,1595,1745,1748],{},[158,1740,317],{}," also accepts the inline ",[158,1743,1744],{},"run:",[158,1746,1747],{},"file:"," keys shown above.",[1181,1750,1751],{"id":943},[158,1752,943],{},[1186,1754,1755,1763],{},[1189,1756,1757],{},[1192,1758,1759,1761],{},[1195,1760,1197],{},[1195,1762,1200],{},[1202,1764,1765,1775,1788],{},[1192,1766,1767,1772],{},[1207,1768,1769],{},[158,1770,1771],{},"keep_releases",[1207,1773,1774],{},"Releases retained for rollback (also the fallback for image retention).",[1192,1776,1777,1782],{},[1207,1778,1779],{},[158,1780,1781],{},"pre_hook",[1207,1783,1784,1785,1484],{},"Shell command run before ",[158,1786,1787],{},"ant trail rollback",[1192,1789,1790,1795],{},[1207,1791,1792],{},[158,1793,1794],{},"post_hook",[1207,1796,1797],{},"Shell command run after a successful rollback.",[1181,1799,1800],{"id":992},[158,1801,992],{},[1186,1803,1804,1812],{},[1189,1805,1806],{},[1192,1807,1808,1810],{},[1195,1809,1197],{},[1195,1811,1200],{},[1202,1813,1814],{},[1192,1815,1816,1820],{},[1207,1817,1818],{},[158,1819,1324],{},[1207,1821,1822],{},"Include the git branch in resource names. Unset means true.",[1181,1824,1826],{"id":1825},"deployment-overlays","Deployment overlays",[150,1828,1829,1830,1833],{},"Each entry under ",[158,1831,1832],{},"deployments:"," merges over the base at deploy time:",[1186,1835,1836,1844],{},[1189,1837,1838],{},[1192,1839,1840,1842],{},[1195,1841,1197],{},[1195,1843,1200],{},[1202,1845,1846,1858,1873,1886,1896,1906,1920,1934,1948],{},[1192,1847,1848,1852],{},[1207,1849,1850],{},[158,1851,317],{},[1207,1853,1854,1855,1857],{},"Per-environment ",[158,1856,317],{}," overrides (port, file, builder, …).",[1192,1859,1860,1864],{},[1207,1861,1862],{},[158,1863,275],{},[1207,1865,1854,1866,1868,1869,1290,1871,1294],{},[158,1867,275],{}," overrides (",[158,1870,1289],{},[158,1872,1293],{},[1192,1874,1875,1880],{},[1207,1876,1877],{},[158,1878,1879],{},"env",[1207,1881,1882,1885],{},[158,1883,1884],{},"KEY=VALUE"," runtime environment.",[1192,1887,1888,1893],{},[1207,1889,1890],{},[158,1891,1892],{},"env_file",[1207,1894,1895],{},"Dotenv files loaded as the lowest-precedence env source.",[1192,1897,1898,1903],{},[1207,1899,1900],{},[158,1901,1902],{},"secrets",[1207,1904,1905],{},"Secret references resolved at deploy time.",[1192,1907,1908,1913],{},[1207,1909,1910],{},[158,1911,1912],{},"domains",[1207,1914,1915,1916,1294],{},"Hostnames routed to this deployment (see ",[1237,1917,1919],{"href":1918},"#domains","Domains",[1192,1921,1922,1927],{},[1207,1923,1924],{},[158,1925,1926],{},"server",[1207,1928,1929,1930,1933],{},"Per-deployment target; overrides ",[158,1931,1932],{},"machine:"," for this environment.",[1192,1935,1936,1941],{},[1207,1937,1938],{},[158,1939,1940],{},"port_offset",[1207,1942,1943,1944,1947],{},"Added to ",[158,1945,1946],{},"deploy.port"," for the host bind (local, remote container, and remote compose\u002Fstack files).",[1192,1949,1950,1955],{},[1207,1951,1952],{},[158,1953,1954],{},"auto_open",[1207,1956,1957,1958,1961],{},"Open ",[158,1959,1960],{},"http:\u002F\u002Flocalhost:\u003Cport>"," after a local deploy.",[154,1963,1965],{"id":1964},"resource-naming","Resource naming",[150,1967,1968],{},"Every docker resource ant creates is named from the same factors:",[163,1970,1975],{"className":1971,"code":1973,"language":1974},[1972],"language-text","[\u003Cgroup>-]\u003Capp>-\u003Cenv>[-\u003Cbranch>]\n","text",[158,1976,1973],{"__ignoreMap":168},[1978,1979,1980,1991,1999,2008],"ul",{},[1981,1982,1983,1986,1987,1990],"li",{},[158,1984,1985],{},"\u003Cgroup>",": the project's ",[158,1988,1989],{},"group:"," (omitted when none).",[1981,1992,1993,1986,1996,1484],{},[158,1994,1995],{},"\u003Capp>",[158,1997,1998],{},"app:",[1981,2000,2001,2004,2005,2007],{},[158,2002,2003],{},"\u003Cenv>",": the deployment name (",[158,2006,1267],{}," by default).",[1981,2009,2010,2013],{},[158,2011,2012],{},"\u003Cbranch>",": the checked-out git branch, when the project is a work tree\n(omitted in a detached HEAD or outside git).",[150,2015,2016,2017,2020,2021,2024,2025,2028],{},"The same name is applied to containers, image repositories, compose projects,\nCaddy route ownership, and the prefix of named volumes. A named volume declared\nas ",[158,2018,2019],{},"data"," is created as ",[158,2022,2023],{},"\u003Cname>-data"," (bind mounts are unchanged; compose\nvolumes are namespaced by the compose project, which is the same name). Every\nfactor is lowercased and reduced to ",[158,2026,2027],{},"[a-z0-9-]",". Names stay within 63\ncharacters: an over-long name is truncated and given a short sha256 suffix so\ntwo long names never collide.",[150,2030,2031,2032,2036,2037,2039,2040,2043,2044,2046],{},"Because the environment and branch are part of the name, deploying one project\nfrom two branches, to two environments, or on two machines never collides.\nIncluding the branch is deliberate isolation: ",[2033,2034,2035],"strong",{},"switching branches switches to a\nseparate, empty volume"," for ",[158,2038,1681],{},". Set ",[158,2041,2042],{},"naming.branch: false"," in\n",[158,2045,160],{}," to keep one set of resources per project+env across branches:",[163,2048,2050],{"className":165,"code":2049,"language":167,"meta":168,"style":168},"naming:\n  branch: false   # omit the git branch from resource names\n",[158,2051,2052,2058],{"__ignoreMap":168},[172,2053,2054,2056],{"class":174,"line":175},[172,2055,992],{"class":178},[172,2057,278],{"class":182},[172,2059,2060,2062,2064,2066],{"class":174,"line":194},[172,2061,1000],{"class":178},[172,2063,183],{"class":182},[172,2065,929],{"class":466},[172,2067,2068],{"class":190},"   # omit the git branch from resource names\n",[150,2070,2071,1595,2074,2077],{},[158,2072,2073],{},"ant trail destroy",[158,2075,2076],{},"ant trail prune"," operate on the name for the branch you\nare currently on.",[154,2079,2081,2084],{"id":2080},"antconfigjson-per-machine",[158,2082,2083],{},"~\u002F.ant\u002Fconfig.json"," (per machine)",[150,2086,2087,2088,2091],{},"Schema ",[2033,2089,2090],{},"v2",". Everything about a machine nests under it:",[163,2093,2097],{"className":2094,"code":2095,"language":2096,"meta":168,"style":168},"language-json shiki shiki-themes material-theme-lighter github-light github-dark","{\n  \"version\": 2,\n  \"user\": { \"node_id\": \"…\", \"display_name\": \"Ada\", \"email\": \"ada@example.com\" },\n  \"relay\": \"https:\u002F\u002Frelay.example.com\",\n  \"ui\": { \"host\": \"127.0.0.1\", \"port\": 4000, \"theme\": \"dark\", \"refresh_seconds\": 10 },\n  \"notifications\": { \"slack_webhook\": \"…\", \"email\": \"ops@example.com\" },\n  \"machines\": {\n    \"local\": {\n      \"id\": \"local\",\n      \"kind\": \"local\",\n      \"caddy\": { \"auto_start\": true },\n      \"docker\": { \"mode\": \"rootless\" },\n      \"network\": { \"name\": \"ant-local\" },\n      \"groups\": {\n        \"backend\": {\n          \"display_name\": \"Backend\",\n          \"color\": \"#4f46e5\",\n          \"description\": \"API and workers\",\n          \"network\": { \"name\": \"backend\" },\n          \"domains\": [\"example.com\"],\n          \"env\": [\"LOG_LEVEL=info\"],\n          \"secrets\": [\"DATABASE_URL\"],\n          \"project_dirs\": [\"\u002Fhome\u002Fme\u002Fcode\u002Fbackend\"]\n        }\n      },\n      \"project_dirs\": [\"\u002Fhome\u002Fme\u002Fcode\u002Fapi\", \"\u002Fhome\u002Fme\u002Fcode\u002Fworker\"]\n    },\n    \"prod\": {\n      \"id\": \"prod\",\n      \"name\": \"prod\",\n      \"kind\": \"remote\",\n      \"hostname\": \"prod.example.com\",\n      \"node_id\": \"…\",\n      \"docker\": { \"mode\": \"rootless\" },\n      \"network\": { \"name\": \"ant-prod\", \"driver\": \"bridge\", \"subnet\": \"172.30.0.0\u002F16\" },\n      \"users\": { \"…\": { \"node_id\": \"…\", \"role\": \"owner\", \"system_user\": \"ant-abcd1234\" } },\n      \"invites\": { \"nonce\": { \"role\": \"deployer\", \"expires_at\": \"2026-01-01T00:00:00Z\" } }\n    }\n  }\n}\n","json",[158,2098,2099,2104,2123,2192,2212,2285,2332,2346,2359,2379,2397,2424,2454,2484,2497,2511,2532,2552,2572,2601,2623,2644,2665,2687,2692,2697,2727,2732,2745,2763,2781,2800,2820,2838,2866,2929,3006,3067,3072,3077],{"__ignoreMap":168},[172,2100,2101],{"class":174,"line":175},[172,2102,2103],{"class":182},"{\n",[172,2105,2106,2110,2113,2116,2118,2120],{"class":174,"line":194},[172,2107,2109],{"class":2108},"s39Yj","  \"",[172,2111,179],{"class":2112},"sseR_",[172,2114,2115],{"class":2108},"\"",[172,2117,183],{"class":182},[172,2119,452],{"class":186},[172,2121,2122],{"class":182},",\n",[172,2124,2125,2127,2130,2132,2134,2136,2138,2142,2144,2146,2148,2151,2153,2155,2157,2160,2162,2164,2166,2169,2171,2173,2175,2178,2180,2182,2184,2187,2189],{"class":174,"line":209},[172,2126,2109],{"class":2108},[172,2128,2129],{"class":2112},"user",[172,2131,2115],{"class":2108},[172,2133,183],{"class":182},[172,2135,1039],{"class":182},[172,2137,610],{"class":2108},[172,2139,2141],{"class":2140},"sZMiF","node_id",[172,2143,2115],{"class":2108},[172,2145,183],{"class":182},[172,2147,610],{"class":609},[172,2149,2150],{"class":202},"…",[172,2152,2115],{"class":609},[172,2154,404],{"class":182},[172,2156,610],{"class":2108},[172,2158,2159],{"class":2140},"display_name",[172,2161,2115],{"class":2108},[172,2163,183],{"class":182},[172,2165,610],{"class":609},[172,2167,2168],{"class":202},"Ada",[172,2170,2115],{"class":609},[172,2172,404],{"class":182},[172,2174,610],{"class":2108},[172,2176,2177],{"class":2140},"email",[172,2179,2115],{"class":2108},[172,2181,183],{"class":182},[172,2183,610],{"class":609},[172,2185,2186],{"class":202},"ada@example.com",[172,2188,2115],{"class":609},[172,2190,2191],{"class":182}," },\n",[172,2193,2194,2196,2199,2201,2203,2205,2208,2210],{"class":174,"line":223},[172,2195,2109],{"class":2108},[172,2197,2198],{"class":2112},"relay",[172,2200,2115],{"class":2108},[172,2202,183],{"class":182},[172,2204,610],{"class":609},[172,2206,2207],{"class":202},"https:\u002F\u002Frelay.example.com",[172,2209,2115],{"class":609},[172,2211,2122],{"class":182},[172,2213,2214,2216,2219,2221,2223,2225,2227,2229,2231,2233,2235,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255,2258,2260,2262,2264,2267,2269,2271,2273,2276,2278,2280,2283],{"class":174,"line":237},[172,2215,2109],{"class":2108},[172,2217,2218],{"class":2112},"ui",[172,2220,2115],{"class":2108},[172,2222,183],{"class":182},[172,2224,1039],{"class":182},[172,2226,610],{"class":2108},[172,2228,1631],{"class":2140},[172,2230,2115],{"class":2108},[172,2232,183],{"class":182},[172,2234,610],{"class":609},[172,2236,1466],{"class":202},[172,2238,2115],{"class":609},[172,2240,404],{"class":182},[172,2242,610],{"class":2108},[172,2244,1403],{"class":2140},[172,2246,2115],{"class":2108},[172,2248,183],{"class":182},[172,2250,1047],{"class":186},[172,2252,404],{"class":182},[172,2254,610],{"class":2108},[172,2256,2257],{"class":2140},"theme",[172,2259,2115],{"class":2108},[172,2261,183],{"class":182},[172,2263,610],{"class":609},[172,2265,2266],{"class":202},"dark",[172,2268,2115],{"class":609},[172,2270,404],{"class":182},[172,2272,610],{"class":2108},[172,2274,2275],{"class":2140},"refresh_seconds",[172,2277,2115],{"class":2108},[172,2279,183],{"class":182},[172,2281,2282],{"class":186}," 10",[172,2284,2191],{"class":182},[172,2286,2287,2289,2292,2294,2296,2298,2300,2303,2305,2307,2309,2311,2313,2315,2317,2319,2321,2323,2325,2328,2330],{"class":174,"line":251},[172,2288,2109],{"class":2108},[172,2290,2291],{"class":2112},"notifications",[172,2293,2115],{"class":2108},[172,2295,183],{"class":182},[172,2297,1039],{"class":182},[172,2299,610],{"class":2108},[172,2301,2302],{"class":2140},"slack_webhook",[172,2304,2115],{"class":2108},[172,2306,183],{"class":182},[172,2308,610],{"class":609},[172,2310,2150],{"class":202},[172,2312,2115],{"class":609},[172,2314,404],{"class":182},[172,2316,610],{"class":2108},[172,2318,2177],{"class":2140},[172,2320,2115],{"class":2108},[172,2322,183],{"class":182},[172,2324,610],{"class":609},[172,2326,2327],{"class":202},"ops@example.com",[172,2329,2115],{"class":609},[172,2331,2191],{"class":182},[172,2333,2334,2336,2339,2341,2343],{"class":174,"line":265},[172,2335,2109],{"class":2108},[172,2337,2338],{"class":2112},"machines",[172,2340,2115],{"class":2108},[172,2342,183],{"class":182},[172,2344,2345],{"class":182}," {\n",[172,2347,2348,2351,2353,2355,2357],{"class":174,"line":272},[172,2349,2350],{"class":2108},"    \"",[172,2352,1267],{"class":2140},[172,2354,2115],{"class":2108},[172,2356,183],{"class":182},[172,2358,2345],{"class":182},[172,2360,2361,2364,2367,2369,2371,2373,2375,2377],{"class":174,"line":281},[172,2362,2363],{"class":2108},"      \"",[172,2365,2366],{"class":186},"id",[172,2368,2115],{"class":2108},[172,2370,183],{"class":182},[172,2372,610],{"class":609},[172,2374,1267],{"class":202},[172,2376,2115],{"class":609},[172,2378,2122],{"class":182},[172,2380,2381,2383,2385,2387,2389,2391,2393,2395],{"class":174,"line":295},[172,2382,2363],{"class":2108},[172,2384,226],{"class":186},[172,2386,2115],{"class":2108},[172,2388,183],{"class":182},[172,2390,610],{"class":609},[172,2392,1267],{"class":202},[172,2394,2115],{"class":609},[172,2396,2122],{"class":182},[172,2398,2399,2401,2404,2406,2408,2410,2412,2416,2418,2420,2422],{"class":174,"line":309},[172,2400,2363],{"class":2108},[172,2402,2403],{"class":186},"caddy",[172,2405,2115],{"class":2108},[172,2407,183],{"class":182},[172,2409,1039],{"class":182},[172,2411,610],{"class":2108},[172,2413,2415],{"class":2414},"swQdS","auto_start",[172,2417,2115],{"class":2108},[172,2419,183],{"class":182},[172,2421,467],{"class":2108},[172,2423,2191],{"class":182},[172,2425,2426,2428,2431,2433,2435,2437,2439,2441,2443,2445,2447,2450,2452],{"class":174,"line":314},[172,2427,2363],{"class":2108},[172,2429,2430],{"class":186},"docker",[172,2432,2115],{"class":2108},[172,2434,183],{"class":182},[172,2436,1039],{"class":182},[172,2438,610],{"class":2108},[172,2440,1659],{"class":2414},[172,2442,2115],{"class":2108},[172,2444,183],{"class":182},[172,2446,610],{"class":609},[172,2448,2449],{"class":202},"rootless",[172,2451,2115],{"class":609},[172,2453,2191],{"class":182},[172,2455,2456,2458,2461,2463,2465,2467,2469,2471,2473,2475,2477,2480,2482],{"class":174,"line":322},[172,2457,2363],{"class":2108},[172,2459,2460],{"class":186},"network",[172,2462,2115],{"class":2108},[172,2464,183],{"class":182},[172,2466,1039],{"class":182},[172,2468,610],{"class":2108},[172,2470,1707],{"class":2414},[172,2472,2115],{"class":2108},[172,2474,183],{"class":182},[172,2476,610],{"class":609},[172,2478,2479],{"class":202},"ant-local",[172,2481,2115],{"class":609},[172,2483,2191],{"class":182},[172,2485,2486,2488,2491,2493,2495],{"class":174,"line":336},[172,2487,2363],{"class":2108},[172,2489,2490],{"class":186},"groups",[172,2492,2115],{"class":2108},[172,2494,183],{"class":182},[172,2496,2345],{"class":182},[172,2498,2499,2502,2505,2507,2509],{"class":174,"line":350},[172,2500,2501],{"class":2108},"        \"",[172,2503,2504],{"class":2414},"backend",[172,2506,2115],{"class":2108},[172,2508,183],{"class":182},[172,2510,2345],{"class":182},[172,2512,2513,2516,2519,2521,2523,2525,2528,2530],{"class":174,"line":364},[172,2514,2515],{"class":2108},"          \"",[172,2517,2159],{"class":2518},"sAQsV",[172,2520,2115],{"class":2108},[172,2522,183],{"class":182},[172,2524,610],{"class":609},[172,2526,2527],{"class":202},"Backend",[172,2529,2115],{"class":609},[172,2531,2122],{"class":182},[172,2533,2534,2536,2539,2541,2543,2545,2548,2550],{"class":174,"line":376},[172,2535,2515],{"class":2108},[172,2537,2538],{"class":2518},"color",[172,2540,2115],{"class":2108},[172,2542,183],{"class":182},[172,2544,610],{"class":609},[172,2546,2547],{"class":202},"#4f46e5",[172,2549,2115],{"class":609},[172,2551,2122],{"class":182},[172,2553,2554,2556,2559,2561,2563,2565,2568,2570],{"class":174,"line":390},[172,2555,2515],{"class":2108},[172,2557,2558],{"class":2518},"description",[172,2560,2115],{"class":2108},[172,2562,183],{"class":182},[172,2564,610],{"class":609},[172,2566,2567],{"class":202},"API and workers",[172,2569,2115],{"class":609},[172,2571,2122],{"class":182},[172,2573,2574,2576,2578,2580,2582,2584,2586,2589,2591,2593,2595,2597,2599],{"class":174,"line":416},[172,2575,2515],{"class":2108},[172,2577,2460],{"class":2518},[172,2579,2115],{"class":2108},[172,2581,183],{"class":182},[172,2583,1039],{"class":182},[172,2585,610],{"class":2108},[172,2587,1707],{"class":2588},"sptTA",[172,2590,2115],{"class":2108},[172,2592,183],{"class":182},[172,2594,610],{"class":609},[172,2596,2504],{"class":202},[172,2598,2115],{"class":609},[172,2600,2191],{"class":182},[172,2602,2603,2605,2607,2609,2611,2613,2615,2618,2620],{"class":174,"line":430},[172,2604,2515],{"class":2108},[172,2606,1912],{"class":2518},[172,2608,2115],{"class":2108},[172,2610,183],{"class":182},[172,2612,398],{"class":182},[172,2614,2115],{"class":609},[172,2616,2617],{"class":202},"example.com",[172,2619,2115],{"class":609},[172,2621,2622],{"class":182},"],\n",[172,2624,2625,2627,2629,2631,2633,2635,2637,2640,2642],{"class":174,"line":444},[172,2626,2515],{"class":2108},[172,2628,1879],{"class":2518},[172,2630,2115],{"class":2108},[172,2632,183],{"class":182},[172,2634,398],{"class":182},[172,2636,2115],{"class":609},[172,2638,2639],{"class":202},"LOG_LEVEL=info",[172,2641,2115],{"class":609},[172,2643,2622],{"class":182},[172,2645,2646,2648,2650,2652,2654,2656,2658,2661,2663],{"class":174,"line":458},[172,2647,2515],{"class":2108},[172,2649,1902],{"class":2518},[172,2651,2115],{"class":2108},[172,2653,183],{"class":182},[172,2655,398],{"class":182},[172,2657,2115],{"class":609},[172,2659,2660],{"class":202},"DATABASE_URL",[172,2662,2115],{"class":609},[172,2664,2622],{"class":182},[172,2666,2667,2669,2672,2674,2676,2678,2680,2683,2685],{"class":174,"line":473},[172,2668,2515],{"class":2108},[172,2670,2671],{"class":2518},"project_dirs",[172,2673,2115],{"class":2108},[172,2675,183],{"class":182},[172,2677,398],{"class":182},[172,2679,2115],{"class":609},[172,2681,2682],{"class":202},"\u002Fhome\u002Fme\u002Fcode\u002Fbackend",[172,2684,2115],{"class":609},[172,2686,1163],{"class":182},[172,2688,2689],{"class":174,"line":491},[172,2690,2691],{"class":182},"        }\n",[172,2693,2694],{"class":174,"line":504},[172,2695,2696],{"class":182},"      },\n",[172,2698,2699,2701,2703,2705,2707,2709,2711,2714,2716,2718,2720,2723,2725],{"class":174,"line":518},[172,2700,2363],{"class":2108},[172,2702,2671],{"class":186},[172,2704,2115],{"class":2108},[172,2706,183],{"class":182},[172,2708,398],{"class":182},[172,2710,2115],{"class":609},[172,2712,2713],{"class":202},"\u002Fhome\u002Fme\u002Fcode\u002Fapi",[172,2715,2115],{"class":609},[172,2717,404],{"class":182},[172,2719,610],{"class":609},[172,2721,2722],{"class":202},"\u002Fhome\u002Fme\u002Fcode\u002Fworker",[172,2724,2115],{"class":609},[172,2726,1163],{"class":182},[172,2728,2729],{"class":174,"line":541},[172,2730,2731],{"class":182},"    },\n",[172,2733,2734,2736,2739,2741,2743],{"class":174,"line":549},[172,2735,2350],{"class":2108},[172,2737,2738],{"class":2140},"prod",[172,2740,2115],{"class":2108},[172,2742,183],{"class":182},[172,2744,2345],{"class":182},[172,2746,2747,2749,2751,2753,2755,2757,2759,2761],{"class":174,"line":560},[172,2748,2363],{"class":2108},[172,2750,2366],{"class":186},[172,2752,2115],{"class":2108},[172,2754,183],{"class":182},[172,2756,610],{"class":609},[172,2758,2738],{"class":202},[172,2760,2115],{"class":609},[172,2762,2122],{"class":182},[172,2764,2765,2767,2769,2771,2773,2775,2777,2779],{"class":174,"line":571},[172,2766,2363],{"class":2108},[172,2768,1707],{"class":186},[172,2770,2115],{"class":2108},[172,2772,183],{"class":182},[172,2774,610],{"class":609},[172,2776,2738],{"class":202},[172,2778,2115],{"class":609},[172,2780,2122],{"class":182},[172,2782,2783,2785,2787,2789,2791,2793,2796,2798],{"class":174,"line":582},[172,2784,2363],{"class":2108},[172,2786,226],{"class":186},[172,2788,2115],{"class":2108},[172,2790,183],{"class":182},[172,2792,610],{"class":609},[172,2794,2795],{"class":202},"remote",[172,2797,2115],{"class":609},[172,2799,2122],{"class":182},[172,2801,2802,2804,2807,2809,2811,2813,2816,2818],{"class":174,"line":593},[172,2803,2363],{"class":2108},[172,2805,2806],{"class":186},"hostname",[172,2808,2115],{"class":2108},[172,2810,183],{"class":182},[172,2812,610],{"class":609},[172,2814,2815],{"class":202},"prod.example.com",[172,2817,2115],{"class":609},[172,2819,2122],{"class":182},[172,2821,2822,2824,2826,2828,2830,2832,2834,2836],{"class":174,"line":601},[172,2823,2363],{"class":2108},[172,2825,2141],{"class":186},[172,2827,2115],{"class":2108},[172,2829,183],{"class":182},[172,2831,610],{"class":609},[172,2833,2150],{"class":202},[172,2835,2115],{"class":609},[172,2837,2122],{"class":182},[172,2839,2840,2842,2844,2846,2848,2850,2852,2854,2856,2858,2860,2862,2864],{"class":174,"line":619},[172,2841,2363],{"class":2108},[172,2843,2430],{"class":186},[172,2845,2115],{"class":2108},[172,2847,183],{"class":182},[172,2849,1039],{"class":182},[172,2851,610],{"class":2108},[172,2853,1659],{"class":2414},[172,2855,2115],{"class":2108},[172,2857,183],{"class":182},[172,2859,610],{"class":609},[172,2861,2449],{"class":202},[172,2863,2115],{"class":609},[172,2865,2191],{"class":182},[172,2867,2868,2870,2872,2874,2876,2878,2880,2882,2884,2886,2888,2891,2893,2895,2897,2899,2901,2903,2905,2908,2910,2912,2914,2916,2918,2920,2922,2925,2927],{"class":174,"line":630},[172,2869,2363],{"class":2108},[172,2871,2460],{"class":186},[172,2873,2115],{"class":2108},[172,2875,183],{"class":182},[172,2877,1039],{"class":182},[172,2879,610],{"class":2108},[172,2881,1707],{"class":2414},[172,2883,2115],{"class":2108},[172,2885,183],{"class":182},[172,2887,610],{"class":609},[172,2889,2890],{"class":202},"ant-prod",[172,2892,2115],{"class":609},[172,2894,404],{"class":182},[172,2896,610],{"class":2108},[172,2898,1710],{"class":2414},[172,2900,2115],{"class":2108},[172,2902,183],{"class":182},[172,2904,610],{"class":609},[172,2906,2907],{"class":202},"bridge",[172,2909,2115],{"class":609},[172,2911,404],{"class":182},[172,2913,610],{"class":2108},[172,2915,1713],{"class":2414},[172,2917,2115],{"class":2108},[172,2919,183],{"class":182},[172,2921,610],{"class":609},[172,2923,2924],{"class":202},"172.30.0.0\u002F16",[172,2926,2115],{"class":609},[172,2928,2191],{"class":182},[172,2930,2931,2933,2936,2938,2940,2942,2944,2946,2948,2950,2952,2954,2956,2958,2960,2962,2964,2966,2968,2970,2973,2975,2977,2979,2982,2984,2986,2988,2991,2993,2995,2997,3000,3002,3004],{"class":174,"line":638},[172,2932,2363],{"class":2108},[172,2934,2935],{"class":186},"users",[172,2937,2115],{"class":2108},[172,2939,183],{"class":182},[172,2941,1039],{"class":182},[172,2943,610],{"class":2108},[172,2945,2150],{"class":2414},[172,2947,2115],{"class":2108},[172,2949,183],{"class":182},[172,2951,1039],{"class":182},[172,2953,610],{"class":2108},[172,2955,2141],{"class":2518},[172,2957,2115],{"class":2108},[172,2959,183],{"class":182},[172,2961,610],{"class":609},[172,2963,2150],{"class":202},[172,2965,2115],{"class":609},[172,2967,404],{"class":182},[172,2969,610],{"class":2108},[172,2971,2972],{"class":2518},"role",[172,2974,2115],{"class":2108},[172,2976,183],{"class":182},[172,2978,610],{"class":609},[172,2980,2981],{"class":202},"owner",[172,2983,2115],{"class":609},[172,2985,404],{"class":182},[172,2987,610],{"class":2108},[172,2989,2990],{"class":2518},"system_user",[172,2992,2115],{"class":2108},[172,2994,183],{"class":182},[172,2996,610],{"class":609},[172,2998,2999],{"class":202},"ant-abcd1234",[172,3001,2115],{"class":609},[172,3003,1050],{"class":182},[172,3005,2191],{"class":182},[172,3007,3008,3010,3013,3015,3017,3019,3021,3024,3026,3028,3030,3032,3034,3036,3038,3040,3043,3045,3047,3049,3052,3054,3056,3058,3061,3063,3065],{"class":174,"line":649},[172,3009,2363],{"class":2108},[172,3011,3012],{"class":186},"invites",[172,3014,2115],{"class":2108},[172,3016,183],{"class":182},[172,3018,1039],{"class":182},[172,3020,610],{"class":2108},[172,3022,3023],{"class":2414},"nonce",[172,3025,2115],{"class":2108},[172,3027,183],{"class":182},[172,3029,1039],{"class":182},[172,3031,610],{"class":2108},[172,3033,2972],{"class":2518},[172,3035,2115],{"class":2108},[172,3037,183],{"class":182},[172,3039,610],{"class":609},[172,3041,3042],{"class":202},"deployer",[172,3044,2115],{"class":609},[172,3046,404],{"class":182},[172,3048,610],{"class":2108},[172,3050,3051],{"class":2518},"expires_at",[172,3053,2115],{"class":2108},[172,3055,183],{"class":182},[172,3057,610],{"class":609},[172,3059,3060],{"class":202},"2026-01-01T00:00:00Z",[172,3062,2115],{"class":609},[172,3064,1050],{"class":182},[172,3066,1073],{"class":182},[172,3068,3069],{"class":174,"line":659},[172,3070,3071],{"class":182},"    }\n",[172,3073,3074],{"class":174,"line":667},[172,3075,3076],{"class":182},"  }\n",[172,3078,3079],{"class":174,"line":681},[172,3080,3081],{"class":182},"}\n",[1181,3083,1184],{"id":3084},"top-level-keys-1",[1186,3086,3087,3095],{},[1189,3088,3089],{},[1192,3090,3091,3093],{},[1195,3092,1197],{},[1195,3094,1200],{},[1202,3096,3097,3109,3133,3145,3187,3196],{},[1192,3098,3099,3103],{},[1207,3100,3101],{},[158,3102,179],{},[1207,3104,3105,3106,1294],{},"Config schema version (",[158,3107,3108],{},"2",[1192,3110,3111,3115],{},[1207,3112,3113],{},[158,3114,2129],{},[1207,3116,3117,3118,1290,3120,1290,3122,1290,3124,1290,3126,3129,3130,1484],{},"The signed-in Ant account profile (",[158,3119,2141],{},[158,3121,2159],{},[158,3123,2177],{},[158,3125,2990],{},[158,3127,3128],{},"created_at","). The private key lives in ",[158,3131,3132],{},"~\u002F.ant\u002Fidentity",[1192,3134,3135,3139],{},[1207,3136,3137],{},[158,3138,2338],{},[1207,3140,3141,3142,3144],{},"Every machine ant knows about, keyed by id (",[158,3143,1267],{}," is always present).",[1192,3146,3147,3151],{},[1207,3148,3149],{},[158,3150,2291],{},[1207,3152,3153,3154,1290,3156,1290,3159,1290,3161,3164,3165,1290,3167,1290,3169,1290,3171,1290,3174,3177,3178,1290,3181,1290,3184,1484],{},"Local notification targets: ",[158,3155,2302],{},[158,3157,3158],{},"discord_webhook",[158,3160,2177],{},[158,3162,3163],{},"smtp"," (",[158,3166,1631],{},[158,3168,1403],{},[158,3170,1637],{},[158,3172,3173],{},"password",[158,3175,3176],{},"from","), ",[158,3179,3180],{},"telegram_bot_token",[158,3182,3183],{},"chat_id",[158,3185,3186],{},"webhook_url",[1192,3188,3189,3193],{},[1207,3190,3191],{},[158,3192,2198],{},[1207,3194,3195],{},"A self-hosted iroh relay URL to use instead of the public default.",[1192,3197,3198,3202],{},[1207,3199,3200],{},[158,3201,2218],{},[1207,3203,3204,3205,1290,3207,1290,3209,3164,3211,1686,3214,1686,3216,3177,3219,3222,3223,3177,3226,3228],{},"Dashboard preferences: ",[158,3206,1631],{},[158,3208,1403],{},[158,3210,2257],{},[158,3212,3213],{},"light",[158,3215,2266],{},[158,3217,3218],{},"system",[158,3220,3221],{},"password_hash"," (set via ",[158,3224,3225],{},"ant ui passwd",[158,3227,2275],{}," (0 = default 10s, -1 = off).",[1181,3230,3232],{"id":3231},"machine-entry-keys","Machine entry keys",[1186,3234,3235,3243],{},[1189,3236,3237],{},[1192,3238,3239,3241],{},[1195,3240,1197],{},[1195,3242,1200],{},[1202,3244,3245,3257,3266,3275,3288,3297,3309,3318,3327,3349,3366,3388],{},[1192,3246,3247,3251],{},[1207,3248,3249],{},[158,3250,2366],{},[1207,3252,3253,3254,3256],{},"Stable identifier; ",[158,3255,1267],{}," is reserved.",[1192,3258,3259,3263],{},[1207,3260,3261],{},[158,3262,1707],{},[1207,3264,3265],{},"Human-readable label (defaults to the hostname).",[1192,3267,3268,3272],{},[1207,3269,3270],{},[158,3271,2806],{},[1207,3273,3274],{},"The machine's network name, when known.",[1192,3276,3277,3281],{},[1207,3278,3279],{},[158,3280,226],{},[1207,3282,3283,3285,3286,1484],{},[158,3284,1267],{}," or ",[158,3287,2795],{},[1192,3289,3290,3294],{},[1207,3291,3292],{},[158,3293,2141],{},[1207,3295,3296],{},"The machine's iroh identity (NodeID), when known.",[1192,3298,3299,3303],{},[1207,3300,3301],{},[158,3302,2671],{},[1207,3304,3305,3306,3308],{},"Directories scanned for ",[158,3307,160],{}," on this machine.",[1192,3310,3311,3315],{},[1207,3312,3313],{},[158,3314,2490],{},[1207,3316,3317],{},"Groups defined on this machine (see below).",[1192,3319,3320,3324],{},[1207,3321,3322],{},[158,3323,2403],{},[1207,3325,3326],{},"Managed Caddy settings (see below).",[1192,3328,3329,3333],{},[1207,3330,3331],{},[158,3332,2430],{},[1207,3334,3335,3336,3338,3339,3341,3342,3341,3344,3341,3347,1484],{},"How ant talks to the runtime: ",[158,3337,1659],{}," = ",[158,3340,2449],{}," | ",[158,3343,212],{},[158,3345,3346],{},"proxy",[158,3348,1375],{},[1192,3350,3351,3355],{},[1207,3352,3353],{},[158,3354,2460],{},[1207,3356,3357,3358,1290,3360,1290,3362,1290,3364,1484],{},"The machine-wide network projects opt into: ",[158,3359,1707],{},[158,3361,1710],{},[158,3363,1713],{},[158,3365,1716],{},[1192,3367,3368,3372],{},[1207,3369,3370],{},[158,3371,2935],{},[1207,3373,3374,3375,1290,3377,1290,3379,1290,3381,1290,3383,1290,3385,1484],{},"The colony roster (remote machines), keyed by account NodeID: ",[158,3376,2141],{},[158,3378,2159],{},[158,3380,2177],{},[158,3382,2972],{},[158,3384,2990],{},[158,3386,3387],{},"added_at",[1192,3389,3390,3394],{},[1207,3391,3392],{},[158,3393,3012],{},[1207,3395,3396,3397,1290,3399,1290,3401,1484],{},"Pending invites (client-side bookkeeping only; the signed token is not stored): ",[158,3398,2972],{},[158,3400,2177],{},[158,3402,3051],{},[150,3404,3405,3406,3408,3409,1290,3411,1290,3414,2122,3417,1290,3420,3423,3424,3427,3428,1686,3431,3434,3435,1686,3437,3439,3440,3443],{},"The ",[158,3407,2403],{}," block holds ",[158,3410,2415],{},[158,3412,3413],{},"admin_listen",[158,3415,3416],{},"http_listen",[158,3418,3419],{},"https_listen",[158,3421,3422],{},"internal_tls",", and ",[158,3425,3426],{},"acme_email",". Defaults are ",[158,3429,3430],{},":8080",[158,3432,3433],{},":8443",",\nthe internal CA, and auto-start. A change to ",[158,3436,3416],{},[158,3438,3419],{}," does\nnot reach an already-running proxy; the next local deploy restarts it, or run\n",[158,3441,3442],{},"ant nest tools caddy restart"," to apply it now.",[150,3445,3446,3447,1290,3449,1290,3451,1290,3453,2122,3455,1290,3457,1290,3459,3423,3461,3463,3464,3466],{},"A group entry holds ",[158,3448,2159],{},[158,3450,2538],{},[158,3452,2558],{},[158,3454,2460],{},[158,3456,1912],{},[158,3458,1879],{},[158,3460,1902],{},[158,3462,2671],{},". Membership comes from a\nproject's ",[158,3465,1989],{}," key, not from a list here.",[150,3468,3469,3471,3472,3474,3475,3477,3478,3480,3481,3483,3484,1294],{},[158,3470,2806],{}," is the machine's network name; ",[158,3473,2141],{}," is its iroh identity. Both\nare optional and omitted for ",[158,3476,1267],{},". The ",[158,3479,2403],{}," key's auto-start field is\n",[158,3482,2415],{}," (not ",[158,3485,3486],{},"enabled",[154,3488,3489],{"id":1701},"Networks",[150,3491,3492],{},"Three kinds of docker network a project can join:",[1978,3494,3495,3505,3517],{},[1981,3496,3497,3500,3501,3504],{},[2033,3498,3499],{},"Its own",": ",[158,3502,3503],{},"deploy.networks"," lists networks the project declares.",[1981,3506,3507,3510,3511,3513,3514,1484],{},[2033,3508,3509],{},"Its group's",": when the project has a ",[158,3512,1989],{},", it joins that group's\nshared network unless ",[158,3515,3516],{},"use_group_network: false",[1981,3518,3519,3522,3523,3526,3527,3530,3531,3533,3534,1484],{},[2033,3520,3521],{},"The machine's",": a single network shared by the whole machine, which any\nproject opts into with ",[158,3524,3525],{},"use_machine_network: true",". The default name is\n",[158,3528,3529],{},"ant-\u003Cmachine>"," (e.g. ",[158,3532,2479],{},"), overridable at\n",[158,3535,3536],{},"machines.\u003Cid>.network.name",[150,3538,3539],{},"The machine-wide network is for the case a group does not fit: a project that\nowns a shared service (Postgres, Redis, a queue) publishes itself on the\nmachine network, and any other project on the same machine opts in to reach it\nby container name. Unlike the group network it is opt-in (default off).",[163,3541,3543],{"className":165,"code":3542,"language":167,"meta":168,"style":168},"# infra\u002Fdb, the database project\napp: db\ndeploy:\n  run: compose\n  use_machine_network: true\n",[158,3544,3545,3550,3559,3565,3574],{"__ignoreMap":168},[172,3546,3547],{"class":174,"line":175},[172,3548,3549],{"class":190},"# infra\u002Fdb, the database project\n",[172,3551,3552,3554,3556],{"class":174,"line":194},[172,3553,197],{"class":178},[172,3555,183],{"class":182},[172,3557,3558],{"class":202}," db\n",[172,3560,3561,3563],{"class":174,"line":209},[172,3562,317],{"class":178},[172,3564,278],{"class":182},[172,3566,3567,3569,3571],{"class":174,"line":223},[172,3568,339],{"class":178},[172,3570,183],{"class":182},[172,3572,3573],{"class":202}," compose\n",[172,3575,3576,3578,3580],{"class":174,"line":237},[172,3577,924],{"class":178},[172,3579,183],{"class":182},[172,3581,838],{"class":466},[163,3583,3585],{"className":165,"code":3584,"language":167,"meta":168,"style":168},"# apps\u002Fapi, a consumer, not in the same group\napp: api\ndeploy:\n  run: container\n  use_machine_network: true   # reaches `postgres:5432` by name\n",[158,3586,3587,3592,3601,3607,3616],{"__ignoreMap":168},[172,3588,3589],{"class":174,"line":175},[172,3590,3591],{"class":190},"# apps\u002Fapi, a consumer, not in the same group\n",[172,3593,3594,3596,3598],{"class":174,"line":194},[172,3595,197],{"class":178},[172,3597,183],{"class":182},[172,3599,3600],{"class":202}," api\n",[172,3602,3603,3605],{"class":174,"line":209},[172,3604,317],{"class":178},[172,3606,278],{"class":182},[172,3608,3609,3611,3613],{"class":174,"line":223},[172,3610,339],{"class":178},[172,3612,183],{"class":182},[172,3614,3615],{"class":202}," container\n",[172,3617,3618,3620,3622,3624],{"class":174,"line":237},[172,3619,924],{"class":178},[172,3621,183],{"class":182},[172,3623,467],{"class":466},[172,3625,3626],{"class":190},"   # reaches `postgres:5432` by name\n",[150,3628,3629,3630,3633],{},"All three are created on deploy (unless ",[158,3631,3632],{},"external: true",") and attached to every\nservice; containers on the same network resolve each other by name. On a remote\nnest the machine's worker creates the network and attaches the deploy, so the\nsame project config works whether it runs here or on a registered machine.",[150,3635,3636,3637,3164,3640,3643],{},"A group's network can also be declared ",[158,3638,3639],{},"attach: false",[158,3641,3642],{},"--no-attach","),\nwhich keeps the definition but stops members auto-joining.",[150,3645,3646,3647,3650,3651,3654,3655,1484],{},"From the CLI, toggle the machine network on a project with\n",[158,3648,3649],{},"ant nest edit deploy --machine-network"," (or ",[158,3652,3653],{},"--machine-network=false","), and\nedit the project's own networks with ",[158,3656,3657],{},"ant nest edit network add|remove|list",[154,3659,1919],{"id":1912},[150,3661,3662,3663,3666,3667,3670,3671,3673,3674,3676,3677,183],{},"Ant never adds a hostname for you; domains are always explicit. They are\ndeclared per ",[2033,3664,3665],{},"deployment",", not per project. Each entry names the\nhostname(s) it serves ",[2033,3668,3669],{},"and what it routes to",": a compose service and container\nport, or just a port (which defaults to ",[158,3672,1946],{}," for a single-container\nproject). A ",[2033,3675,212],{}," owns one or more base domains the entries may build on; on\na local machine they default to ",[158,3678,3679],{},"localhost",[163,3681,3685],{"className":3682,"code":3683,"language":3684,"meta":168,"style":168},"language-sh shiki shiki-themes material-theme-lighter github-light github-dark","ant nest groups domains backend example.com example.org\n","sh",[158,3686,3687],{"__ignoreMap":168},[172,3688,3689],{"class":174,"line":175},[172,3690,3683],{},[150,3692,3693,3694,3697],{},"The base is optional: omit it to use every group domain, name one to override, or\nuse a bare hostname verbatim. A deployment's own base always wins; the group's are\nfallbacks. With several group domains and no base named, the entry applies to each. Set ",[158,3695,3696],{},"group_domain"," to pin one of the group's domains instead.",[163,3699,3701],{"className":165,"code":3700,"language":167,"meta":168,"style":168},"deployments:\n  local:\n    domains:\n      # Container project: routes to deploy.port.\n      - subdomain: api            # api.example.com + api.example.org\n      - subdomain: eu             # only the named group domain\n        group_domain: example.org # → eu.example.org\n      - path: \u002Finternal           # example.com\u002Finternal + example.org\u002Finternal\n      - {}                        # example.com + example.org (as-is)\n      - app.other.org             # absolute hostname, verbatim\n      # Compose: each domain names the service AND container port it forwards to.\n      - subdomain: shop\n        service: web\n        port: 3000\n      - path: \u002Fapi\n        service: api\n        port: 8080\n",[158,3702,3703,3709,3716,3722,3727,3742,3756,3769,3784,3794,3804,3809,3820,3830,3840,3851,3859],{"__ignoreMap":168},[172,3704,3705,3707],{"class":174,"line":175},[172,3706,1018],{"class":178},[172,3708,278],{"class":182},[172,3710,3711,3714],{"class":174,"line":194},[172,3712,3713],{"class":178},"  local",[172,3715,278],{"class":182},[172,3717,3718,3720],{"class":174,"line":209},[172,3719,1169],{"class":178},[172,3721,278],{"class":182},[172,3723,3724],{"class":174,"line":223},[172,3725,3726],{"class":190},"      # Container project: routes to deploy.port.\n",[172,3728,3729,3731,3734,3736,3739],{"class":174,"line":237},[172,3730,1126],{"class":182},[172,3732,3733],{"class":178}," subdomain",[172,3735,183],{"class":182},[172,3737,3738],{"class":202}," api",[172,3740,3741],{"class":190},"            # api.example.com + api.example.org\n",[172,3743,3744,3746,3748,3750,3753],{"class":174,"line":251},[172,3745,1126],{"class":182},[172,3747,3733],{"class":178},[172,3749,183],{"class":182},[172,3751,3752],{"class":202}," eu",[172,3754,3755],{"class":190},"             # only the named group domain\n",[172,3757,3758,3761,3763,3766],{"class":174,"line":265},[172,3759,3760],{"class":178},"        group_domain",[172,3762,183],{"class":182},[172,3764,3765],{"class":202}," example.org",[172,3767,3768],{"class":190}," # → eu.example.org\n",[172,3770,3771,3773,3776,3778,3781],{"class":174,"line":272},[172,3772,1126],{"class":182},[172,3774,3775],{"class":178}," path",[172,3777,183],{"class":182},[172,3779,3780],{"class":202}," \u002Finternal",[172,3782,3783],{"class":190},"           # example.com\u002Finternal + example.org\u002Finternal\n",[172,3785,3786,3788,3791],{"class":174,"line":281},[172,3787,1126],{"class":182},[172,3789,3790],{"class":182}," {}",[172,3792,3793],{"class":190},"                        # example.com + example.org (as-is)\n",[172,3795,3796,3798,3801],{"class":174,"line":295},[172,3797,1126],{"class":182},[172,3799,3800],{"class":202}," app.other.org",[172,3802,3803],{"class":190},"             # absolute hostname, verbatim\n",[172,3805,3806],{"class":174,"line":309},[172,3807,3808],{"class":190},"      # Compose: each domain names the service AND container port it forwards to.\n",[172,3810,3811,3813,3815,3817],{"class":174,"line":314},[172,3812,1126],{"class":182},[172,3814,3733],{"class":178},[172,3816,183],{"class":182},[172,3818,3819],{"class":202}," shop\n",[172,3821,3822,3825,3827],{"class":174,"line":322},[172,3823,3824],{"class":178},"        service",[172,3826,183],{"class":182},[172,3828,3829],{"class":202}," web\n",[172,3831,3832,3835,3837],{"class":174,"line":336},[172,3833,3834],{"class":178},"        port",[172,3836,183],{"class":182},[172,3838,3839],{"class":186}," 3000\n",[172,3841,3842,3844,3846,3848],{"class":174,"line":350},[172,3843,1126],{"class":182},[172,3845,3775],{"class":178},[172,3847,183],{"class":182},[172,3849,3850],{"class":202}," \u002Fapi\n",[172,3852,3853,3855,3857],{"class":174,"line":364},[172,3854,3824],{"class":178},[172,3856,183],{"class":182},[172,3858,3600],{"class":202},[172,3860,3861,3863,3865],{"class":174,"line":376},[172,3862,3834],{"class":178},[172,3864,183],{"class":182},[172,3866,3867],{"class":186}," 8080\n",[150,3869,3870,1686,3873,3875,3876,3879,3880,1686,3883,1440,3886,3889,3890,3893,3894,3897,3898,3164,3901,2122,3904,1290,3907,1290,3910,1290,3913,1290,3916,1290,3919,2122,3922,3925],{},[158,3871,3872],{},"service",[158,3874,1403],{}," are the routing target; a domain is only meaningful with what it\nforwards to. ",[158,3877,3878],{},"scheme"," pins a route to ",[158,3881,3882],{},"http",[158,3884,3885],{},"https",[158,3887,3888],{},"strip_trailing_slash","\nrewrites ",[158,3891,3892],{},"\u002Fpath\u002F"," to ",[158,3895,3896],{},"\u002Fpath",". On a remote nest the machine's Caddy serves the same\nroutes. Manage them with ",[158,3899,3900],{},"ant nest edit domain add|remove|list",[158,3902,3903],{},"--subdomain",[158,3905,3906],{},"--domain",[158,3908,3909],{},"--path",[158,3911,3912],{},"--group-domain",[158,3914,3915],{},"--service",[158,3917,3918],{},"--port",[158,3920,3921],{},"--scheme",[158,3923,3924],{},"--strip-slash",") or the project's Domains tab.",[154,3927,3929],{"id":3928},"migration-from-v1","Migration from v1",[150,3931,3932],{},"v1 configs migrate automatically in memory on load:",[1978,3934,3935,3946,3956],{},[1981,3936,3937,3938,3941,3942,3945],{},"a top-level ",[158,3939,3940],{},"\"local\""," object folds into ",[158,3943,3944],{},"machines.local",";",[1981,3947,3948,3949,1290,3951,3423,3953,3955],{},"flat ",[158,3950,2490],{},[158,3952,2671],{},[158,3954,2403],{}," nest under the local machine;",[1981,3957,3958,3959,3961],{},"a legacy group carrying a ",[158,3960,1932],{}," field is nested under that machine.",[150,3963,3964,3965,3967],{},"A legacy value of the wrong JSON type (for example a string ",[158,3966,2490],{},", or a\ngroup entry that is not an object) is reported instead of being dropped by the\nmigration.",[150,3969,3970,3971,3974],{},"The CLI keeps the migrated form in memory and does not rewrite the file. Saving\nthrough the dashboard's raw config editor writes it back at ",[158,3972,3973],{},"version: 2"," and\nkeeps a backup of the original.",[154,3976,3977],{"id":1902},"Secrets",[150,3979,3980,3981,3984,3985,3988,3989,3991,3992,1440,3995,3998],{},"Build-time secrets resolve from the environment and are never baked into images\nor the lockfile. Runtime secrets reach the container through the docker process\nenvironment (a bare ",[158,3982,3983],{},"docker run -e KEY","; compose uses ",[158,3986,3987],{},"--env-file"," on the\nworker), never through stored plaintext in a compose document or command argv.\nValues may span multiple lines (for example a PEM key): the process environment\ncarries them as-is, and compose values are written quoted and escaped. Reference\nsecrets by name in ",[158,3990,160],{}," through ",[158,3993,3994],{},"ant nest edit",[158,3996,3997],{},"ant trail env"," prints\nthe resolved values:",[163,4000,4002],{"className":3682,"code":4001,"language":3684,"meta":168,"style":168},"ant nest edit secret add API_TOKEN\nant nest edit secret add NPM_TOKEN --build-time\nant trail env\n",[158,4003,4004,4009,4014],{"__ignoreMap":168},[172,4005,4006],{"class":174,"line":175},[172,4007,4008],{},"ant nest edit secret add API_TOKEN\n",[172,4010,4011],{"class":174,"line":194},[172,4012,4013],{},"ant nest edit secret add NPM_TOKEN --build-time\n",[172,4015,4016],{"class":174,"line":209},[172,4017,4018],{},"ant trail env\n",[150,4020,4021,4022,4025],{},"A secret can also name a ",[2033,4023,4024],{},"provider",", used when the name is not in the\nenvironment and only resolved at deploy time (the value is never stored):",[163,4027,4029],{"className":165,"code":4028,"language":167,"meta":168,"style":168},"deploy:\n  secrets:\n    - API_TOKEN                          # from the environment by name\n    - name: NPM_TOKEN\n      build_time: true\n    - name: DATABASE_URL\n      from: op:\u002F\u002FPrivate\u002Fprod-db\u002Fpassword   # 1Password CLI (`op read`)\n    - name: STRIPE_KEY\n      from: cmd:vault kv get -field=key secret\u002Fstripe   # any CLI, stdout is the value\n    - name: LEGACY_TOKEN\n      from: env:OLD_TOKEN               # another environment variable\n",[158,4030,4031,4037,4044,4054,4065,4074,4085,4098,4109,4121,4132],{"__ignoreMap":168},[172,4032,4033,4035],{"class":174,"line":175},[172,4034,317],{"class":178},[172,4036,278],{"class":182},[172,4038,4039,4042],{"class":174,"line":194},[172,4040,4041],{"class":178},"  secrets",[172,4043,278],{"class":182},[172,4045,4046,4048,4051],{"class":174,"line":209},[172,4047,789],{"class":182},[172,4049,4050],{"class":202}," API_TOKEN",[172,4052,4053],{"class":190},"                          # from the environment by name\n",[172,4055,4056,4058,4060,4062],{"class":174,"line":223},[172,4057,789],{"class":182},[172,4059,867],{"class":178},[172,4061,183],{"class":182},[172,4063,4064],{"class":202}," NPM_TOKEN\n",[172,4066,4067,4070,4072],{"class":174,"line":237},[172,4068,4069],{"class":178},"      build_time",[172,4071,183],{"class":182},[172,4073,838],{"class":466},[172,4075,4076,4078,4080,4082],{"class":174,"line":251},[172,4077,789],{"class":182},[172,4079,867],{"class":178},[172,4081,183],{"class":182},[172,4083,4084],{"class":202}," DATABASE_URL\n",[172,4086,4087,4090,4092,4095],{"class":174,"line":265},[172,4088,4089],{"class":178},"      from",[172,4091,183],{"class":182},[172,4093,4094],{"class":202}," op:\u002F\u002FPrivate\u002Fprod-db\u002Fpassword",[172,4096,4097],{"class":190},"   # 1Password CLI (`op read`)\n",[172,4099,4100,4102,4104,4106],{"class":174,"line":272},[172,4101,789],{"class":182},[172,4103,867],{"class":178},[172,4105,183],{"class":182},[172,4107,4108],{"class":202}," STRIPE_KEY\n",[172,4110,4111,4113,4115,4118],{"class":174,"line":281},[172,4112,4089],{"class":178},[172,4114,183],{"class":182},[172,4116,4117],{"class":202}," cmd:vault kv get -field=key secret\u002Fstripe",[172,4119,4120],{"class":190},"   # any CLI, stdout is the value\n",[172,4122,4123,4125,4127,4129],{"class":174,"line":295},[172,4124,789],{"class":182},[172,4126,867],{"class":178},[172,4128,183],{"class":182},[172,4130,4131],{"class":202}," LEGACY_TOKEN\n",[172,4133,4134,4136,4138,4141],{"class":174,"line":309},[172,4135,4089],{"class":178},[172,4137,183],{"class":182},[172,4139,4140],{"class":202}," env:OLD_TOKEN",[172,4142,4143],{"class":190},"               # another environment variable\n",[150,4145,4146,4149,4150,4153,4154,4157,4158,4161,4162,4165,4166,4169],{},[158,4147,4148],{},"op:\u002F\u002F"," runs the 1Password CLI (",[158,4151,4152],{},"ANT_OP_BIN"," overrides the binary); ",[158,4155,4156],{},"cmd:"," runs\nany command and uses its trimmed stdout, which covers Vault, AWS Secrets\nManager, ",[158,4159,4160],{},"pass",", and the like; ",[158,4163,4164],{},"env:"," reads a named environment variable. A\nprovider that fails is reported as a warning and the secret is skipped, never\nlogged. ",[158,4167,4168],{},"ant trail doctor"," reports secrets that are set neither in the\nenvironment nor by a provider.",[4171,4172,4173],"style",{},"html pre.shiki code .sQzsp, html code.shiki .sQzsp{--shiki-light:#E53935;--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .syTEX, html code.shiki .syTEX{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sseR_, html code.shiki .sseR_{--shiki-light:#9C3EDA;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .swQdS, html code.shiki .swQdS{--shiki-light:#E53935;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sAQsV, html code.shiki .sAQsV{--shiki-light:#916B53;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":168,"searchDepth":194,"depth":194,"links":4175},[4176,4185,4186,4191,4192,4193,4194],{"id":156,"depth":194,"text":4177,"children":4178},"ant.yaml (per project)",[4179,4180,4182,4183,4184],{"id":1183,"depth":209,"text":1184},{"id":1336,"depth":209,"text":4181},"deploy keys",{"id":943,"depth":209,"text":943},{"id":992,"depth":209,"text":992},{"id":1825,"depth":209,"text":1826},{"id":1964,"depth":194,"text":1965},{"id":2080,"depth":194,"text":4187,"children":4188},"~\u002F.ant\u002Fconfig.json (per machine)",[4189,4190],{"id":3084,"depth":209,"text":1184},{"id":3231,"depth":209,"text":3232},{"id":1701,"depth":194,"text":3489},{"id":1912,"depth":194,"text":1919},{"id":3928,"depth":194,"text":3929},{"id":1902,"depth":194,"text":3977},"ant.yaml for a project, and ~\u002F.ant\u002Fconfig.json for the machine.","md",null,{},{"icon":64},{"title":61,"description":4201},"Reference for ant.yaml and the machine config at ~\u002F.ant\u002Fconfig.json (schema v2).","OFwRcj2QzR0EIgYKcSWQyzbBcGOLZvVHUuuuqlWzOLg",[4204,4206],{"title":56,"path":57,"stem":58,"description":4205,"icon":59,"children":-1},"How the CLI talks to a remote machine: iroh, RPC, and blob streaming.",{"title":66,"path":67,"stem":68,"description":4207,"icon":23,"children":-1},"Build an image, run it locally, and reclaim disk.",1791494556373]