scanned Apr 24, 2026

Fly.io

infrastructureVisit site →

Fly.io is a platform for developers to build, deploy, and manage applications with ease

57/100

Tier 3 · Agent-Accessible

Content answers70/100
Protocol plumbing27/1003 of 11 checks pass

Scored by asking 15 questions a buyer of a infrastructure product asks, then grading this site’s own pages: answered, hedged (partial or vague), or silent (no page answers it). How scoring works

This report is public. Own fly.io? Claiming is free: crawl every page, re-audit as you fix, and track your score over time.

Sign in to claim

The fix queue

43 points sit between fly.io and 100: 10 open questions and 8 missing protocol checks, ordered by estimated payoff.

Point estimates are per fix under scoring v2. They are not additive to a promised total.

01limits · importance mediumGoes silent+7 content pts est.

My WebSocket app needs to handle 50k concurrent connections per instance — what's the hard limit on TCP connections per Machine before I hit kernel or proxy constraints?

What the pages say

No page on the site addresses this.

The fix

Create a dedicated documentation page or section on 'System Limits and Maximums' that specifies kernel-level constraints (file descriptors, ephemeral ports), proxy-level connection limits per Machine, and any hard ceilings that apply regardless of fly.toml configuration. Include WebSocket-specific guidance given the 50k concurrent connection use case.

confidence high · grounding synthesized · weight 0.00 · Absent

02security · importance mediumGoes silent+7 content pts est.

When my team uses fly wireguard to connect to our private network, are connection attempts and commands logged anywhere for compliance auditing, or is it completely opaque?

What the pages say

No page on the site addresses this.

The fix

Add documentation about WireGuard logging and audit capabilities, including: whether connection attempts are logged, what metadata is captured (timestamps, source IPs, peer identities), if commands over the tunnel are logged, how long logs are retained, and how customers can access these logs for compliance auditing. This could be added to the Private Networking or Security documentation sections.

confidence high · grounding world-knowledge · weight 0.00 · Absent

Hedged · 8 of 15 questions

A buyer gets something, then has to guess the rest. Expand any row for the evidence and the fix.

03If I set my Machines to auto-suspend after 5 minutes of inactivity, am I still charged for the full 5 minutes or does billing stop the moment traffic drops to zero?pricingHedges+2 pts est.

If I set my Machines to auto-suspend after 5 minutes of inactivity, am I still charged for the full 5 minutes or does billing stop the moment traffic drops to zero?

What the pages say

Billing stops when the Machine enters the `suspended` state, not at the moment traffic drops to zero. According to the docs, "Started Machines are billed per second that they're running (the time they spend in the `started` state)" and "Suspended machines cost the same as stopped machines: storage only. There are no CPU/RAM charges." The proxy checks for idle periods "every few minutes" and suspends Machines when they have zero connections and excess capacity exists. This means you are charged for CPU/RAM during the idle period until the proxy actually suspends the Machine, not for the full 5 minutes if traffic drops earlier, but also not instantaneously when traffic hits zero.

Source: /docs/about/billing, /docs/reference/suspend-resume, /docs/reference/fly-proxy-autostop-autostart, /docs/reference/suspend-resume

confidence medium · grounding synthesized · weight 0.65 · Answered

04For a suspended Machine with a 2GB Docker image in us-east, what's the typical cold start latency I should expect when the first request comes in?technicalHedges+2 pts est.

For a suspended Machine with a 2GB Docker image in us-east, what's the typical cold start latency I should expect when the first request comes in?

What the pages say

For a suspended Machine, the typical cold start latency is "~2+ seconds for common apps" when resuming from suspend fails and a cold boot occurs. However, if the Machine successfully resumes from suspend (the normal case), it's "a few hundred ms". The chunks do not specify whether a 2GB Docker image in us-east would push this toward the higher end of the range or beyond it. The site does not provide image-size-specific or region-specific cold start latency data.

The fix

