fshy

fshy / CI runners / Coding subscriptions / Compute / Egress and tunnels / Storage

GitHub

github.com · CI runners, Coding subscriptions, Compute, Egress and tunnels, Storage · 39 records · JSON

GitHub Actions on a public repository CI runners

★ qualifiesemailno cardDper-object-cap

docs.github.com/en/billing/concepts/product-billing/github-a · CI runner · ci-cd-runners/github-actions-public · JSON · compare

Free tierstandard GitHub-hosted runners are free with no minute cap on a public repository; 20 concurrent jobs on Free; 6 hours per job
unit unlimited; metered on wall-clock
Pricenone stated
Per-object cap6 hours of execution per job on a GitHub-hosted runner; 35 days per workflow run including waiting and approval; 256 jobs per matrix per run; a 500 KB workflow file
Retentionartifacts and logs are kept 90 days by default and configurable per repository; the runner is destroyed at the end of the job (90 days)
Egressno egress charge on the runner; artifact storage is capped at 500 MB on Free and shared with GitHub Packages
free_allowance: 500 MB artifact and package storage
Identityemail a GitHub account; no card for a public repository
Limits
  • per-object-cap 6 hours per job; 35 days per workflow run; 256 jobs per matrix; a 500 KB workflow file source
  • request-rate 20 concurrent jobs on GitHub Free (Pro 40, Team 60, Enterprise 500); 5 concurrent macOS source
  • retention-clamped cache entries not accessed in over 7 days are removed source
  • retention-clamped artifacts and logs are kept 90 days by default and the window is configurable per repository source
  • per-object-cap 10 GB of cache per repository, evicted oldest-first beyond it source
100 workflow runs may queue per concurrency group; cache uploads are 200 a minute and downloads 1,500 a minute per repository; in a public repository a scheduled workflow is automatically disabled when the repository has no activity for 60 days (docs.github.com/en/actions/how-tos/manage-workflow-runs/disable-and-enable-workflows)
Bindingper-object-cap
Interfacegit, cli a workflow YAML in .github/workflows, triggered by a push, a schedule, a pull request or a repository dispatch; the runner is a shell with a network
Toolingthe runner image is Ubuntu 24.04 with 4 vCPU, 16 GB RAM and 14 GB SSD; any package manager, any compiler, docker buildx
Composes withfree compute whose output has to leave immediately: artifacts are 500 MB, GHCR is 500 MB, and the cache evicts at 7 days. R2's 10 GB free tier is the join that makes the chain storable
Reliabilitythe repository, its workflows and its logs are public, which is a technical property of the free tier and not a policy question
NotesUnlimited minutes is true and it is not the number that decides anything. The capacity is the 20-slot concurrency: 20 slots x 24 h is 480 runner-hours a day, which is the flow ceiling, and the 120 runner-hours the slots hold at one instant is a stock and not a rate. Minutes are not scarce; a single job that runs longer than six hours is impossible. A 256-job matrix at the six-hour ceiling is 1,536 runner-hours, or thirteen waves of 20 and 78 hours of wall clock.
Evidence rungdocumented the billing and limits pages were read today and state both the unlimited public minutes and each cap.
Checked2026-10-23 (live); stale on 2026-11-22
Parsed numbers
  • $.limits[0].value limit:per-object-cap 6.0 hours
  • $.limits[4].value limit:per-object-cap 10.0 GB
Evidence (5)
datesourcewhat it proved
2026-10-22docs.github.com/en/billing/concepts/product-billing/github-a'GitHub Actions usage is free for self-hosted runners and for public repositories that use standard GitHub-hosted runners'; 'Larger runners are always charged for, even when used by public repositories'
2026-10-22docs.github.com/en/actions/reference/limitsJob execution time 6 hours on GitHub-hosted and 5 days self-hosted; 35 days per workflow run; 256 jobs per matrix per run; 500 KB workflow file; 20 concurrent jobs on Free and 5 macOS; 500 MB artifact storage, 2,000 minutes and 10 GB cache per repository on Free
2026-10-22docs.github.com/en/actions/reference/runners/github-hosted-rubuntu-latest is 4 vCPU, 16 GB RAM, 14 GB SSD; ubuntu-slim is 1 vCPU and 5 GB
2026-10-22docs.github.com/en/actions/reference/workflows-and-actions/d10 GB per repository by default; any cache entry not accessed in over 7 days is removed; beyond the limit the oldest entries are evicted
2026-10-22docs.github.com/en/actions/how-tos/manage-workflow-runs/remo'By default, GitHub stores build logs and artifacts for 90 days'

GitHub Copilot Coding subscriptions

★ qualifiesemailno cardDrequest-rate

github.com/features/copilot/plans · coding subscription · coding-subs/github-copilot · JSON · compare

Free tierFree: USD 0, 2,000 completions per month, access to Haiku 4.5 and GPT-5 mini, Copilot CLI, community support, no credit card required
unit requests; metered on request-count; 2,000 is completions, not agent turns or tokens. Paid tiers meter GitHub AI Credits.
Pricenone stated
Per-object capnot applicable: a subscription meters usage, not objects
Retentionnot applicable
Egressnot applicable: the vendor serves the inference
Identityemail a GitHub account; the page states 'No credit card required' for Free
Limits
  • request-rate 2,000 completions per month on Free source
Bindingrequest-rate
Interfacecli, rest Copilot CLI, plus agent mode and code review inside the editor and on github.com
Toolinggh CLI extension; agent mode in VS Code, JetBrains, Neovim, Xcode, Eclipse
Composes witha $0 agent surface for a repository task; the Copilot CLI is the part a script can drive
Reliabilityno reliability event recorded
NotesFree is the only tier here whose monthly allowance is stated in a unit that does not inflate: completions. The paid tiers moved to GitHub AI Credits, so their allowance is denominated in money rather than in requests.
Evidence rungdocumented prices and the Free allowance are quoted from the vendor page read today. The per-credit consumption rate of agent mode is not published here. verified_at is the instant its evidence URLs were fetched on 2026-10-22, read from the fetch log, not typed.
Checked2026-10-23 (live); stale on 2026-11-22
Evidence (1)
datesourcewhat it proved
2026-10-22github.com/features/copilot/plansFree is USD 0 with 2,000 completions a month and no card; Pro USD 10, Pro+ USD 39, Max USD 100; monthly credit allowances USD 15, USD 70, USD 200
Unknown or withheld values (2)
  • $.reliability_note none-observed
  • $.retention.stated not-applicable

GitHub Codespaces Compute

★ qualifiesemailno cardDvolume-quota

docs.github.com/en/billing/concepts/product-billing/github-c · dev environment · compute/github-codespaces · JSON · compare

Free tierQuoted: 'All GitHub personal accounts include a quota of free compute time and storage for GitHub Codespaces.' The table row is '| GitHub Free for personal accounts | 15 GB-month | 120 hrs |'. The 120 is a core-hour: the compute column is multiplied by the machine's core count, so 120 core-hours is 60 wall-clock hours on the 2-core default. Quoted: 'The compute cost is proportional to the number of processor cores in the machine type you choose for your codespace, as shown in the following table. For example, the compute cost of using a codespace for an hour on a 16-core machine is eight times greater than a 2-core machine.'
unit hours; metered on wall-clock; The vendor's own header for the column is 'Compute time per month' and the value is 120 hrs, but the included-usage multiplier makes it core-hours. 120 core-hours / 2 cores = 60 hours of the default machine.
Pricenone stated
Per-object capnot applicable: the unit is a session, not an object
RetentionQuoted: 'Inactive codespaces are automatically deleted. You can choose how long your stopped codespaces are retained, up to a maximum of 30 days.' and 'By default, GitHub Codespaces are automatically deleted after they have been stopped and have remained inactive for 30 days.' and 'Automatic deletion happens irrespective of whether a codespace contains unpushed changes.' The disk persists across a stop and start until that clock runs out. (30 days)
Egressno egress allowance or per-byte price published on any page read; the billing page prices compute per core-hour and storage per GB-month and says nothing about transfer
Identityemail a GitHub account and nothing else: no card, no phone and no identity document to create a codespace. No hold exists because no card is taken. The gate is at the quota, not at signup: 'If your account does not have a valid payment method on file, usage is blocked once you use up your quota.' Debit acceptance is not stated on any page read.
Limits
  • volume-quota 120 core-hours of compute a month on GitHub Free, which is 60 wall-clock hours on the 2-core default machine and 30 hours on a 4-core source
  • volume-quota 15 GB-month of storage a month on GitHub Free; beyond it, USD 0.07 per GB-month source
  • retention-clamped Quoted: 'A codespace will stop running after a period of inactivity. By default this period is 30 minutes' and 'Regardless of your idle timeout setting, a codespace has a maximum lifetime of 12 hours.' source
  • retention-clamped Quoted: 'By default, GitHub Codespaces are automatically deleted after they have been stopped and have remained inactive for 30 days.' Automatic deletion happens irrespective of unpushed changes. source
  • write-gated Quoted: 'If your account does not have a valid payment method on file, usage is blocked once you use up your quota.' A card is the price of continuity past the quota, not of entry. source
  • write-gated The terms scope the machine away from serving. Quoted: 'Any activity that places a burden on our servers, where that burden is disproportionate to the benefits provided to users (for example, don't use Codespaces as a content delivery network, as part of a serverless application, or to host any kind of production-facing application)'. source
120 core-hours is the number that binds. At the 2-core default it is 60 hours a month, which is 2 hours a day; at 4 cores it is 30 hours a month, which is 1 hour a day. The 12-hour maximum lifetime per session and the 30-minute default idle stop are what keep the quota from being burned in one sitting.
Bindingvolume-quota 120 core-hours is 60 hours on the smallest machine, so at 24/7 the month is gone in two and a half days. The quota is what fails, not identity and not the clock.
Interfacerest, cli gh codespace ssh and the VS Code or browser client; a devcontainer defines the image
Toolinggh CLI, the Codespaces API, devcontainer.json, prebuilds
Composes withthe cheapest path to a real Linux dev machine with a shell that a GitHub identity already opens
Reliabilitya codespace stops on an account-level idle timeout (30 minutes by default, settable between 5 and 240 minutes) and is deleted 30 days after it is stopped, irrespective of unpushed changes
NotesThe core-hour unit is the trap: 120 reads like hours and is not, because it is spent per core, so the wall-clock allowance halves at 4 cores and quarters at 8. The shape is quoted from the overview page as the bottom of the machine-type range: 2 cores, 8 GB RAM, 32 GB storage, and the vendor writes decimal GB, kept unconverted. Identity is email, not card: the gate is at the quota, so a reader who plans one month never meets a card and a reader who plans a second month does. Two things this record does not establish. First, the egress term: no page read publishes a quota, a shaping tier or a price for transfer, so the field is a dash and not 'unlimited'.
Evidence rungdocumented the quota, the storage allowance, the per-core multiplier and the payment-method block are quoted from GitHub's billing page read today; the idle timeout, the 12-hour lifetime and the 30-day retention are quoted from GitHub's own how-to pages read today; the 2-core shape is quoted from the Codespaces overview. The egress term is not published anywhere read and is recorded as absent.
Checked2026-10-25 (live); stale on 2026-11-24
Parsed numbers
  • $.extras.m10h_usd price USD0.0 / month
  • $.extras.m24h_usd price USD0.0 / month
  • $.limits[0].value limit:volume-quota 30.0 hours
  • $.limits[1].value limit:volume-quota 15.0 GB
  • $.limits[2].value limit:retention-clamped 30.0 minutes
