[{"data":1,"prerenderedAt":497},["ShallowReactive",2],{"navigation_docs":3,"-get-started-installation":144,"-get-started-installation-surround":492},[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":15,"body":146,"description":484,"extension":485,"links":486,"meta":487,"navigation":488,"path":16,"seo":489,"stem":17,"__hash__":491},"docs\u002F1.get-started\u002F2.installation.md",{"type":147,"value":148,"toc":478},"minimark",[149,154,179,186,202,228,238,242,276,302,327,330,350,364,368,415,426,430,442,457,468,474],[150,151,153],"h2",{"id":152},"from-a-release","From a release",[155,156,157,158,162,163,166,167,170,171,174,175,178],"p",{},"Prebuilt binaries are served by this site itself under ",[159,160,161],"code",{},"\u002Fdl\u002F",", one directory\nper release: ",[159,164,165],{},"ant_\u003Cos>_\u003Carch>.tar.gz",", ",[159,168,169],{},"ant-worker-linux-\u003Carch>",", and a\n",[159,172,173],{},"checksums.sha256",". The ",[159,176,177],{},"latest.json"," manifest names the most recently\npublished release.",[155,180,181,182,185],{},"The install script resolves the latest stable version (or the tag given with\n",[159,183,184],{},"--version vX.Y.Z","), downloads the matching archive, verifies its SHA-256\nchecksum, and installs it:",[187,188,193],"pre",{"className":189,"code":190,"language":191,"meta":192,"style":192},"language-sh shiki shiki-themes material-theme-lighter github-light github-dark","curl -fsSL https:\u002F\u002Fants-docs.pages.dev\u002Fdl\u002Finstall.sh | sh\n","sh","",[159,194,195],{"__ignoreMap":192},[196,197,200],"span",{"class":198,"line":199},"line",1,[196,201,190],{},[155,203,204,205,208,209,212,213,216,217,219,220,223,224,227],{},"No credentials are needed. On a Linux machine that will run containers, add\n",[159,206,207],{},"--agent"," to install ",[159,210,211],{},"ant-worker"," beside the CLI; ",[159,214,215],{},"--uninstall"," (with ",[159,218,207],{},"\nand optionally ",[159,221,222],{},"--purge",") reverses an install. Set ",[159,225,226],{},"ANT_DL_BASE_URL"," to install\nfrom a mirror.",[155,229,230,231,234,235,237],{},"For a machine with no SSH access, ",[159,232,233],{},"ant nest bootstrap --machine prod --cloud-init --worker-url \u003Curl>"," prints a user-data script that installs the\nworker from that URL for the target architecture. Pass the matching\n",[159,236,169],{}," URL from the same release directory; the machine must\nbe able to fetch it directly.",[150,239,241],{"id":240},"from-a-clone-development","From a clone (development)",[187,243,245],{"className":189,"code":244,"language":191,"meta":192,"style":192},"git clone https:\u002F\u002Fgithub.com\u002Fmekhane-labs\u002Fant.git\ncd ant\nnpm ci --prefix web\u002Fapp   # once: the Go build embeds web\u002Fapp\u002Fdist\ntask build                # .\u002Fbin\u002Fant\ntask build:agent          # .\u002Fbin\u002Fant-worker (Linux + CGO)\n",[159,246,247,252,258,264,270],{"__ignoreMap":192},[196,248,249],{"class":198,"line":199},[196,250,251],{},"git clone https:\u002F\u002Fgithub.com\u002Fmekhane-labs\u002Fant.git\n",[196,253,255],{"class":198,"line":254},2,[196,256,257],{},"cd ant\n",[196,259,261],{"class":198,"line":260},3,[196,262,263],{},"npm ci --prefix web\u002Fapp   # once: the Go build embeds web\u002Fapp\u002Fdist\n",[196,265,267],{"class":198,"line":266},4,[196,268,269],{},"task build                # .\u002Fbin\u002Fant\n",[196,271,273],{"class":198,"line":272},5,[196,274,275],{},"task build:agent          # .\u002Fbin\u002Fant-worker (Linux + CGO)\n",[155,277,278,281,282,285,286,289,290,293,294,297,298,301],{},[159,279,280],{},"CGO_ENABLED=1 go install .\u002Fcmd\u002Fant"," also works from inside the clone and puts\nthe CLI in ",[159,283,284],{},"$GOBIN",". The module path is ",[159,287,288],{},"github.com\u002Fmekhane-labs\u002Fant","; a remote\n",[159,291,292],{},"go install github.com\u002Fmekhane-labs\u002Fant\u002Fcmd\u002Fant@latest"," additionally needs the\nvendored iroh-go fork published, because ",[159,295,296],{},"go install pkg@version"," ignores the\nlocal ",[159,299,300],{},"replace",".",[155,303,304,307,308,311,312,315,316,318,319,322,323,326],{},[159,305,306],{},"task install"," builds the CLI and puts ",[159,309,310],{},"ant"," on ",[159,313,314],{},"PATH",", together with\n",[159,317,211],{}," beside it on Linux, so an installed CLI can provision a machine\nover SSH by uploading its own worker. The iroh static libraries\n(",[159,320,321],{},"packages\u002Firoh-go\u002Flibs\u002F\u003Ctarget>\u002Flibiroh.a",") are committed, so no Rust\ntoolchain is needed; run ",[159,324,325],{},"task libs:build"," only when updating iroh.",[155,328,329],{},"Provision a server with the worker you just built:",[187,331,333],{"className":189,"code":332,"language":191,"meta":192,"style":192},".\u002Fbin\u002Fant nest machines add prod --host 173.87.3.89 --ssh-key ~\u002F.ssh\u002Fid_ed25519\n# or, for an already-registered machine:\n.\u002Fbin\u002Fant nest bootstrap --machine prod --host 173.87.3.89\n",[159,334,335,340,345],{"__ignoreMap":192},[196,336,337],{"class":198,"line":199},[196,338,339],{},".\u002Fbin\u002Fant nest machines add prod --host 173.87.3.89 --ssh-key ~\u002F.ssh\u002Fid_ed25519\n",[196,341,342],{"class":198,"line":254},[196,343,344],{},"# or, for an already-registered machine:\n",[196,346,347],{"class":198,"line":260},[196,348,349],{},".\u002Fbin\u002Fant nest bootstrap --machine prod --host 173.87.3.89\n",[155,351,352,353,356,357,166,360,363],{},"SSH provisioning uploads ",[159,354,355],{},".\u002Fbin\u002Fant-worker"," (or ",[159,358,359],{},"--worker-bin",[159,361,362],{},"ANT_WORKER_BIN",")\nand refuses a binary that is not a Linux ELF for the target's architecture.",[150,365,367],{"id":366},"prerequisites","Prerequisites",[369,370,371,375,378,381],"ul",{},[372,373,374],"li",{},"Go 1.26+ to build from source",[372,376,377],{},"Node 22+ and npm (the dashboard is embedded in the CLI)",[372,379,380],{},"Docker: the CLI and a running daemon",[372,382,383,384,387,388],{},"Optionally, a builder CLI depending on ",[159,385,386],{},"deploy.build",":\n",[369,389,390,399,407],{},[372,391,392,395,396],{},[159,393,394],{},"nixpacks"," for ",[159,397,398],{},"build: nixpacks",[372,400,401,395,404],{},[159,402,403],{},"pack",[159,405,406],{},"build: buildpacks",[372,408,409,395,412],{},[159,410,411],{},"railpack",[159,413,414],{},"build: railpack",[155,416,417,418,421,422,425],{},"Run ",[159,419,420],{},"ant nest tools"," at any time to see which are installed and how to get the\nmissing ones. ",[159,423,424],{},"ant nest tools install"," installs them via the host package\nmanager or the tool's official installer.",[150,427,429],{"id":428},"the-remote-transport-cgo","The remote transport (CGO)",[155,431,432,433,437,438,441],{},"The iroh transport (machine-to-machine RPC) is available on ",[434,435,436],"strong",{},"linux\u002Famd64","\nand ",[434,439,440],{},"linux\u002Farm64"," and needs a C compiler:",[187,443,445],{"className":189,"code":444,"language":191,"meta":192,"style":192},"CGO_ENABLED=1 go build -o bin\u002Fant .\u002Fcmd\u002Fant\nCGO_ENABLED=1 go build -o bin\u002Fant-worker .\u002Fcmd\u002Fagent\n",[159,446,447,452],{"__ignoreMap":192},[196,448,449],{"class":198,"line":199},[196,450,451],{},"CGO_ENABLED=1 go build -o bin\u002Fant .\u002Fcmd\u002Fant\n",[196,453,454],{"class":198,"line":254},[196,455,456],{},"CGO_ENABLED=1 go build -o bin\u002Fant-worker .\u002Fcmd\u002Fagent\n",[155,458,459,460,463,464,467],{},"On any other platform Ant builds and runs local-first without the transport\n(",[159,461,462],{},"ant nest ping"," reports that iroh is unavailable). ",[159,465,466],{},"CGO_ENABLED=0 go build .\u002F...","\nalso works; it simply excludes the transport.",[469,470,471],"blockquote",{},[155,472,473],{},"Windows and macOS users: the CLI builds local-first only; provisioning and\nmanaging remote machines requires a Linux CLI.",[475,476,477],"style",{},"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);}",{"title":192,"searchDepth":254,"depth":254,"links":479},[480,481,482,483],{"id":152,"depth":254,"text":153},{"id":240,"depth":254,"text":241},{"id":366,"depth":254,"text":367},{"id":428,"depth":254,"text":429},"Build ant and ant-worker from a clone, or install a release build.","md",null,{},{"icon":18},{"title":15,"description":490},"Build Ant from a clone and provision machines over SSH; CGO is required for the remote transport.","QIocRHRXdxKGzm7r6vl22FgxT-PwOJo8p_8vmJWr2JI",[493,495],{"title":10,"path":11,"stem":12,"description":494,"icon":13,"children":-1},"What Ant is, and the three pillars it is built around.",{"title":20,"path":21,"stem":22,"description":496,"icon":23,"children":-1},"Scaffold a config, check your tools, and deploy locally.",1791494556147]