Add specific cold start latency benchmarks broken down by image size (e.g., 500MB, 2GB, 5GB) and region, or at least clarify whether image size significantly impacts the "~2+ seconds" baseline.

Where we looked: /docs/reference/suspend-resume, /docs/machines/api/machines-resource, /docs/mcp/deploy-with/machines-api

confidence medium · grounding synthesized · weight 0.65 · Vague

05Fly.io Postgres says it handles backups automatically, but what's the actual retention period — 7 days, 30 days, or configurable? And can I access point-in-time recovery?operationsHedges+2 pts est.

Fly.io Postgres says it handles backups automatically, but what's the actual retention period — 7 days, 30 days, or configurable? And can I access point-in-time recovery?

What the pages say

Fly.io's unmanaged Postgres retains daily volume snapshots for 5 days (not 7 or 30 days, and not configurable). The chunks do not mention point-in-time recovery (PITR) capability for the unmanaged Postgres offering. For comparison, Fly.io Managed Postgres offers 'automatic backups and recovery' but specific retention/PITR details for that service are not provided in these chunks.

Source: /docs/postgres/getting-started/what-you-should-know, /docs/postgres/getting-started/what-you-should-know, /docs/mpg/overview

confidence high · grounding synthesized · weight 0.70 · Answered

06The fly-replay header lets me route requests to other regions, but is there a maximum number of hops or total latency budget before the request times out?technicalHedges+2 pts est.

The fly-replay header lets me route requests to other regions, but is there a maximum number of hops or total latency budget before the request times out?

What the pages say

There is a maximum of 10 hops for fly-replay: after a 'fly-replay' response header replays a request, the application may respond normally or issue another fly-replay, up to 10 times. Error code PA02 is emitted when fly-replay is returned more than 10 times. However, the chunks do not specify a total latency budget or timeout that applies across multiple hops—only per-replay timeouts (configurable via the timeout field, e.g., '10s') are documented.

Source: /docs/monitoring/error-codes, /docs/networking/dynamic-request-routing, /docs/networking/dynamic-request-routing

confidence high · grounding synthesized · weight 0.70 · Answered

07I'm hitting 'organization machine limit reached' — is this a hard cap I can raise via support ticket, or do I need to split into multiple organizations? What's the default per-org limit?limitsHedges+2 pts est.

I'm hitting 'organization machine limit reached' — is this a hard cap I can raise via support ticket, or do I need to split into multiple organizations? What's the default per-org limit?

What the pages say

The chunks mention that 'Organizations may be subject to automated scaling limits to prevent abuse or to help with capacity planning' and advise to 'Email the address in the error message if you run into such a limit and it's getting in your way.' However, the specific error 'organization machine limit reached' is not directly addressed, and no default per-organization machine limit number is provided. The chunks do not clarify whether this is a hard cap requiring multiple organizations or a soft limit that can be raised via support.

The fix

Add a dedicated documentation page or FAQ entry specifically addressing organization-level machine limits, including: the default numeric limit per organization, whether it can be raised via support ticket, and guidance on when to use multiple organizations vs. requesting a limit increase.

Where we looked: /docs/about/pricing

confidence medium · grounding stated · weight 0.75 · Vague

08I have a 12-service docker-compose setup with inter-service networking and named volumes — does Fly.io have any automated migration path or do I need to manually convert to fly.toml for each service?migrationHedges+2 pts est.

I have a 12-service docker-compose setup with inter-service networking and named volumes — does Fly.io have any automated migration path or do I need to manually convert to fly.toml for each service?

What the pages say

Fly.io has an automated migration path for Docker Compose setups via Multi-container Machines. You can deploy a Docker Compose file directly without rewriting to fly.toml for each service by adding `[build.compose]` to your fly.toml. However, there are significant limitations for your 12-service setup: only exactly one service can specify `build` (others must use pre-built images), secrets are global to all containers, and environment variables may conflict. For persistent storage with named volumes, you'll need to attach Fly Volumes and mount them via `[mounts]` in fly.toml. The chunks don't specifically address inter-service networking migration, though the feature runs all containers within a single Machine.