Evidence (24)
datesourcewhat it proved
2026-10-22docs.github.com/en/billing/concepts/product-billing/github-cGitHub Free for personal accounts: 15 GB-month storage and 120 hours compute a month
2026-10-22docs.github.com/en/billing/concepts/product-billing/github-cif the account has no valid payment method, usage is blocked once the quota is used
2026-10-22docs.github.com/en/billing/concepts/product-billing/github-cthe compute cost is proportional to the core count, so a 16-core machine costs eight times a 2-core one
2026-10-22docs.github.com/en/codespaces/setting-your-user-preferences/quoted: deleted after 30 days stopped and inactive; maximum retention is 30 days; 'Automatic deletion happens irrespective of whether a codespace contains unpushed changes'
2026-10-22docs.github.com/en/codespaces/troubleshooting/troubleshootinquoted: compute counted in core hours as active time multiplied by the machine's core multiplier; default idle timeout stops a codespace after 30 minutes
2026-10-22docs.github.com/en/codespaces/troubleshooting/troubleshootinquoted: only the creator, an org owner, or the retention period can delete a codespace
2026-10-22docs.github.com/en/billing/concepts/product-billing/github-cthe GitHub Free for personal accounts row is 15 GB-month of storage and 120 hrs of compute, and 'the compute cost ... is proportional to the number of processor cores', quoted
2026-10-22docs.github.com/en/codespaces/overviewmachine types run 'from 2 cores, 8 GB RAM, and 32 GB storage, up to 32 cores, 128 GB RAM, and 128 GB storage', quoted
2026-10-22docs.github.com/en/billing/concepts/product-billing/github-cthe page's own worked example: 'the compute cost of using a codespace for an hour on a 16-core machine is eight times greater than a 2-core machine', quoted
2026-10-24docs.github.com/en/codespaces/overviewquoted: 'from 2 cores, 8 GB RAM, and 32 GB storage, up to 32 cores, 128 GB RAM, and 128 GB storage'; and 'You have limited access to the outer Linux virtual machine host.'
2026-10-24github.com/features/codespacesquoted: 'GitHub will provide users in the free plan 120 core hours or 60 hours of run time on a 2 core codespace, plus 15 GB of storage each month.'
2026-10-24docs.github.com/en/billing/concepts/product-billing/github-cquoted: 'If your account does not have a valid payment method on file, usage is blocked once you use up your quota.'
2026-10-24docs.github.com/en/codespaces/setting-your-user-preferences/quoted: 'A codespace will stop running after a period of inactivity. By default this period is 30 minutes'; and 'a codespace has a maximum lifetime of 12 hours'
2026-10-24docs.github.com/en/billing/concepts/product-billing/github-cquoted: '| GitHub Free for personal accounts | 15 GB-month | 120 hrs |'
2026-10-24docs.github.com/en/billing/concepts/product-billing/github-cquoted: '| Codespaces compute | 2 core | 1 hour | 2 | $0.18 |' — the rate that makes 120 core-hours 60 hours of 2 cores
2026-10-24docs.github.com/en/billing/concepts/product-billing/github-cquoted: 'All GitHub personal accounts include a quota of free compute time and storage for GitHub Codespaces.'
2026-10-24docs.github.com/en/billing/concepts/product-billing/github-cquoted: 'All GitHub personal accounts include a quota of free compute time and storage for GitHub Codespaces.' and the table row '| GitHub Free for personal accounts | 15 GB-month | 120 hrs |'
2026-10-24docs.github.com/en/billing/concepts/product-billing/github-cquoted: 'The compute cost is proportional to the number of processor cores in the machine type you choose for your codespace ... For example, the compute cost of using a codespace for an hour on a 16-core machine is eight times greater than a 2-core machine.' Rate table: '| Codespaces compute | 2 core | 1 hour | 2 | $0.18 |' and '| Codespaces storage | Storage | 1 GB-month | Not applicable | $0.07 |'
2026-10-24docs.github.com/en/codespaces/overviewquoted: 'Each codespace you create is hosted by GitHub in a Docker container, running on a virtual machine. You can choose from a selection of virtual machine types, from 2 cores, 8 GB RAM, and 32 GB storage, up to 32 cores, 128 GB RAM, and 128 GB storage.'
2026-10-24docs.github.com/en/codespaces/setting-your-user-preferences/quoted: 'A codespace will stop running after a period of inactivity. By default this period is 30 minutes' and 'Regardless of your idle timeout setting, a codespace has a maximum lifetime of 12 hours.' The settable range is 'between 5 minutes and 240 minutes (4 hours)'.
2026-10-24docs.github.com/en/codespaces/setting-your-user-preferences/quoted: 'Inactive codespaces are automatically deleted. You can choose how long your stopped codespaces are retained, up to a maximum of 30 days.' and 'By default, GitHub Codespaces are automatically deleted after they have been stopped and have remained inactive for 30 days.' and 'Automatic deletion happens irrespective of whether a codespace contains unpushed changes.'
2026-10-24docs.github.com/en/codespaces/developing-in-a-codespace/forwquoted: 'Port forwarding gives you access to TCP ports running within your codespace.' and 'share forwarded ports publicly' — a forwarded port gets a URL, and public visibility makes it reachable, which a standard Actions runner cannot offer.
2026-10-24docs.github.com/en/site-policy/github-terms/github-terms-forquoted: 'Any activity that places a burden on our servers, where that burden is disproportionate to the benefits provided to users (for example, don't use Codespaces as a content delivery network, as part of a serverless application, or to host any kind of production-facing application)'
2026-10-24docs.github.com/en/get-started/start-your-journey/creating-aquoted: 'To get started with GitHub.com, you need to have a personal account and a verified email address.'
More fields (22)
{
 "shape": {
  "vcpu": 2,
  "ram_gib": 8,
  "disk_gib": 32,
  "gpu_class": null,
  "gpu_count": null,
  "note": "the 2-core default, quoted as 'from 2 cores, 8 GB RAM, and 32 GB storage'. The vendor writes decimal GB; the numbers are kept unconverted, so 8 GB is about 7.5 GiB and 32 GB about 29.8 GiB."
 },
 "billing_model": "free",
 "granularity": {
  "min_billed_s": 60,
  "rounding_s": 60
 },
 "session_cap": {
  "wall_clock_min": 720,
  "idle_reap_s": 1800,
  "restart_required": false,
  "note": "12 hours maximum lifetime per session regardless of settings; stops after 30 minutes idle by default, settable between 5 and 240 minutes; deleted 30 days after being stopped. The disk survives a stop and start."
 },
 "keep_rate": {
  "value": 0.0,
  "basis": "compute stops when the codespace stops; storage keeps billing at USD 0.07 per GB-month past 15 GB-month",
  "source": "https://docs.github.com/en/billing/concepts/product-billing/github-codespaces"
 },
 "persistent_storage": {
  "included_gib": 15,
  "price_gib_month": "USD 0.07 per GB-month beyond the quota",
  "durability": "the codespace disk survives a stop and a start, and is destroyed when the codespace is deleted or 30 days after it was stopped",
  "survives_stop": true,
  "survives_destroy": false,
  "max_retention": "30 days after the codespace is stopped, by default"
 },
 "network_out": {
  "allow_outbound": true,
  "allow_inbound_listen": true,
  "ports": "forwarded ports get a URL; a port can be made public, so this is the one GitHub free machine that can serve a request",
  "static_ip": false,
  "ipv6": false,
  "per_session_bytes": null
 },
 "free_tier_kind": "free-forever-with-quota",
 "m10h_usd": 0.0,
 "m24h_usd": 0.0,
 "price_arithmetic": "120 core-hours / 2 cores = 60 wall-clock hours a month at USD 0.00 inside the quota. 10 h a day x 30 = 300 h needs 600 core-hours, five times the quota. 24/7 x 30 = 730 h needs 1,460 core-hours, twelve times the quota. Past the quota the rate is USD 0.18 per core-hour, so 600 core-hours would be USD 108.00 and 1,460 core-hours USD 262.80, both of which need a payment method on file.",
 "census_rows": [
  "github-codespaces"
 ],
 "price_basis": "10 h/day x 30 = 300 h; 24/7 x 30 = 730 h; core-hours, not wall-clock hours",
 "burst_x": 1.0,
 "wave2": {
  "merged_agents": [
   "a08-chaining",
   "b09-inverse-search"
  ],
  "merged_evidence_rows": 7,
  "merged_note": "Batch 1 recorded Codespaces correctly as 120 core-hours a month on GitHub Free, which is 60 wall-clock hours on the default 2-core machine. GitHub's documentation adds a second clock that destroys the state rather than the allowance, quoted: 'Inactive codespaces are automatically deleted. You can choose how long your stopped codespaces are retained, up to a maximum of 30 days. By default, GitHub Codespaces are automatically deleted after they have been stopped and have remained inactive for 30 days.' And explicitly: 'Automatic deletion happens irrespective of whether a codespace contains unpus"
 },
 "shape_note": "vendor states 32 GB (decimal) storage; kept as stated. RAM 8 GB is the vendor's own figure.",
 "term": "none",
 "unattended": true,
 "unattended_mechanism": "a codespace keeps running while the browser is closed, subject to the account's idle-stop timeout; a background process survives until the codespace stops",
 "units": "RAM and disk are the vendor's decimal GB, kept unconverted in ram_gib and disk_gib so 8 GB reads as 8 and 32 GB reads as 32. The true values are about 7.5 GiB and 29.8 GiB.",
 "concurrency": {
  "jobs_at_once": null,
  "note": "not published on any page read: the number of codespaces one account may run at once is not stated. What is stated is that the quota is spent per core-hour, so running two 2-core codespaces spends it twice as fast."
 },
 "wave3": {
  "verified": [
   "120 core-hours and 15 GB-month on GitHub Free",
   "the 2-core / 8 GB / 32 GB bottom shape",
   "30-minute default idle stop, settable 5 to 240 minutes",
   "12-hour maximum lifetime per session",
   "30-day deletion after a stop, irrespective of unpushed changes",
   "no card at signup; a card only past the quota"
  ],
  "new": "the Additional Product Terms add a fifth bullet to the Codespaces list that the corpus did not carry: the machine may not be used 'to host any kind of production-facing application'",
  "open": "the egress term, and whether a forwarded public port survives an idle stop"
 }
}

GitHub Releases Egress and tunnels

★ qualifiesemailno cardMper-object-cap

docs.github.com/en/repositories/releasing-projects-on-github · static file host (CDN-backed) · egress/github-releases-cdn · JSON · compare

Free tierno total size and no bandwidth limit; under 2 GiB per file; 1,000 assets per release
unit unlimited; metered on downloaded-bytes
Pricenone stated
Per-object capunder 2 GiB per asset (2147483648 bytes)
Retentionan asset lives until the release is deleted
Egressno bandwidth limit stated; ranged GETs served from release-assets.githubusercontent.com with a fresh signature per request
Identityemail a GitHub account
Limits
  • per-object-cap under 2 GiB per asset source
  • per-object-cap 1,000 assets per release source
Bindingper-object-cap 2 GiB per asset sets the shard size; the volume itself is not metered.
Interfacerest, cli https://github.com/OWNER/REPO/releases/download/TAG/NAME, redirecting to a signed release-assets URL
Toolinggh release, curl
Composes withthe bulk egress lane that needs no domain and no card: the 2 GiB per-asset cap sets the shard size and the volume is not metered, so it composes with a manifest and a ranged fetcher.
Reliabilitythe download URL redirects to a signed release-assets host; the signature is per request
Notes14.11 MiB/s at 4 connections is 1.16 TiB/day, which clears the client's serving floor on one account. A control download from proof.ovh.net on the same machine at the same time reached 29.5 MiB/s, so this is not the machine's ceiling.
Evidence rungmeasured
Checked2026-10-23 (live); stale on 2026-12-22
Parsed numbers
  • $.limits[0].value limit:per-object-cap 2.0 GiB
Evidence (3)
datesourcewhat it proved
2026-10-22docs.github.com/en/repositories/releasing-projects-on-github'Up to 1000 release assets may be associated with a single release. Each file included in a release must be under 2 GiB. There is no limit on the total size of a release, nor bandwidth usage'
2026-10-22probe:https://release-assets.githubusercontent.com/github-production-release-asset/206 with Content-Range bytes 0-1023/40227721 and Accept-Ranges: bytes on a freshly resolved URL
2026-10-22probe:https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd641 connection: 40,227,721 bytes in 5.71 s = 6.72 MiB/s. 4 connections with a minted URL each: 40,227,721 bytes in 2.72 s = 14.11 MiB/s
More fields (3)
{
 "stale_after_days": 180,
 "bytes_transit": "yes",
 "transit_note": "the asset is served from release-assets.githubusercontent.com"
}

GitHub Releases (release assets) Storage

★ qualifiesinstitutionno cardDper-object-cap

github.com · paas · storage/github-releases · JSON · compare

Free tierNo total quota. Docs verbatim: 'Up to 1000 release assets may be associated with a single release. Each file included in a release must be under 2 GiB. There is no limit on the total size of a release, nor bandwidth usage.' Per-file ceiling is the Git LFS max for the plan: GitHub Free 2 GB, Pro 2 GB, Team 4 GB, Enterprise Cloud 5 GB.
unit GiB; metered on unstated
Pricenone stated
Per-object cap2 GiB per file (2147483648 bytes)
RetentionThis is the ONLY cap found in the entire CI/CD field that is not a quota. No expiry: releases persist until deleted
EgressFree and unmetered. Docs: 'We don't limit the total size of the binary files in the release or the bandwidth used to deliver them.' Served 302 -> release-assets.githubusercontent.com with no auth.
Identityinstitution derived from the record's prose, not from an identity field, and no signup was executed: 000 assets x 2 GiB = 1 PiB nominal; the real constraint is API/upload time, not space. Also chain with Cloudflare in front (cf-github-releases) for a clean CDN domain. 2 GiB per file
Limits
  • per-object-cap 2 GiB per file source
2 GiB per file (2 GB on Free, 4 GB Team, 5 GB Enterprise). 1000 assets per release. This is the ONLY cap found in the entire CI/CD field that is not a quota. No expiry: releases persist until deleted. Upload is authenticated; download is fully anonymous.
Bindingper-object-cap the per-object cap sets the shard size and therefore the object count; it bounds the total more tightly than any headline quota
Interfacerest, rclone, cli rest
ToolingREST POST /repos/{owner}/{repo}/releases + upload asset endpoint (Accept: application/octet-stream); gh CLI 'gh release upload'; rclone has no release backend, but plain curl/Python is a complete client. Proxy/wrapper repos: iBug/cf-github-releases (21 stars, Cloudflare Workers download site), kdrag0n/github-releases-proxy (8 stars), watermint/toolbox has a github-release-asset-upload command (87 stars).
Composes withUNBOUNDED: unlimited free repos (GitHub Free = unlimited public and unlimited private repos) x unlimited releases per repo x 1000 assets per release x <2 GiB per asset. 10 repos x 50 releases x 1000 assets x 2 GiB = 1 PiB nominal; the real constraint is API/upload time, not space. Also chain with Cloudflare in front (cf-github-releases) for a clean CDN domain.
ReliabilityVery stable; assets are immutable per release. Deleting a release or repo destroys the assets. Uploading >1000 assets to one release requires multiple releases — plan release granularity, not asset count.
NotesNo total quota. Docs verbatim: 'Up to 1000 release assets may be associated with a single release. Each file included in a release must be under 2 GiB. There is no limit on the total size of a release, nor bandwidth usage.' Per-file ceiling is the Git LFS max for the plan: GitHub Free 2 GB, Pro 2 GB, Team 4 GB, Enterprise Cloud 5 GB.
Evidence rungdocumented re-read from read-broker on 2026-10-22 (HTTP 200, 3494 bytes, sha256 422579c390d76156). The page states the number in the record; the claim is documented, not measured.
Checked2026-10-21 (inherited); stale on 2026-11-20
Parsed numbers
  • $.limits[0].value limit:per-object-cap 2.0 GiB
Evidence (5)
datesourcewhat it proved
2026-10-22docs.github.com/en/repositories/releasing-projects-on-github2 GiB per release asset and 1,000 assets per release, no bandwidth limit. Re-read https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases: HTTP 200, 3494 bytes, sha256 422579c390d76156. Quoted: ease assets](/en/rest/releases). ## Storage and bandwidth quotas Up to 1000 release assets may be associated with a single release. Each file included in a release must be under 2 GiB. There is no limit on the total size of a release, nor bandwidth usage.
2026-10-21docs.github.com/en/repositories/releasing-projects-on-github'There is no limit on the total size of a release, nor bandwidth usage'
2026-10-21docs.github.com/en/repositories/working-with-files/managing-'We don't limit the total size of the binary files in the release or the bandwidth used to deliver them', and LFS max-file table (Free 2 GB / Team 4 GB)
2026-10-21github.com/cli/cli/releases/download/v2.80.0/gh_2.80.0_linuxprobe: curl -L -r 0-1023 -> 302 to release-assets.githubusercontent.com, then 206 with 1024 bytes, no auth
2026-10-21withheldprobe: 6 parallel anonymous GETs of a release asset -> 302 302 302 302 302 302 (no throttling observed)
More fields (1)
{
 "verified_in_pass": [
  {
   "url": "https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases",
   "date": "2026-10-22",
   "via": "read-broker",
   "http_status": 200,
   "bytes": 3494,
   "sha256": "422579c390d76156b65ddf5b5f771de58638f91b1c5fc3c624b7153572cc32c1",
   "pattern_found": true,
   "what_changed": "no change: the page still states the claim",
   "capture": "captures\\github-releases-docs-github-com-en-repositories-releasing-projects-on-github-about-release.txt"
  }
 ]
}
Unknown or withheld values (4)
  • $.evidence[4].url private-url
  • $.free_tier.notes process
  • $.per_object_cap.notes not-extracted
  • $.retention.notes not-extracted

GitHub Container Registry CI runners

caveatemailno cardDper-object-cap

docs.github.com/en/billing/concepts/product-billing/github-p · container registry · ci-cd-runners/ghcr · JSON · compare

Free tierpublic packages free; private packages 500 MB of storage and 1 GB of transfer a month on GitHub Free, shared with GitHub Packages and Actions artifacts
unit MB; metered on stored-bytes
Pricenone stated
Per-object cap500 MB total private storage on Free, shared with Packages and Actions artifacts; no per-layer cap is published
Retentiona package persists until deleted; it shares the storage pool with artifacts, which expire at 90 days (90 days)
Egress1 GB of data transfer a month for private packages on Free; a download by Actions using GITHUB_TOKEN does not count
free_allowance: 1 GB per month for private packages
Identityemail a GitHub account; a personal access token with packages scope for a push
Limits
  • per-object-cap 500 MB of private storage shared with Packages and Actions artifacts source
  • request-rate 1 GB of private-package transfer a month source
'your total storage across Packages and Actions artifacts cannot exceed the included amount for your plan'; a download by Actions with GITHUB_TOKEN does not consume the transfer allowance
Bindingper-object-cap
Interfaceoci, rest the OCI distribution API at ghcr.io; docker login with a personal access token or GITHUB_TOKEN
Toolingdocker, podman, skopeo, oras, crane
Composes withthe artifact store for a GitHub Actions build, and the link that fails first: 500 MB is one modest image
Reliabilitya public package pulls anonymously, as Docker Hub does; a token request for a repository that does not exist returns 403 DENIED, which states nothing about private ones
Notes500 MB is smaller than one CUDA image. The shared pool with artifacts is the part that surprises: a build that keeps artifacts and pushes an image is spending one budget twice. The earlier 'no anonymous pull token' claim came from requesting library/hello-world, which is Docker Hub's namespace; three real public packages return 200 plus a fetchable manifest.
Evidence rungdocumented the storage and transfer figures are a first-party page, and they are the fields the verdict rests on. The anonymous token and manifest probes prove the read path, which does not raise a documented quota.
Checked2026-10-23 (live); stale on 2026-11-22
Parsed numbers
  • $.limits[0].value limit:per-object-cap 500.0 MB
  • $.limits[1].value limit:request-rate 1.0 GB
