> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fly.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Fly.io Resource Pricing

export const RegionPricingSelector = () => {
  const regions = [{
    code: "ams",
    city: "Amsterdam",
    country: "Netherlands",
    markup: 1.0
  }, {
    code: "iad",
    city: "Ashburn, Virginia (US)",
    country: "",
    markup: 1.0
  }, {
    code: "ord",
    city: "Chicago, Illinois (US)",
    country: "",
    markup: 1.21
  }, {
    code: "dfw",
    city: "Dallas, Texas (US)",
    country: "",
    markup: 1.21
  }, {
    code: "fra",
    city: "Frankfurt",
    country: "Germany",
    markup: 1.21
  }, {
    code: "jnb",
    city: "Johannesburg",
    country: "South Africa",
    markup: 3.0
  }, {
    code: "lhr",
    city: "London",
    country: "United Kingdom",
    markup: 1.21
  }, {
    code: "lax",
    city: "Los Angeles, California (US)",
    country: "",
    markup: 1.21
  }, {
    code: "bom",
    city: "Mumbai",
    country: "India",
    markup: 3.0
  }, {
    code: "cdg",
    city: "Paris",
    country: "France",
    markup: 1.21
  }, {
    code: "sjc",
    city: "San Jose, California (US)",
    country: "",
    markup: 1.21
  }, {
    code: "gru",
    city: "São Paulo",
    country: "Brazil",
    markup: 1.21
  }, {
    code: "ewr",
    city: "Secaucus, NJ (US)",
    country: "",
    markup: 1.21
  }, {
    code: "sin",
    city: "Singapore",
    country: "Singapore",
    markup: 2.0
  }, {
    code: "arn",
    city: "Stockholm",
    country: "Sweden",
    markup: 1.21
  }, {
    code: "syd",
    city: "Sydney",
    country: "Australia",
    markup: 2.0
  }, {
    code: "nrt",
    city: "Tokyo",
    country: "Japan",
    markup: 2.0
  }, {
    code: "yyz",
    city: "Toronto",
    country: "Canada",
    markup: 1.21
  }];
  const presets = [{
    name: "shared-cpu-1x",
    cpu: 1,
    cpuType: "shared",
    tiers: [{
      ram: "256MB",
      pricePerSecond: 0.00000078
    }, {
      ram: "512MB",
      pricePerSecond: 0.00000128
    }, {
      ram: "1GB",
      pricePerSecond: 0.00000228
    }, {
      ram: "2GB",
      pricePerSecond: 0.00000429
    }]
  }, {
    name: "shared-cpu-2x",
    cpu: 2,
    cpuType: "shared",
    tiers: [{
      ram: "512MB",
      pricePerSecond: 0.00000156
    }, {
      ram: "1GB",
      pricePerSecond: 0.00000256
    }, {
      ram: "2GB",
      pricePerSecond: 0.00000456
    }, {
      ram: "4GB",
      pricePerSecond: 0.00000857
    }]
  }, {
    name: "shared-cpu-4x",
    cpu: 4,
    cpuType: "shared",
    tiers: [{
      ram: "1GB",
      pricePerSecond: 0.00000312
    }, {
      ram: "2GB",
      pricePerSecond: 0.00000512
    }, {
      ram: "4GB",
      pricePerSecond: 0.00000913
    }, {
      ram: "8GB",
      pricePerSecond: 0.00001714
    }]
  }, {
    name: "shared-cpu-6x",
    cpu: 6,
    cpuType: "shared",
    tiers: [{
      ram: "1.5GB",
      pricePerSecond: 0.00000467
    }, {
      ram: "3GB",
      pricePerSecond: 0.00000768
    }, {
      ram: "6GB",
      pricePerSecond: 0.00001369
    }, {
      ram: "12GB",
      pricePerSecond: 0.00002572
    }]
  }, {
    name: "shared-cpu-8x",
    cpu: 8,
    cpuType: "shared",
    tiers: [{
      ram: "2GB",
      pricePerSecond: 0.00000623
    }, {
      ram: "4GB",
      pricePerSecond: 0.00001024
    }, {
      ram: "8GB",
      pricePerSecond: 0.00001826
    }, {
      ram: "16GB",
      pricePerSecond: 0.00003429
    }]
  }, {
    name: "performance-1x",
    cpu: 1,
    cpuType: "performance",
    tiers: [{
      ram: "2GB",
      pricePerSecond: 0.00001242
    }, {
      ram: "4GB",
      pricePerSecond: 0.00001643
    }, {
      ram: "8GB",
      pricePerSecond: 0.00002445
    }]
  }, {
    name: "performance-2x",
    cpu: 2,
    cpuType: "performance",
    tiers: [{
      ram: "4GB",
      pricePerSecond: 0.00002484
    }, {
      ram: "8GB",
      pricePerSecond: 0.00003286
    }, {
      ram: "16GB",
      pricePerSecond: 0.00004889
    }]
  }, {
    name: "performance-4x",
    cpu: 4,
    cpuType: "performance",
    tiers: [{
      ram: "8GB",
      pricePerSecond: 0.00004968
    }, {
      ram: "16GB",
      pricePerSecond: 0.00006571
    }, {
      ram: "32GB",
      pricePerSecond: 0.00009778
    }]
  }, {
    name: "performance-6x",
    cpu: 6,
    cpuType: "performance",
    tiers: [{
      ram: "12GB",
      pricePerSecond: 0.00007452
    }, {
      ram: "24GB",
      pricePerSecond: 0.00009857
    }, {
      ram: "48GB",
      pricePerSecond: 0.00014667
    }]
  }, {
    name: "performance-8x",
    cpu: 8,
    cpuType: "performance",
    tiers: [{
      ram: "16GB",
      pricePerSecond: 0.00009936
    }, {
      ram: "32GB",
      pricePerSecond: 0.00013143
    }, {
      ram: "64GB",
      pricePerSecond: 0.00019556
    }]
  }, {
    name: "performance-10x",
    cpu: 10,
    cpuType: "performance",
    tiers: [{
      ram: "20GB",
      pricePerSecond: 0.0001242
    }, {
      ram: "40GB",
      pricePerSecond: 0.00016428
    }, {
      ram: "80GB",
      pricePerSecond: 0.00024445
    }]
  }, {
    name: "performance-12x",
    cpu: 12,
    cpuType: "performance",
    tiers: [{
      ram: "24GB",
      pricePerSecond: 0.00014904
    }, {
      ram: "48GB",
      pricePerSecond: 0.00019714
    }, {
      ram: "96GB",
      pricePerSecond: 0.00029334
    }]
  }, {
    name: "performance-14x",
    cpu: 14,
    cpuType: "performance",
    tiers: [{
      ram: "28GB",
      pricePerSecond: 0.00017388
    }, {
      ram: "56GB",
      pricePerSecond: 0.00023
    }, {
      ram: "112GB",
      pricePerSecond: 0.00034224
    }]
  }, {
    name: "performance-16x",
    cpu: 16,
    cpuType: "performance",
    tiers: [{
      ram: "32GB",
      pricePerSecond: 0.00019872
    }, {
      ram: "64GB",
      pricePerSecond: 0.00026286
    }, {
      ram: "128GB",
      pricePerSecond: 0.00039113
    }]
  }];
  const [selected, setSelected] = useState(regions[0].code);
  const region = regions.find(r => r.code === selected) ?? regions[0];
  const SECONDS_PER_HOUR = 3600;
  const SECONDS_PER_MONTH = 2592000;
  const BASELINE_RAM_PRICE_PER_30_DAYS = 5;
  const monthFormatter = new Intl.NumberFormat("en-US", {
    style: "currency",
    currency: "USD",
    minimumFractionDigits: 0,
    maximumFractionDigits: 2
  });
  const formatPerSecond = value => `$${value.toFixed(8)}`;
  const formatPerHour = value => `$${value.toFixed(4)}`;
  const formatPerMonth = value => monthFormatter.format(value);
  return <>
      <p>
        <label htmlFor="region-select">Region: </label>
        <select id="region-select" value={selected} onChange={e => setSelected(e.target.value)} className="ml-2 rounded-md border border-gray-300 dark:border-gray-700 text-gray-900 dark:text-gray-100 px-3 py-1.5 shadow-sm focus:border-indigo-300 focus:outline-none focus:ring focus:ring-indigo-200 focus:ring-opacity-50">
          {regions.map(({code, city, country}) => <option key={code} value={code}>
              {city}
              {country ? `, ${country}` : ""} ({code})
            </option>)}
        </select>
      </p>

      <p>
        The price of a running <a href="/machines">Fly Machine</a> VM is the price of a named CPU/RAM preset, plus about{" "}
        {formatPerMonth(BASELINE_RAM_PRICE_PER_30_DAYS * region.markup)} per 30 days per GB of additional RAM.
      </p>

      <p>Here’s the pricing for named presets and a few standard additional RAM configurations:</p>

      <table className="table-stripe">
        <thead>
          <tr>
            <th>Preset</th>
            <th>CPU(s)</th>
            <th>RAM</th>
            <th>Price/second</th>
            <th>Price/hour</th>
            <th>Price/month</th>
          </tr>
        </thead>
        <tbody>
          {presets.map(preset => preset.tiers.map((tier, tierIndex) => {
    const perSecond = tier.pricePerSecond * region.markup;
    return <tr key={`${preset.name}-${tier.ram}`}>
                  {tierIndex === 0 && <>
                      <td rowSpan={preset.tiers.length}>{preset.name}</td>
                      <td rowSpan={preset.tiers.length}>
                        {preset.cpu} {preset.cpuType}
                      </td>
                    </>}
                  <td>{tier.ram}</td>
                  <td>{formatPerSecond(perSecond)}</td>
                  <td>{formatPerHour(perSecond * SECONDS_PER_HOUR)}</td>
                  <td>{formatPerMonth(perSecond * SECONDS_PER_MONTH)}</td>
                </tr>;
  }))}
        </tbody>
      </table>
    </>;
};