Source: /docs/machines/guides-examples/multi-container-machines, /docs/machines/guides-examples/multi-container-machines, /docs/machines/guides-examples/multi-container-machines

confidence high · grounding synthesized · weight 0.70 · Answered

09The free tier includes 2 days of logs, but if I need 90 days for debugging production issues, is that a flat add-on fee or does log retention pricing scale with log volume ingested?operationsPage missing+2 pts est.

The free tier includes 2 days of logs, but if I need 90 days for debugging production issues, is that a flat add-on fee or does log retention pricing scale with log volume ingested?

What the pages say

Fly.io's built-in log retention is 2 days for free tier logs (confirmed in chunk [3] and [16]), and 30 days for the Grafana log search feature during the beta period (chunk [1]). However, the chunks do not specify pricing for extended log retention beyond these periods, nor whether such retention would be a flat add-on fee or volume-based. For logs beyond the built-in retention periods, Fly.io recommends exporting logs using the Fly Log Shipper app to an external service (chunk [6]).

The fix

Create a dedicated pricing section for log retention that clarifies: (1) whether extended retention beyond 2/30 days is available as a paid feature, (2) if so, whether pricing is flat-rate or volume-based, and (3) pricing tiers for common retention periods like 90 days.

Where we looked: /docs/laravel/the-basics/post-deployment, /docs/monitoring/search-logs, /docs/monitoring/logging-overview, /docs/laravel/the-basics/post-deployment, /docs/about/pricing, /docs/about/pricing, /docs/about/pricing, /docs/about/billing, /docs/about/billing, /docs/about/billing, /docs/about/cost-management

confidence medium · grounding synthesized · weight 0.65 · Page missing

10Fly.io mentions 'enterprise security' but I need SOC 2 Type II and ISO 27001 for our procurement — which specific certifications does Fly.io currently hold and can I download the reports?securityHedges+1 pt est.

Fly.io mentions 'enterprise security' but I need SOC 2 Type II and ISO 27001 for our procurement — which specific certifications does Fly.io currently hold and can I download the reports?

What the pages say

Fly.io has SOC 2 Type 2 certification. The chunks do not mention ISO 27001 certification. There is no information about downloading reports from the website; the security page directs users to email security@fly.io for questions.

The fix

Add explicit mention of ISO 27001 status (yes/no) and provide a self-service portal or clear instructions for downloading SOC 2 Type 2 and any other compliance reports, rather than requiring email contact.

Where we looked: /docs/security/security-at-fly-io, /docs/security/security-at-fly-io

confidence high · grounding stated · weight 0.80 · Vague

What the pages already answer cleanly

5 of 15. Answered with enough specificity for a buyer to act on. This is the bar the queue above is chasing.

operationsAnswered

When I deploy a new version with 'fly deploy', does the rolling replacement guarantee zero-downtime if I only have one Machine per region, or do I need at least two for true high availability?

What the pages say

With the default `rolling` deployment strategy and only one Machine per region, you do NOT get zero-downtime deployments. The `rolling` strategy takes down each running Machine one by one and replaces it with a new release Machine. With only one Machine, this means there is a period where no Machine is serving traffic in that region. For true high availability during deploys, you need at least two Machines. The docs explicitly state: "Working with health checks and at least two Machines, you can avoid downtime. The platform won't kill a healthy Machine until a new one is up and running." Additionally, if `max-per-region` is set to 1, the `bluegreen` strategy behaves similarly to `rolling` (it cannot boot new Machines alongside old ones), and `canary` is disabled entirely because it needs to temporarily run more than one Machine.

Source: /docs/reference/configuration, /docs/blueprints/seamless-deployments

confidence high · grounding synthesized · weight 0.95 · Answered

pricingAnswered

I'm projecting 500GB of persistent storage across 6 regions — does Fly.io offer volume discounts or is it strictly linear per-GB pricing regardless of total commitment?

What the pages say