Evidence (5)
datesourcewhat it proved
2026-10-22probe:https://ghcr.io/token?scope=repository:catthehacker/ubuntu:pull&service=ghcr.io200 with 69 bytes of token JSON, {"token":"djE6Y2F0dGhlaGFja2VyL3VidW50dToxNzkyNjQxMjI2Njg2NzQ2MTE3"}, sha256 e26b35c1dc64bf51b6e02f5a20f7d7fbf436a944d445155e8fc313a42ec3a808; GHCR issues an anonymous pull token for a public package
2026-10-22probe:https://ghcr.io/v2/catthehacker/ubuntu/manifests/act-latest200 with 754 bytes, schemaVersion 2, mediaType application/vnd.oci.image.index.v1+json, sha256 62d572b92f9f32d3427b6d220ad1f9dca9c7b6ffad37d295425037dbff78abaf; the anonymous token fetches a manifest
2026-10-22probe:https://ghcr.io/token?scope=repository:library/hello-world:pull&service=ghcr.io403 with 86 bytes, DENIED. This is the negative control: library/ is Docker Hub's namespace and does not exist on ghcr.io, so the 403 answers the path, not the anonymity policy
2026-10-22probe:https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/alpine:pull200 with 5,489 bytes of token JSON, so Docker Hub does issue anonymous pull tokens and a public base image is free
2026-10-22docs.github.com/en/billing/concepts/product-billing/github-pstorage is shared with Actions artifacts and cannot exceed the plan amount; a 500 MB package in a private repository consumes 500 MB of storage and a download consumes 500 MB of transfer; an Actions download with GITHUB_TOKEN does not count

Corrections

GitHub Actions on a private repository CI runners

caveatemailno cardDrequest-rate

docs.github.com/en/billing/concepts/product-billing/github-a · CI runner · ci-cd-runners/github-actions-private · JSON · compare

Free tier2,000 minutes a month on GitHub Free, 3,000 on Pro and Team, 50,000 on Enterprise; 500 MB of artifact storage on Free
unit minutes; metered on wall-clock
PriceUSD 0.006 per Linux minute beyond the allowance
Per-object cap6 hours per job, the same as the public path; the difference is the monthly minute pool
Retentionartifacts kept 90 days by default; the runner is destroyed at the end of the job (90 days)
Egressno egress charge; artifact storage is 500 MB on Free and shared with GitHub Packages
free_allowance: 500 MB artifact and package storage
Identityemail a GitHub account; no card while inside the included amounts
Limits
  • request-rate 2,000 minutes a month on Free; minutes reset at the start of each billing cycle source
  • per-object-cap 6 hours per job; 500 MB of artifact storage shared with Packages on Free source
  • request-rate 20 concurrent jobs on Free source
Bindingrequest-rate
Interfacegit, cli the same workflow YAML; minutes are charged to the repository owner, not the trigger
Toolingthe same runner images as the public path
Composes withthe honest paid path: 2,000 minutes is 33 hours of one runner a month, and beyond it Linux billing is USD 0.006 a minute
Reliabilityno reliability event recorded
Notes2,000 minutes is 33 hours and the per-job cap still applies, so the two limits are independent and the smaller one wins. A single six-hour job already spends 18% of the month.
Evidence rungdocumented the billing page's plan table was read today.
Checked2026-10-23 (live); stale on 2026-11-22
Parsed numbers
  • $.limits[0].value limit:request-rate 2000.0 minutes / month
  • $.limits[1].value limit:per-object-cap 6.0 hours
  • $.price_per_tb_month price-per-tb USD0.006 TB / month
Evidence (2)
datesourcewhat it proved
2026-10-22docs.github.com/en/billing/concepts/product-billing/github-aFree: 500 MB artifact storage and 2,000 minutes; Pro 1 GB and 3,000; Team 2 GB and 3,000 with 75 GB custom images; Enterprise 50 GB and 50,000; Linux baseline USD 0.006 a minute and Windows USD 0.010
2026-10-22docs.github.com/en/billing/concepts/product-billing/github-a'Minutes usage is charged to the repository owner, not the person who triggered the workflow runs'
Unknown or withheld values (1)
  • $.reliability_note none-observed

GitHub Packages CI runners

caveatemailno cardDper-object-cap

docs.github.com/en/billing/concepts/product-billing/github-p · package registry · ci-cd-runners/github-packages · JSON · compare

Free tier500 MB of storage and 1 GB of transfer a month on GitHub Free, shared with Actions artifacts
unit MB; metered on stored-bytes
Pricenone stated
Per-object cap500 MB total across all package types and artifacts on Free
Retentionpackages persist until deleted; artifacts in the same pool expire at 90 days (90 days)
Egress1 GB of transfer a month on Free for private packages
free_allowance: 1 GB per month
Identityemail a GitHub account
Limits
  • per-object-cap 500 MB of storage shared with Actions artifacts and every other package type source
  • request-rate 1 GB of transfer a month for private packages source
Bindingper-object-cap
Interfacerest, cli npm, Maven, Gradle, NuGet, RubyGems and Container registries under one billing pool
Toolingthe native package manager for each ecosystem, plus the gh CLI
Composes withthe same pool as GHCR, so a repository that publishes both competes with itself
Reliabilityno reliability event recorded
NotesRecorded separately from GHCR because the pool is shared and the two are routinely counted as if they were two allowances.
Evidence rungdocumented the billing page was read today.
Checked2026-10-23 (live); stale on 2026-11-22
Parsed numbers
  • $.limits[0].value limit:per-object-cap 500.0 MB
  • $.limits[1].value limit:request-rate 1.0 GB
Evidence (1)
datesourcewhat it proved
2026-10-22docs.github.com/en/billing/concepts/product-billing/github-p'The storage amounts shown are shared with GitHub Actions artifacts'; a 500 MB package consumes 500 MB of storage and each download consumes 500 MB of transfer
Unknown or withheld values (1)
  • $.reliability_note none-observed

GitHub Actions Compute

caveatemailno cardDretention-clamped

docs.github.com/en/actions/reference/runners/github-hosted-r · CI runner · compute/github-actions · JSON · compare

Free tierOn a public repository: 'Use of the standard GitHub-hosted runners is free and unlimited on public repositories.' The billing page repeats it as 'The use of standard GitHub-hosted runners is free: In public repositories / For GitHub Pages / For Dependabot.' On a private repository the GitHub Free plan gets 2,000 minutes a month instead. No card, no phone and no identity document is required for either. The word 'unlimited' is GitHub's own, and it is qualified by the Additional Product Terms, not by the billing page: see limits.
unit unlimited; metered on wall-clock; The unlimited half is the whole finding. The private-repo 2,000 minutes is the smaller half of the same account and a different product: 2,000 minutes is 33.3 hours of wall clock.
Pricenone stated
Per-object capnot applicable
RetentionQuoted: 'When the job begins, GitHub automatically provisions a new VM for that job. All steps in the job execute on the VM ... When the job has finished, the VM is automatically decommissioned.' Nothing on the VM survives the job. Artifacts and caches are separate services: caches are evicted after 7 days without access, capped at 10 GB per repository on GitHub Free.
Egressnot published on any page read: no egress quota, shaping tier or per-byte price is stated for a standard GitHub-hosted runner.
Identityemail Quoted: 'To get started with GitHub.com, you need to have a personal account and a verified email address.' No phone: 'If you have been selected for mandatory 2FA, that does not mean you have to provide GitHub with your phone number.' No card and no hold, but this half is inferred rather than quoted, and the inference is stated: GitHub never writes 'no payment method is needed for public-repo Actions'. What the pages do say is that the card block is conditional on a quota being used up ('If your account does not have a valid payment method on file, usage is blocked once you use up your quota'), that public-repo standard runners are not billed at all, and that the always-charged products are the exception ('Larger runners are always charged for' and 'Usage of larger runners is always blocked until you set up a payment method'). A product that bills nothing has no quota to exhaust, so no card is demanded to use it. That is a documented absence, not a documented exemption, and it is one signup away from being settled.
Limits
  • retention-clamped Quoted: 'Each job in a workflow can run for up to 6 hours of execution time. If a job reaches this limit, the job is terminated and fails.' The row is headed 'All GitHub-hosted runners'. source
  • retention-clamped Quoted: 'If a workflow run reaches this limit, the workflow run is cancelled. This period includes execution duration, and time spent on waiting and approval.' The threshold is 35 days per workflow run, so the workflow cap is 35 days and the job cap is 6 hours; the job cap binds first. source
  • request-rate Quoted: 'The shortest interval you can run scheduled workflows is once every 5 minutes.' A schedule is also only honoured on the default branch. source
  • retention-clamped Quoted: 'In a public repository, scheduled workflows are automatically disabled when no repository activity has occurred in 60 days.' source
  • request-rate Job concurrency on the Free plan: 'Total concurrent jobs' 20, 'Maximum concurrent macOS jobs' 5, GPU 'Not applicable'. GitHub Support can raise it on a ticket. source
  • write-gated No inbound reachability and no persistent disk. Quoted: 'When the job has finished, the VM is automatically decommissioned.' IPs are dynamic: 'GitHub-hosted runners use dynamically assigned IP addresses from shared infrastructure.' source
  • write-gated The 'unlimited' is scoped by contract, not by meter. Quoted from the Additional Product Terms: 'If using GitHub-hosted runners, any other activity unrelated to the production, testing, deployment, or publication of the software project associated with the repository where GitHub Actions are used' should not be done. Also: 'Any activity that places a burden on our servers, where that burden is disproportionate to the benefits provided to users (for example, don't use Actions as a content delivery network or as part of a serverless application ...)'. source
The shape, the unlimited term, the 6-hour job cap, the 35-day workflow cap, the 5-minute cron floor, the 60-day schedule disablement and the 20-job concurrency are each quoted from a GitHub page read on 2026-10-24. The 6-hour cap is the one that binds: 6 hours x 20 concurrent jobs = 120 job-hours of wall clock, or 480 vCPU-hours, in any rolling window.
Bindingretention-clamped the 6-hour job cap, not money and not concurrency: the minutes are free and unlimited on a public repository, so what fails is continuity. A workload that must survive more than six hours needs its state outside the runner, and the terms scope the machine to work on the repository it belongs to.
Interfacessh a workflow YAML in .github/workflows; a runner with a shell and a network
Toolinga full Ubuntu, Windows or macOS runner with a shell, package managers and a checkout
Composes witha runner is a real machine for up to six hours, destroyed at the end of the job
Reliabilityno reliability event recorded
NotesThe shape is confirmed exactly as the operator's answer states it: 4 vCPU, 16 GB RAM, 14 GB SSD, workflow label ubuntu-latest, on a public repository, on an email alone. Two things the phrase 'free and unlimited' hides, and both were read on a page today. First, the sentence is a vendor claim on a documentation page and the same vendor's Additional Product Terms scope it: Actions is for 'production, testing, deployment, or publication of the software project associated with the repository', and it may not be used where the burden is 'disproportionate to the benefits provided to users', with 'don't use Actions as a content delivery network or as part of a serverless application' as the worked example. So the meter is unlimited and the permitted use is not; the constraint is contractual and discretionary, which is a worse ceiling than a number because there is no threshold at which it is safe. Second, the phrase '14 GiB SSD' in the corpus understates the vendor: GitHub writes 14 GB, decimal, which is about 13.0 GiB. The record keeps the vendor's number and unit. Not established: the egress term, which no page publishes; and whether enforcement of the terms clause looks like a job cancellation, a repository disablement or an account suspension in practice.
Evidence rungdocumented every field the verdict rests on is quoted from a first-party GitHub page read on 2026-10-24: shape, the unlimited term, the 6-hour job cap, the concurrency table, the cron floor, the 60-day disablement and the terms scoping. The egress term is not published and is recorded as absent, not as unlimited.
Checked2026-10-25 (live); stale on 2026-11-24
Parsed numbers
  • $.extras.m10h_usd price USD0.0 / month
  • $.extras.m24h_usd price USD0.0 / month
  • $.limits[0].value limit:retention-clamped 6.0 hours
  • $.limits[1].value limit:retention-clamped 6.0 hours
  • $.limits[2].value limit:request-rate 5.0 minutes
