Detect the coding agents on this machine, install the Fly agent skills
into each of them, and add the hosted Fly MCP server at https://mcp.fly.io.Skills are installed the same way as āfly skills installā: into ~/.agents/skills
and into the global skills directory of every detected coding agent (Claude
Code, Codex, Cursor, OpenCode, GitHub Copilot, Factory Droid, Pi and
Antigravity). Use āagent to pick agents explicitly. Files you have edited
are left alone. This commandās āforce does not overwrite those files; use
āfly skills install āforceā for that.Each agent gets its own skills result. A failed directory does not stop the
other agents, and completed writes are recorded in the skills manifest.
Preserved local edits are reported as preserved_local_changes, with the
affected paths and reasons. Preserved local deletions leave the install
incomplete and cause a non-zero exit; this command does not restore them.The MCP server entry is named āflyā and stores only the URL. No access
tokens, client IDs or secrets are written. Config files are written before
sign-in, so a login that waits on the browser cannot block them.An entry is already configured only when it matches the shape this command
would write: the right type, the hosted URL (a trailing slash does not
matter), Copilotās tools list when that client requires one, and not
disabled or enabled: false. Extra keys such as headers are kept. Anything
else is a conflict. āforce repairs the keys this command owns and leaves
the extra keys in place. A config file that cannot be parsed is left
untouched and that agent is reported; the others are still set up. An empty
or whitespace-only file, including one that is only a UTF-8 BOM, counts as
missing and is created. A BOM in front of real JSON is kept.A symlinked config is updated at its target only when that resolved path
stays inside the expected config directory or your home directory, and not
under ~/.ssh. A link that points anywhere else is left untouched. āforce
does not bypass that check. The link stays in place, the summary prints the
resolved path, and the path is resolved once while the lock is held.Detected agents get that entry in their global config: Claude Code
(/.claude.json), Cursor (/.cursor/mcp.json), Codex (/.codex/config.toml),
OpenCode (/.config/opencode/opencode.json, or $XDG_CONFIG_HOME/opencode
when that variable is set), GitHub Copilot (/.copilot/mcp-config.json),
Factory Droid (/.factory/mcp.json) and Antigravity
(~/.gemini/config/mcp_config.json). Pi and the universal ~/.agents target
receive skills only. Pi has no stable global MCP config that this command
writes.CODEX_HOME, CLAUDE_CONFIG_DIR and COPILOT_HOME are honored when set. A
relative value is made absolute and ā..ā is cleaned; a leading ~ is not
expanded. OpenCode uses $XDG_CONFIG_HOME/opencode when XDG_CONFIG_HOME is
set, and ~/.config/opencode otherwise, for both the MCP config and the
skills directory. An existing opencode.jsonc is edited instead of creating
opencode.json. The resolved path is printed for each agent. Cursor, Factory
Droid, Antigravity and Pi have no confirmed override for the file this
command writes.OpenCode configs that already use the v2 mcp.servers object get
mcp.servers.fly. Other OpenCode configs get mcp.fly.If you are not signed in, an interactive terminal offers āfly auth loginā
and āfly auth signupā after the files are written. -y on a terminal runs
login after the files are written. Embedded mode and a non-TTY stdin do not
start the browser login. A failed login does not stop the skills or MCP
setup; it is reported at the end. The first MCP call from an agent opens a
browser to authorize https://mcp.fly.io.The command exits non-zero when skills could not be installed, when an
agent named with āagent failed, or when nothing was installed or
configured. An MCP entry that is already correct, or that was left unchanged
because it points somewhere else, does not by itself fail the command. A
failed login does not either.The installer script runs this command with the banner and the restart hint
suppressed, one line per agent:FLY_SETUP_EMBEDDED=1 fly setup agent -yPass ājson to print the same summary as JSON.
--agent strings Act on exactly the named agent(s) instead of detecting them; include universal to write ~/.agents/skills. One of: universal, claude-code, codex, cursor, opencode, copilot, factory-droid, pi, antigravity. Can be repeated or comma-separated. --force Repair a fly MCP entry whose type, URL, tools, or enabled state does not match. Extra keys such as headers are kept -h, --help help for agent -j, --json JSON output --skip-login Do not prompt to log in or sign up --skip-mcp Do not write MCP configuration --skip-skills Do not install Fly agent skills -y, --yes Accept all confirmations (also --auto-confirm)
fly setup - Prepare this machine to use Fly from a coding agent
āI
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"Fly.io","colors":{"primary":"#7C3BED","light":"#A78BFA","dark":"#5B21B6"},"logo":{"light":"https://mintcdn.com/fly-io/izaS1l2UMuz6sm1H/images/logo/light.svg?fit=max\u0026auto=format\u0026n=izaS1l2UMuz6sm1H\u0026q=85\u0026s=5f1256e06beb6fdd5ed68aad3dd32b39","dark":"https://mintcdn.com/fly-io/izaS1l2UMuz6sm1H/images/logo/dark.svg?fit=max\u0026auto=format\u0026n=izaS1l2UMuz6sm1H\u0026q=85\u0026s=67c887e4f1263581cb10ab19ddaf8181"},"favicon":"https://mintcdn.com/fly-io/izaS1l2UMuz6sm1H/images/logo/favicon.ico?fit=max\u0026auto=format\u0026n=izaS1l2UMuz6sm1H\u0026q=85\u0026s=b14504948f2e9d83cd3aa25e07454f22","background":{"decoration":"windows"},"navbar":{"links":[{"href":"https://fly.io/pricing/","label":"Pricing"},{"href":"/about/support","label":"Support"},{"href":"https://fly.io/app/sign-in/","label":"Log In"}],"primary":{"type":"button","label":"Sign Up","href":"https://fly.io/app/sign-up/?s=docs"}},"footer":{"links":[{"header":"Legal","items":[{"label":"Privacy Policy","href":"https://fly.io/legal/privacy-policy"}]}]},"fonts":{"heading":{"family":"P22 Mackinac Pro","source":"https://docs.fly.io/assets/fonts/mackinac-bold.woff2","format":"woff2"},"body":{"family":"Bricolage Grotesque"}},"integrations":{"plausible":{"domain":"docs.fly.io"},"telemetry":{"enabled":false}},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"fly-io","hasAudioNarration":false,"actualSubdomain":"fly-io","customDomains":["docs.fly.io"],"gitSource":{"_id":"6ad7fb4f692c7c940ff1a2d1","type":"github","owner":"superfly","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ae8e92f01fe75363354d0b6","collectionId":"0558f6e3-a76d-490c-b850-56f2c3a2b0f1","liveDeploymentHistoryId":"6ae8e92f01fe75363354d0b6","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae8e92f01fe75363354d0b6","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"Fly docs","count":1182},{"language":"default","tag":"Reference","count":272},{"language":"default","tag":"flyctl","count":253},{"language":"default","tag":"Commands","count":251},{"language":"default","tag":"Machines API","count":212},{"language":"default","tag":"Language \u0026 Framework Guides","count":96},{"language":"default","tag":"Sprites API","count":50},{"language":"default","tag":"Guides (Blueprints)","count":37},{"language":"default","tag":"Getting Started","count":34},{"language":"default","tag":"Machines","count":29}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"styles.css","content":"/* vietnamese */\n@font-face {\n font-family: 'Bricolage Grotesque';\n font-style: normal;\n font-weight: 200 800;\n font-stretch: 75% 100%;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/bricolagegrotesque/v9/3y996as8bTXq_nANBjzKo3IeZx8z6up5L-eNGe6N.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Bricolage Grotesque';\n font-style: normal;\n font-weight: 200 800;\n font-stretch: 75% 100%;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/bricolagegrotesque/v9/3y996as8bTXq_nANBjzKo3IeZx8z6up5L-aNGe6N.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Bricolage Grotesque';\n font-style: normal;\n font-weight: 200 800;\n font-stretch: 75% 100%;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/bricolagegrotesque/v9/3y996as8bTXq_nANBjzKo3IeZx8z6up5L-iNGQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Fragment Mono';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/fragmentmono/v6/4iC16K5wfMRRjxp0DA6-2CLnB4Z3ia0M31U.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Fragment Mono';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/fragmentmono/v6/4iC16K5wfMRRjxp0DA6-2CLnB4Z3iq0M31U.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Fragment Mono';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/fragmentmono/v6/4iC16K5wfMRRjxp0DA6-2CLnB4Z3hK0M.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Fragment Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/fragmentmono/v6/4iCr6K5wfMRRjxp0DA6-2CLnB45HhrUI.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Fragment Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/fragmentmono/v6/4iCr6K5wfMRRjxp0DA6-2CLnB41HhrUI.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Fragment Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/fragmentmono/v6/4iCr6K5wfMRRjxp0DA6-2CLnB4NHhg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n@font-face{font-family:\"P22 Mackinac Pro\";src:url(/assets/fonts/mackinac-medium.woff2) format(\"woff2\");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:\"P22 Mackinac Pro\";src:url(/assets/fonts/mackinac-medium-italic.woff2) format(\"woff2\");font-weight:500;font-style:italic;font-display:swap}@font-face{font-family:\"P22 Mackinac Pro\";src:url(/assets/fonts/mackinac-bold.woff2) format(\"woff2\");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:\"P22 Mackinac Pro\";src:url(/assets/fonts/mackinac-bold-italic.woff2) format(\"woff2\");font-weight:700;font-style:italic;font-display:swap}:root{--default-mono-font-family:\"Fragment Mono\"}#content{font-size:17px;line-height:1.6;font-weight:325;font-variation-settings:\"wdth\" 98.5,\"opsz\" 24}#content b,#content strong{font-weight:575;font-variation-settings:\"wdth\" 97.5,\"opsz\" 24}#content h2,#content h3,#content h4,#content h5,#content h6{font-weight:500}@media (min-width:1536px){#content-area{max-width:48rem}}#fly-auth-nav,.hide_icon_card [data-component-part=card-icon],.hide_icon_card h2{display:none}div.frame_white>div>div>div.relative.rounded-xl.overflow-hidden.flex.justify-center{background-color:#fff;padding:8px}div.frame_purple>div>div>div.relative.rounded-xl.overflow-hidden.flex.justify-center{background-color:#281950;padding:8px}.small_img img{max-width:200px;padding:12px}.homepage_cards .columns{gap:calc(var(--spacing)*4)}@media (min-width:1024px){#fly-auth-nav{position:fixed;top:0;right:3rem;z-index:30;height:3rem;display:flex;align-items:center;gap:1.5rem}[data-banner-state=visible] #fly-auth-nav{top:2.5rem}#sidebar li[id^=\"https://fly.io/app/sign-in/\"],#sidebar li[id^=\"https://fly.io/app/sign-up/\"]{display:none}}#fly-auth-nav a{white-space:nowrap}.fly-auth-nav-signup{display:inline-flex;align-items:center;padding:.375rem .875rem}#content-area:not(:has(#api-playground-2-operation-page)) #header>.prose{display:none}"}],"page":{"pagePath":"flyctl/cmd/fly_setup_agent","slug":"/flyctl/cmd/fly_setup_agent","pageMetadata":{"title":"fly setup agent","source_url":"https://fly.io/docs/flyctl/setup-agent/","description":null,"href":"/flyctl/cmd/fly_setup_agent"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,del:`del`,li:`li`,p:`p`,pre:`pre`,span:`span`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Detect the coding agents on this machine, install the Fly agent skills\ninto each of them, and add the hosted Fly MCP server at `,_jsx(_components.a,{href:`https://mcp.fly.io`,children:`https://mcp.fly.io`}),`.`]}),`\n`,_jsx(_components.p,{children:`Skills are installed the same way as āfly skills installā: into ~/.agents/skills\nand into the global skills directory of every detected coding agent (Claude\nCode, Codex, Cursor, OpenCode, GitHub Copilot, Factory Droid, Pi and\nAntigravity). Use āagent to pick agents explicitly. Files you have edited\nare left alone. This commandās āforce does not overwrite those files; use\nāfly skills install āforceā for that.`}),`\n`,_jsx(_components.p,{children:`Each agent gets its own skills result. A failed directory does not stop the\nother agents, and completed writes are recorded in the skills manifest.\nPreserved local edits are reported as preserved_local_changes, with the\naffected paths and reasons. Preserved local deletions leave the install\nincomplete and cause a non-zero exit; this command does not restore them.`}),`\n`,_jsx(_components.p,{children:`The MCP server entry is named āflyā and stores only the URL. No access\ntokens, client IDs or secrets are written. Config files are written before\nsign-in, so a login that waits on the browser cannot block them.`}),`\n`,_jsx(_components.p,{children:`An entry is already configured only when it matches the shape this command\nwould write: the right type, the hosted URL (a trailing slash does not\nmatter), Copilotās tools list when that client requires one, and not\ndisabled or enabled: false. Extra keys such as headers are kept. Anything\nelse is a conflict. āforce repairs the keys this command owns and leaves\nthe extra keys in place. A config file that cannot be parsed is left\nuntouched and that agent is reported; the others are still set up. An empty\nor whitespace-only file, including one that is only a UTF-8 BOM, counts as\nmissing and is created. A BOM in front of real JSON is kept.`}),`\n`,_jsx(_components.p,{children:`A symlinked config is updated at its target only when that resolved path\nstays inside the expected config directory or your home directory, and not\nunder ~/.ssh. A link that points anywhere else is left untouched. āforce\ndoes not bypass that check. The link stays in place, the summary prints the\nresolved path, and the path is resolved once while the lock is held.`}),`\n`,_jsxs(_components.p,{children:[`Detected agents get that entry in their global config: Claude Code\n(`,_jsx(_components.del,{children:`/.claude.json), Cursor (`}),`/.cursor/mcp.json), Codex (`,_jsx(_components.del,{children:`/.codex/config.toml),\nOpenCode (`}),`/.config/opencode/opencode.json, or $XDG_CONFIG_HOME/opencode\nwhen that variable is set), GitHub Copilot (`,_jsx(_components.del,{children:`/.copilot/mcp-config.json),\nFactory Droid (`}),`/.factory/mcp.json) and Antigravity\n(~/.gemini/config/mcp_config.json). Pi and the universal ~/.agents target\nreceive skills only. Pi has no stable global MCP config that this command\nwrites.`]}),`\n`,_jsx(_components.p,{children:`CODEX_HOME, CLAUDE_CONFIG_DIR and COPILOT_HOME are honored when set. A\nrelative value is made absolute and ā..ā is cleaned; a leading ~ is not\nexpanded. OpenCode uses $XDG_CONFIG_HOME/opencode when XDG_CONFIG_HOME is\nset, and ~/.config/opencode otherwise, for both the MCP config and the\nskills directory. An existing opencode.jsonc is edited instead of creating\nopencode.json. The resolved path is printed for each agent. Cursor, Factory\nDroid, Antigravity and Pi have no confirmed override for the file this\ncommand writes.`}),`\n`,_jsx(_components.p,{children:`OpenCode configs that already use the v2 mcp.servers object get\nmcp.servers.fly. Other OpenCode configs get mcp.fly.`}),`\n`,_jsxs(_components.p,{children:[`If you are not signed in, an interactive terminal offers āfly auth loginā\nand āfly auth signupā after the files are written. -y on a terminal runs\nlogin after the files are written. Embedded mode and a non-TTY stdin do not\nstart the browser login. A failed login does not stop the skills or MCP\nsetup; it is reported at the end. The first MCP call from an agent opens a\nbrowser to authorize `,_jsx(_components.a,{href:`https://mcp.fly.io`,children:`https://mcp.fly.io`}),`.`]}),`\n`,_jsx(_components.p,{children:`The command exits non-zero when skills could not be installed, when an\nagent named with āagent failed, or when nothing was installed or\nconfigured. An MCP entry that is already correct, or that was left unchanged\nbecause it points somewhere else, does not by itself fail the command. A\nfailed login does not either.`}),`\n`,_jsx(_components.p,{children:`The installer script runs this command with the banner and the restart hint\nsuppressed, one line per agent:`}),`\n`,_jsx(_components.p,{children:`FLY_SETUP_EMBEDDED=1 fly setup agent -y`}),`\n`,_jsx(_components.p,{children:`Pass ājson to print the same summary as JSON.`}),`\n`,_jsx(Heading,{level:`2`,id:`usage`,children:`Usage`}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`fly setup agent [flags]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`options`,children:`Options`}),`\n`,_jsx(CodeBlock,{numberOfLines:`9`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --agent strings Act on exactly the named agent(s) instead of detecting them; include universal to write ~/.agents/skills. One of: universal, claude-code, codex, cursor, opencode, copilot, factory-droid, pi, antigravity. Can be repeated or comma-separated.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --force Repair a fly MCP entry whose type, URL, tools, or enabled state does not match. Extra keys such as headers are kept`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` -h, --help help for agent`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` -j, --json JSON output`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --skip-login Do not prompt to log in or sign up`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --skip-mcp Do not write MCP configuration`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --skip-skills Do not install Fly agent skills`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` -y, --yes Accept all confirmations (also --auto-confirm)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`global-options`,children:`Global Options`}),`\n`,_jsx(CodeBlock,{numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` -t, --access-token string Fly API Access Token`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --debug Print additional logs and traces`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --verbose Verbose output`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`see-also`,children:`See Also`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/flyctl/cmd/fly_setup`,children:`fly setup`}),`\t - Prepare this machine to use Fly from a coding agent`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"fly setup agent","source_url":"https://fly.io/docs/flyctl/setup-agent/","description":null,"href":"/flyctl/cmd/fly_setup_agent"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Usage","slug":"usage","depth":2,"children":[]},{"title":"Options","slug":"options","depth":2,"children":[]},{"title":"Global Options","slug":"global-options","depth":2,"children":[]},{"title":"See Also","slug":"see-also","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/fly-io/08c1baa7d07c2458/auth-nav.js","/_mintlify/custom/fly-io/a1ce438e27d4ce9e/fly-analytics.js"],"subdomain":"fly-io","siteName":"Fly.io","title":"fly setup agent - Fly.io","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-02T19:42:53.189Z","originalFileLocation":"flyctl/cmd/fly_setup_agent.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"Fly.io\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/fly-io/pksrSrIEk6ICJvMM/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/fly-io/pksrSrIEk6ICJvMM/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/fly-io/pksrSrIEk6ICJvMM/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/fly-io/pksrSrIEk6ICJvMM/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/fly-io/pksrSrIEk6ICJvMM/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/fly-io/pksrSrIEk6ICJvMM/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/fly-io/pksrSrIEk6ICJvMM/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/fly-io/pksrSrIEk6ICJvMM/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/fly-io/pksrSrIEk6ICJvMM/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"fly setup agent - Fly.io\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Fly.io\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.fly.io/flyctl/cmd/fly_setup_agent\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://fly-io.mintlify.app/_mintlify/api/og/v2?division=fly+setup\u0026amp;title=fly+setup+agent\u0026amp;theme=8d885d55ffdf567e0c64e798\u0026amp;signature=71571877c63be7615a2f6bf9d381be4044b4ba848ee0943120487f2a7db840a7\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"fly setup agent - Fly.io\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://fly-io.mintlify.app/_mintlify/api/og/v2?division=fly+setup\u0026amp;title=fly+setup+agent\u0026amp;theme=8d885d55ffdf567e0c64e798\u0026amp;signature=71571877c63be7615a2f6bf9d381be4044b4ba848ee0943120487f2a7db840a7\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/fly-io/pksrSrIEk6ICJvMM/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Fly.io\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#7C3BED\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.fly.io/flyctl/cmd/fly_setup_agent\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/flyctl/cmd/fly_setup_agent.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.fly.io/#organization\",\"name\":\"Fly.io\",\"url\":\"https://docs.fly.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/fly-io/izaS1l2UMuz6sm1H/images/logo/light.svg?fit=max\u0026auto=format\u0026n=izaS1l2UMuz6sm1H\u0026q=85\u0026s=5f1256e06beb6fdd5ed68aad3dd32b39\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.fly.io#website\",\"name\":\"Fly.io\",\"url\":\"https://docs.fly.io\",\"publisher\":{\"@id\":\"https://docs.fly.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.fly.io/flyctl/cmd/fly_setup_agent#webpage\",\"url\":\"https://docs.fly.io/flyctl/cmd/fly_setup_agent\",\"name\":\"fly setup agent\",\"dateModified\":\"2026-11-02T19:42:53.189Z\",\"isPartOf\":{\"@id\":\"https://docs.fly.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.fly.io/flyctl/cmd/fly_setup_agent#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.fly.io/flyctl/cmd/fly_setup_agent#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Fly docs\",\"item\":\"https://docs.fly.io/getting-started/sign-up-sign-in\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Reference\",\"item\":\"https://docs.fly.io/reference/index\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"flyctl\",\"item\":\"https://docs.fly.io/flyctl/install\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Commands\",\"item\":\"https://docs.fly.io/flyctl/cmd/fly_help\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"fly setup\",\"item\":\"https://docs.fly.io/flyctl/cmd/fly_setup\"},{\"@type\":\"ListItem\",\"position\":6,\"name\":\"fly setup agent\",\"item\":\"https://docs.fly.io/flyctl/cmd/fly_setup_agent\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.fly.io/flyctl/cmd/fly_setup_agent#article\",\"headline\":\"fly setup agent\",\"name\":\"fly setup agent\",\"url\":\"https://docs.fly.io/flyctl/cmd/fly_setup_agent\",\"mainEntityOfPage\":{\"@id\":\"https://docs.fly.io/flyctl/cmd/fly_setup_agent#webpage\"},\"dateModified\":\"2026-11-02T19:42:53.189Z\",\"publisher\":{\"@id\":\"https://docs.fly.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.fly.io#website\"}}]}\u003c/script>","siteName":"Fly.io","nav":{"global":null,"tabs":[{"tab":"Fly docs","groups":[{"group":"Fly docs","pages":[{"group":"Getting Started","root":{"title":"Getting started","href":"/getting-started"},"pages":[{"title":"Sign up and sign in to Fly.io","href":"/getting-started/sign-up-sign-in"},{"title":"Quickstart: Launch your app","href":"/getting-started/launch"},{"title":"Launch a demo app","href":"/getting-started/launch-demo"},{"group":"Deep Dive","root":{"title":"Deep dive demo","href":"/deep-dive/index"},"pages":[{"title":"Launch the demo","href":"/deep-dive/launch-deep-dive"},{"group":"What You Get","pages":[{"title":"Your Fly App","href":"/deep-dive/application"},{"title":"Deep Dive: PostgreSQL","sidebarTitle":"PostgreSQL","href":"/deep-dive/postgresql"},{"title":"Tigris","href":"/deep-dive/tigris"},{"title":"Upstash Redis","href":"/deep-dive/redis"}]},{"title":"Whisper","href":"/deep-dive/whisper"},{"title":"Recap","href":"/deep-dive/recap"},{"group":"Runtimes reference","pages":[{"title":"Django demo reference","sidebarTitle":"Django","href":"/deep-dive/django"},{"title":"Next.js demo reference","sidebarTitle":"Next.js","href":"/deep-dive/nextjs"},{"title":"Node.js demo reference","sidebarTitle":"Node.js","href":"/deep-dive/nodejs"},{"title":"Phoenix demo reference","sidebarTitle":"Phoenix","href":"/deep-dive/phoenix"},{"title":"Rails demo reference","sidebarTitle":"Rails","href":"/deep-dive/rails"}]}]},{"title":"Get started with your language or framework","href":"/getting-started/get-started-by-framework"},{"title":"Fly.io essentials","href":"/getting-started/essentials"},{"title":"Migrate from Heroku","href":"/getting-started/migrate-from-heroku"},{"title":"Troubleshoot your deployment","href":"/getting-started/troubleshooting"},{"title":"Guides and Examples","href":"/guides"}]},{"group":"Guides (Blueprints)","pages":[{"title":"Guides and Blueprints","href":"/blueprints/index"},{"group":"Architecture Patterns","pages":[{"title":"Deploy OpenClaw on Fly.io","href":"/blueprints/deploy-openclaw"},{"title":"Run Hermes Agent on Fly.io","href":"/blueprints/hermes-agent-on-fly-io"},{"title":"Warm pools of user Machines","href":"/blueprints/warm-pool-user-machines"},{"title":"Remote MCP Server Hosting: Deploy MCP Servers on Fly.io","href":"/blueprints/remote-mcp-servers"},{"title":"High availability: run multiple Machines","href":"/blueprints/resilient-apps-multiple-machines"},{"title":"N-tier architecture","href":"/blueprints/n-tier-architecture"},{"title":"Shared Nothing Architecture","href":"/blueprints/shared-nothing"},{"title":"Sticky sessions (session affinity)","href":"/blueprints/sticky-sessions"},{"title":"Multi-region databases with read replicas and fly-replay","href":"/blueprints/multi-region-fly-replay"},{"title":"Cell-based architecture","href":"/blueprints/cell-based"}]},{"group":"Deployment \u0026 Developer Workflow","pages":[{"title":"Working with Docker on Fly.io","href":"/blueprints/working-with-docker"},{"title":"Custom deploy workflows: staggered and selective deploys","href":"/blueprints/custom-deploy-workflows"},{"title":"Zero-downtime deployments","href":"/blueprints/seamless-deployments"},{"title":"Roll back a deploy","href":"/blueprints/rollback-guide"},{"title":"Git Branch Preview Environments on Github","href":"/blueprints/review-apps-guide"},{"title":"Separate staging and production environments","href":"/blueprints/staging-prod-isolation"},{"title":"Per-User Dev Environments with Fly Machines","href":"/blueprints/per-user-dev-environments"},{"title":"Use Docker base images for faster deploys","href":"/blueprints/using-base-images-for-faster-deployments"},{"title":"Managing Docker Images with Fly.io's Private Registry","href":"/blueprints/using-the-fly-docker-registry"}]},{"group":"Networking \u0026 Connectivity","pages":[{"title":"Run private apps with Flycast","href":"/blueprints/private-applications-flycast"},{"title":"Connect to your private network with WireGuard","href":"/blueprints/connect-private-network-wireguard/index"},{"title":"Connect AWS and other clouds with WireGuard","href":"/blueprints/bridge-deployments-wireguard"},{"title":"Route requests to per-user Fly Machines","href":"/blueprints/connecting-to-user-machines"},{"title":"Run an SSH server on a Fly Machine","href":"/blueprints/opensshd"}]},{"group":"Scaling, Performance \u0026 Observability","pages":[{"title":"Stream logs from user apps with NATS","href":"/blueprints/observability-for-user-apps"},{"title":"Autoscale Fly Machines with autostop or fly-autoscaler","href":"/blueprints/autoscale-machines"},{"title":"Autostart and autostop private apps with Flycast","href":"/blueprints/autostart-internal-apps"},{"title":"Setting Hard and Soft Concurrency Limits on Fly.io","href":"/blueprints/setting-concurrency-limits"},{"title":"Using Fly Volume forks for faster startup times","href":"/blueprints/volume-forking"},{"title":"Run HIPAA-compliant healthcare apps","href":"/blueprints/going-to-production-with-healthcare-apps"}]},{"group":"Background Jobs \u0026 Automation","pages":[{"title":"Long-running tasks and machine lifecycle","href":"/blueprints/long-running-tasks"},{"title":"Building Infrastructure Automation without Terraform","href":"/blueprints/infra-automation-without-terraform"},{"title":"Background job queues with Celery, BullMQ, and Fly Machines","href":"/blueprints/work-queues"},{"title":"Task scheduling guide with Cron Manager and friends","href":"/blueprints/task-scheduling"},{"title":"Crontab with Supercronic","href":"/blueprints/supercronic"},{"title":"Deno KV with LiteFS Cloud","href":"/blueprints/deno-kv-litefs"}]}]},{"group":"Model Context Protocol (MCP)","root":{"title":"Model Context Protocol","href":"/model-context-protocol/index"},"pages":[{"title":"Launch an MCP Server with fly mcp launch","sidebarTitle":"fly mcp launch","href":"/model-context-protocol/launch"},{"group":"Deploy with","root":{"title":"Deploy with","href":"/model-context-protocol/deploy-with"},"pages":[{"title":"Deploy an MCP Server with fly launch","sidebarTitle":"fly launch","href":"/model-context-protocol/deploy-with/fly-launch"},{"title":"fly machines run","href":"/model-context-protocol/deploy-with/flyctl-machines"},{"title":"Deploy an MCP Server with the Machines API","sidebarTitle":"Machines API","href":"/model-context-protocol/deploy-with/machines-api"}]},{"group":"Deploy on","root":{"title":"Deploy on","href":"/model-context-protocol/deploy-on"},"pages":[{"title":"A container","href":"/model-context-protocol/deploy-on/container"},{"title":"A Fly Machine","href":"/model-context-protocol/deploy-on/fly-machine"},{"title":"Your application","href":"/model-context-protocol/deploy-on/your-app"}]},{"group":"Transports","root":{"title":"MCP Transports","href":"/model-context-protocol/transports"},"pages":[{"title":"SSE","href":"/model-context-protocol/transports/sse"},{"title":"stdio","href":"/model-context-protocol/transports/stdio"},{"title":"Streaming HTTP","href":"/model-context-protocol/transports/streaming-http"}]},{"group":"Access control","root":{"title":"Access Control","href":"/model-context-protocol/access-control"},"pages":[{"title":"Wireguard tunnels and Flycast","href":"/model-context-protocol/access-control/flycast"},{"title":"HTTP Authorization","href":"/model-context-protocol/access-control/http-authorization"},{"title":"Reverse Proxy","href":"/model-context-protocol/access-control/reverse-proxy"}]},{"title":"flyctl mcp server","href":"/model-context-protocol/flyctl-server"},{"title":"Fly agent setup","sidebarTitle":"Agent setup","href":"/model-context-protocol/setup-agent"},{"title":"Fly agent skills","sidebarTitle":"Agent skills","href":"/model-context-protocol/agent-skills"},{"title":"Examples","href":"/model-context-protocol/examples"}]},{"group":"App Guides","pages":[{"title":"Chat: A 6PN Example with NATS","href":"/app-guides/6pndemochat"},{"title":"EdgeDB on Fly","href":"/app-guides/edgedb"},{"title":"Fauna and Fly.io","href":"/app-guides/fauna"},{"title":"Appkata: Gogs - standalone Git Server","href":"/app-guides/git-gogs-server"},{"title":"Run an NGINX proxy on Fly","href":"/app-guides/global-nginx-proxy"},{"title":"Apollo GraphQL + Edge Caching","href":"/app-guides/graphql-edge-caching-apollo"},{"title":"GraphQL on Fly with Hasura","href":"/app-guides/graphql-on-fly-with-hasura"},{"title":"Deploy gRPC and gRPC-Web Services","href":"/app-guides/grpc-and-grpc-web-services"},{"title":"Kong API gateway","href":"/app-guides/kong-api-gateway"},{"title":"Deploy Livebook on Fly.io","href":"/app-guides/livebook"},{"title":"Deploy MinIO Object Storage to Fly.io","href":"/app-guides/minio"},{"title":"Appkata: MQTT - Event driven messaging","href":"/app-guides/mqtt"},{"title":"Use a MySQL Database","href":"/app-guides/mysql-on-fly"},{"title":"Global NATS Cluster","href":"/app-guides/nats-cluster"},{"title":"Appkata: Node-RED - Flow Programming","href":"/app-guides/node-red"},{"title":"OpenResty: NGINX + Lua","href":"/app-guides/openresty-nginx-plus-lua"},{"title":"Fly.io and PlanetScale","href":"/app-guides/planetscale"},{"title":"Postgres: A single server deployment for Fly","href":"/app-guides/postgres"},{"title":"Puppeteer JS Renderer","href":"/app-guides/puppeteer-js-renderer"},{"title":"Redis - standalone Redis Server","href":"/app-guides/redis"},{"title":"Appkata: Redistls - Redis Server with TLS","href":"/app-guides/redistls"},{"title":"Global Image Processing Service","href":"/app-guides/run-a-global-image-service"},{"title":"Run A Private DNS Over HTTPS Service","href":"/app-guides/run-a-private-dns-over-https-service"},{"title":"Smokescreen - Sanitize outbound web requests","href":"/app-guides/smokescreen"},{"title":"VS Code - Remote Server over SSH","href":"/app-guides/vscode-remote"}]},{"group":"Apps on Fly.io","pages":[{"group":"Apps on Fly.io","root":{"title":"Apps on Fly.io","href":"/apps/index"},"pages":[{"title":"Fly Apps overview","href":"/apps/overview"},{"title":"Get information about an app","href":"/apps/info"},{"title":"Restart apps or Machines","href":"/apps/restart"},{"title":"Delete an app","href":"/apps/delete"},{"title":"Move an app between organizations","href":"/apps/move-app-org"}]},{"group":"Fly Launch","root":{"title":"Fly Launch","href":"/launch/index"},"pages":[{"title":"Create an app with Fly Launch","href":"/launch/create"},{"title":"Deploy an app","href":"/launch/deploy"},{"title":"Scale Machine CPU and RAM","href":"/launch/scale-machine"},{"title":"Scale the Number of Machines","href":"/launch/scale-count"},{"title":"Autostop/autostart Machines","href":"/launch/autostop-autostart"},{"title":"Autoscale based on metrics","href":"/launch/autoscale-by-metric"},{"title":"Add volume storage to a Fly Launch app","href":"/launch/volume-storage"},{"title":"Run multiple process groups in an app","href":"/launch/processes"},{"title":"Continuous Deployment with Fly.io and GitHub Actions","href":"/launch/continuous-deployment-with-github-actions"},{"title":"Monorepo and multi-environment deployments","href":"/launch/monorepo"},{"title":"Troubleshoot apps when a host is unavailable","href":"/apps/trouble-host-unavailable"},{"title":"App configuration (fly.toml)","href":"/reference/configuration"}]},{"group":"Secrets","pages":[{"title":"Secrets and Fly Apps","href":"/apps/secrets"},{"title":"Build Secrets","href":"/apps/build-secrets"}]},{"group":"Production Apps","pages":[{"title":"Going to production checklist","href":"/apps/going-to-production"},{"title":"App Availability and Resiliency","href":"/apps/app-availability"},{"title":"Tips to fine-tune your app on Fly.io","href":"/apps/fine-tune-apps"},{"title":"App handover guide","href":"/apps/app-handover-guide"},{"title":"Guidelines for concurrency settings","href":"/apps/concurrency"}]}]},{"group":"Language \u0026 Framework Guides","root":{"title":"Language \u0026 Framework Guides","href":"/languages-and-frameworks/index"},"pages":[{"group":"Elixir","root":{"title":"Elixir on Fly.io","href":"/elixir/index"},"pages":[{"group":"Getting Started","root":{"title":"Deploy a Phoenix App","sidebarTitle":"Getting Started","href":"/elixir/getting-started/index"},"pages":[{"title":"Migrate an Elixir App from Heroku","sidebarTitle":"Migrate from Heroku","href":"/elixir/getting-started/migrate-from-heroku"},{"title":"Deploy an Existing Elixir App","sidebarTitle":"Existing Elixir Apps","href":"/elixir/getting-started/existing"}]},{"group":"The Basics","root":{"title":"Elixir: The Basics","sidebarTitle":"The Basics","href":"/elixir/the-basics"},"pages":[{"title":"IEx into Your Running App","href":"/elixir/the-basics/iex-into-running-app"},{"title":"Clustering Your Application","href":"/elixir/the-basics/clustering"},{"title":"Troubleshooting","href":"/elixir/the-basics/troubleshooting"}]},{"group":"Advanced guides","root":{"title":"Elixir: Advanced Guides","sidebarTitle":"Advanced guides","href":"/elixir/advanced-guides"},"pages":[{"title":"GitHub Actions for Elixir CI/CD","href":"/elixir/advanced-guides/github-actions-elixir-ci-cd"},{"title":"Connecting Observer to Your App in Production","href":"/elixir/advanced-guides/connect-observer-to-your-app"},{"title":"Connecting Livebook to Your App in Production","href":"/elixir/advanced-guides/connect-livebook-to-your-app"},{"title":"Explore Your Production App with Livebook","sidebarTitle":"Do Interesting Things with Livebook and Your Production App","href":"/elixir/advanced-guides/interesting-things-with-livebook"},{"title":"Easy Clustering from Home to Fly.io","href":"/elixir/advanced-guides/clustering-from-home-to-your-app-in-fly"},{"title":"Elixir: SQLite3","sidebarTitle":"SQLite3","href":"/elixir/advanced-guides/sqlite3"}]}]},{"group":"Rails","root":{"title":"Rails on Fly.io","href":"/rails/index"},"pages":[{"group":"Getting Started","root":{"title":"Deploy a Rails App","sidebarTitle":"Getting Started","href":"/rails/getting-started/index"},"pages":[{"title":"Deploy an Existing Rails App","sidebarTitle":"Existing Rails Apps","href":"/rails/getting-started/existing"},{"title":"Dockerfiles and fly.toml","href":"/rails/getting-started/dockerfiles"},{"title":"Experimental Fly Rails Gem","href":"/rails/getting-started/fly-rails"}]},{"group":"The Basics","root":{"title":"Rails: The Basics","sidebarTitle":"The Basics","href":"/rails/the-basics"},"pages":[{"title":"Environment Configuration","href":"/rails/the-basics/configuration"},{"title":"Deployments","href":"/rails/the-basics/deployments"},{"title":"Active Record","href":"/rails/the-basics/active-record"},{"title":"Active Storage","href":"/rails/the-basics/active-storage"},{"title":"Turbo Streams \u0026 Action Cable","href":"/rails/the-basics/turbo-streams-and-action-cable"},{"title":"Sidekiq Background Workers","href":"/rails/the-basics/sidekiq"},{"title":"Running Tasks \u0026 Consoles","href":"/rails/the-basics/run-tasks-and-consoles"}]},{"group":"Advanced guides","root":{"title":"Rails: Advanced Guides","sidebarTitle":"Advanced guides","href":"/rails/advanced-guides"},"pages":[{"title":"AnyCable","href":"/rails/advanced-guides/anycable"},{"title":"Rails: Multiple Fly Applications","sidebarTitle":"Multiple Fly Applications","href":"/rails/advanced-guides/multiple-applications"},{"title":"LiteFS","href":"/rails/advanced-guides/litefs"},{"title":"Machine API","href":"/rails/advanced-guides/machine"},{"title":"Multi-region Deployments","href":"/rails/advanced-guides/multi-region"},{"title":"Rails: SQLite3","sidebarTitle":"SQLite3","href":"/rails/advanced-guides/sqlite3"},{"title":"Phusion Passenger","href":"/rails/advanced-guides/phusion-passenger"}]},{"group":"Cookbooks","root":{"title":"Cookbooks","href":"/rails/cookbooks/index"},"pages":[{"title":"Minimal Rails application","href":"/rails/cookbooks/minimal"},{"title":"Rails with Databases","href":"/rails/cookbooks/databases"},{"title":"Rails with Node.js","href":"/rails/cookbooks/node"},{"title":"Rails API-only Applications","href":"/rails/cookbooks/api"},{"title":"Copy source","href":"/rails/cookbooks/sources"},{"title":"Optimizing your build","href":"/rails/cookbooks/build"},{"title":"Optimizing your deployment","href":"/rails/cookbooks/deploy"}]}]},{"group":"Laravel","root":{"title":"Laravel on Fly.io","href":"/laravel/index"},"pages":[{"group":"The Basics","root":{"title":"Laravel: The Basics","sidebarTitle":"The Basics","href":"/laravel/the-basics"},"pages":[{"title":"PHP and Node Versions","href":"/laravel/the-basics/php-node-version"},{"title":"Customizing Deployments","href":"/laravel/the-basics/customizing-deployments"},{"title":"Post Deployment","href":"/laravel/the-basics/post-deployment"},{"title":"Logging Stack Traces","href":"/laravel/the-basics/logging-stack-traces"},{"title":"Cron and Queues","href":"/laravel/the-basics/cron-and-queues"},{"title":"Persisting the Storage Folder","href":"/laravel/the-basics/laravel-volume-storage"},{"title":"Tigris for CDN File Storage","href":"/laravel/the-basics/laravel-tigris-file-storage"}]},{"group":"Database guides","root":{"title":"Database guides","href":"/laravel/database-guides"},"pages":[{"title":"Laravel and MySQL","href":"/laravel/database-guides/laravel-mysql"},{"title":"Laravel and PostgreSQL","href":"/laravel/database-guides/laravel-pgsql"},{"title":"Laravel and Redis","href":"/laravel/database-guides/laravel-redis"},{"title":"Laravel and SQlite","href":"/laravel/database-guides/laravel-sqlite"},{"title":"Laravel Database Migration","href":"/laravel/database-guides/laravel-db-migrations"}]},{"group":"Advanced guides","root":{"title":"Laravel: Advanced Guides","sidebarTitle":"Advanced guides","href":"/laravel/advanced-guides"},"pages":[{"title":"Laravel: Multiple Fly Applications","sidebarTitle":"Multiple Fly Applications","href":"/laravel/advanced-guides/multiple-applications"},{"title":"Laravel Multi-SQLite: LiteFS","href":"/laravel/advanced-guides/global-sqlite-litefs"},{"title":"Laravel GitHub Actions: CICD","href":"/laravel/advanced-guides/github-actions"},{"title":"Using Symfony","href":"/laravel/advanced-guides/using-symfony"},{"title":"Using Inertia SSR","href":"/laravel/advanced-guides/using-inertia-ssr"},{"title":"Customizing the Dockerfile","href":"/laravel/advanced-guides/customizing-dockerfile"}]}]},{"group":"Django","root":{"title":"Django on Fly.io","href":"/django/index"},"pages":[{"group":"Getting Started","root":{"title":"Deploy a Django App","sidebarTitle":"Getting Started","href":"/django/getting-started/index"},"pages":[{"title":"Deploy an Existing Django App","sidebarTitle":"Existing Django Apps","href":"/django/getting-started/existing"}]},{"group":"Advanced guides","root":{"title":"Django: Advanced Guides","sidebarTitle":"Advanced guides","href":"/django/advanced-guides"},"pages":[{"title":"Staging environments with GitHub actions","href":"/django/advanced-guides/staging-environments-with-github-actions"}]}]},{"group":"Python","root":{"title":"Python on Fly.io","href":"/python/index"},"pages":[{"group":"The Basics","root":{"title":"Python: The Basics","sidebarTitle":"The Basics","href":"/python/the-basics"},"pages":[{"title":"Setting up a Python Environment","href":"/python/the-basics/initial-setup"},{"title":"Multi-stage Builds","href":"/python/the-basics/multi-stage-builds"}]},{"group":"Python Framework Guides","root":{"title":"Python Framework Guides","href":"/python/frameworks"},"pages":[{"title":"Deploy a FastAPI App","href":"/python/frameworks/fastapi"},{"title":"Deploy a Flask App","href":"/python/frameworks/flask"},{"title":"Deploy a Streamlit App","href":"/python/frameworks/streamlit"}]},{"group":"Do More","root":{"title":"Do More","href":"/python/do-more"},"pages":[{"title":"Add Postgres","href":"/python/do-more/add-postgres"},{"title":"Add Object Storage","href":"/python/do-more/add-object-storage"},{"title":"Add Ollama","href":"/python/do-more/add-ollama"}]}]},{"group":"Javascript","root":{"title":"JavaScript on Fly.io","href":"/js/index"},"pages":[{"group":"The Basics","root":{"title":"JavaScript: The Basics","sidebarTitle":"The Basics","href":"/js/the-basics"},"pages":[{"title":"Dockerfiles","href":"/js/the-basics/dockerfiles"},{"title":"Dependencies","href":"/js/the-basics/dependencies"},{"title":"Databases","href":"/js/the-basics/database"},{"title":"JavaScript: Volumes","sidebarTitle":"Volumes","href":"/js/the-basics/volumes"},{"title":"Object Storage","href":"/js/the-basics/object-storage"},{"title":"Listening Ports","href":"/js/the-basics/listening-ports"},{"title":"Secrets","href":"/js/the-basics/secrets"},{"title":"Scaling","href":"/js/the-basics/scaling"}]},{"title":"Deploy a Shopify App","sidebarTitle":"Shopify","href":"/js/shopify"},{"group":"JS Framework Guides","root":{"title":"JS Framework Guides","href":"/js/frameworks"},"pages":[{"title":"Deploy an Astro App","href":"/js/frameworks/astro"},{"title":"Deploy a Deno App","href":"/js/frameworks/deno"},{"title":"Deploy a Meteor App","href":"/js/frameworks/meteor"},{"title":"Deploy a Next.js App","href":"/js/frameworks/nextjs"},{"title":"Deploy a Nuxt App","href":"/js/frameworks/nuxtjs"},{"title":"Deploy a RedwoodJS App","href":"/js/frameworks/redwood"},{"title":"Deploy a Remix App","href":"/js/frameworks/remix"},{"title":"Deploy a SvelteKit App","href":"/js/frameworks/svelte"}]},{"group":"Prisma","root":{"title":"Prisma","href":"/js/prisma/index"},"pages":[{"title":"Sqlite","href":"/js/prisma/sqlite"},{"title":"Prisma with PostgreSQL","sidebarTitle":"PostgreSQL","href":"/js/prisma/postgres"}]}]},{"group":"Rust","root":{"title":"Rust on Fly.io","href":"/rust/index"},"pages":[{"group":"The Basics","root":{"title":"Rust: The Basics","sidebarTitle":"The Basics","href":"/rust/the-basics"},"pages":[{"title":"Cargo Chef","href":"/rust/the-basics/cargo-chef"}]},{"group":"Rust Framework Guides","root":{"title":"Rust Framework Guides","href":"/rust/frameworks"},"pages":[{"title":"Deploy an Axum App","href":"/rust/frameworks/axum"},{"title":"Deploy an Actix Web App","href":"/rust/frameworks/actix-web"},{"title":"Deploy a Warp App","href":"/rust/frameworks/warp"},{"title":"Deploy a Rocket App","href":"/rust/frameworks/rocket"},{"title":"Deploy a Poem App","href":"/rust/frameworks/poem"},{"title":"Deploy a Dioxus Liveview App","href":"/rust/frameworks/dioxus-liveview"}]}]},{"title":"Deploy a Static Website","href":"/languages-and-frameworks/static"},{"title":"Deploy a .NET App","href":"/languages-and-frameworks/dotnet"},{"title":"Deploy a Go App","href":"/languages-and-frameworks/golang"},{"title":"Deploy with a Dockerfile","href":"/languages-and-frameworks/dockerfile"},{"title":"Deploy a Crystal App","href":"/languages-and-frameworks/crystal"},{"title":"Deploy WordPress","href":"/languages-and-frameworks/wordpress"},{"title":"Deploy a Ruby App","href":"/languages-and-frameworks/ruby"}]},{"group":"Fly Machines","root":{"title":"Fly Machines","href":"/machines/index"},"pages":[{"title":"An introduction to Fly Machines","href":"/machines/overview"},{"group":"Machines API","root":{"title":"Machines API","href":"/machines/api/index"},"pages":[{"title":"Working with the Machines API","href":"/machines/api/working-with-machines-api"},{"title":"Apps","href":"/machines/api/apps-resource"},{"title":"Certificates","href":"/machines/api/certificates-resource"},{"title":"Machines","href":"/machines/api/machines-resource"},{"title":"Tokens","href":"/machines/api/tokens-resource"},{"title":"Volumes","href":"/machines/api/volumes-resource"}]},{"group":"Machines and flyctl","pages":[{"title":"Run a new Machine","href":"/machines/flyctl/fly-machine-run"},{"title":"Update a Machine","href":"/machines/flyctl/fly-machine-update"}]},{"group":"Guides and Examples","root":{"title":"Machines Guides and Examples","sidebarTitle":"Guides and Examples","href":"/machines/guides-examples"},"pages":[{"title":"Run Machines with flyctl","href":"/machines/guides-examples/machines-app-using-flyctl"},{"title":"Managing Machines with the Machines API","tag":"NEW","href":"/machines/guides-examples/managing-machines-with-the-api"},{"title":"Machine Placement and Regional Capacity","href":"/machines/guides-examples/machine-placement"},{"title":"Machine restart policy","href":"/machines/guides-examples/machine-restart-policy"},{"title":"Machine Sizing","href":"/machines/guides-examples/machine-sizing"},{"title":"Multi-container Machines","href":"/machines/guides-examples/multi-container-machines"},{"title":"Network Policies","href":"/machines/guides-examples/network-policies"},{"title":"Run User Code on Fly Machines","href":"/machines/guides-examples/functions-with-machines"},{"title":"One App Per Customer - Why?","href":"/machines/guides-examples/one-app-per-user-why"}]},{"group":"Reference","pages":[{"title":"Machine states and lifecycle","href":"/machines/machine-states"},{"title":"The Machine Runtime Environment","href":"/machines/runtime-environment"},{"title":"CPU Performance","href":"/machines/cpu-performance"}]}]},{"group":"Managed Postgres","root":{"title":"Managed Postgres","href":"/postgres/index"},"pages":[{"group":"Getting Started","pages":[{"title":"Create and Connect to a Managed Postgres Cluster","href":"/postgres/create-and-connect"},{"title":"Connect Your Client","href":"/postgres/client-configuration"},{"title":"Cluster configuration options","href":"/postgres/cluster-configuration"}]},{"group":"Guides and Examples","pages":[{"title":"Phoenix with Managed Postgres","href":"/postgres/guides-examples/phoenix-guide"}]},{"group":"Management","pages":[{"title":"Monitoring and Metrics","href":"/postgres/metrics"},{"title":"Maintenance windows","href":"/postgres/maintenance-windows"},{"title":"Import data from another postgres cluster","href":"/postgres/import"},{"title":"Supported Postgres Extensions","href":"/postgres/extensions"}]}]},{"group":"Databases \u0026 Storage","root":{"title":"Databases and storage","href":"/database-storage-guides"},"pages":[{"title":"Fly Postgres (Unmanaged)","sidebarTitle":"Unmanaged Postgres","href":"/unmanaged-postgres/index"},{"title":"Tigris Global Object Storage","href":"/tigris/index"},{"title":"Upstash for RedisĀ®*","href":"/upstash/redis"},{"title":"Upstash Vector","href":"/upstash/vector"}]},{"group":"Fly Volumes","root":{"title":"Fly Volumes","href":"/volumes/index"},"pages":[{"title":"Fly Volumes overview","href":"/volumes/overview"},{"title":"Create and manage volumes","href":"/volumes/volume-manage"},{"title":"Manage volume snapshots","href":"/volumes/snapshots"},{"title":"Volume states","href":"/volumes/volume-states"}]},{"group":"Networking","root":{"title":"Networking","href":"/networking/index"},"pages":[{"title":"Connect to an App Service","href":"/networking/app-services"},{"title":"Public Network Services","href":"/networking/services"},{"title":"Private Networking","href":"/networking/private-networking"},{"title":"Custom private networks","href":"/networking/custom-private-networks"},{"title":"Flycast - Private Fly Proxy services","href":"/networking/flycast"},{"title":"Egress IP addresses","href":"/networking/egress-ips"},{"title":"Dynamic Request Routing with fly-replay","href":"/networking/dynamic-request-routing"},{"title":"Custom domains","href":"/networking/custom-domain"},{"title":"Understanding Cloudflare","href":"/networking/understanding-cloudflare"},{"title":"Request headers","href":"/networking/request-headers"},{"title":"WebSockets","href":"/networking/websockets"},{"title":"Running apps on UDP and TCP","href":"/networking/udp-and-tcp"},{"title":"TLS Support","href":"/networking/tls"}]},{"group":"Monitoring","root":{"title":"Monitoring on Fly.io","href":"/monitoring/index"},"pages":[{"title":"Logging overview","href":"/monitoring/logging-overview"},{"title":"Metrics on Fly.io","href":"/monitoring/metrics"},{"title":"Application Monitoring by Sentry","href":"/monitoring/sentry"},{"group":"Logging","pages":[{"title":"Live tail logs","href":"/monitoring/live-tail-logs"},{"title":"Logs API options for programmatic access","href":"/monitoring/logs-api-options"},{"title":"Search logs","href":"/monitoring/search-logs"},{"title":"Export logs","href":"/monitoring/exporting-logs"},{"title":"Error codes and troubleshooting","href":"/monitoring/error-codes"}]}]},{"group":"Security","root":{"title":"Security","href":"/security/index"},"pages":[{"title":"Organization Roles and Permissions","href":"/security/org-roles-permissions"},{"title":"Single sign-on for organizations","href":"/security/sso"},{"title":"Remove a member from your organization","href":"/security/remove-org-member"},{"title":"TLS termination by Fly Proxy","href":"/security/tls-termination"},{"title":"Application Security by Arcjet","href":"/security/arcjet"},{"title":"Access tokens","href":"/security/tokens"},{"title":"OpenID Connect","href":"/security/openid-connect"},{"title":"Shared responsibility model","href":"/security/shared-responsibility"},{"title":"Fly.io security practices and compliance","href":"/security/security-at-fly-io"}]},{"group":"Reference","root":{"title":"Fly.io reference","href":"/reference/index"},"pages":[{"group":"flyctl","pages":[{"group":"flyctl - The Fly.io CLI","root":{"title":"flyctl - The Fly.io CLI","href":"/flyctl/index"},"pages":[{"title":"Install flyctl","href":"/flyctl/install"},{"title":"Integrating flyctl","href":"/flyctl/integrating"}]},{"group":"Commands","pages":[{"title":"fly","href":"/flyctl/cmd/fly_help"},{"group":"fly agent","root":{"title":"fly agent","href":"/flyctl/cmd/fly_agent"},"pages":[{"title":"fly agent ping","href":"/flyctl/cmd/fly_agent_ping"},{"title":"fly agent restart","href":"/flyctl/cmd/fly_agent_restart"},{"title":"fly agent run","href":"/flyctl/cmd/fly_agent_run"},{"title":"fly agent start","href":"/flyctl/cmd/fly_agent_start"},{"title":"fly agent stop","href":"/flyctl/cmd/fly_agent_stop"}]},{"group":"fly apps","root":{"title":"fly apps","sidebarTitle":"Manage Apps (apps)","href":"/flyctl/cmd/fly_apps"},"pages":[{"title":"fly apps create","href":"/flyctl/cmd/fly_apps_create"},{"title":"fly apps destroy","href":"/flyctl/cmd/fly_apps_destroy"},{"title":"fly apps errors","href":"/flyctl/cmd/fly_apps_errors"},{"title":"fly apps list","href":"/flyctl/cmd/fly_apps_list"},{"title":"fly apps move","href":"/flyctl/cmd/fly_apps_move"},{"title":"fly apps open","href":"/flyctl/cmd/fly_apps_open"},{"title":"fly apps releases","href":"/flyctl/cmd/fly_apps_releases"},{"title":"fly apps restart","href":"/flyctl/cmd/fly_apps_restart"}]},{"group":"fly auth","root":{"title":"fly auth","sidebarTitle":"Login and Authentication (auth)","href":"/flyctl/cmd/fly_auth"},"pages":[{"title":"fly auth docker","href":"/flyctl/cmd/fly_auth_docker"},{"title":"fly auth login","href":"/flyctl/cmd/fly_auth_login"},{"title":"fly auth logout","href":"/flyctl/cmd/fly_auth_logout"},{"title":"fly auth signup","href":"/flyctl/cmd/fly_auth_signup"},{"title":"fly auth whoami","href":"/flyctl/cmd/fly_auth_whoami"}]},{"group":"fly certs","root":{"title":"fly certs","sidebarTitle":"Certificates for Apps (certs)","href":"/flyctl/cmd/fly_certs"},"pages":[{"title":"fly certs add","href":"/flyctl/cmd/fly_certs_add"},{"title":"fly certs check","href":"/flyctl/cmd/fly_certs_check"},{"title":"fly certs import","href":"/flyctl/cmd/fly_certs_import"},{"title":"fly certs list","href":"/flyctl/cmd/fly_certs_list"},{"title":"fly certs remove","href":"/flyctl/cmd/fly_certs_remove"},{"title":"fly certs setup","href":"/flyctl/cmd/fly_certs_setup"}]},{"group":"fly checks","root":{"title":"fly checks","sidebarTitle":"Manage health checks (checks)","href":"/flyctl/cmd/fly_checks"},"pages":[{"title":"fly checks list","href":"/flyctl/cmd/fly_checks_list"}]},{"group":"fly config","root":{"title":"fly config","sidebarTitle":"Get or check App config (config)","href":"/flyctl/cmd/fly_config"},"pages":[{"title":"fly config env","href":"/flyctl/cmd/fly_config_env"},{"title":"fly config save","href":"/flyctl/cmd/fly_config_save"},{"title":"fly config show","href":"/flyctl/cmd/fly_config_show"},{"title":"fly config validate","href":"/flyctl/cmd/fly_config_validate"}]},{"title":"fly console","sidebarTitle":"Run a console (console)","href":"/flyctl/cmd/fly_console"},{"group":"fly consul","root":{"title":"fly consul","sidebarTitle":"Manage Consul clusters (consul)","href":"/flyctl/cmd/fly_consul"},"pages":[{"title":"fly consul attach","href":"/flyctl/cmd/fly_consul_attach"},{"title":"fly consul detach","href":"/flyctl/cmd/fly_consul_detach"}]},{"group":"fly dashboard","root":{"title":"fly dashboard","sidebarTitle":"Open web dashboard (dashboard)","href":"/flyctl/cmd/fly_dashboard"},"pages":[{"title":"fly dashboard metrics","href":"/flyctl/cmd/fly_dashboard_metrics"}]},{"title":"fly deploy","sidebarTitle":"Deploy an App (deploy)","href":"/flyctl/cmd/fly_deploy"},{"title":"fly dig","href":"/flyctl/cmd/fly_dig"},{"title":"fly docs","sidebarTitle":"View Fly.io docs (docs)","href":"/flyctl/cmd/fly_docs"},{"group":"fly doctor","root":{"title":"fly doctor","href":"/flyctl/cmd/fly_doctor"},"pages":[{"title":"fly doctor diag","href":"/flyctl/cmd/fly_doctor_diag"}]},{"group":"fly extensions","root":{"title":"fly extensions","href":"/flyctl/cmd/fly_extensions"},"pages":[{"group":"fly extensions arcjet","root":{"title":"fly extensions arcjet","href":"/flyctl/cmd/fly_extensions_arcjet"},"pages":[{"title":"fly extensions arcjet create","href":"/flyctl/cmd/fly_extensions_arcjet_create"},{"title":"fly extensions arcjet dashboard","href":"/flyctl/cmd/fly_extensions_arcjet_dashboard"},{"title":"fly extensions arcjet destroy","href":"/flyctl/cmd/fly_extensions_arcjet_destroy"},{"title":"fly extensions arcjet list","href":"/flyctl/cmd/fly_extensions_arcjet_list"},{"title":"fly extensions arcjet status","href":"/flyctl/cmd/fly_extensions_arcjet_status"}]},{"group":"fly extensions kubernetes","root":{"title":"fly extensions kubernetes","href":"/flyctl/cmd/fly_extensions_kubernetes"},"pages":[{"title":"fly extensions kubernetes create","href":"/flyctl/cmd/fly_extensions_kubernetes_create"},{"title":"fly extensions kubernetes destroy","href":"/flyctl/cmd/fly_extensions_kubernetes_destroy"},{"title":"fly extensions kubernetes list","href":"/flyctl/cmd/fly_extensions_kubernetes_list"},{"title":"fly extensions kubernetes save-kubeconfig","href":"/flyctl/cmd/fly_extensions_kubernetes_save-kubeconfig"}]},{"group":"fly extensions sentry","root":{"title":"fly extensions sentry","href":"/flyctl/cmd/fly_extensions_sentry"},"pages":[{"title":"fly extensions sentry create","href":"/flyctl/cmd/fly_extensions_sentry_create"},{"title":"fly extensions sentry dashboard","href":"/flyctl/cmd/fly_extensions_sentry_dashboard"},{"title":"fly extensions sentry destroy","href":"/flyctl/cmd/fly_extensions_sentry_destroy"},{"title":"fly extensions sentry list","href":"/flyctl/cmd/fly_extensions_sentry_list"}]},{"group":"fly extensions storage","root":{"title":"fly extensions storage","href":"/flyctl/cmd/fly_extensions_storage"},"pages":[{"title":"fly extensions storage create","href":"/flyctl/cmd/fly_extensions_storage_create"},{"title":"fly extensions storage dashboard","href":"/flyctl/cmd/fly_extensions_storage_dashboard"},{"title":"fly extensions storage destroy","href":"/flyctl/cmd/fly_extensions_storage_destroy"},{"title":"fly extensions storage list","href":"/flyctl/cmd/fly_extensions_storage_list"},{"title":"fly extensions storage status","href":"/flyctl/cmd/fly_extensions_storage_status"},{"title":"fly extensions storage update","href":"/flyctl/cmd/fly_extensions_storage_update"}]},{"group":"fly extensions vector","root":{"title":"fly extensions vector","href":"/flyctl/cmd/fly_extensions_vector"},"pages":[{"title":"fly extensions vector create","href":"/flyctl/cmd/fly_extensions_vector_create"},{"title":"fly extensions vector dashboard","href":"/flyctl/cmd/fly_extensions_vector_dashboard"},{"title":"fly extensions vector destroy","href":"/flyctl/cmd/fly_extensions_vector_destroy"},{"title":"fly extensions vector list","href":"/flyctl/cmd/fly_extensions_vector_list"},{"title":"fly extensions vector status","href":"/flyctl/cmd/fly_extensions_vector_status"}]},{"group":"fly extensions wafris","root":{"title":"fly extensions wafris","href":"/flyctl/cmd/fly_extensions_wafris"},"pages":[{"title":"fly extensions wafris create","href":"/flyctl/cmd/fly_extensions_wafris_create"},{"title":"fly extensions wafris dashboard","href":"/flyctl/cmd/fly_extensions_wafris_dashboard"},{"title":"fly extensions wafris destroy","href":"/flyctl/cmd/fly_extensions_wafris_destroy"}]}]},{"group":"fly image","root":{"title":"fly image","sidebarTitle":"View or update App image (image)","href":"/flyctl/cmd/fly_image"},"pages":[{"title":"fly image show","href":"/flyctl/cmd/fly_image_show"},{"title":"fly image update","href":"/flyctl/cmd/fly_image_update"}]},{"group":"fly incidents","root":{"title":"fly incidents","href":"/flyctl/cmd/fly_incidents"},"pages":[{"group":"fly incidents hosts","root":{"title":"fly incidents hosts","href":"/flyctl/cmd/fly_incidents_hosts"},"pages":[{"title":"fly incidents hosts list","href":"/flyctl/cmd/fly_incidents_hosts_list"}]},{"title":"fly incidents list","href":"/flyctl/cmd/fly_incidents_list"}]},{"group":"fly ips","root":{"title":"fly ips","sidebarTitle":"Manage IP addresses (ips)","href":"/flyctl/cmd/fly_ips"},"pages":[{"title":"fly ips allocate","href":"/flyctl/cmd/fly_ips_allocate"},{"title":"fly ips allocate-egress","href":"/flyctl/cmd/fly_ips_allocate-egress"},{"title":"fly ips allocate-v4","href":"/flyctl/cmd/fly_ips_allocate-v4"},{"title":"fly ips allocate-v6","href":"/flyctl/cmd/fly_ips_allocate-v6"},{"title":"fly ips list","href":"/flyctl/cmd/fly_ips_list"},{"title":"fly ips private","href":"/flyctl/cmd/fly_ips_private"},{"title":"fly ips release","href":"/flyctl/cmd/fly_ips_release"},{"title":"fly ips release-egress","href":"/flyctl/cmd/fly_ips_release-egress"}]},{"group":"fly jobs","root":{"title":"fly jobs","href":"/flyctl/cmd/fly_jobs"},"pages":[{"title":"fly jobs open","href":"/flyctl/cmd/fly_jobs_open"}]},{"title":"fly launch","sidebarTitle":"Launch an App (launch)","href":"/flyctl/cmd/fly_launch"},{"title":"fly logs","sidebarTitle":"View App logs (logs)","href":"/flyctl/cmd/fly_logs"},{"group":"fly machine","root":{"title":"fly machine","sidebarTitle":"Manage Machines (machine)","href":"/flyctl/cmd/fly_machine"},"pages":[{"title":"fly machine api-proxy","href":"/flyctl/cmd/fly_machine_api-proxy"},{"title":"fly machine clone","href":"/flyctl/cmd/fly_machine_clone"},{"title":"fly machine cordon","href":"/flyctl/cmd/fly_machine_cordon"},{"title":"fly machine create","href":"/flyctl/cmd/fly_machine_create"},{"title":"fly machine destroy","href":"/flyctl/cmd/fly_machine_destroy"},{"title":"fly machine exec","href":"/flyctl/cmd/fly_machine_exec"},{"title":"fly machine kill","href":"/flyctl/cmd/fly_machine_kill"},{"group":"fly machine leases","root":{"title":"fly machine leases","href":"/flyctl/cmd/fly_machine_leases"},"pages":[{"title":"fly machine leases clear","href":"/flyctl/cmd/fly_machine_leases_clear"},{"title":"fly machine leases view","href":"/flyctl/cmd/fly_machine_leases_view"}]},{"title":"fly machine list","href":"/flyctl/cmd/fly_machine_list"},{"title":"fly machine place","href":"/flyctl/cmd/fly_machine_place"},{"title":"fly machine restart","href":"/flyctl/cmd/fly_machine_restart"},{"title":"fly machine run","href":"/flyctl/cmd/fly_machine_run"},{"title":"fly machine start","href":"/flyctl/cmd/fly_machine_start"},{"title":"fly machine status","href":"/flyctl/cmd/fly_machine_status"},{"title":"fly machine stop","href":"/flyctl/cmd/fly_machine_stop"},{"title":"fly machine suspend","href":"/flyctl/cmd/fly_machine_suspend"},{"title":"fly machine uncordon","href":"/flyctl/cmd/fly_machine_uncordon"},{"title":"fly machine update","href":"/flyctl/cmd/fly_machine_update"},{"title":"fly machine wait","href":"/flyctl/cmd/fly_machine_wait"}]},{"group":"fly mcp","root":{"title":"fly mcp","href":"/flyctl/cmd/fly_mcp"},"pages":[{"title":"fly mcp add","href":"/flyctl/cmd/fly_mcp_add"},{"title":"fly mcp destroy","href":"/flyctl/cmd/fly_mcp_destroy"},{"title":"fly mcp inspect","href":"/flyctl/cmd/fly_mcp_inspect"},{"title":"fly mcp launch","href":"/flyctl/cmd/fly_mcp_launch"},{"title":"fly mcp list","href":"/flyctl/cmd/fly_mcp_list"},{"title":"fly mcp logs","href":"/flyctl/cmd/fly_mcp_logs"},{"title":"fly mcp proxy","href":"/flyctl/cmd/fly_mcp_proxy"},{"title":"fly mcp remove","href":"/flyctl/cmd/fly_mcp_remove"},{"title":"fly mcp server","href":"/flyctl/cmd/fly_mcp_server"},{"title":"fly mcp wrap","href":"/flyctl/cmd/fly_mcp_wrap"}]},{"group":"fly mpg","root":{"title":"fly mpg","sidebarTitle":"Managed Postgres clusters (mpg)","href":"/flyctl/cmd/fly_mpg"},"pages":[{"title":"fly mpg attach","href":"/flyctl/cmd/fly_mpg_attach"},{"group":"fly mpg backup","root":{"title":"fly mpg backup","href":"/flyctl/cmd/fly_mpg_backup"},"pages":[{"title":"fly mpg backup create","href":"/flyctl/cmd/fly_mpg_backup_create"},{"title":"fly mpg backup list","href":"/flyctl/cmd/fly_mpg_backup_list"}]},{"title":"fly mpg connect","href":"/flyctl/cmd/fly_mpg_connect"},{"title":"fly mpg create","href":"/flyctl/cmd/fly_mpg_create"},{"group":"fly mpg databases","root":{"title":"fly mpg databases","href":"/flyctl/cmd/fly_mpg_databases"},"pages":[{"title":"fly mpg databases create","href":"/flyctl/cmd/fly_mpg_databases_create"},{"group":"fly mpg databases extensions","root":{"title":"fly mpg databases extensions","href":"/flyctl/cmd/fly_mpg_databases_extensions"},"pages":[{"title":"fly mpg databases extensions disable","href":"/flyctl/cmd/fly_mpg_databases_extensions_disable"},{"title":"fly mpg databases extensions enable","href":"/flyctl/cmd/fly_mpg_databases_extensions_enable"},{"title":"fly mpg databases extensions list","href":"/flyctl/cmd/fly_mpg_databases_extensions_list"}]},{"title":"fly mpg databases list","href":"/flyctl/cmd/fly_mpg_databases_list"}]},{"title":"fly mpg destroy","href":"/flyctl/cmd/fly_mpg_destroy"},{"title":"fly mpg detach","href":"/flyctl/cmd/fly_mpg_detach"},{"title":"fly mpg fork","href":"/flyctl/cmd/fly_mpg_fork"},{"title":"fly mpg list","href":"/flyctl/cmd/fly_mpg_list"},{"title":"fly mpg proxy","href":"/flyctl/cmd/fly_mpg_proxy"},{"title":"fly mpg restore","href":"/flyctl/cmd/fly_mpg_restore"},{"title":"fly mpg status","href":"/flyctl/cmd/fly_mpg_status"},{"group":"fly mpg users","root":{"title":"fly mpg users","href":"/flyctl/cmd/fly_mpg_users"},"pages":[{"title":"fly mpg users create","href":"/flyctl/cmd/fly_mpg_users_create"},{"title":"fly mpg users delete","href":"/flyctl/cmd/fly_mpg_users_delete"},{"title":"fly mpg users list","href":"/flyctl/cmd/fly_mpg_users_list"},{"title":"fly mpg users rotate-password","href":"/flyctl/cmd/fly_mpg_users_rotate-password"},{"title":"fly mpg users set-role","href":"/flyctl/cmd/fly_mpg_users_set-role"}]}]},{"group":"fly orgs","root":{"title":"fly orgs","sidebarTitle":"Manage Organizations (orgs)","href":"/flyctl/cmd/fly_orgs"},"pages":[{"title":"fly orgs create","href":"/flyctl/cmd/fly_orgs_create"},{"group":"fly orgs cross-network-replays","root":{"title":"fly orgs cross-network-replays","href":"/flyctl/cmd/fly_orgs_cross-network-replays"},"pages":[{"title":"fly orgs cross-network-replays disable","href":"/flyctl/cmd/fly_orgs_cross-network-replays_disable"},{"title":"fly orgs cross-network-replays enable","href":"/flyctl/cmd/fly_orgs_cross-network-replays_enable"},{"title":"fly orgs cross-network-replays status","href":"/flyctl/cmd/fly_orgs_cross-network-replays_status"}]},{"title":"fly orgs delete","href":"/flyctl/cmd/fly_orgs_delete"},{"title":"fly orgs invite","href":"/flyctl/cmd/fly_orgs_invite"},{"title":"fly orgs list","href":"/flyctl/cmd/fly_orgs_list"},{"title":"fly orgs remove","href":"/flyctl/cmd/fly_orgs_remove"},{"group":"fly orgs replay-sources","root":{"title":"fly orgs replay-sources","href":"/flyctl/cmd/fly_orgs_replay-sources"},"pages":[{"title":"fly orgs replay-sources add","href":"/flyctl/cmd/fly_orgs_replay-sources_add"},{"title":"fly orgs replay-sources list","href":"/flyctl/cmd/fly_orgs_replay-sources_list"},{"title":"fly orgs replay-sources remove","href":"/flyctl/cmd/fly_orgs_replay-sources_remove"}]},{"title":"fly orgs show","href":"/flyctl/cmd/fly_orgs_show"}]},{"title":"fly ping","sidebarTitle":"Ping your App (ping)","href":"/flyctl/cmd/fly_ping"},{"group":"fly platform","root":{"title":"fly platform","sidebarTitle":"Platform information (platform)","href":"/flyctl/cmd/fly_platform"},"pages":[{"title":"fly platform regions","href":"/flyctl/cmd/fly_platform_regions"},{"title":"fly platform status","href":"/flyctl/cmd/fly_platform_status"},{"title":"fly platform vm-sizes","href":"/flyctl/cmd/fly_platform_vm-sizes"}]},{"group":"fly postgres","root":{"title":"fly postgres","sidebarTitle":"Legacy Postgres clusters (postgres)","href":"/flyctl/cmd/fly_postgres"},"pages":[{"title":"fly postgres attach","href":"/flyctl/cmd/fly_postgres_attach"},{"group":"fly postgres backup","root":{"title":"fly postgres backup","href":"/flyctl/cmd/fly_postgres_backup"},"pages":[{"group":"fly postgres backup config","root":{"title":"fly postgres backup config","href":"/flyctl/cmd/fly_postgres_backup_config"},"pages":[{"title":"fly postgres backup config show","href":"/flyctl/cmd/fly_postgres_backup_config_show"},{"title":"fly postgres backup config update","href":"/flyctl/cmd/fly_postgres_backup_config_update"}]},{"title":"fly postgres backup create","href":"/flyctl/cmd/fly_postgres_backup_create"},{"title":"fly postgres backup enable","href":"/flyctl/cmd/fly_postgres_backup_enable"},{"title":"fly postgres backup list","href":"/flyctl/cmd/fly_postgres_backup_list"},{"title":"fly postgres backup restore","href":"/flyctl/cmd/fly_postgres_backup_restore"}]},{"group":"fly postgres config","root":{"title":"fly postgres config","href":"/flyctl/cmd/fly_postgres_config"},"pages":[{"title":"fly postgres config show","href":"/flyctl/cmd/fly_postgres_config_show"},{"title":"fly postgres config update","href":"/flyctl/cmd/fly_postgres_config_update"}]},{"title":"fly postgres connect","href":"/flyctl/cmd/fly_postgres_connect"},{"title":"fly postgres create","href":"/flyctl/cmd/fly_postgres_create"},{"group":"fly postgres db","root":{"title":"fly postgres db","href":"/flyctl/cmd/fly_postgres_db"},"pages":[{"title":"fly postgres db list","href":"/flyctl/cmd/fly_postgres_db_list"}]},{"title":"fly postgres detach","href":"/flyctl/cmd/fly_postgres_detach"},{"group":"fly postgres events","root":{"title":"fly postgres events","href":"/flyctl/cmd/fly_postgres_events"},"pages":[{"title":"fly postgres events list","href":"/flyctl/cmd/fly_postgres_events_list"}]},{"title":"fly postgres failover","href":"/flyctl/cmd/fly_postgres_failover"},{"title":"fly postgres import","href":"/flyctl/cmd/fly_postgres_import"},{"title":"fly postgres list","href":"/flyctl/cmd/fly_postgres_list"},{"title":"fly postgres renew-certs","href":"/flyctl/cmd/fly_postgres_renew-certs"},{"title":"fly postgres restart","href":"/flyctl/cmd/fly_postgres_restart"},{"group":"fly postgres users","root":{"title":"fly postgres users","href":"/flyctl/cmd/fly_postgres_users"},"pages":[{"title":"fly postgres users list","href":"/flyctl/cmd/fly_postgres_users_list"}]}]},{"title":"fly proxy","sidebarTitle":"Proxy connection to App (proxy)","href":"/flyctl/cmd/fly_proxy"},{"group":"fly redis","root":{"title":"fly redis","sidebarTitle":"Manage Redis instances (redis)","href":"/flyctl/cmd/fly_redis"},"pages":[{"title":"fly redis connect","href":"/flyctl/cmd/fly_redis_connect"},{"title":"fly redis create","href":"/flyctl/cmd/fly_redis_create"},{"title":"fly redis dashboard","href":"/flyctl/cmd/fly_redis_dashboard"},{"title":"fly redis destroy","href":"/flyctl/cmd/fly_redis_destroy"},{"title":"fly redis list","href":"/flyctl/cmd/fly_redis_list"},{"title":"fly redis plans","href":"/flyctl/cmd/fly_redis_plans"},{"title":"fly redis proxy","href":"/flyctl/cmd/fly_redis_proxy"},{"title":"fly redis reset","href":"/flyctl/cmd/fly_redis_reset"},{"title":"fly redis status","href":"/flyctl/cmd/fly_redis_status"},{"title":"fly redis update","href":"/flyctl/cmd/fly_redis_update"}]},{"title":"fly releases","sidebarTitle":"Manage App releases (releases)","href":"/flyctl/cmd/fly_releases"},{"group":"fly scale","root":{"title":"fly scale","sidebarTitle":"Scaling Apps (scale)","href":"/flyctl/cmd/fly_scale"},"pages":[{"title":"fly scale count","href":"/flyctl/cmd/fly_scale_count"},{"title":"fly scale memory","href":"/flyctl/cmd/fly_scale_memory"},{"title":"fly scale show","href":"/flyctl/cmd/fly_scale_show"},{"title":"fly scale vm","href":"/flyctl/cmd/fly_scale_vm"}]},{"group":"fly secrets","root":{"title":"fly secrets","sidebarTitle":"Manage App secrets (secrets)","href":"/flyctl/cmd/fly_secrets"},"pages":[{"title":"fly secrets deploy","href":"/flyctl/cmd/fly_secrets_deploy"},{"title":"fly secrets import","href":"/flyctl/cmd/fly_secrets_import"},{"title":"fly secrets list","href":"/flyctl/cmd/fly_secrets_list"},{"title":"fly secrets set","href":"/flyctl/cmd/fly_secrets_set"},{"title":"fly secrets sync","href":"/flyctl/cmd/fly_secrets_sync"},{"title":"fly secrets unset","href":"/flyctl/cmd/fly_secrets_unset"}]},{"group":"fly services","root":{"title":"fly services","sidebarTitle":"View services configured on an App (services)","href":"/flyctl/cmd/fly_services"},"pages":[{"title":"fly services list","href":"/flyctl/cmd/fly_services_list"}]},{"group":"fly settings","root":{"title":"fly settings","sidebarTitle":"Manage settings (settings)","href":"/flyctl/cmd/fly_settings"},"pages":[{"group":"fly settings analytics","root":{"title":"fly settings analytics","href":"/flyctl/cmd/fly_settings_analytics"},"pages":[{"title":"fly settings analytics disable","href":"/flyctl/cmd/fly_settings_analytics_disable"},{"title":"fly settings analytics enable","href":"/flyctl/cmd/fly_settings_analytics_enable"}]},{"group":"fly settings autoupdate","root":{"title":"fly settings autoupdate","href":"/flyctl/cmd/fly_settings_autoupdate"},"pages":[{"title":"fly settings autoupdate disable","href":"/flyctl/cmd/fly_settings_autoupdate_disable"},{"title":"fly settings autoupdate enable","href":"/flyctl/cmd/fly_settings_autoupdate_enable"}]},{"group":"fly settings synthetics","root":{"title":"fly settings synthetics","href":"/flyctl/cmd/fly_settings_synthetics"},"pages":[{"title":"fly settings synthetics disable","href":"/flyctl/cmd/fly_settings_synthetics_disable"},{"title":"fly settings synthetics enable","href":"/flyctl/cmd/fly_settings_synthetics_enable"}]}]},{"group":"fly setup","root":{"title":"fly setup","description":null,"href":"/flyctl/cmd/fly_setup"},"pages":[{"title":"fly setup agent","href":"/flyctl/cmd/fly_setup_agent"}]},{"group":"fly sftp","root":{"title":"fly sftp","sidebarTitle":"Move files to or from a VM (sftp)","description":null,"href":"/flyctl/cmd/fly_sftp"},"pages":[{"title":"fly sftp find","href":"/flyctl/cmd/fly_sftp_find"},{"title":"fly sftp get","href":"/flyctl/cmd/fly_sftp_get"},{"title":"fly sftp put","href":"/flyctl/cmd/fly_sftp_put"},{"title":"fly sftp shell","href":"/flyctl/cmd/fly_sftp_shell"}]},{"group":"fly skills","root":{"title":"fly skills","href":"/flyctl/cmd/fly_skills"},"pages":[{"title":"fly skills install","href":"/flyctl/cmd/fly_skills_install"},{"title":"fly skills remove","href":"/flyctl/cmd/fly_skills_remove"},{"title":"fly skills status","href":"/flyctl/cmd/fly_skills_status"},{"title":"fly skills update","href":"/flyctl/cmd/fly_skills_update"}]},{"group":"fly ssh","root":{"title":"fly ssh","sidebarTitle":"Manage SSH (ssh)","href":"/flyctl/cmd/fly_ssh"},"pages":[{"title":"fly ssh console","href":"/flyctl/cmd/fly_ssh_console"},{"title":"fly ssh issue","href":"/flyctl/cmd/fly_ssh_issue"},{"title":"fly ssh log","href":"/flyctl/cmd/fly_ssh_log"},{"group":"fly ssh sftp","root":{"title":"fly ssh sftp","href":"/flyctl/cmd/fly_ssh_sftp"},"pages":[{"title":"fly ssh sftp find","href":"/flyctl/cmd/fly_ssh_sftp_find"},{"title":"fly ssh sftp get","href":"/flyctl/cmd/fly_ssh_sftp_get"},{"title":"fly ssh sftp put","href":"/flyctl/cmd/fly_ssh_sftp_put"},{"title":"fly ssh sftp shell","href":"/flyctl/cmd/fly_ssh_sftp_shell"}]}]},{"title":"fly status","sidebarTitle":"View App status (status)","href":"/flyctl/cmd/fly_status"},{"group":"fly storage","root":{"title":"fly storage","sidebarTitle":"Manage Tigris storage (storage)","href":"/flyctl/cmd/fly_storage"},"pages":[{"title":"fly storage create","href":"/flyctl/cmd/fly_storage_create"},{"title":"fly storage dashboard","href":"/flyctl/cmd/fly_storage_dashboard"},{"title":"fly storage destroy","href":"/flyctl/cmd/fly_storage_destroy"},{"title":"fly storage list","href":"/flyctl/cmd/fly_storage_list"},{"title":"fly storage status","href":"/flyctl/cmd/fly_storage_status"},{"title":"fly storage update","href":"/flyctl/cmd/fly_storage_update"}]},{"group":"fly synthetics","root":{"title":"fly synthetics","href":"/flyctl/cmd/fly_synthetics"},"pages":[{"title":"fly synthetics agent","href":"/flyctl/cmd/fly_synthetics_agent"}]},{"group":"fly tokens","root":{"title":"fly tokens","sidebarTitle":"Create a token (tokens)","href":"/flyctl/cmd/fly_tokens"},"pages":[{"group":"fly tokens 3p","root":{"title":"fly tokens 3p","href":"/flyctl/cmd/fly_tokens_3p"},"pages":[{"title":"fly tokens 3p add","href":"/flyctl/cmd/fly_tokens_3p_add"},{"title":"fly tokens 3p add-discharge","href":"/flyctl/cmd/fly_tokens_3p_add-discharge"},{"title":"fly tokens 3p discharge","href":"/flyctl/cmd/fly_tokens_3p_discharge"},{"title":"fly tokens 3p ticket","href":"/flyctl/cmd/fly_tokens_3p_ticket"}]},{"title":"fly tokens attenuate","href":"/flyctl/cmd/fly_tokens_attenuate"},{"group":"fly tokens create","root":{"title":"fly tokens create","href":"/flyctl/cmd/fly_tokens_create"},"pages":[{"title":"fly tokens create deploy","href":"/flyctl/cmd/fly_tokens_create_deploy"},{"title":"fly tokens create machine-exec","href":"/flyctl/cmd/fly_tokens_create_machine-exec"},{"title":"fly tokens create org","href":"/flyctl/cmd/fly_tokens_create_org"},{"title":"fly tokens create readonly","href":"/flyctl/cmd/fly_tokens_create_readonly"},{"title":"fly tokens create ssh","href":"/flyctl/cmd/fly_tokens_create_ssh"},{"title":"fly tokens create wireguard","href":"/flyctl/cmd/fly_tokens_create_wireguard"}]},{"title":"fly tokens debug","href":"/flyctl/cmd/fly_tokens_debug"},{"title":"fly tokens list","href":"/flyctl/cmd/fly_tokens_list"},{"group":"fly tokens revoke","root":{"title":"fly tokens revoke","href":"/flyctl/cmd/fly_tokens_revoke"},"pages":[{"title":"fly tokens revoke supplied","href":"/flyctl/cmd/fly_tokens_revoke_supplied"}]}]},{"group":"fly version","root":{"title":"fly version","sidebarTitle":"Check flyctl version (version)","href":"/flyctl/cmd/fly_version"},"pages":[{"title":"fly version upgrade","href":"/flyctl/cmd/fly_version_upgrade"}]},{"group":"fly volumes","root":{"title":"fly volumes","sidebarTitle":"Manage Disks (volumes)","href":"/flyctl/cmd/fly_volumes"},"pages":[{"title":"fly volumes create","href":"/flyctl/cmd/fly_volumes_create"},{"title":"fly volumes destroy","href":"/flyctl/cmd/fly_volumes_destroy"},{"title":"fly volumes extend","href":"/flyctl/cmd/fly_volumes_extend"},{"title":"fly volumes fork","href":"/flyctl/cmd/fly_volumes_fork"},{"title":"fly volumes list","href":"/flyctl/cmd/fly_volumes_list"},{"title":"fly volumes show","href":"/flyctl/cmd/fly_volumes_show"},{"group":"fly volumes snapshots","root":{"title":"fly volumes snapshots","href":"/flyctl/cmd/fly_volumes_snapshots"},"pages":[{"title":"fly volumes snapshots create","href":"/flyctl/cmd/fly_volumes_snapshots_create"},{"title":"fly volumes snapshots list","href":"/flyctl/cmd/fly_volumes_snapshots_list"}]},{"title":"fly volumes update","href":"/flyctl/cmd/fly_volumes_update"}]},{"group":"fly wireguard","root":{"title":"fly wireguard","sidebarTitle":"WireGuard VPN (wireguard)","href":"/flyctl/cmd/fly_wireguard"},"pages":[{"title":"fly wireguard create","href":"/flyctl/cmd/fly_wireguard_create"},{"title":"fly wireguard list","href":"/flyctl/cmd/fly_wireguard_list"},{"title":"fly wireguard remove","href":"/flyctl/cmd/fly_wireguard_remove"},{"title":"fly wireguard reset","href":"/flyctl/cmd/fly_wireguard_reset"},{"title":"fly wireguard token-mode","href":"/flyctl/cmd/fly_wireguard_token-mode"},{"title":"fly wireguard websockets","href":"/flyctl/cmd/fly_wireguard_websockets"}]}]}]},{"title":"App configuration (fly.toml)","href":"/reference/configuration"},{"title":"The Fly.io Architecture","href":"/reference/architecture"},{"title":"Autoscaling","href":"/reference/autoscaling"},{"title":"Migrating from AWS to Fly.io Overview","href":"/reference/aws-to-fly-guide"},{"title":"Builders and Fly.io","href":"/reference/builders"},{"title":"Content Encoding with the Fly Proxy","href":"/reference/content-encoding"},{"title":"Fly Launch overview","href":"/reference/fly-launch"},{"title":"Health Checks","href":"/reference/health-checks"},{"title":"Load Balancing","href":"/reference/load-balancing"},{"title":"Machine migration","href":"/reference/machine-migration"},{"title":"Multiple processes inside a Fly.io app","href":"/app-guides/multiple-processes"},{"title":"Fly Proxy","href":"/reference/fly-proxy"},{"title":"Fly Proxy autostop/autostart","href":"/reference/fly-proxy-autostop-autostart"},{"title":"Feedback API","href":"/reference/feedback-api"},{"title":"Regions","href":"/reference/regions"},{"title":"Machine Suspend and Resume","href":"/reference/suspend-resume"}]},{"group":"About","root":{"title":"About Fly.io","href":"/about/index"},"pages":[{"title":"Discontinued Plans","href":"/about/discontinued-plans"},{"title":"Fly.io Resource Pricing","href":"/about/pricing"},{"title":"Fly.io Billing","href":"/about/billing"},{"title":"Cost Management on Fly.io","href":"/about/cost-management"},{"title":"Fly.io Free Trial","href":"/about/free-trial"},{"title":"Support","href":"/about/support"},{"group":"Engineering Jobs","root":{"title":"Join Our Team","href":"/hiring/index"},"pages":[{"title":"Our Stack","href":"/hiring/stack"},{"title":"Our Roles","href":"/hiring/roles"},{"title":"Our Levels","href":"/hiring/company-levels"},{"title":"Our Hiring Process","href":"/hiring/hiring"},{"title":"How To Ask Us Questions","href":"/hiring/questions"},{"title":"Working at Fly.io","href":"/hiring/working"},{"title":"Our Engineering Levels","href":"/hiring/levels"}]},{"title":"Healthcare apps on Fly","href":"/about/healthcare"},{"title":"Fly.io Extensions Program","href":"/about/extensions"},{"title":"Provisioning Fly.io Extensions","href":"/reference/extensions_api"},{"title":"Fly.io Merchandise","href":"/about/merch"},{"title":"Fly.io and Open Source","href":"/about/open-source"},{"title":"Using Our Brand","href":"/about/brand"}]},{"group":"LiteFS","pages":[{"group":"Get Started with LiteFS","pages":[{"title":"LiteFS - Distributed SQLite","href":"/litefs/index"},{"title":"Speedrun: Add LiteFS to your app","href":"/litefs/speedrun"},{"title":"Getting Started with LiteFS on Fly.io","href":"/litefs/getting-started-fly"},{"title":"Getting Started with LiteFS in Docker","href":"/litefs/getting-started-docker"},{"title":"How LiteFS Works","href":"/litefs/how-it-works"},{"sidebarTitle":"FAQ","title":"LiteFS FAQ","href":"/litefs/faq"}]},{"group":"Using LiteFS","pages":[{"title":"LiteFS Releases","sidebarTitle":"Releases","href":"/litefs/releases"},{"title":"Built-in HTTP Proxy","href":"/litefs/proxy"},{"title":"Running database migrations","href":"/litefs/migrations"},{"title":"Backing up your LiteFS cluster","sidebarTitle":"Backing up your cluster","href":"/litefs/backup"},{"title":"Determining the LiteFS primary","sidebarTitle":"Determining the primary","href":"/litefs/primary"},{"sidebarTitle":"Tracking replication position","title":"Tracking LiteFS replication position","href":"/litefs/position"},{"title":"Reading the LiteFS event stream","sidebarTitle":"Reading the event stream","href":"/litefs/events"},{"title":"Using LiteFS Cloud for Backups","sidebarTitle":"Using Cloud for Backups","href":"/litefs/cloud-backups"},{"title":"Restoring from a LiteFS Cloud Backup","sidebarTitle":"Restoring from a Cloud Backup","href":"/litefs/cloud-restore"},{"title":"Disaster Recovery from LiteFS Cloud","sidebarTitle":"Disaster Recovery from Cloud","href":"/litefs/disaster-recovery"}]},{"group":"LiteFS Reference","pages":[{"sidebarTitle":"Export Command","title":"LiteFS Export Command","href":"/litefs/export"},{"sidebarTitle":"Import Command","title":"LiteFS Import Command","href":"/litefs/import"},{"sidebarTitle":"Mount Command","title":"LiteFS Mount Command","href":"/litefs/mount"},{"title":"LiteFS Run Command","sidebarTitle":"Run Command","href":"/litefs/run"},{"sidebarTitle":"Config Reference","title":"LiteFS Config Reference","href":"/litefs/config"}]}]}]}]},{"tab":"Machines API","pages":[{"title":"Machines API","href":"/api/machines"}]},{"tab":"Sprite docs","pages":[{"title":"Sprite docs","href":"/sprites"}]},{"tab":"Sprites API","pages":[{"title":"Sprites API","href":"/sprites/api/connectors/list-connectors"}]}]},"basePath":"","title":"fly setup agent - Fly.io","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":[],"chunks":[]}