Fly.io does not offer volume discounts for persistent storage. Volume pricing is strictly linear per-GB at $0.15/GB per month of provisioned capacity, with no volume-based discounts or commitment pricing mentioned. The only discount mentioned for volumes is the first 10GB free each month. While Fly.io offers 40% discounts on compute through Machine reservation blocks, these do not apply to storage volumes.

Source: /docs/about/pricing, /docs/about/pricing, /docs/about/pricing

confidence high · grounding synthesized · weight 0.95 · Answered

integrationAnswered

Does the official Fly Terraform provider support managing Postgres clusters and volumes, or am I stuck using flyctl for database provisioning even with IaC?

What the pages say

Fly.io does not have a Terraform provider anymore. According to their documentation, "We don't have a Terraform provider anymore, and that's intentional. It's not a great fit for how our platform works." For database provisioning, you must use flyctl (e.g., `fly postgres create` or `fly mpg create`) or the Machines API directly. The site explicitly recommends using flyctl + GitHub Actions for most users, or the Machines API for more complex orchestration needs.

Source: /docs/blueprints/infra-automation-without-terraform, /docs/blueprints/infra-automation-without-terraform, /docs/postgres/getting-started/create-pg-cluster, /docs/mpg/create-and-connect

confidence high · grounding stated · weight 1.00 · Answered

supportAnswered

If I upgrade to an enterprise plan for critical production workloads, what are the actual contractual response times for P1 incidents — 15 minutes, 1 hour, or best effort?

What the pages say

For Enterprise customers, P1 (Urgent/Critical) incidents have a contractual target response time of 15 minutes, 365x24. The SLA defines 'Urgent' as 'Critical Issue: A defect resulting in full or partial system outage or a condition that makes Fly.io unusable or unavailable in production for all of Customer's users.'

Source: /legal/sla-uptime

confidence high · grounding stated · weight 1.00 · Answered

technicalAnswered

I need A100 GPUs for inference — which specific Fly.io regions actually have GPU capacity available, and is there a waitlist or different pricing structure than standard Machines?

What the pages say

A100 GPUs are available in two variants: `a100-40gb` (A100 40G PCIe) is only available in `ord` (Chicago), and `a100-80gb` (A100 80G SXM) is available in `iad` (Ashburn), `sjc` (San Jose), `syd` (Sydney), and `ams` (Amsterdam). There is no waitlist mentioned; GPU pricing is on-demand with no minimum usage requirements. Pricing is different from standard Machines: GPU-enabled Machines cost the standard Machine price plus GPU add-on pricing — A100 40G PCIe at $1.25/hr per GPU and A100 80G SXM at $1.50/hr per GPU. Reserved and dedicated options with discounted rates are also available. Note: GPUs are deprecated and will be unavailable after August 1.

Source: /docs/gpus/getting-started-gpus, /docs/gpus/getting-started-gpus, /docs/gpus/gpu-quickstart, /docs/gpus, /docs/about/pricing

confidence high · grounding synthesized · weight 0.95 · Answered

Protocol plumbing · 27/1003 of 11 checks pass · each fix +9 protocol pts est.

The other half of the score: 11 checks for the files and headers agents look for. The 8 below are installs, not judgment calls, and most are an afternoon. Expand any for the snippet and the standard it follows. They sit after the queue because none of them changes what your pages say.

robots.txtDiscoverability+9 pts est.
Install snippet
User-agent: *
Content-Signal: search=yes, ai-input=yes, ai-train=no
Allow: /

User-agent: GPTBot
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: anthropic-ai
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: OAI-SearchBot
Allow: /

User-agent: Googlebot-Extended
Allow: /

Sitemap: https://fly.io/sitemap.xml

StandardRFC 9309IETF RFC

llms.txtDiscoverability+9 pts est.

Sitedex generates this file from your crawl. Grab it in Files from this audit below.

Standardllmstxt.orgCommunity spec

AI crawler accessAccess+9 pts est.
Install snippet
User-agent: GPTBot
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: anthropic-ai
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: OAI-SearchBot
Allow: /