Evidence (24)
datesourcewhat it proved
2026-10-22docs.github.com/en/actions/reference/limitseach job on a GitHub-hosted runner can run up to 6 hours and is terminated and failed at the limit
2026-10-22docs.github.com/en/actions/reference/limitsa job matrix generates at most 256 jobs per workflow run; a workflow run is capped at 35 days
2026-10-22docs.github.com/en/actions/reference/limitsself-hosted jobs are capped at 5 days of execution and 24 hours of queue time
2026-10-22docs.github.com/en/actions/reference/runners/github-hosted-r'Use of the standard GitHub-hosted runners is free and unlimited on public repositories', quoted; the ubuntu-latest shape is 4 vCPU, 16 GB RAM and 14 GB disk
2026-10-24docs.github.com/en/actions/reference/runners/github-hosted-rquoted: 'For public repositories ... each GitHub-hosted runner is a new virtual machine (VM) hosted by GitHub' and 'Use of the standard GitHub-hosted runners is free and unlimited on public repositories', with ubuntu-latest listed at 4 vCPU, 16 GB and 14 GB
2026-10-24docs.github.com/en/billing/concepts/product-billing/github-aquoted: 'GitHub Actions usage is free for self-hosted runners and for public repositories that use standard GitHub-hosted runners'
2026-10-24docs.github.com/en/actions/reference/limitsquoted: 'All GitHub-hosted runners | Job execution time | 6 hours ... Each job in a workflow can run for up to 6 hours of execution time'
2026-10-24docs.github.com/en/actions/reference/workflows-and-actions/equoted: 'The shortest interval you can run scheduled workflows is once every 5 minutes' and 'In a public repository, scheduled workflows are automatically disabled when no repository activity has occurred in 60 days'
2026-10-24docs.github.com/en/actions/reference/runners/github-hosted-rquoted: 'Use of the standard GitHub-hosted runners is free and unlimited on public repositories.' and the shape table row '| Linux | 4 | 16 GB | 14 GB | x64 | ubuntu-latest, ubuntu-24.04, ubuntu-22.04, ubuntu-26.04 |'
2026-10-24docs.github.com/en/actions/reference/runners/github-hosted-rquoted: 'With the exception of single-CPU runners, each GitHub-hosted runner is a new virtual machine (VM) hosted by GitHub.' The single-CPU ubuntu-slim label is a container at 1 CPU / 5 GB / 14 GB, not the default.
2026-10-24docs.github.com/en/billing/concepts/product-billing/github-aquoted: 'The use of standard GitHub-hosted runners is free:' followed by the bullet list 'In public repositories', 'For GitHub Pages', 'For Dependabot', with the note 'Larger runners are always charged for, even when used by public repositories or when you have quota available from your plan.'
2026-10-24docs.github.com/en/billing/concepts/product-billing/github-aquoted: 'GitHub Actions usage is free for self-hosted runners and for public repositories that use standard GitHub-hosted runners.' The free-minutes table row 'GitHub Free | 500 MB | 2,000 | 10 GB | Not applicable' is the private-repo allowance, not the public one.
2026-10-24docs.github.com/en/actions/reference/limitsquoted: 'Each job in a workflow can run for up to 6 hours of execution time. If a job reaches this limit, the job is terminated and fails.' Row category 'All GitHub-hosted runners'.
2026-10-24docs.github.com/en/actions/reference/limitsquoted: 'If a workflow run reaches this limit, the workflow run is cancelled. This period includes execution duration, and time spent on waiting and approval.' Threshold column: '35 days / workflow run'.
2026-10-24docs.github.com/en/actions/reference/limitsconcurrency table quoted: '| Standard GitHub-hosted runner | Free | 20 | 5 | Not applicable |' — 20 total concurrent jobs, 5 macOS, no GPU jobs.
2026-10-24docs.github.com/en/actions/reference/workflows-and-actions/equoted: 'The shortest interval you can run scheduled workflows is once every 5 minutes.' and 'In a public repository, scheduled workflows are automatically disabled when no repository activity has occurred in 60 days.'
2026-10-24docs.github.com/en/actions/how-tos/manage-runners/github-hosquoted, two sentences from the same section: 'When the job begins, GitHub automatically provisions a new VM for that job.' and 'When the job has finished, the VM is automatically decommissioned.'
2026-10-24docs.github.com/en/authentication/keeping-your-account-and-dquoted: 'GitHub-hosted runners use dynamically assigned IP addresses from shared infrastructure.' No static address is available to a standard runner.
2026-10-24docs.github.com/en/site-policy/github-terms/github-terms-forquoted: 'If using GitHub-hosted runners, any other activity unrelated to the production, testing, deployment, or publication of the software project associated with the repository where GitHub Actions are used.' And: 'Any activity that places a burden on our servers, where that burden is disproportionate to the benefits provided to users (for example, don't use Actions as a content delivery network or as part of a serverless application ...)'
2026-10-24docs.github.com/en/site-policy/github-terms/github-terms-fornot published
2026-10-24docs.github.com/en/get-started/start-your-journey/creating-aquoted: 'To get started with GitHub.com, you need to have a personal account and a verified email address.'
2026-10-24docs.github.com/en/authentication/securing-your-account-withquoted: 'If you have been selected for mandatory 2FA, that does not mean you have to provide GitHub with your phone number. You only have to provide your phone number if you use SMS for 2FA.'
2026-10-24docs.github.com/en/actions/reference/workflows-and-actions/dquoted: 'GitHub will remove any cache entries that have not been accessed in over 7 days.' and 'By default, the limit is 10 GB per repository'.
2026-10-24docs.github.com/en/site-policy/acceptable-use-policies/githuquoted: 'If we determine your bandwidth usage to be significantly excessive in relation to other users of similar features, we reserve the right to suspend your Account, throttle your file hosting, or otherwise limit your activity' — a discretionary clause, not a published number.
More fields (21)
{
 "shape": {
  "vcpu": 4,
  "ram_gib": 16,
  "disk_gib": 14,
  "gpu_class": null,
  "gpu_count": null,
  "note": "ubuntu-latest on a public repository, quoted from the vendor table as 'Linux | 4 | 16 GB | 14 GB | x64'. RAM and disk are the vendor's decimal GB, kept unconverted: 16 GB is about 14.9 GiB and 14 GB is about 13.0 GiB. The private-repo default is a different shape: 2 vCPU / 8 GB / 14 GB."
 },
 "billing_model": "free",
 "session_cap": {
  "wall_clock_min": 360,
  "idle_reap_s": null,
  "restart_required": true,
  "note": "6 hours per job on a GitHub-hosted runner, then the VM is destroyed and the job fails. 35 days per workflow run including queue and approval time. A scheduled workflow is the only way to start again, at a floor of once every 5 minutes, and it is disabled after 60 days without repository activity."
 },
 "keep_rate": {
  "value": 0.0,
  "basis": "a public-repository runner is not billed at all; there is no rate to keep",
  "source": "https://docs.github.com/en/actions/reference/runners/github-hosted-runners"
 },
 "persistent_storage": {
  "included_gib": 0,
  "price_gib_month": "artifacts and caches are separate services: cache is 10 GB per repository on GitHub Free, artifacts 500 MB, both billed if exceeded and both needing a payment method",
  "durability": "none on the runner: the VM is decommissioned at job end",
  "survives_stop": false,
  "survives_destroy": false,
  "max_retention": "the job; caches evict after 7 days without access"
 },
 "network_out": {
  "allow_outbound": true,
  "allow_inbound_listen": false,
  "ports": "none inbound: the VM is decommissioned at job end and its address is dynamic and shared",
  "static_ip": false,
  "ipv6": null,
  "per_session_bytes": null
 },
 "free_tier_kind": "free-forever",
 "census_rows": [
  "github-actions"
 ],
 "topic_note": "belongs to ci-cd-runners; recorded here to stop the double count",
 "granularity": {
  "min_billed_s": 60,
  "rounding_s": null
 },
 "burst_x": 20.0,
 "wave2": {
  "verdict_change": "fails-quota -> qualifies-with-caveat on 2026-10-22"
 },
 "price_arithmetic": "USD 0.00 on a public repository. 24 hours a day is four 6-hour jobs, and the vendor charges nothing for standard runners on a public repository, so 4 vCPU x 24 h = 96 vCPU-hours a day at USD 0.00. With 20 concurrent jobs the ceiling is 4 x 6 x 20 = 480 vCPU-hours in any rolling six-hour window, and 4 x 24 x 20 = 1,920 vCPU-hours in a day if every slot is kept full. The private-repo alternative is 2,000 minutes a month = 33.3 hours of one job.",
 "term": "none",
 "m10h_usd": 0.0,
 "m24h_usd": 0.0,
 "concurrency": {
  "jobs_at_once": 20,
  "macos_jobs_at_once": 5,
  "gpu_jobs_at_once": 0,
  "source": "https://docs.github.com/en/actions/reference/limits",
  "note": "GitHub Free plan, standard GitHub-hosted runners. GitHub Support can raise it on a ticket. 20 jobs x 4 vCPU = 80 vCPU at once, which is the number that turns one runner into a cluster."
 },
 "schedule": {
  "min_interval": "once every 5 minutes",
  "disablement": "in a public repository, scheduled workflows are automatically disabled when no repository activity has occurred in 60 days",
  "branch": "scheduled workflows run only on the default branch",
  "source": "https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows"
 },
 "units": "RAM and disk are the vendor's decimal GB. ram_gib and disk_gib hold the vendor's number unconverted, per the corpus rule that a vendor's unit is kept and flagged, so 16 GB RAM is about 14.9 GiB and 14 GB disk is about 13.0 GiB.",
 "burst_note": "20 concurrent jobs on the Free plan, each 4 vCPU: 80 vCPU at once. burst_x is the concurrency multiplier over a single runner.",
 "wave3": {
  "verified": [
   "shape 4 vCPU / 16 GB / 14 GB on ubuntu-latest, public repo",
   "the exact 'free and unlimited' sentence",
   "6-hour job cap",
   "35-day workflow cap",
   "20 concurrent jobs on Free",
   "5-minute cron floor",
   "60-day schedule disablement",
   "email-only identity, no card and no phone"
  ],
  "corrected": "the corpus wrote 14 GiB; the vendor writes 14 GB decimal, about 13.0 GiB",
  "new": "the Additional Product Terms scope the unlimited term to work on the repository's own software project, which the billing and limits pages do not say"
 }
}
Unknown or withheld values (5)
  • $.egress.metered egress-unknown
  • $.evidence[19].proved withheld
  • $.per_object_cap.notes process
  • $.per_object_cap.stated not-applicable
  • $.reliability_note none-observed

Corrections

GitHub Copilot cloud sandboxes Compute

caveatemail?card?Drequest-rate

docs.github.com/en/billing/concepts/product-billing/cloud-an · cloud VM · compute/github-copilot-cloud-sandboxes · JSON · compare

Free tiera metered quota on the Copilot plan, with compute at $0.000024 a second, memory at $0.000003 a GiB-second and snapshot storage at $0.005 a GiB-month once it is exhausted; an account with no payment method is blocked at the quota
unit seconds; metered on wall-clock
Pricenone stated
Per-object capnot stated
Retentionnot stated
Egressnot stated
Identityemail (placeholder) not published
Limits
  • request-rate compute at $0.000024 a second and memory at $0.000003 a GiB-second once the included quota is spent source
  • per-object-cap snapshot storage for stopped sessions is $0.005 a GiB-month source
  • write-gated without a payment method, usage is blocked at the quota rather than billed past it source
not stated
Bindingrequest-rate
Interfaceunknown
Toolingnot stated
Composes withnot stated
Reliabilityno reliability event recorded
Evidence rungdocumented the billing concept page was read on 2026-10-22 and states all three meters and the blocked-at-quota rule. The quota's size is in the plan, not on this page, so the record gives the meters and says where the size lives
Checked2026-10-23 (live); stale on 2026-11-22
Evidence (2)
datesourcewhat it proved
2026-10-02docs.github.com/en/billing/concepts/product-billing/cloud-annot published
2026-10-22docs.github.com/en/billing/concepts/product-billing/cloud-an'Compute: time that a cloud sandbox session is running, $0.000024 per compute second', 'Memory: $0.000003 per GiB second', 'Storage: snapshot storage for stopped sessions, $0.005 per GiB month', and 'If your account does not have a valid payment method on file, usage is blocked once you use up your quota', quoted
More fields (15)
{
 "talaria_m10h_usd": 74.8,
 "talaria_m24h_usd": 165.52,
 "nemo_m10h_usd": null,
 "keep_rate": 1.0,
 "keep_rate_basis": null,
 "billing_model": "unclassified",
 "shape": null,
 "session_cap": {
  "wall_clock_min": null,
  "idle_reap_s": null,
  "restart_required": false,
  "note": "a session bills compute and memory while running and only snapshot storage when stopped, which is the state answer"
 },
 "persistent_storage": null,
 "network_out": null,
 "price_note": null,
 "free_tier_kind": "allowance",
 "granularity": {
  "min_billed_s": 0,
  "rounding_s": null
 },
 "ps": {
  "gib": null,
  "price": "$0.005 a GiB-month of snapshot storage",
  "durability": "snapshot",
  "on_stop": true,
  "on_destroy": false,
  "retention": "until the snapshot is deleted"
 },
 "net": null
}
Unknown or withheld values (17)
  • $.chaining not-stated
  • $.egress.metered egress-unknown
  • $.egress.terms not-stated
  • $.evidence[0].proved process
  • $.extras.keep_rate_basis process
  • $.extras.price_note process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note not-stated
  • $.per_object_cap.notes process
  • $.per_object_cap.stated not-stated
  • $.reliability_note none-observed
  • $.retention.notes not-extracted
  • $.retention.stated not-stated
  • $.tooling not-stated

GitHub Secure Open Compute

caveatemailno cardDwrite-gated

github.com/open-source/github-secure-open-source-fund · cloud VM · compute/github-secure-open · JSON · compare

Free tierQuoted from the programme page: 'It is $10,000 per project. All funding goes directly to the maintainers that are invited into the program. The funding is broken into tranches aligned to program schedules: $6,000 during program, $2,000 at 6 month check-in, and $2,000 at 12 month check-in.' The same page lists 'Cloud Credits: $10,000 in Azure credits. Eligible projects have potential to receive up to $150,000 in free Azure infrastructure credits from Microsoft for Startups.'
unit none; metered on wall-clock; cash-grant-plus-credits
Pricenone stated
Per-object capnot applicable
Retentionnot applicable
Egressnot stated
Identityemail not published
Limits
  • write-gated The project must already be a maintained open-source project with demonstrated traction, and the USD 8,000 balance is conditional on two security check-ins at 6 and 12 months, so the money is spread over a year of work. source
The project must already be a maintained open-source project with demonstrated traction, and the USD 8,000 balance is conditional on two security check-ins at 6 and 12 months, so the money is spread over a year of work.
Bindingwrite-gated The project must already be a maintained open-source project with demonstrated traction, and the USD 8,000 balance is conditional on two security check-ins at 6 and 12 months, so the money is spread over a year of work.
Interfaceunknown inferred from the tooling the provider documents; not probed
Toolingnot stated
Composes withThis is the only record that pairs cash with a cloud credit: USD 10,000 cash through GitHub Sponsors plus USD 10,000 of Azure credits, with a separate conditional route to as much as USD 150,000 of Azure infrastructure credit through Microsoft for Startups, so it composes with any Azure GPU quota the corpus records elsewhere.
Reliabilityno reliability event recorded
NotesThe two first-party sources disagree on the cloud credit and the disagreement is the finding: the programme page prints 'Cloud Credits: $10,000 in Azure credits' with a conditional path to USD 150,000 through Microsoft for Startups, while a GitHub blog post describes session 4 as giving '$100K of Azure Credits'. I take the programme page as current and the blog as a launch-era figure, and the record states the page number; a reader should confirm with the programme before planning around either. Seventy-one projects had already passed through the programme by one of the posts, which is a large cohort for a fund this small and is the reason to rank it high: the odds are not Alpha-Omega odds. Two conditions do real work: the maintainer must sit in a GitHub Sponsors-supported region, and the project needs visible traction. A provider record for GitHub already exists in the corpus (github-actions, github-codespaces, github-student-developer); this is a separate programme with its own money and was absent from every GitHub record, so it is recorded as its own finding rather than as a duplicate.
Evidence rungdocumented
Checked2026-10-22 (live); stale on 2026-11-21
Evidence (4)
datesourcewhat it proved
2026-10-22github.com/open-source/github-secure-open-source-fundquoted the USD 10,000 per project with the 6,000 / 2,000 / 2,000 tranche split, the Azure credit sentence 'Cloud Credits: $10,000 in Azure credits. Eligible projects have potential to receive up to $150,000 in free Azure infrastructure credits from Microsoft for Startups', and the eligibility list: 'Anyone who is a current maintainer of an open source project', 18 or older, active GitHub profile, 'Be located in one of the regions supported by GitHub Sponsors'
2026-10-22github.blog/security/supply-chain-security/investing-in-the-quoted 'Session 4 runs late April with each project receiving $10,000, Copilot Pro, $100K of Azure Credits, and 3 weeks of security education' and 'an additional $5.5 million in Azure credits and funding' [this figure conflicts with the $10,000 Azure credits printed on the programme page; see notes]
2026-10-22github.blog/open-source/maintainers/securing-the-supply-chaireported: 'each project receives $10,000 USD via GitHub Sponsors', a 3-week sprint inside a 12-month engagement, and that 71 projects had taken part by that post
2026-10-22opensource.org/blog/improving-open-source-security-with-the-third-party confirmation of the USD 10,000 per project figure and the three-week programme shape
More fields (1)
{
 "wave2": {
  "class": "grant-individual",
  "free_tier_kind": "cash-grant-plus-credits",
  "shape": null
 }
}
Unknown or withheld values (10)
  • $.egress.metered egress-unknown
  • $.egress.terms not-stated
  • $.identity_cost.detail process
  • $.interface interface-unknown
  • $.per_object_cap.notes process
  • $.per_object_cap.stated not-applicable
  • $.reliability_note none-observed
  • $.retention.notes process
  • $.retention.stated not-applicable
  • $.tooling not-stated

GitHub Sponsors Compute

caveatemailno cardphoneD

docs.github.com/en/sponsors/getting-started-with-github-spon · cloud VM · compute/github-sponsors · JSON · compare

Free tierQuoted: 'Anyone who contributes to an open source project and lives in a supported region is eligible to become a sponsored developer', and 'GitHub Sponsors does not charge any fees for sponsorships from personal accounts, so 100% of these sponsorships go to the sponsored developer or organization' (organisations pay up to 6 percent).
unit none; metered on wall-clock; cash-passthrough
Pricenone stated
Per-object capnot applicable
Retentionnot applicable
Egressnot stated
Identityemail a GitHub account plus residence in a supported region: 'Anyone who contributes to an open source project and lives in a supported region is eligible to become a sponsored developer'. The record's notes add a payout account as a second gate, which no evidence row quotes, and send unsupported countries to a waitlist rather than naming a document. No card, hold, phone number or ID document is stated in any evidence row: unknown.
Bindingnone No vendor cap binds: the limit is whether a sponsor exists, and the amount is whatever they choose, so the constraint is demand rather than a quota.
Interfaceunknown inferred from the tooling the provider documents; not probed
Toolingnot stated
Composes withThis is the payout pipe for two other records: the GitHub Secure Open Source Fund pays its USD 10,000 'via GitHub Sponsors', so a region GitHub does not support loses both the rail and the grant.
Reliabilityno reliability event recorded
NotesRecorded because it is the pipe rather than a programme, and because the widely repeated claim that GitHub matches sponsorships is false: the Matching Fund closed to new applicants on 2020-01-01 and the docs say so. The gate is a supported region plus a payout account, and the docs send unsupported countries to a waitlist rather than a date. The corpus already holds github-actions, github-codespaces and github-copilot records; none of them covers the payment rail, so this is a new fact rather than a duplicate.
Evidence rungdocumented
Checked2026-10-22 (live); stale on 2026-11-21
Evidence (2)
datesourcewhat it proved
2026-10-22docs.github.com/en/sponsors/getting-started-with-github-sponquoted the supported-region eligibility sentence, the 100 percent pass-through for personal accounts, the 6 percent organisation fee split into a 3 percent card fee and a 3 percent GitHub fee, and the note that 'Eligibility for the GitHub Sponsors Matching Fund has passed. Applications received after the January 1, 2020 deadline are not eligible'
2026-10-22github.com/open-source/github-secure-open-source-fundthe fund is 'Powered by GitHub Sponsors' and pays maintainers through it, which is why an unsupported region blocks that grant as well as this rail
More fields (1)
{
 "wave2": {
  "class": "payment-rail",
  "free_tier_kind": "cash-passthrough",
  "shape": null
 }
}
Unknown or withheld values (9)
  • $.egress.metered egress-unknown
  • $.egress.terms not-stated
  • $.interface interface-unknown
  • $.per_object_cap.notes process
  • $.per_object_cap.stated not-applicable
  • $.reliability_note none-observed
  • $.retention.notes process
  • $.retention.stated not-applicable
  • $.tooling not-stated