<img src="https://mintcdn.com/fly-io/izaS1l2UMuz6sm1H/images/pricing.png?fit=max&auto=format&n=izaS1l2UMuz6sm1H&q=85&s=9b865b44607c896bfcd26ee3316e766b" alt="Illustration by Annie Ruygt of Frankie the hot air balloon demonstrating a pricing chart on a whiteboard" width="2457" height="1323" data-path="images/pricing.png" />

## How it works

Fly.io services are billed per organization, with [Linked Organizations](/about/billing#unified-billing) reporting resource usage to their parent Billing Organization. Plans get complicated, so we just charge based on usage. Pick and choose which pieces you need for your application; that's all you'll see on your invoice.

Organizations are administrative entities on Fly.io that let you add members, share app development environments, and manage billing. [Billing](/about/billing) is based on the resources provisioned for your apps, pro-rated for the time they are provisioned.

Organizations may be subject to automated scaling limits to prevent abuse or to help with capacity planning. Email the address in the error message if you run into such a limit and it's getting in your way.

All organizations (except for Linked Organizations) require a [credit card](/about/billing#payment-options) on file.

## Compute

We charge for started and stopped Machines differently. For more details about how costs are calculated, see [Machine billing](/about/billing#machine-billing). To understand the difference between `performance` and `shared` CPU types in Machines, see [CPU performance](/machines/cpu-performance).

### Started Fly Machines

<RegionPricingSelector />

### Stopped Fly Machines

For stopped Machines we charge only for the root file system (rootfs) needed for each Machine. Each 1GB of rootfs for a Machine stopped for 30 days is \$0.15. The amount of rootfs needed is defined by your OCI image generated on your app plus a few [containerd](https://containerd.io/) tweaks on the underlying file system.

### Machine reservation blocks

You'll get a 40% discount when you reserve a block of compute time, either for `performance` Machines or `shared` Machines, in a specific region.
Reservations apply to any number of Machines of the specified CPU class, in the specified region, in any of your organisation's apps.

The available reservation sizes are:

**Performance Machines**

* \$144/year for \$20/month of usage
* \$1,440/year for \$200/month of usage
* \$14,400/year for \$2,000/month of usage

**Shared Machines**

* \$36/year for \$5/month of usage
* \$360/year for \$50/month of usage
* \$3,600/year for \$500/month of usage

You pay the "per year" amount upfront, and each month receive a credit worth the "per month" amount. The credit does not rollover; it's only valid for the month in which it's granted. The credit applies only to CPU and additional RAM charges.

There's no limit on the number or combinations of blocks that can be purchased. Reservations are backdated to the first day of the month in which they're purchased.

For example, if you purchase a \$36/year `shared` Machines block in `cdg`, you'll pay \$36 upfront and receive \$5/month of credits applicable to `shared` Machines in `cdg` for 12 months, starting with the month of the purchase. Amortised over 12 months, the \$36 upfront cost is \$3/month, which is a 40% discount on the \$5/month of credits you receive.

You can set up reservations via self-service in the billing section of your Fly.io [dashboard](https://fly.io/dashboard). They apply to usage starting on the 1st, so setting up reservations any time in the month will give you the credits the entire month.

## Managed Postgres

The price of running Fly.io Managed Postgres depends on your selected Managed Postgres Plan and the amount of storage your Postgres cluster has.

Current pricing for Managed Postgres plans and storage is available [here](/mpg#pricing).

<Warning>
  **Important:** Managed Postgres lives outside your apps. Deleting an app won’t delete its database. Have a look in your Dashboard when you're cleaning up. A quick check can save you a surprise charge later.
</Warning>

## Persistent Storage Volumes

### Volumes

[Fly Volumes](/volumes) are local persistent storage for Machines.

* \$0.15/GB per month of provisioned capacity

[Volume billing](/about/billing#volume-billing) is pro-rated to the hour.

You'll be charged for volumes that you create, whether they are attached to a Machine or not, including when an attached Machine is stopped.

### Volume Snapshots

<Info>
  **New charges**

  <p className="mt-2">
    Starting January 1st 2026, we're introducing charges for [volume snapshot](/volumes/snapshots) storage. You'll see the first charges on the invoice issued at the start of February 2026.
  </p>

  <p className="mt-2">
    If you're an existing customer, you can check your usage in the **Billing** section of the [dashboard](https://fly.io/dashboard/personal/billing) on your Upcoming Invoice and in the Cost Explorer.
  </p>
</Info>

* \$0.08/GB per month
* First 10GB free each month

[Volume Snapshot billing](/about/billing#volume-snapshot-billing) is pro-rated to the hour.

Automatic daily snapshots with 5 days retention are enabled by default on new volumes. This can be [adjusted](/volumes/snapshots#set-or-change-the-snapshot-retention-period) or [disabled](/volumes/snapshots#disable-automatic-daily-snapshots).

Usage is calculated based on the total stored size of the snapshots, not the provisioned volume size. You're only charged for the actual data stored - if you've written 1GB to a 10GB volume, you'll be charged for around 1GB of snapshot storage.

Snapshots for each volume are stored incrementally, so you'll only be charged for data that has changed since the previously stored snapshot.

## Network prices

### Anycast IP addresses

Each application receives a [shared IPv4 address](/networking/services#shared-ipv4) and unlimited [Anycast IPv6](/networking/services#ipv6) addresses for global load balancing.

Dedicated IPv4 addresses are \$2/mo.

### Managed SSL certificates

We use Let's Encrypt to issue certificates, and donate half of our SSL fees to them at the end of each calendar year.

* Single hostname certificates: \$0.10/mo
* Wildcard certificates: \$1/mo

Every organization's first 10 single hostname certificates are free.

### Data transfer pricing

We bill for data leaving your app destined for the public internet or for apps or Machines in other regions, including:

* Data egress to the Internet, from Machine to edge server to Internet
* Data transfer over private network between regions, from Machine to edge server and edge server to Machine
* Data transfer to some extensions like Upstash Redis

The following types of traffic are free:

* All inbound data transfer
* Data transfer between apps or Machines in the same region (for organizations using granular data transfer rates)
* Data transfer from apps without an assigned IP address (for organizations not using granular data transfer rates)

Fly.io pricing is per region group for outbound data transfer. You'll see a more detailed breakdown of cost per region and per traffic type on your monthly invoice.

<Info>
  **Important:** Organizations created after July 18 2024 are automatically opted-in to use the granular data transfer rates and are billed at a different rate for private network data transfer between regions, per the following table. Organizations not using granular data transfer rates are billed for all data transfer (excluding that listed as free above) at the "Egress to public internet" rate.
</Info>

| Region groups                                      | Egress to public internet cost | Private network cross-region transfer cost |
| -------------------------------------------------- | ------------------------------ | ------------------------------------------ |
| - North America<br />- Europe                      | \$0.02 per GB                  | \$0.006 per GB                             |
| - Asia Pacific<br />- Oceania<br />- South America | \$0.04 per GB                  | \$0.015 per GB                             |
| - Africa<br />- India                              | \$0.12 per GB                  | \$0.050 per GB                             |

To opt-in to granular bandwidth pricing, go to the [**Organizations** page](https://fly.io/organizations) in the dashboard, click the organization name to change, then click **Switch to granular bandwidth pricing**. You won't be able to return to using the non-granular data transfer rates once you opt in.

### Static Egress IPs for Machines

Static egress IPs for Machines provide dedicated outbound IP addresses for your Machines. When you allocate a static egress IP, you'll get both an IPv4 and IPv6 address for this single price.

* \$0.005 per hour (\~\$3.60/month)
* Machines do not have a static IP by default

## Support

[Community support](https://community.fly.io/) is included for all customers, regardless of usage level.
You can get access to a support plan by purchasing a Standard (\$29/month), Premium (\$199/month), or Enterprise (starting at \$2500/month) package in the **Support** section of your dashboard. For more about Support, see [Support at Fly.io](/about/support).

## Fly Kubernetes

[Fly Kubernetes](/kubernetes) (FKS) is a managed Kubernetes service that runs on Fly.io.

* \$75/month per cluster
* Plus the cost of [compute](#compute) and [Fly volumes](#persistent-storage-volumes) that you create

## Extensions

Fly.io offers managed services operated by third parties, such as [Tigris Object Storage](/tigris) and [Upstash Redis](/upstash/redis).

When you provision their services, you become their customer, and you pay their list prices via your monthly Fly.io bill. Charges are updated daily in your Fly.io dashboard.

You will not be billed separately for:

* Machines running the services, which are hosted in the provider's account
* IP addresses associated with the service

You **will** be billed separately for data transfer to these external third-party services, including Tigris Object Storage. See our [data transfer pricing](#data-transfer-pricing) for details.

## Unsupported Products

### Unmanaged Fly Postgres (Unsupported)

[Fly Postgres](/postgres) is a PostgreSQL database that you create and then manage yourself. Fly Postgres clusters are Fly Apps that consist of Machines, volumes, and any configured extra memory.

The [Machine price](#compute) and [volume price](#persistent-storage-volumes) for Fly Postgres are the same as any other Machine and volume you'd run on Fly.io. Assuming the Machines are running all the time, the cost for the preset configurations is about \$2/month for a single node cluster for dev projects and from about \$82 to \$164/month for a three-node production cluster. You don't need to keep the preset configurations, you can [scale your Fly Postgres Machines](/postgres/managing/scaling) to suit your workload at any time.

## Legacy plans

On a legacy plan and wondering what that includes? Read more about [Discontinued Plans](/about/discontinued-plans).

## **Related reading**

* [Billing for Fly.io](/about/billing) How invoicing, payment methods, and usage tracking work.
* [Cost Management](/about/cost-management) Best practices for estimating, monitoring, and controlling your spend.
* [Free Trial](/about/free-trial) What the Fly.io Free trial gives you and when billing begins.
* [Organization Roles & Permissions](/security/org-roles-permissions) How org structure, permissions and billing interplay.
* [Optimize Compute Costs: Fine‑tune your app](/apps/fine-tune-apps) Tuning machine size, memory/CPU, and stop‑/start behavior to reduce waste.