User-agent: Googlebot-Extended
Allow: /

StandardRFC 9309IETF RFC

Content signalAccess+9 pts est.
Install snippet
User-agent: *
Content-Signal: search=yes, ai-input=yes, ai-train=no
Allow: /

StandardCloudflare proposalVendor proposal

Markdown negotiationRendering+9 pts est.

StandardRFC 9110 + 7763IETF RFC

MCP cardInteraction+9 pts est.

Sitedex generates this file from your crawl. Grab it in Files from this audit below.

StandardModel Context ProtocolCommunity spec

OpenAPI specInteraction+9 pts est.

StandardOpenAPI SpecIndustry standard

WebMCP widgetInteraction+9 pts est.

Sitedex generates this file from your crawl. Grab it in Files from this audit below.

StandardW3C WebMCP draftW3C / WHATWG

Already passing 3 of 11: sitemap.xml, Clean crawl, Server-rendered content.

Ask this site’s index

Sitedex already serves fly.io as an MCP endpoint. Ask fly.io anything an AI agent might ask, and see what its index returns. (To score your own site, use the form below.)

Snippets & configs

For developers and the engineer-on-call: copy these into your tools or your site.

Files from this audit

Built from this crawl. Download or copy each, then install it at the path noted.

llms.txt

Built from this crawl. Install at /llms.txt so agents start here.

organization.json

Organization JSON-LD, pre-filled from this crawl. Wrap in a ld+json script.

server-card.json

MCP server card built from this crawl. Host at /.well-known/mcp/server-card.json.

webmcp.json

WebMCP discovery manifest built from this crawl. Host at /.well-known/webmcp.json.

MCP endpoint

https://mcp.sitedex.dev/s/fly-io/mcp

The URL anyone's agent points at. Read-only; safe to share.

Claude Code

claude mcp add fly --transport http https://mcp.sitedex.dev/s/fly-io/mcp

One command, then the agent has it.

Cursor / Continue

{
  "mcpServers": {
    "fly": {
      "url": "https://mcp.sitedex.dev/s/fly-io/mcp"
    }
  }
}

Drop into mcp.json.

WebMCP: two parts

WebMCP-capable browsers run the widget at runtime. Crawlers without JS rendering need the discovery manifest to find your tool surface. Install both.

1 · Widget script

<script async src="https://sitedex.dev/widget.js"></script>

Drop in <head>. In browsers with WebMCP, this script registers your site's tools with navigator.modelContext.registerTool().

2 · Discovery manifest

{
  "schema_version": "2026-04",
  "name": "Fly.io",
  "description": "Fly.io is a platform for developers to build, deploy, and manage applications with ease. WebMCP tools served by Sitedex.",
  "homepage": "https://fly.io",
  "documentation": "https://app.sitedex.dev/sites/fly.io",
  "source": "navigator.modelContext",
  "tools": [
    {
      "name": "search_site_content",
      "description": "Ask about this site in plain language and get the most relevant passages from its pages, each with the source URL and a relevance score. Searches the site's published text, not live inventory or accounts."
    },
    {
      "name": "get_site_info",
      "description": "This site's profile: name, description, category, who it is for, page count, and AI Visibility Score. Use it to learn what the site is before you search it."
    },
    {
      "name": "list_site_pages",
      "description": "The pages indexed on this site, with title, URL, and path. Use it to see what the site covers, or to find the path to pass to get_site_page."
    },
    {
      "name": "get_site_page",
      "description": "The full markdown of one page on this site, by path. Use it after search_site_content points you at a page and you want all of it."
    }
  ]
}

Host alongside the script at /.well-known/webmcp.json. Crawlers that don't render JS rely on this.

Your turn

See which of these questions your site goes silent on.

Free, about 5 minutes. We crawl your site, test it against the buyer questions your category asks, and name what’s vague, contradictory, or missing, plus the files AI agents look for.

ComingEmbeddable grade badgeScore history and deltasOpt-in public board