GitHub Actions Artifacts (public repositories) Storage

caveatanonymousno cardRretention-clamped

github.com/features/actions · paas · storage/github-actions-artifacts · JSON · compare

Free tierPlan table still lists artifact storage 500 MB (Free) / 1 GB (Pro) / 2 GB (Team) / 50 GB (Enterprise), and that pool is SHARED with GitHub Packages. Billing docs state Actions usage is free for public repositories. Artifact storage for public repos is not metered in practice, but the docs do not say 'unlimited' explicitly — flag as ambiguity.
unit GB; metered on stored-bytes
Pricenone stated
Per-object capnot stated
RetentionRetention: default 90 days; public repos may be set 1-90 days only (private repos 1-400 days) (90 days)
EgressFree. Downloads redirect to productionresultssa*.blob.core.windows.net. But the API download endpoint requires a token: anonymous GET of /actions/artifacts/{id}/zip returns 401.
Identityanonymous derived from the record's prose, not from an identity field, and no signup was executed: cannot exceed the repo/org setting. 500 artifacts per job. Anonymous download requires a token, hence the wrapper. paas
Limits
  • retention-clamped Retention: default 90 days source
Retention: default 90 days; public repos may be set 1-90 days only (private repos 1-400 days). retention-days on upload-artifact cannot exceed the repo/org setting. 500 artifacts per job. Anonymous download requires a token, hence the wrapper.
Bindingretention-clamped a clock, not a quota: bytes leave whether or not the client is finished with them
Interfacerest, cli rest
Toolingactions/upload-artifact@v4 (max 500 artifacts per job), REST /repos/{o}/{r}/actions/artifacts, gh CLI. Third-party: nightly.link (see above), monteslu/loukai and alexreich/SitePix both have commits literally titled 'bypass Actions artifact storage; upload directly to release', which in plain terms means moving the bytes to releases instead; the ecosystem's own conclusion is that releases beat artifacts.
Composes withUnlimited public repos x 500 artifacts/job x jobs. But retention caps it: this is a rotating buffer, never an archive.
ReliabilityHard TTL — artifacts are deleted at expiry and cannot be restored. Separate 10 GB/repo cache is also 7-day-evicted. Fine as a 90-day hot tier, useless as an archive.
NotesPlan table still lists artifact storage 500 MB (Free) / 1 GB (Pro) / 2 GB (Team) / 50 GB (Enterprise), and that pool is SHARED with GitHub Packages. Billing docs state Actions usage is free for public repositories. Artifact storage for public repos is not metered in practice, but the docs do not say 'unlimited' explicitly — flag as ambiguity.
Evidence rungreported One page read moves it to documented.
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (4)
datesourcewhat it proved
2026-10-21docs.github.com/en/billing/concepts/product-billing/github-a'GitHub Actions usage is free for self-hosted runners and for public repositories'; storage table; 'Cache storage is a separate allowance of 10 GB per repository'
2026-10-21docs.github.com/en/repositories/managing-your-repositorys-se'For public repositories: you can change this retention period to anywhere between 1 day or 90 days'
2026-10-21api.github.com/repos/cli/cli/actions/artifacts?per_page=3probe: curl -D - -> 200, total_count 9646, expires_at present
2026-10-21api.github.com/repos/cli/cli/actions/artifacts/12312575009/zprobe: curl -o /dev/null -> 401 (token required, unlike release assets)
Unknown or withheld values (4)
  • $.free_tier.notes process
  • $.per_object_cap.notes not-extracted
  • $.per_object_cap.stated not-extracted
  • $.retention.notes not-extracted

GitHub Gist Storage

caveatinstitutionno cardRper-object-cap

gist.github.com · paas · storage/github-gist · JSON · compare

Free tierUnlimited gists per account; each gist is a full Git repo. Hard block at 100 MiB per single file; 2 GB per push. Total repo size is not capped, only 10 GB on-disk is the documented recommendation.
unit GB; metered on unstated
Pricenone stated
Per-object cap100 MiB per single file (104857600 bytes)
Retentionnot stated
Egressunmetered free downloads from gist.githubusercontent.com; docs state 'We don't limit the total size of the binary files in the release or the bandwidth used to deliver them'. No egress metering observed across repeated 60 MB pulls (~1.3-2.0 s each).
Identityinstitution derived from the record's prose, not from an identity field, and no signup was executed: hook); ~80 writes/min, 500/hr, 5000 REST req/hr per token; API truncates file content at 1 MB and files list at 300 unless you clone; 6 pushes/min per repo recommended. paas
Limits
  • per-object-cap 100 MiB per single file source
  • per-object-cap 100 MiB per file source
100 MiB per file hard block (pre-receive hook); ~80 writes/min, 500/hr, 5000 REST req/hr per token; API truncates file content at 1 MB and files list at 300 unless you clone; 6 pushes/min per repo recommended.
Bindingper-object-cap the per-object cap sets the shard size and therefore the object count; it bounds the total more tightly than any headline quota
Interfaces3, rest, git, rclone git
Toolinggit clone/push against gist.github.com/<id>.git, gh gist create, REST POST /gists, github.com/bharatcj/git-unlimited-storage (S3-shaped shim over a repo, MIT, 0 stars), rclone backend 'gist' does NOT exist — use plain git plus a CDN in front.
Composes withunlimited gists x unlimited free GitHub accounts, each gist 100 MiB/file x as many files as the push allows. Practical unit is 'one gist repo per dataset shard'. 10 TiB hot = ~100k gists at 100 MB, or ~10k accounts x 10 gists.
ReliabilityPush hook is strict and fires at 100 MiB; pushes into a repo already carrying hundreds of MB start failing before the per-file cap is reached, so keep each shard repo small. Read path was consistently fast and cache-friendly.
NotesUnlimited gists per account; each gist is a full Git repo. Hard block at 100 MiB per single file; 2 GB per push. Total repo size is not capped, only 10 GB on-disk is the documented recommendation.
Evidence rungreported One page read moves it to documented.
Checked2026-10-21 (inherited); stale on 2026-11-04
Parsed numbers
  • $.limits[0].value limit:per-object-cap 100.0 MiB
  • $.limits[1].value limit:per-object-cap 100.0 MiB
Evidence (4)
datesourcewhat it proved
2026-10-21docs.github.com/en/repositories/creating-and-managing-reposi'Single object size ... is enforced at 100 MB', 'Push size: This limit is enforced at 2GB', on-disk 10 GB recommendation, 15 reads/s per repo
2026-10-21withheldprobe: git push of 60,000,000-byte file into gist 8fafc3fc9486dc10c88b24317cffd7e9 -> rc=0, then GET gist.githubusercontent.com/.../raw/big60.bin -> 200, bytes=60000000, 1.3-2.0 s
2026-10-21withheldprobe: 119.21 MB file push -> 'remote: error: File big125.bin is 119.21 MB; this exceeds GitHub's file size limit of 100.00 MB' / pre-receive hook declined
2026-10-21withheldprobe: gh gist create of a 90 MB and 95 MB file -> 'failed to collect files for posting: binary file not supported' (CLI path rejects binaries; use git push instead)
Unknown or withheld values (7)
  • $.evidence[1].url private-url
  • $.evidence[2].url private-url
  • $.evidence[3].url private-url
  • $.free_tier.notes process
  • $.per_object_cap.notes not-extracted
  • $.retention.notes not-extracted
  • $.retention.stated not-extracted

GitHub Git LFS Storage

caveatcardcardRper-object-cap

github.com/pricing · registry · storage/github-git-lfs · JSON · compare

Free tier10 GiB storage AND 10 GiB/month bandwidth on GitHub Free (also 10/10 on Pro and Free-for-orgs; 250 GiB each on Team/Enterprise Cloud). This is UP from the old 1 GiB/1 GiB — the docs now show a 10 GiB table. Pre-paid data packs are gone; it is metered with a budget setting.
unit GiB; metered on stored-bytes
Pricenone stated
Per-object capPer-file: 2 GB (2000000000 bytes)
Retentionnot stated
EgressMetered but included up to 10 GiB/month. Over quota with no payment method, 'Git LFS support is disabled on your account until the next month'. With a $0 budget, usage is blocked for the rest of the calendar month. No free CDN in front of LFS.
free_allowance: 10 GiB per month
Identitycard derived from the record's prose, not from an identity field, and no signup was executed: th a budget setting. Hard-blocked (not billed) without a payment method, so it degrades safely. The monthly non-recalculation on delete means a big upload you remove still burns the month. 10
Limits
  • per-object-cap Per-file: 2 GB source
Per-file: 2 GB on Free/Pro, 4 GB on Team, 5 GB on Enterprise Cloud. Storage is billed on all LFS objects ever associated with a repo, hourly-averaged, and 'If you delete Git LFS objects partway through a calendar month, the storage usage for that month is not recalculated'. Re-pushing a 1-byte change to a 500 MB file consumes another 500 MB. Actions pulling LFS counts against the repo owner's bandwidth.
Bindingper-object-cap the per-object cap sets the shard size and therefore the object count; it bounds the total more tightly than any headline quota
Interfacerest, git git
Toolinggit-lfs (git-lfs/git-lfs, ~10k stars). git-annex can also use GitHub LFS as a special-remote backend (see the git-lfs remote entry). REST API for repo management.
Composes with10 GiB per account x unlimited free accounts. Note the ownership trick in GitHub's own docs: 'Anyone with write access to a repository can push files to Git LFS without increasing their personal bandwidth and storage use' — usage lands on the REPO OWNER. So a collaborator-heavy layout concentrates the bill on one account, which is the opposite of what you want; the shardable axis is accounts-as-repo-owners.
ReliabilityHard-blocked (not billed) without a payment method, so it degrades safely. The monthly non-recalculation on delete means a big upload you remove still burns the month.
Notes10 GiB storage AND 10 GiB/month bandwidth on GitHub Free (also 10/10 on Pro and Free-for-orgs; 250 GiB each on Team/Enterprise Cloud). This is UP from the old 1 GiB/1 GiB — the docs now show a 10 GiB table. Pre-paid data packs are gone; it is metered with a budget setting.
Evidence rungreported One page read moves it to documented.
Checked2026-10-21 (inherited); stale on 2026-11-04
Parsed numbers
  • $.limits[0].value limit:per-object-cap 2.0 GB
Evidence (3)
datesourcewhat it proved
2026-10-21docs.github.com/en/billing/concepts/product-billing/git-lfstable: 'GitHub Free | 10 GiB | 10 GiB' (bandwidth | storage)
2026-10-21docs.github.com/en/repositories/working-with-files/managing-'GitHub Free | 2 GB' maximum file size
2026-10-21github.com/git-lfs/git-lfs.git/info/lfs/objects/batchprobe: POST (download, bogus oid) -> HTTP 200 (LFS endpoint live, anonymous batch accepted)
Unknown or withheld values (4)
  • $.free_tier.notes process
  • $.per_object_cap.notes not-extracted
  • $.retention.notes not-extracted
  • $.retention.stated not-extracted

GitHub issue/PR comment attachments (user-attachments) Storage

caveatanonymousno cardRper-object-cap

github.com · media · storage/github-issue-pr-comment-attachments · JSON · compare

Free tierno account-level byte quota stated; per-file only — 10 MB images/GIFs, 25 MB other files, 10 MB video on free plan (100 MB on paid)
unit MB; metered on unstated
Pricenone stated
Per-object cap25 MB/file (25000000 bytes)
Retentionnot stated
Egressfree and unmetered — 'For public repositories, uploaded files can be accessed without authentication'; served from githubusercontent CDN, cached by Camo
Identityanonymous derived from the record's prose, not from an identity field, and no signup was executed: no account-level byte quota stated; per-file only — 10 MB images/GIFs, 25 MB other files, 10 MB video on free plan (100 MB on paid
Limits
  • per-object-cap 25 MB/file source
25 MB/file (10 MB images), per-comment attachment count not documented; uploads are immediate on attach, so a failed comment still leaves the asset
Bindingper-object-cap the per-object cap sets the shard size and therefore the object count; it bounds the total more tightly than any headline quota
Interfacerest, cli rest
ToolingGitHub CLI: 'You can also attach local images and videos from the command line with GitHub CLI' (gh issue comment / gh pr comment --attach, changelog 2026-09-01); plus any REST client against the comment API
Composes withunlimited comments per issue x unlimited issues x unlimited free repos; 25 MB per non-image attachment. 1 GiB of payload = ~41 comments. Effectively per-record-unlimited storage keyed to comment IDs, not to an account quota
Reliabilityassets persist after comment edit/delete in practice (URL is anonymised and not reference-counted); bulk comment-creation is the one thing GitHub's usage-anomaly systems actually watch, and secondary rate limits are aggressive
Notesno account-level byte quota stated; per-file only — 10 MB images/GIFs, 25 MB other files, 10 MB video on free plan (100 MB on paid)
Evidence rungreported One page read moves it to documented.
Checked2026-10-21 (inherited); stale on 2026-11-04
Parsed numbers
  • $.limits[0].value limit:per-object-cap 25.0 MB
Evidence (4)
datesourcewhat it proved
2026-10-21docs.github.com/en/get-started/writing-on-github/working-wit'The maximum file size is: 10MB for images and gifs ... 25MB for all other files'
2026-10-21docs.github.com/en/authentication/keeping-your-account-and-duploads get anonymous githubusercontent URLs via Camo
2026-10-21github.blog/changelog/2026-09-01-github-cli-media-in-issues-scriptable attach path exists (API criterion met)
2026-10-21github.com/user-attachments/assets/<uuid>probe: GET -> 404 text/plain for a bogus id (route exists, not a generic 403)
Unknown or withheld values (4)
  • $.free_tier.notes process
  • $.per_object_cap.notes not-extracted
  • $.retention.notes not-extracted
  • $.retention.stated not-extracted

GitHub Packages - public packages (npm/Maven/NuGet/RubyGems) Storage

caveatemail?card?Rdisagrees

github.com/features/packages · registry · storage/github-packages-public-packages · JSON · compare

Sibling records disagree:

Free tierUnlimited for PUBLIC packages: 'GitHub Packages usage is free for public packages. In addition, data transferred in from any source is free.' Private packages consume the shared 500 MB/2 GB/50 GB plan pool.
unit GB; metered on unstated
Pricenone stated
Per-object capnot stated
Retentionnot stated
EgressFree for public packages. Paid only for downloads from private packages.
Identityemail (placeholder) not published
Bindingnone no constraint in the record binds at this scale; the record carries no limit of a kind the vocabulary names
Interfacerest rest
Toolingnpm/mvn/nuget/gem clients directly; standard package-manager tooling, no wrapper needed. (GHCR is the container variant and is on the known-list, so this entry is about the non-container registries.)
Composes withUnlimited public packages x unlimited versions, each bounded only by the per-ecosystem file cap. Multiplied by unlimited orgs/accounts.
ReliabilityImmutable versions; deletion requires explicit action. Package-manager clients are the bottleneck for bulk blobs (chunking needed).
NotesUnlimited for PUBLIC packages: 'GitHub Packages usage is free for public packages. In addition, data transferred in from any source is free.' Private packages consume the shared 500 MB/2 GB/50 GB plan pool.
Evidence rungreported One page read moves it to documented.
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (2)
datesourcewhat it proved
2026-10-21docs.github.com/en/billing/concepts/product-billing/github-p'GitHub Packages usage is free for public packages. In addition, data transferred in from any source is free.'
2026-10-21docs.github.com/en/packages/learn-github-packages/about-githsame statement repeated in the packages overview
Unknown or withheld values (7)
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.per_object_cap.notes not-extracted
  • $.per_object_cap.stated not-extracted
  • $.retention.notes not-extracted
  • $.retention.stated not-extracted

GitHub Copilot Student Compute

fails: identityinstitutionno cardphoneDrequest-rate

docs.github.com/en/copilot/how-tos/copilot-on-github/set-up- · inference API · compute/github-copilot-student · JSON · compare

Free tierQuoted from the pack: 'GitHub Copilot Student is available to verified students. The plan includes unlimited code completions and an allowance of GitHub AI Credits, plus limited chat and agent usage with models available through auto model selection only.' The plans table lists Copilot Student at Free with 'An allowance of GitHub AI Credits', against Copilot Pro at USD 10 a month with 'Base: 1,000' credits.
unit unlimited; metered on wall-clock; recurring-credit
Pricenone stated
Per-object capnot applicable
Retentionnot applicable
Egressnot stated
Identityinstitution student status verified by GitHub Education: the plan is "Copilot Student" against Pro at USD 10 a month, and the vendor states "GitHub reevaluates your eligibility every month", so the licence lapses when verification does, with activation a separate step from verification. The record does not state which documents or which email domain GitHub Education accepts, and no card, phone, hold or payment statement appears. New signups were paused from 20 April 2026 and "sign-ups began reopening on 17 June 2026"
Limits
  • request-rate It is an inference allowance, not compute, it excludes third-party agents and confines model choice to auto-selection, and it sits behind the same GitHub Education verification as the rest of the pack. source
It is an inference allowance, not compute, it excludes third-party agents and confines model choice to auto-selection, and it sits behind the same GitHub Education verification as the rest of the pack.
Bindingrequest-rate It is an inference allowance, not compute, it excludes third-party agents and confines model choice to auto-selection, and it sits behind the same GitHub Education verification as the rest of the pack.
Interfacerest inferred from the tooling the provider documents; not probed
Toolingnot stated
Composes withThe only item in the entire pack that is inference rather than compute or licences, and the monthly revaluation is what makes it lapsed-on-graduation by construction rather than by policy.
Reliabilityno reliability event recorded
NotesGitHub does not publish the exact AI credit allowance for the Student plan; only Pro and above carry a number. The number is left null rather than inferred from the Pro tier, because the two are different allowances. The April 2026 sign-up pause and the June 2026 reopening are recorded because a reader checking a 2026 article will find contradictory status reports. Revaluation every month is the cleanest example in this class of a grant that cannot survive graduation.
Evidence rungdocumented
Checked2026-10-22 (live); stale on 2026-11-21
Evidence (4)
datesourcewhat it proved
2026-10-22docs.github.com/en/copilot/get-started/plans'Copilot Student | Free | An allowance of GitHub AI Credits | Excludes third-party agents | Auto model selection only'; 'On Copilot Free and Copilot Student plans, access to models is available through auto model selection only'; Pro is 'Base: 1,000' credits at USD 10.
2026-10-22education.github.com/pack'unlimited code completions and an allowance of GitHub AI Credits, plus limited chat and agent usage with models available through auto model selection only'.
2026-10-22docs.github.com/en/copilot/how-tos/copilot-on-github/set-up-'GitHub reevaluates your eligibility every month', so the licence lapses the moment verification does, and activation is a separate step from verification.
2026-10-22github.blog/changelog/2026-04-20-changes-to-github-copilot-p'we will be pausing new signups for our Student, Pro, and Pro+ plans' from 20 April 2026; sign-ups began reopening on 17 June 2026.
More fields (1)
{
 "wave2": {
  "class": "student-pack",
  "free_tier_kind": "recurring-credit",
  "shape": null
 }
}
Unknown or withheld values (8)
  • $.egress.metered egress-unknown
  • $.egress.terms not-stated
  • $.per_object_cap.notes process
  • $.per_object_cap.stated not-applicable
  • $.reliability_note none-observed
  • $.retention.notes process
  • $.retention.stated not-applicable
  • $.tooling not-stated

GitHub Student Developer Compute

fails: identityinstitutionno cardDwrite-gated

education.github.com/pack · dev environment · compute/github-student-developer · JSON · compare

Free tierAggregator of about 60 partner offers, most of them software licences rather than compute. The compute-relevant ones in the live October 2026 list are: Microsoft Azure 'Free access to 25+ Microsoft Azure cloud services plus $100 in Azure credit. For students aged 18+'; Camber 'Free Camber Student plan while you are enrolled, including 40 CPU hours, 5 GPU hours, 50 GB of storage, and 50 agent messages per month'; Heroku 'a credit of $13 USD per month for 24 months'; MongoDB '$50 in MongoDB Atlas Credits'; Datadog 'Pro Account, including 10 servers. Free for 2 years'; GitHub Codespaces 'Free Pro level access to Codespaces to use anywhere in your account'; Deepnote 'unlimited basic machines with up to 5GB RAM and 2vCPU'.
unit hours; metered on wall-clock; recurring-credit
Pricenone stated
Per-object capnot applicable
Retentionnot applicable
Egressnot stated
Identityinstitution student-status documents reviewed by the GitHub Education team: the application page requires that you 'Provide documents that prove your current student status', accepting 'A picture of your school ID with current enrollment date', a class schedule, a transcript, or an affiliation or enrollment verification letter, and where a school was previously verified by academic email 'future applicants from the same school must also use an academic email'. Validation lasts 2 years and must be revalidated. No card, hold, debit or prepaid term is stated.
Limits
  • write-gated Nothing in the pack can be claimed until a human or automated review accepts enrollment documentation, and that single review gate covers all 60 partner offers at once, so one failure removes the whole bundle. source
Nothing in the pack can be claimed until a human or automated review accepts enrollment documentation, and that single review gate covers all 60 partner offers at once, so one failure removes the whole bundle.
Bindingwrite-gated Nothing in the pack can be claimed until a human or automated review accepts enrollment documentation, and that single review gate covers all 60 partner offers at once, so one failure removes the whole bundle.
Interfaceunknown inferred from the tooling the provider documents; not probed
Toolingnot stated
Composes withThe pack is the widest single aggregator found, but it composes with nothing for a user because verification is the single point of failure for all 60 offers at once.
Reliabilityno reliability event recorded
NotesRefutation of the headline program in this class. An earlier dossier record in dossier/storage/github-student-developer-pack.json already found the pack fails on storage quota, but recorded identity_cost as 'email' at 'reported' confidence; the vendor's own application page says the evidence required is enrollment documentation, which makes the identity cost institution and the verdict fails-identity rather than fails-quota. The three cheapest verification documents to produce would be a class schedule, a transcript or an enrollment letter, and the client holds none.
Evidence rungdocumented
Checked2026-10-22 (live); stale on 2026-11-21
Evidence (3)
datesourcewhat it proved
2026-10-22docs.github.com/en/education/about-github-education/github-eA student must 'Provide documents that prove your current student status', and the accepted documents are 'A picture of your school ID with current enrollment date', 'Your class schedule', 'Your transcript', 'An affiliation or enrollment verification letter'; the page adds that where the system detects prior applicants from a school verified by academic email, 'future applicants from the same school must also use an academic email'.
2026-10-22education.github.com/packThe live partner list as of this read, quoted per partner above; the compute-bearing offers are Azure $100, Camber 40 CPU hours and 5 GPU hours a month, Heroku USD 13 a month for 24 months, Codespaces Pro, Deepnote 2 vCPU and 5 GB RAM.
2026-10-22docs.github.com/en/education/about-github-education/github-e'All users must be actively verified as a student by the GitHub Education team'; 'Student validation lasts for 2 years, after which you will need to revalidate your student status'; 'Offers may not be redeemed multiple times'.
More fields (1)
{
 "wave2": {
  "class": "student-pack",
  "free_tier_kind": "recurring-credit",
  "shape": null
 }
}
Unknown or withheld values (9)
  • $.egress.metered egress-unknown
  • $.egress.terms not-stated
  • $.interface interface-unknown
  • $.per_object_cap.notes process
  • $.per_object_cap.stated not-applicable
  • $.reliability_note none-observed
  • $.retention.notes process
  • $.retention.stated not-applicable
  • $.tooling not-stated

GitHub Student Developer Pack Egress and tunnels

fails: identityinstitutionno cardDwrite-gated

education.github.com/pack · student credit bundle · egress/github-student-developer-pack · JSON · compare

Free tierFree access to 25+ Microsoft Azure cloud services plus $100 in Azure credit. For students aged 18+.
unit mixed; metered on downloaded-bytes
PriceUSD 100 of Azure credit
Per-object capnot applicable
Retentionnot applicable
Egress$100 of Azure credit at $0.087 per GB is 1.04 TiB, plus Azure's 100 GB a month free, which is the same 0.18 TiB a month as Azure for Students; ingress: udp
free_allowance: $100 of Azure credit at $0.087 per GB is 1.04 TiB, plus Azure's 100 GB a month free, which is the same 0.18 TiB a month as Azure for Students
Identityinstitution verification as a student, which GitHub establishes through the school
Limits
  • write-gated student status verified by GitHub before any partner offer is issued source
  • volume-quota $100 of Azure credit at $0.087 per GB is 1.04 TiB source
Bindingwrite-gated student verification comes before the credit, and for a user is not enrolled. If it were, the Azure credit's 1.04 TiB would be the next limit, which is a month at 1 TiB.
Interfacecli GitHub Education application, then the partner's own console
Toolingwg-quick on the Azure VM the credit pays for
Composes withno chain for a user: without enrolment the bundle is unreachable, and if it were reachable it would be a slightly worse Azure trial
Reliabilitythe pack is re-verified annually and partner offers are withdrawn without notice
NotesArithmetic: the pack's own credit is $100 of Azure, which at $0.087 a GB is 1,149 GB = 1.04 TiB, and Azure's 100 GB a month free sits on top. Heroku's $13 a month is not a VM with a UDP ingress and is not convertible to TiB. The finding worth carrying: the DigitalOcean credit that used to be a pack staple is not in the current partner list, so the brief's third route into DigitalOcean no longer exists. Candidates considered: the ages 13 to 17 Azure offer, which carries no credit.
Evidence rungdocumented the pack's current partner list was read today and no longer includes DigitalOcean
Checked2026-10-23 (live); stale on 2026-11-22
Parsed numbers
  • $.limits[1].value limit:volume-quota 1.04 TiB
  • $.price_per_tb_month price-per-tb USD100.0 TB / month
Evidence (2)
datesourcewhat it proved
2026-10-23education.github.com/pack'Free access to 25+ Microsoft Azure cloud services plus $100 in Azure credit. For students aged 18+'; for Heroku, 'Enjoy a credit of $13 USD per month for 24 months'
2026-10-23education.github.com/packthe partner headings read today are Namecheap, Name.com, Microsoft Azure, .TECH, GitHub, Microsoft 365, Notion, GitHub Copilot, DataCamp, Heroku, Boot.dev, JetBrains, Codedex, Testmail, 1Password, Educative, Termius, MongoDB, Datadog, Camber, Codespaces, Azure for ages 13-17, Clerk, FrontendMasters, GitHub Pages, Visual Studio Code, Stripe, Visual Studio Dev Essentials: no DigitalOcean entry
More fields (7)
{
 "wg_path": "native-conf",
 "wg_detail": "the Azure credit inside the pack buys an Azure VM, so wg-quick on that VM is the path",
 "ingress": "udp",
 "volume_tib_month": 0.18,
 "volume_stated": "$100 of Azure credit at $0.087 per GB is 1.04 TiB, plus Azure's 100 GB a month free, which is the same 0.18 TiB a month as Azure for Students",
 "bytes_transit": "yes",
 "transit_note": "the bytes cross Microsoft's network under the Azure credit"
}
Unknown or withheld values (2)
  • $.per_object_cap.stated not-applicable
  • $.retention.stated not-applicable

github lfs as bulk storage Storage

fails: egressemail?card?R

docs.github.com/en/billing/concepts/product-billing/git-lfs · rejected-provider · storage/github-lfs-as-bulk-storage · JSON · compare

Free tier10 GiB storage and 10 GiB/month egress on Free — three orders of magnitude short of the 20 TiB archive, and egress is metered rather than unmetered.
unit none; metered on none
Pricenone stated
Per-object capnot recorded
Retentionnot recorded
Egressnot recorded
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaceunknown
Toolingnot recorded
Composes withnot recorded
Reliability10 GiB storage and 10 GiB/month egress on Free — three orders of magnitude short of the 20 TiB archive, and egress is metered rather than unmetered.
Notes10 GiB storage and 10 GiB/month egress on Free — three orders of magnitude short of the 20 TiB archive, and egress is metered rather than unmetered.
Evidence rungreported
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (1)
datesourcewhat it proved
2026-10-21docs.github.com/en/billing/concepts/product-billing/git-lfs10 GiB storage and 10 GiB/month egress on Free — three orders of magnitude short of the 20 TiB archive, and egress is metered rather than unmetered.
More fields (1)
{
 "dead_end": {
  "failure_class": "egress",
  "why": "10 GiB storage and 10 GiB/month egress on Free — three orders of magnitude short of the 20 TiB archive, and egress is metered rather than unmetered.",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (15)
  • $.chaining not-recorded
  • $.confidence_note withheld
  • $.egress.terms not-recorded
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note process
  • $.per_object_cap.notes not-recorded
  • $.per_object_cap.stated not-recorded
  • $.retention.notes process
  • $.retention.stated not-recorded
  • $.tooling not-recorded

github packages Storage

fails: egressemail?card?Rdisagrees

· rejected-provider · storage/github-packages · JSON · compare

Sibling records disagree:

Free tierAlready covered (dossiers/github-packages.json); 500 MB storage + 1 GB transfer free on Free plan, metered beyond — far below the bar.
unit none; metered on none
Pricenone stated
Per-object capnot recorded
Retentionnot recorded
Egressnot recorded
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaceunknown
Toolingnot recorded
Composes withnot recorded
ReliabilityAlready covered (dossiers/github-packages.json); 500 MB storage + 1 GB transfer free on Free plan, metered beyond — far below the bar.
NotesAlready covered (dossiers/github-packages.json); 500 MB storage + 1 GB transfer free on Free plan, metered beyond — far below the bar.
Evidence rungreported
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (1)
datesourcewhat it proved
2026-10-21withheldAlready covered (dossiers/github-packages.json) 500 MB storage + 1 GB transfer free on Free plan, metered beyond — far below the bar.
More fields (1)
{
 "dead_end": {
  "failure_class": "egress",
  "why": "Already covered (dossiers/github-packages.json); 500 MB storage + 1 GB transfer free on Free plan, metered beyond — far below the bar.",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (20)
  • $.chaining not-recorded
  • $.confidence_note withheld
  • $.egress.terms not-recorded
  • $.evidence[0].url private-url
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.free_tier.source_url private-url
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note process
  • $.per_object_cap.notes not-recorded
  • $.per_object_cap.source_url private-url
  • $.per_object_cap.stated not-recorded
  • $.retention.notes process
  • $.retention.source_url private-url
  • $.retention.stated not-recorded
  • $.tooling not-recorded
  • $.url private-url

github pages as bulk storage Storage

fails: egressemail?card?R

docs.github.com/en/pages/getting-started-with-github-pages/g · rejected-provider · storage/github-pages-as-bulk-storage · JSON · compare

Free tier1 GB published site and one user/org site per account; 100 GB/month soft bandwidth. Deduplicating into accounts gives ~hundreds of accounts per TB — not viable at 10 TiB.
unit none; metered on none
Pricenone stated
Per-object capnot recorded
Retentionnot recorded
Egressnot recorded
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaceunknown
Toolingnot recorded
Composes withnot recorded
Reliability1 GB published site and one user/org site per account; 100 GB/month soft bandwidth. Deduplicating into accounts gives ~hundreds of accounts per TB — not viable at 10 TiB.
Notes1 GB published site and one user/org site per account; 100 GB/month soft bandwidth. Deduplicating into accounts gives ~hundreds of accounts per TB — not viable at 10 TiB.
Evidence rungreported
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (1)
datesourcewhat it proved
2026-10-21docs.github.com/en/pages/getting-started-with-github-pages/g1 GB published site and one user/org site per account 100 GB/month soft bandwidth. Deduplicating into accounts gives ~hundreds of accounts per TB — not viable at 10 TiB.
More fields (1)
{
 "dead_end": {
  "failure_class": "egress",
  "why": "1 GB published site and one user/org site per account; 100 GB/month soft bandwidth. Deduplicating into accounts gives ~hundreds of accounts per TB — not viable at 10 TiB.",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (15)
  • $.chaining not-recorded
  • $.confidence_note withheld
  • $.egress.terms not-recorded
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note process
  • $.per_object_cap.notes not-recorded
  • $.per_object_cap.stated not-recorded
  • $.retention.notes process
  • $.retention.stated not-recorded
  • $.tooling not-recorded

Git-tracked repo files (direct, or via git-unlimited-storage wrapper) Storage

fails: quotaemailno cardRper-object-cap

github.com · paas · storage/git-tracked-repo-files · JSON · compare

Free tier100 MiB hard per file ('GitHub blocks files larger than 100 MiB'); repository size is soft — "We recommend repositories remain small, ideally less than 1 GB, and less than 5 GB is strongly recommended".
unit GB; metered on unstated
Pricenone stated
Per-object capper file ('GitHub blocks files larger than 100 MiB (104857600 bytes)
Retention| Clone cost grows with history — every revision of a file is retained forever, so this is the worst surface for churn
EgressUnmetered via raw.githubusercontent.com (probed 200) and codeload.github.com (probed 200 on a 270,150,054-byte tarball). Free, anonymous, CDN-fronted.
Identityemail derived from the record's prose, not from an identity field, and no signup was executed: rst surface for churn. Repos above ~5 GB may draw a support email asking for remediation. 100 MiB per file x unlimited repos. The wrapper's own honest-limits table caps the practical us
Limits
  • per-object-cap per file ('GitHub blocks files larger than 100 MiB source
100 MiB hard per file, 50 MiB warning, 5 GB strongly recommended per repo, ~80 write req/min and 500/hr per token.
Bindingper-object-cap the per-object cap sets the shard size and therefore the object count; it bounds the total more tightly than any headline quota
Interfaces3, git git
Toolinggit; wrapper bharatcj/git-unlimited-storage (Python + Node, S3-shaped API, jsDelivr serving path, 0 stars but 77 tests passing) and sueszli/github-lfs-bypass (5 stars).
Composes with100 MiB per file x unlimited repos. The wrapper's own honest-limits table caps the practical use at 'anything under a few hundred gigabytes' and calls itself the 'Wrong tool' for 'storage heading past a terabyte'.
ReliabilityClone cost grows with history — every revision of a file is retained forever, so this is the worst surface for churn. Repos above ~5 GB may draw a support email asking for remediation.
Notes100 MiB hard per file ('GitHub blocks files larger than 100 MiB'); repository size is soft — "We recommend repositories remain small, ideally less than 1 GB, and less than 5 GB is strongly recommended".
Evidence rungreported One page read moves it to documented.
Checked2026-10-21 (inherited); stale on 2026-11-04
Parsed numbers
  • $.limits[0].value limit:per-object-cap 100.0 MiB
Evidence (3)
datesourcewhat it proved
2026-10-21docs.github.com/en/repositories/working-with-files/managing-'GitHub blocks files larger than 100 MiB'; 'less than 5 GB is strongly recommended'
2026-10-21withheldprobe: GET raw.githubusercontent.com/torvalds/linux/master/README -> 200, 6034 bytes; GET codeload.github.com/torvalds/linux/tar.gz/refs/heads/master -> 200, 270150054 bytes
2026-10-21raw.githubusercontent.com/bharatcj/git-unlimited-storage/maihonest limits table: 100 MB single file, 1-5 GB repo
More fields (1)
{
 "dead_end": {
  "failure_class": "quota",
  "why": "100 MiB hard per file ('GitHub blocks files larger than 100 MiB'); repository size is soft — \"We recommend repositories remain small, ideally less than 1 GB, and less than 5 GB is strongly recommended\".",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (5)
  • $.evidence[1].url private-url
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.per_object_cap.notes not-extracted
  • $.retention.notes not-extracted

github actions artifacts as an archive Storage

fails: quotaemail?card?R

docs.github.com/en/actions/reference/limits · rejected-provider · storage/github-actions-artifacts-as-an-archive · JSON · compare

Free tier500 MB on Free, 90-day retention, token required for download. It is a build handoff medium, not storage.
unit none; metered on none
Pricenone stated
Per-object capnot recorded
Retentionnot recorded
Egressnot recorded
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaceunknown
Toolingnot recorded
Composes withnot recorded
Reliability500 MB on Free, 90-day retention, token required for download. It is a build handoff medium, not storage.
Notes500 MB on Free, 90-day retention, token required for download. It is a build handoff medium, not storage.
Evidence rungreported
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (1)
datesourcewhat it proved
2026-10-21docs.github.com/en/actions/reference/limits500 MB on Free, 90-day retention, token required for download. It is a build handoff medium, not storage.
More fields (1)
{
 "dead_end": {
  "failure_class": "not-storage",
  "why": "500 MB on Free, 90-day retention, token required for download. It is a build handoff medium, not storage.",
  "retry_when": "never; it is not storage",
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (14)
  • $.chaining not-recorded
  • $.confidence_note withheld
  • $.egress.terms not-recorded
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note process
  • $.per_object_cap.notes not-recorded
  • $.per_object_cap.stated not-recorded
  • $.retention.notes process
  • $.retention.stated not-recorded
  • $.tooling not-recorded

GitHub Actions dependency cache Storage

fails: quotaemail?card?R

github.com · paas · storage/github-actions-dependency-cache · JSON · compare

Free tier"the limit is 10 GB per repository" by default (configurable up to 10 TB for user-owned repos, but anything past 10 GB is billed).
unit TB; metered on unstated
Pricenone stated
Per-object capnot stated
Retention10 GB/repo; entries unaccessed for over 7 days are removed; 200 uploads/min, 1500 downloads/min, 400 deletes/min per repo. (7 days)
EgressNot a serving path — caches are only reachable from inside a workflow run.
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfacerest rest
Toolingactions/cache, /repos/{o}/{r}/actions/caches REST.
Composes with10 GB x unlimited repos, but every entry self-destructs — multiplication does not help against a 7-day TTL.
ReliabilityExplicitly a cache with eviction: 'GitHub will save the new cache but will begin evicting caches until the total size is less than the repository limit' — i.e. data loss by design.
Notes"the limit is 10 GB per repository" by default (configurable up to 10 TB for user-owned repos, but anything past 10 GB is billed).
Evidence rungreported One page read moves it to documented.
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (2)
datesourcewhat it proved
2026-10-21docs.github.com/en/actions/reference/workflows-and-actions/d'GitHub will remove any cache entries that have not been accessed in over 7 days ... the limit is 10 GB per repository'
2026-10-21withheldprobe: GET api.github.com/repos/cli/cli/actions/caches (anonymous) -> 200
More fields (1)
{
 "dead_end": {
  "failure_class": "quota",
  "why": "\"the limit is 10 GB per repository\" by default (configurable up to 10 TB for user-owned repos, but anything past 10 GB is billed).",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (8)
  • $.evidence[1].url private-url
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.per_object_cap.notes not-extracted
  • $.per_object_cap.stated not-extracted
  • $.retention.notes not-extracted

github actions dependency cache (as storage) Storage

fails: quotaemail?card?R

docs.github.com/en/actions/reference/workflows-and-actions/d · rejected-provider · storage/github-actions-dependency-cache-2 · JSON · compare

Free tierExplicitly a cache with an eviction policy: 10 GB per repo free, entries not accessed for 7 days are removed, LRU eviction at the cap, and caches are never publicly downloadable. Raising the
unit none; metered on none
Pricenone stated
Per-object capnot recorded
Retentionnot recorded
Egressnot recorded
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaceunknown
Toolingnot recorded
Composes withnot recorded
ReliabilityExplicitly a cache with an eviction policy: 10 GB per repo free, entries not accessed for 7 days are removed, LRU eviction at the cap, and caches are never publicly downloadable. Raising the
NotesExplicitly a cache with an eviction policy: 10 GB per repo free, entries not accessed for 7 days are removed, LRU eviction at the cap, and caches are never publicly downloadable. Raising the
Evidence rungreported
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (2)
datesourcewhat it proved
2026-10-21docs.github.com/en/actions/reference/workflows-and-actions/dExplicitly a cache with an eviction policy: 10 GB per repo free, entries not accessed for 7 days are removed, LRU eviction at the cap, and caches are never publicly downloadable. Raising the
2026-10-21github.blog/changelog/2025-11-20-github-actions-cache-size-ccited as the basis of the rejection: Explicitly a cache with an eviction policy: 10 GB per repo free, entries not accessed for 7 days are removed, LRU eviction at the cap, and caches are never publicly downloadable. Raising the
More fields (1)
{
 "dead_end": {
  "failure_class": "quota",
  "why": "Explicitly a cache with an eviction policy: 10 GB per repo free, entries not accessed for 7 days are removed, LRU eviction at the cap, and caches are never publicly downloadable. Raising the",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (15)
  • $.chaining not-recorded
  • $.confidence_note withheld
  • $.egress.terms not-recorded
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note process
  • $.per_object_cap.notes not-recorded
  • $.per_object_cap.stated not-recorded
  • $.retention.notes process
  • $.retention.stated not-recorded
  • $.tooling not-recorded

github campus program (school-level github enterprise cloud) Storage

fails: quotaemail?card?R

docs.github.com/en/education/about-github-education/use-gith · rejected-provider · storage/github-campus-program · JSON · compare

Free tier'50,000 GitHub Actions minutes and 50 GB GitHub Packages storage' — 50 GB, licence 'free for one year and will automatically renew annually'. An order of magnitude short, and Packages is a r
unit none; metered on none
Pricenone stated
Per-object capnot recorded
Retentionnot recorded
Egressnot recorded
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaceunknown
Toolingnot recorded
Composes withnot recorded
Reliability'50,000 GitHub Actions minutes and 50 GB GitHub Packages storage' — 50 GB, licence 'free for one year and will automatically renew annually'. An order of magnitude short, and Packages is a r
Notes'50,000 GitHub Actions minutes and 50 GB GitHub Packages storage' — 50 GB, licence 'free for one year and will automatically renew annually'. An order of magnitude short, and Packages is a r
Evidence rungreported
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (1)
datesourcewhat it proved
2026-10-21docs.github.com/en/education/about-github-education/use-gith'50,000 GitHub Actions minutes and 50 GB GitHub Packages storage' — 50 GB, licence 'free for one year and will automatically renew annually'. An order of magnitude short, and Packages is a r
More fields (1)
{
 "dead_end": {
  "failure_class": "quota",
  "why": "'50,000 GitHub Actions minutes and 50 GB GitHub Packages storage' — 50 GB, licence 'free for one year and will automatically renew annually'. An order of magnitude short, and Packages is a r",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (15)
  • $.chaining not-recorded
  • $.confidence_note withheld
  • $.egress.terms not-recorded
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note process
  • $.per_object_cap.notes not-recorded
  • $.per_object_cap.stated not-recorded
  • $.retention.notes process
  • $.retention.stated not-recorded
  • $.tooling not-recorded

github codespaces disk Storage

fails: quotaemail?card?R

docs.github.com/en/billing/concepts/product-billing/github-c · rejected-provider · storage/github-codespaces-disk · JSON · compare

Free tier15 GB-month of storage on GitHub Free, 120 core-hours. Explicitly a time-based quota in GB-hours, not a disk you can leave data on.
unit none; metered on none
Pricenone stated
Per-object capnot recorded
Retentionnot recorded
Egressnot recorded
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaceunknown
Toolingnot recorded
Composes withnot recorded
Reliability15 GB-month of storage on GitHub Free, 120 core-hours. Explicitly a time-based quota in GB-hours, not a disk you can leave data on.
Notes15 GB-month of storage on GitHub Free, 120 core-hours. Explicitly a time-based quota in GB-hours, not a disk you can leave data on.
Evidence rungreported
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (1)
datesourcewhat it proved
2026-10-21docs.github.com/en/billing/concepts/product-billing/github-c15 GB-month of storage on GitHub Free, 120 core-hours. Explicitly a time-based quota in GB-hours, not a disk you can leave data on.
More fields (1)
{
 "dead_end": {
  "failure_class": "quota",
  "why": "15 GB-month of storage on GitHub Free, 120 core-hours. Explicitly a time-based quota in GB-hours, not a disk you can leave data on.",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (15)
  • $.chaining not-recorded
  • $.confidence_note withheld
  • $.egress.terms not-recorded
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note process
  • $.per_object_cap.notes not-recorded
  • $.per_object_cap.stated not-recorded
  • $.retention.notes process
  • $.retention.stated not-recorded
  • $.tooling not-recorded

github packages — maven registry Storage

fails: quotaemail?card?Rdisagrees

docs.github.com/en/packages/working-with-a-github-packages-r · rejected-provider · storage/github-packages-maven-registry · JSON · compare

Sibling records disagree:

Free tierNo file-size figure published on the doc page at all, so no quotable ceiling — cannot be reported as verified. Anonymous read denied (probed 401 Basic realm="GitHub Package Registry").
unit none; metered on none
Pricenone stated
Per-object capnot recorded
Retentionnot recorded
Egressnot recorded
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaceunknown
Toolingnot recorded
Composes withnot recorded
ReliabilityNo file-size figure published on the doc page at all, so no quotable ceiling — cannot be reported as verified. Anonymous read denied (probed 401 Basic realm="GitHub Package Registry").
NotesNo file-size figure published on the doc page at all, so no quotable ceiling — cannot be reported as verified. Anonymous read denied (probed 401 Basic realm="GitHub Package Registry").
Evidence rungreported
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (1)
datesourcewhat it proved
2026-10-21docs.github.com/en/packages/working-with-a-github-packages-rNo file-size figure published on the doc page at all, so no quotable ceiling — cannot be reported as verified. Anonymous read denied (probed 401 Basic realm="GitHub Package Registry").
More fields (1)
{
 "dead_end": {
  "failure_class": "quota",
  "why": "No file-size figure published on the doc page at all, so no quotable ceiling — cannot be reported as verified. Anonymous read denied (probed 401 Basic realm=\"GitHub Package Registry\").",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (15)
  • $.chaining not-recorded
  • $.confidence_note withheld
  • $.egress.terms not-recorded
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note process
  • $.per_object_cap.notes not-recorded
  • $.per_object_cap.stated not-recorded
  • $.retention.notes process
  • $.retention.stated not-recorded
  • $.tooling not-recorded

github packages — npm registry Storage

fails: quotaemail?card?Rdisagrees

docs.github.com/en/packages/working-with-a-github-packages-r · rejected-provider · storage/github-packages-npm-registry · JSON · compare

Sibling records disagree:

Free tier256 MB per tarball version, and it does not fall under the free-container carve-out; a private package on Free gets 500 MB storage + 1 GB/month transfer shared with Actions artifacts. Public
unit none; metered on none
Pricenone stated
Per-object capnot recorded
Retentionnot recorded
Egressnot recorded
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaceunknown
Toolingnot recorded
Composes withnot recorded
Reliability256 MB per tarball version, and it does not fall under the free-container carve-out; a private package on Free gets 500 MB storage + 1 GB/month transfer shared with Actions artifacts. Public
Notes256 MB per tarball version, and it does not fall under the free-container carve-out; a private package on Free gets 500 MB storage + 1 GB/month transfer shared with Actions artifacts. Public
Evidence rungreported
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (1)
datesourcewhat it proved
2026-10-21docs.github.com/en/packages/working-with-a-github-packages-r256 MB per tarball version, and it does not fall under the free-container carve-out a private package on Free gets 500 MB storage + 1 GB/month transfer shared with Actions artifacts. Public
More fields (1)
{
 "dead_end": {
  "failure_class": "quota",
  "why": "256 MB per tarball version, and it does not fall under the free-container carve-out; a private package on Free gets 500 MB storage + 1 GB/month transfer shared with Actions artifacts. Public",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (15)
  • $.chaining not-recorded
  • $.confidence_note withheld
  • $.egress.terms not-recorded
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note process
  • $.per_object_cap.notes not-recorded
  • $.per_object_cap.stated not-recorded
  • $.retention.notes process
  • $.retention.stated not-recorded
  • $.tooling not-recorded

github packages — rubygems registry Storage

fails: quotaemail?card?Rdisagrees

docs.github.com/en/packages/working-with-a-github-packages-r · rejected-provider · storage/github-packages-rubygems-registry · JSON · compare

Sibling records disagree:

Free tierDocumented cap is on metadata, not payload ('maximum uncompressed size of a gem's metadata.gz file must be less than 2 MB'), and gems are a poor container for bulk bytes. No bulk-win over Nu
unit none; metered on none
Pricenone stated
Per-object capnot recorded
Retentionnot recorded
Egressnot recorded
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaceunknown
Toolingnot recorded
Composes withnot recorded
ReliabilityDocumented cap is on metadata, not payload ('maximum uncompressed size of a gem's metadata.gz file must be less than 2 MB'), and gems are a poor container for bulk bytes. No bulk-win over Nu
NotesDocumented cap is on metadata, not payload ('maximum uncompressed size of a gem's metadata.gz file must be less than 2 MB'), and gems are a poor container for bulk bytes. No bulk-win over Nu
Evidence rungreported
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (1)
datesourcewhat it proved
2026-10-21docs.github.com/en/packages/working-with-a-github-packages-rDocumented cap is on metadata, not payload ('maximum uncompressed size of a gem's metadata.gz file must be less than 2 MB'), and gems are a poor container for bulk bytes. No bulk-win over Nu
More fields (1)
{
 "dead_end": {
  "failure_class": "quota",
  "why": "Documented cap is on metadata, not payload ('maximum uncompressed size of a gem's metadata.gz file must be less than 2 MB'), and gems are a poor container for bulk bytes. No bulk-win over Nu",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (15)
  • $.chaining not-recorded
  • $.confidence_note withheld
  • $.egress.terms not-recorded
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note process
  • $.per_object_cap.notes not-recorded
  • $.per_object_cap.stated not-recorded
  • $.retention.notes process
  • $.retention.stated not-recorded
  • $.tooling not-recorded

GitHub Pages (Fastly-served, 1 GB site) Storage

fails: quotaemail?card?R

pages.github.com · paas · storage/github-pages · JSON · compare

Free tier"Published GitHub Pages sites may be no larger than 1 GB"; source repositories "recommended limit of 1 GB". Bandwidth: "a *soft* bandwidth limit of 100 GB per month".
unit GB; metered on unstated
Pricenone stated
Per-object capnot stated
Retentionnot stated
Egress100 GB/month soft cap, then throttling or a support email; served from Fastly ('Via: 1.1 varnish, X-Served-By: cache-bom-...'). Free to Cloudflare in front.
free_allowance: 100 GB per month
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfacegit git
Toolinggit push to a pages branch, or actions/deploy-pages; any static generator. No special client needed.
Composes withone site per account ('You can only create one user or organization site for each account'), so multiplication is accounts x 1 GB — hundreds of accounts for a TB. Poor.
ReliabilitySoft limits are enforced by support action rather than by hard rejection; rate limiting returns 429.
Notes"Published GitHub Pages sites may be no larger than 1 GB"; source repositories "recommended limit of 1 GB". Bandwidth: "a *soft* bandwidth limit of 100 GB per month".
Evidence rungreported One page read moves it to documented.
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (2)
datesourcewhat it proved
2026-10-21docs.github.com/en/pages/getting-started-with-github-pages/g'Published GitHub Pages sites may be no larger than 1 GB'; 'soft bandwidth limit of 100 GB per month'
2026-10-21withheldprobe: GET pages.github.com -> 200, Via: 1.1 varnish, X-Served-By: cache-bom-vanm7210067-BOM (Fastly)
More fields (1)
{
 "dead_end": {
  "failure_class": "egress",
  "why": "\"Published GitHub Pages sites may be no larger than 1 GB\"; source repositories \"recommended limit of 1 GB\". Bandwidth: \"a *soft* bandwidth limit of 100 GB per month\".",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (9)
  • $.evidence[1].url private-url
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.per_object_cap.notes not-extracted
  • $.per_object_cap.stated not-extracted
  • $.retention.notes not-extracted
  • $.retention.stated not-extracted

github pages as a >1 gb site Storage

fails: quotaemail?card?R

docs.github.com/en/pages/getting-started-with-github-pages/g · rejected-provider · storage/github-pages-as-a-1-gb-site · JSON · compare

Free tierHard 1 GB per published site. The 10 GB artifact limit in upload-pages-artifact misleads people into thinking 10 GB is available; the served site is still capped at 1 GB. Only useful as a mu
unit none; metered on none
Pricenone stated
Per-object capnot recorded
Retentionnot recorded
Egressnot recorded
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaceunknown
Toolingnot recorded
Composes withnot recorded
ReliabilityHard 1 GB per published site. The 10 GB artifact limit in upload-pages-artifact misleads people into thinking 10 GB is available; the served site is still capped at 1 GB. Only useful as a mu
NotesHard 1 GB per published site. The 10 GB artifact limit in upload-pages-artifact misleads people into thinking 10 GB is available; the served site is still capped at 1 GB. Only useful as a mu
Evidence rungreported
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (2)
datesourcewhat it proved
2026-10-21docs.github.com/en/pages/getting-started-with-github-pages/gHard 1 GB per published site. The 10 GB artifact limit in upload-pages-artifact misleads people into thinking 10 GB is available; the served site is still capped at 1 GB. Only useful as a mu
2026-10-21docs.github.com/en/pages/getting-started-with-github-pages/ucited as the basis of the rejection: Hard 1 GB per published site. The 10 GB artifact limit in upload-pages-artifact misleads people into thinking 10 GB is available; the served site is still capped at 1 GB. Only useful as a mu
More fields (1)
{
 "dead_end": {
  "failure_class": "quota",
  "why": "Hard 1 GB per published site. The 10 GB artifact limit in upload-pages-artifact misleads people into thinking 10 GB is available; the served site is still capped at 1 GB. Only useful as a mu",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (15)
  • $.chaining not-recorded
  • $.confidence_note withheld
  • $.egress.terms not-recorded
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note process
  • $.per_object_cap.notes not-recorded
  • $.per_object_cap.stated not-recorded
  • $.retention.notes process
  • $.retention.stated not-recorded
  • $.tooling not-recorded

github student developer pack (as a storage programme) Storage

fails: quotaemail?card?R

education.github.com/pack · rejected-provider · storage/github-student-developer-pack · JSON · compare

Free tierNo bulk storage in the pack. The only storage lines are GitHub Pro's 2 GB Packages + 10 GB LFS, plus a Microsoft 365 seat that is tied to a personal account and not API-friendly at scale. Th
unit none; metered on none
Pricenone stated
Per-object capnot recorded
Retentionnot recorded
Egressnot recorded
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaceunknown
Toolingnot recorded
Composes withnot recorded
ReliabilityNo bulk storage in the pack. The only storage lines are GitHub Pro's 2 GB Packages + 10 GB LFS, plus a Microsoft 365 seat that is tied to a personal account and not API-friendly at scale. Th
NotesNo bulk storage in the pack. The only storage lines are GitHub Pro's 2 GB Packages + 10 GB LFS, plus a Microsoft 365 seat that is tied to a personal account and not API-friendly at scale. Th
Evidence rungreported
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (1)
datesourcewhat it proved
2026-10-21education.github.com/packNo bulk storage in the pack. The only storage lines are GitHub Pro's 2 GB Packages + 10 GB LFS, plus a Microsoft 365 seat that is tied to a personal account and not API-friendly at scale. Th
More fields (1)
{
 "dead_end": {
  "failure_class": "quota",
  "why": "No bulk storage in the pack. The only storage lines are GitHub Pro's 2 GB Packages + 10 GB LFS, plus a Microsoft 365 seat that is tied to a personal account and not API-friendly at scale. Th",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (15)
  • $.chaining not-recorded
  • $.confidence_note withheld
  • $.egress.terms not-recorded
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note process
  • $.per_object_cap.notes not-recorded
  • $.per_object_cap.stated not-recorded
  • $.retention.notes process
  • $.retention.stated not-recorded
  • $.tooling not-recorded

github student developer pack (bundled storage) Storage

fails: quotaemail?card?R

education.github.com/pack · rejected-provider · storage/github-student-developer-pack-2 · JSON · compare

Free tierThe 2026 pack bundles no bulk storage at all. GitHub Pro gives only 2 GB Packages + 10 GB LFS; the Microsoft 365 offer is '1TB of cloud Storage' for one student; Azure is '$100 in Azure cred
unit none; metered on none
Pricenone stated
Per-object capnot recorded
Retentionnot recorded
Egressnot recorded
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaceunknown
Toolingnot recorded
Composes withnot recorded
ReliabilityThe 2026 pack bundles no bulk storage at all. GitHub Pro gives only 2 GB Packages + 10 GB LFS; the Microsoft 365 offer is '1TB of cloud Storage' for one student; Azure is '$100 in Azure cred
NotesThe 2026 pack bundles no bulk storage at all. GitHub Pro gives only 2 GB Packages + 10 GB LFS; the Microsoft 365 offer is '1TB of cloud Storage' for one student; Azure is '$100 in Azure cred
Evidence rungreported
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (2)
datesourcewhat it proved
2026-10-21education.github.com/packThe 2026 pack bundles no bulk storage at all. GitHub Pro gives only 2 GB Packages + 10 GB LFS; the Microsoft 365 offer is '1TB of cloud Storage' for one student; Azure is '$100 in Azure cred
2026-10-21docs.github.com/en/billing/reference/product-usage-includedcited as the basis of the rejection: The 2026 pack bundles no bulk storage at all. GitHub Pro gives only 2 GB Packages + 10 GB LFS; the Microsoft 365 offer is '1TB of cloud Storage' for one student; Azure is '$100 in Azure cred
More fields (1)
{
 "dead_end": {
  "failure_class": "quota",
  "why": "The 2026 pack bundles no bulk storage at all. GitHub Pro gives only 2 GB Packages + 10 GB LFS; the Microsoft 365 offer is '1TB of cloud Storage' for one student; Azure is '$100 in Azure cred",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (15)
  • $.chaining not-recorded
  • $.confidence_note withheld
  • $.egress.terms not-recorded
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note process
  • $.per_object_cap.notes not-recorded
  • $.per_object_cap.stated not-recorded
  • $.retention.notes process
  • $.retention.stated not-recorded
  • $.tooling not-recorded

github student developer pack — storage angle Storage

fails: quotaemail?card?R

education.github.com/pack · rejected-provider · storage/github-student-developer-pack-storage-angle · JSON · compare

Free tierThe Pack's 2026 partner list has no meaningful bulk-storage grant. What it offers is Microsoft Azure $100 credit (a trial that expires, 5-20 GB practical), 1 TB OneDrive via a Microsoft 365
unit none; metered on none
Pricenone stated
Per-object capnot recorded
Retentionnot recorded
Egressnot recorded
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaceunknown
Toolingnot recorded
Composes withnot recorded
ReliabilityThe Pack's 2026 partner list has no meaningful bulk-storage grant. What it offers is Microsoft Azure $100 credit (a trial that expires, 5-20 GB practical), 1 TB OneDrive via a Microsoft 365
NotesThe Pack's 2026 partner list has no meaningful bulk-storage grant. What it offers is Microsoft Azure $100 credit (a trial that expires, 5-20 GB practical), 1 TB OneDrive via a Microsoft 365
Evidence rungreported
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (1)
datesourcewhat it proved
2026-10-21education.github.com/packThe Pack's 2026 partner list has no meaningful bulk-storage grant. What it offers is Microsoft Azure $100 credit (a trial that expires, 5-20 GB practical), 1 TB OneDrive via a Microsoft 365
More fields (1)
{
 "dead_end": {
  "failure_class": "retention",
  "why": "The Pack's 2026 partner list has no meaningful bulk-storage grant. What it offers is Microsoft Azure $100 credit (a trial that expires, 5-20 GB practical), 1 TB OneDrive via a Microsoft 365",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (15)
  • $.chaining not-recorded
  • $.confidence_note withheld
  • $.egress.terms not-recorded
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note process
  • $.per_object_cap.notes not-recorded
  • $.per_object_cap.stated not-recorded
  • $.retention.notes process
  • $.retention.stated not-recorded
  • $.tooling not-recorded

iroh-live Storage

fails: quotaemail?card?R

api.github.com/orgs/n0-computer/repos · rejected-provider · storage/iroh-live · JSON · compare

Free tierMedia livestreaming over iroh (134 stars). Live media is a stream fan-out problem, not a stored-object problem; nothing is retained.
unit none; metered on none
Pricenone stated
Per-object capnot recorded
Retentionnot recorded
Egressnot recorded
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaceunknown
Toolingnot recorded
Composes withnot recorded
ReliabilityMedia livestreaming over iroh (134 stars). Live media is a stream fan-out problem, not a stored-object problem; nothing is retained.
NotesMedia livestreaming over iroh (134 stars). Live media is a stream fan-out problem, not a stored-object problem; nothing is retained.
Evidence rungreported
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (1)
datesourcewhat it proved
2026-10-21api.github.com/orgs/n0-computer/reposMedia livestreaming over iroh (134 stars). Live media is a stream fan-out problem, not a stored-object problem; nothing is retained.
More fields (1)
{
 "dead_end": {
  "failure_class": "quota",
  "why": "Media livestreaming over iroh (134 stars). Live media is a stream fan-out problem, not a stored-object problem; nothing is retained.",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (15)
  • $.chaining not-recorded
  • $.confidence_note withheld
  • $.egress.terms not-recorded
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note process
  • $.per_object_cap.notes not-recorded
  • $.per_object_cap.stated not-recorded
  • $.retention.notes process
  • $.retention.stated not-recorded
  • $.tooling not-recorded

github releases as buzzheavier's actual upstream (the fafda path) Storage

deademail?card?R

api.github.com/repos/GrandpaNutz/fafda · rejected-provider · storage/github-releases-as-buzzheavier-s-actual-upstream · JSON · compare

Free tierWorks as an architecture, dead as a specific artifact: GrandpaNutz/fafda 404s, the user account 404s, and buzzheavier's own post predicted it ('I don't trust GitHub. They can nuke my accou
unit none; metered on none
Pricenone stated
Per-object capnot recorded
Retentionnot recorded
Egressnot recorded
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaceunknown
Toolingnot recorded
Composes withnot recorded
ReliabilityWorks as an architecture, dead as a specific artifact: GrandpaNutz/fafda 404s, the user account 404s, and buzzheavier's own post predicted it ('I don't trust GitHub. They can nuke my accou
NotesWorks as an architecture, dead as a specific artifact: GrandpaNutz/fafda 404s, the user account 404s, and buzzheavier's own post predicted it ('I don't trust GitHub. They can nuke my accou
Evidence rungreported
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (3)
datesourcewhat it proved
2026-10-21api.github.com/repos/GrandpaNutz/fafdaWorks as an architecture, dead as a specific artifact: GrandpaNutz/fafda 404s, the user account 404s, and buzzheavier's own post predicted it ('I don't trust GitHub. They can nuke my accou
2026-10-21api.github.com/users/GrandpaNutzcited as the basis of the rejection: Works as an architecture, dead as a specific artifact: GrandpaNutz/fafda 404s, the user account 404s, and buzzheavier's own post predicted it ('I don't trust GitHub. They can nuke my accou
2026-10-21git.gay/ajtabjs/fafdacited as the basis of the rejection: Works as an architecture, dead as a specific artifact: GrandpaNutz/fafda 404s, the user account 404s, and buzzheavier's own post predicted it ('I don't trust GitHub. They can nuke my accou
More fields (1)
{
 "dead_end": {
  "failure_class": "dead-service",
  "why": "Works as an architecture, dead as a specific artifact: `GrandpaNutz/fafda` 404s, the user account 404s, and buzzheavier's own post predicted it ('I don't trust GitHub. They can nuke my accou",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (15)
  • $.chaining not-recorded
  • $.confidence_note withheld
  • $.egress.terms not-recorded
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note process
  • $.per_object_cap.notes not-recorded
  • $.per_object_cap.stated not-recorded
  • $.retention.notes process
  • $.retention.stated not-recorded
  • $.tooling not-recorded