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
- GitHub Copilot Coding subscriptions★ qualifiesemailno cardDrequest-rate
- GitHub Codespaces Compute★ qualifiesemailno cardDvolume-quota
- GitHub Releases Egress and tunnels★ qualifiesemailno cardMper-object-cap
- GitHub Releases (release assets) Storage★ qualifiesinstitutionno cardDper-object-cap
- GitHub Container Registry CI runnerscaveatemailno cardDper-object-cap
- GitHub Actions on a private repository CI runnerscaveatemailno cardDrequest-rate
- GitHub Packages CI runnerscaveatemailno cardDper-object-cap
- GitHub Actions Computecaveatemailno cardDretention-clamped
- GitHub Copilot cloud sandboxes Computecaveatemail?card?Drequest-rate
- GitHub Secure Open Computecaveatemailno cardDwrite-gated
- GitHub Sponsors Computecaveatemailno cardphoneD
- GitHub Actions Artifacts (public repositories) Storagecaveatanonymousno cardRretention-clamped
- GitHub Gist Storagecaveatinstitutionno cardRper-object-cap
- GitHub Git LFS StoragecaveatcardcardRper-object-cap
- GitHub issue/PR comment attachments (user-attachments) Storagecaveatanonymousno cardRper-object-cap
- GitHub Packages - public packages (npm/Maven/NuGet/RubyGems) Storagecaveatemail?card?Rdisagrees
- GitHub Copilot Student Computefails: identityinstitutionno cardphoneDrequest-rate
- GitHub Student Developer Computefails: identityinstitutionno cardDwrite-gated
- GitHub Student Developer Pack Egress and tunnelsfails: identityinstitutionno cardDwrite-gated
- github lfs as bulk storage Storagefails: egressemail?card?R
- github packages Storagefails: egressemail?card?Rdisagrees
- github pages as bulk storage Storagefails: egressemail?card?R
- Git-tracked repo files (direct, or via git-unlimited-storage wrapper) Storagefails: quotaemailno cardRper-object-cap
- github actions artifacts as an archive Storagefails: quotaemail?card?R
- GitHub Actions dependency cache Storagefails: quotaemail?card?R
- github actions dependency cache (as storage) Storagefails: quotaemail?card?R
- github campus program (school-level github enterprise cloud) Storagefails: quotaemail?card?R
- github codespaces disk Storagefails: quotaemail?card?R
- github packages — maven registry Storagefails: quotaemail?card?Rdisagrees
- github packages — npm registry Storagefails: quotaemail?card?Rdisagrees
- github packages — rubygems registry Storagefails: quotaemail?card?Rdisagrees
- GitHub Pages (Fastly-served, 1 GB site) Storagefails: quotaemail?card?R
- github pages as a >1 gb site Storagefails: quotaemail?card?R
- github student developer pack (as a storage programme) Storagefails: quotaemail?card?R
- github student developer pack (bundled storage) Storagefails: quotaemail?card?R
- github student developer pack — storage angle Storagefails: quotaemail?card?R
- iroh-live Storagefails: quotaemail?card?R
- github releases as buzzheavier's actual upstream (the fafda path) Storagedeademail?card?R
GitHub Actions on a public repository CI runners
★ qualifiesemailno cardDper-object-cap
| Free tier | standard 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 |
|---|---|
| Price | none stated |
| Per-object cap | 6 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 |
| Retention | artifacts and logs are kept 90 days by default and configurable per repository; the runner is destroyed at the end of the job (90 days) |
| Egress | no 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 |
| Identity | email a GitHub account; no card for a public repository |
| Limits |
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) |
| Binding | per-object-cap |
| Interface | git, 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 |
| Tooling | the runner image is Ubuntu 24.04 with 4 vCPU, 16 GB RAM and 14 GB SSD; any package manager, any compiler, docker buildx |
| Composes with | free 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 |
| Reliability | the repository, its workflows and its logs are public, which is a technical property of the free tier and not a policy question |
| Notes | Unlimited 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 rung | documented the billing and limits pages were read today and state both the unlimited public minutes and each cap. |
| Checked | 2026-10-23 (live); stale on 2026-11-22 |
| Parsed numbers |
|
Evidence (5)
| date | source | what it proved |
|---|---|---|
| 2026-10-22 | docs.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-22 | docs.github.com/en/actions/reference/limits | Job 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-22 | docs.github.com/en/actions/reference/runners/github-hosted-r | ubuntu-latest is 4 vCPU, 16 GB RAM, 14 GB SSD; ubuntu-slim is 1 vCPU and 5 GB |
| 2026-10-22 | docs.github.com/en/actions/reference/workflows-and-actions/d | 10 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-22 | docs.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
| Free tier | Free: 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. |
|---|---|
| Price | none stated |
| Per-object cap | not applicable: a subscription meters usage, not objects |
| Retention | not applicable |
| Egress | not applicable: the vendor serves the inference |
| Identity | email a GitHub account; the page states 'No credit card required' for Free |
| Limits |
|
| Binding | request-rate |
| Interface | cli, rest Copilot CLI, plus agent mode and code review inside the editor and on github.com |
| Tooling | gh CLI extension; agent mode in VS Code, JetBrains, Neovim, Xcode, Eclipse |
| Composes with | a $0 agent surface for a repository task; the Copilot CLI is the part a script can drive |
| Reliability | no reliability event recorded |
| Notes | Free 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 rung | documented 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. |
| Checked | 2026-10-23 (live); stale on 2026-11-22 |
Evidence (1)
| date | source | what it proved |
|---|---|---|
| 2026-10-22 | github.com/features/copilot/plans | Free 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_notenone-observed$.retention.statednot-applicable
GitHub Codespaces Compute
★ qualifiesemailno cardDvolume-quota
| Free tier | Quoted: '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. |
|---|---|
| Price | none stated |
| Per-object cap | not applicable: the unit is a session, not an object |
| Retention | 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.' The disk persists across a stop and start until that clock runs out. (30 days) |
| Egress | no 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 |
| Identity | email 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 |
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. |
| Binding | volume-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. |
| Interface | rest, cli gh codespace ssh and the VS Code or browser client; a devcontainer defines the image |
| Tooling | gh CLI, the Codespaces API, devcontainer.json, prebuilds |
| Composes with | the cheapest path to a real Linux dev machine with a shell that a GitHub identity already opens |
| Reliability | a 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 |
| Notes | The 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 rung | documented 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. |
| Checked | 2026-10-25 (live); stale on 2026-11-24 |
| Parsed numbers |
|
Evidence (24)
| date | source | what it proved |
|---|---|---|
| 2026-10-22 | docs.github.com/en/billing/concepts/product-billing/github-c | GitHub Free for personal accounts: 15 GB-month storage and 120 hours compute a month |
| 2026-10-22 | docs.github.com/en/billing/concepts/product-billing/github-c | if the account has no valid payment method, usage is blocked once the quota is used |
| 2026-10-22 | docs.github.com/en/billing/concepts/product-billing/github-c | the compute cost is proportional to the core count, so a 16-core machine costs eight times a 2-core one |
| 2026-10-22 | docs.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-22 | docs.github.com/en/codespaces/troubleshooting/troubleshootin | quoted: 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-22 | docs.github.com/en/codespaces/troubleshooting/troubleshootin | quoted: only the creator, an org owner, or the retention period can delete a codespace |
| 2026-10-22 | docs.github.com/en/billing/concepts/product-billing/github-c | the 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-22 | docs.github.com/en/codespaces/overview | machine 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-22 | docs.github.com/en/billing/concepts/product-billing/github-c | the 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-24 | docs.github.com/en/codespaces/overview | quoted: '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-24 | github.com/features/codespaces | quoted: '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-24 | docs.github.com/en/billing/concepts/product-billing/github-c | quoted: 'If your account does not have a valid payment method on file, usage is blocked once you use up your quota.' |
| 2026-10-24 | docs.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-24 | docs.github.com/en/billing/concepts/product-billing/github-c | quoted: '| GitHub Free for personal accounts | 15 GB-month | 120 hrs |' |
| 2026-10-24 | docs.github.com/en/billing/concepts/product-billing/github-c | quoted: '| Codespaces compute | 2 core | 1 hour | 2 | $0.18 |' — the rate that makes 120 core-hours 60 hours of 2 cores |
| 2026-10-24 | docs.github.com/en/billing/concepts/product-billing/github-c | quoted: 'All GitHub personal accounts include a quota of free compute time and storage for GitHub Codespaces.' |
| 2026-10-24 | docs.github.com/en/billing/concepts/product-billing/github-c | quoted: '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-24 | docs.github.com/en/billing/concepts/product-billing/github-c | quoted: '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-24 | docs.github.com/en/codespaces/overview | quoted: '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-24 | docs.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-24 | docs.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-24 | docs.github.com/en/codespaces/developing-in-a-codespace/forw | quoted: '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-24 | docs.github.com/en/site-policy/github-terms/github-terms-for | 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)' |
| 2026-10-24 | docs.github.com/en/get-started/start-your-journey/creating-a | quoted: '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
| Free tier | no total size and no bandwidth limit; under 2 GiB per file; 1,000 assets per release unit unlimited; metered on downloaded-bytes |
|---|---|
| Price | none stated |
| Per-object cap | under 2 GiB per asset (2147483648 bytes) |
| Retention | an asset lives until the release is deleted |
| Egress | no bandwidth limit stated; ranged GETs served from release-assets.githubusercontent.com with a fresh signature per request |
| Identity | email a GitHub account |
| Limits | |
| Binding | per-object-cap 2 GiB per asset sets the shard size; the volume itself is not metered. |
| Interface | rest, cli https://github.com/OWNER/REPO/releases/download/TAG/NAME, redirecting to a signed release-assets URL |
| Tooling | gh release, curl |
| Composes with | the 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. |
| Reliability | the download URL redirects to a signed release-assets host; the signature is per request |
| Notes | 14.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 rung | measured |
| Checked | 2026-10-23 (live); stale on 2026-12-22 |
| Parsed numbers |
|
Evidence (3)
| date | source | what it proved |
|---|---|---|
| 2026-10-22 | docs.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-22 | probe: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-22 | probe:https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 | 1 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
| Free tier | No 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 |
|---|---|
| Price | none stated |
| Per-object cap | 2 GiB per file (2147483648 bytes) |
| Retention | This is the ONLY cap found in the entire CI/CD field that is not a quota. No expiry: releases persist until deleted |
| Egress | Free 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. |
| Identity | institution 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 |
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. |
| Binding | per-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 |
| Interface | rest, rclone, cli rest |
| Tooling | REST 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 with | UNBOUNDED: 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. |
| Reliability | Very 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. |
| Notes | No 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 rung | documented 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. |
| Checked | 2026-10-21 (inherited); stale on 2026-11-20 |
| Parsed numbers |
|
Evidence (5)
| date | source | what it proved |
|---|---|---|
| 2026-10-22 | docs.github.com/en/repositories/releasing-projects-on-github | 2 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-21 | docs.github.com/en/repositories/releasing-projects-on-github | 'There is no limit on the total size of a release, nor bandwidth usage' |
| 2026-10-21 | docs.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-21 | github.com/cli/cli/releases/download/v2.80.0/gh_2.80.0_linux | probe: curl -L -r 0-1023 -> 302 to release-assets.githubusercontent.com, then 206 with 1024 bytes, no auth |
| 2026-10-21 | withheld | probe: 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].urlprivate-url$.free_tier.notesprocess$.per_object_cap.notesnot-extracted$.retention.notesnot-extracted
GitHub Container Registry CI runners
caveatemailno cardDper-object-cap
| Free tier | public 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 |
|---|---|
| Price | none stated |
| Per-object cap | 500 MB total private storage on Free, shared with Packages and Actions artifacts; no per-layer cap is published |
| Retention | a package persists until deleted; it shares the storage pool with artifacts, which expire at 90 days (90 days) |
| Egress | 1 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 |
| Identity | email a GitHub account; a personal access token with packages scope for a push |
| Limits |
'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 |
| Binding | per-object-cap |
| Interface | oci, rest the OCI distribution API at ghcr.io; docker login with a personal access token or GITHUB_TOKEN |
| Tooling | docker, podman, skopeo, oras, crane |
| Composes with | the artifact store for a GitHub Actions build, and the link that fails first: 500 MB is one modest image |
| Reliability | a 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 |
| Notes | 500 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 rung | documented 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. |
| Checked | 2026-10-23 (live); stale on 2026-11-22 |
| Parsed numbers |
|
Evidence (5)
| date | source | what it proved |
|---|---|---|
| 2026-10-22 | probe:https://ghcr.io/token?scope=repository:catthehacker/ubuntu:pull&service=ghcr.io | 200 with 69 bytes of token JSON, {"token":"djE6Y2F0dGhlaGFja2VyL3VidW50dToxNzkyNjQxMjI2Njg2NzQ2MTE3"}, sha256 e26b35c1dc64bf51b6e02f5a20f7d7fbf436a944d445155e8fc313a42ec3a808; GHCR issues an anonymous pull token for a public package |
| 2026-10-22 | probe:https://ghcr.io/v2/catthehacker/ubuntu/manifests/act-latest | 200 with 754 bytes, schemaVersion 2, mediaType application/vnd.oci.image.index.v1+json, sha256 62d572b92f9f32d3427b6d220ad1f9dca9c7b6ffad37d295425037dbff78abaf; the anonymous token fetches a manifest |
| 2026-10-22 | probe:https://ghcr.io/token?scope=repository:library/hello-world:pull&service=ghcr.io | 403 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-22 | probe:https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/alpine:pull | 200 with 5,489 bytes of token JSON, so Docker Hub does issue anonymous pull tokens and a public base image is free |
| 2026-10-22 | docs.github.com/en/billing/concepts/product-billing/github-p | storage 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
- 2026-10-22 A `measured` claim that GHCR issues no anonymous pull tokens was a probe of a repository that does not exist
GitHub Actions on a private repository CI runners
caveatemailno cardDrequest-rate
| Free tier | 2,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 |
|---|---|
| Price | USD 0.006 per Linux minute beyond the allowance |
| Per-object cap | 6 hours per job, the same as the public path; the difference is the monthly minute pool |
| Retention | artifacts kept 90 days by default; the runner is destroyed at the end of the job (90 days) |
| Egress | no egress charge; artifact storage is 500 MB on Free and shared with GitHub Packages free_allowance: 500 MB artifact and package storage |
| Identity | email a GitHub account; no card while inside the included amounts |
| Limits | |
| Binding | request-rate |
| Interface | git, cli the same workflow YAML; minutes are charged to the repository owner, not the trigger |
| Tooling | the same runner images as the public path |
| Composes with | the 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 |
| Reliability | no reliability event recorded |
| Notes | 2,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 rung | documented the billing page's plan table was read today. |
| Checked | 2026-10-23 (live); stale on 2026-11-22 |
| Parsed numbers |
|
Evidence (2)
| date | source | what it proved |
|---|---|---|
| 2026-10-22 | docs.github.com/en/billing/concepts/product-billing/github-a | Free: 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-22 | docs.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_notenone-observed
GitHub Packages CI runners
caveatemailno cardDper-object-cap
| Free tier | 500 MB of storage and 1 GB of transfer a month on GitHub Free, shared with Actions artifacts unit MB; metered on stored-bytes |
|---|---|
| Price | none stated |
| Per-object cap | 500 MB total across all package types and artifacts on Free |
| Retention | packages persist until deleted; artifacts in the same pool expire at 90 days (90 days) |
| Egress | 1 GB of transfer a month on Free for private packages free_allowance: 1 GB per month |
| Identity | email a GitHub account |
| Limits | |
| Binding | per-object-cap |
| Interface | rest, cli npm, Maven, Gradle, NuGet, RubyGems and Container registries under one billing pool |
| Tooling | the native package manager for each ecosystem, plus the gh CLI |
| Composes with | the same pool as GHCR, so a repository that publishes both competes with itself |
| Reliability | no reliability event recorded |
| Notes | Recorded separately from GHCR because the pool is shared and the two are routinely counted as if they were two allowances. |
| Evidence rung | documented the billing page was read today. |
| Checked | 2026-10-23 (live); stale on 2026-11-22 |
| Parsed numbers |
|
Evidence (1)
| date | source | what it proved |
|---|---|---|
| 2026-10-22 | docs.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_notenone-observed
GitHub Actions Compute
caveatemailno cardDretention-clamped
| Free tier | On 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. |
|---|---|
| Price | none stated |
| Per-object cap | not applicable |
| Retention | Quoted: '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. |
| Egress | not published on any page read: no egress quota, shaping tier or per-byte price is stated for a standard GitHub-hosted runner. |
| Identity | email 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 |
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. |
| Binding | retention-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. |
| Interface | ssh a workflow YAML in .github/workflows; a runner with a shell and a network |
| Tooling | a full Ubuntu, Windows or macOS runner with a shell, package managers and a checkout |
| Composes with | a runner is a real machine for up to six hours, destroyed at the end of the job |
| Reliability | no reliability event recorded |
| Notes | The 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 rung | documented 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. |
| Checked | 2026-10-25 (live); stale on 2026-11-24 |
| Parsed numbers |
|
Evidence (24)
| date | source | what it proved |
|---|---|---|
| 2026-10-22 | docs.github.com/en/actions/reference/limits | each job on a GitHub-hosted runner can run up to 6 hours and is terminated and failed at the limit |
| 2026-10-22 | docs.github.com/en/actions/reference/limits | a job matrix generates at most 256 jobs per workflow run; a workflow run is capped at 35 days |
| 2026-10-22 | docs.github.com/en/actions/reference/limits | self-hosted jobs are capped at 5 days of execution and 24 hours of queue time |
| 2026-10-22 | docs.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-24 | docs.github.com/en/actions/reference/runners/github-hosted-r | quoted: '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-24 | docs.github.com/en/billing/concepts/product-billing/github-a | quoted: 'GitHub Actions usage is free for self-hosted runners and for public repositories that use standard GitHub-hosted runners' |
| 2026-10-24 | docs.github.com/en/actions/reference/limits | quoted: '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-24 | docs.github.com/en/actions/reference/workflows-and-actions/e | quoted: '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-24 | docs.github.com/en/actions/reference/runners/github-hosted-r | quoted: '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-24 | docs.github.com/en/actions/reference/runners/github-hosted-r | quoted: '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-24 | docs.github.com/en/billing/concepts/product-billing/github-a | quoted: '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-24 | docs.github.com/en/billing/concepts/product-billing/github-a | quoted: '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-24 | docs.github.com/en/actions/reference/limits | 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.' Row category 'All GitHub-hosted runners'. |
| 2026-10-24 | docs.github.com/en/actions/reference/limits | 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.' Threshold column: '35 days / workflow run'. |
| 2026-10-24 | docs.github.com/en/actions/reference/limits | concurrency table quoted: '| Standard GitHub-hosted runner | Free | 20 | 5 | Not applicable |' — 20 total concurrent jobs, 5 macOS, no GPU jobs. |
| 2026-10-24 | docs.github.com/en/actions/reference/workflows-and-actions/e | quoted: '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-24 | docs.github.com/en/actions/how-tos/manage-runners/github-hos | quoted, 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-24 | docs.github.com/en/authentication/keeping-your-account-and-d | quoted: 'GitHub-hosted runners use dynamically assigned IP addresses from shared infrastructure.' No static address is available to a standard runner. |
| 2026-10-24 | docs.github.com/en/site-policy/github-terms/github-terms-for | quoted: '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-24 | docs.github.com/en/site-policy/github-terms/github-terms-for | not published |
| 2026-10-24 | docs.github.com/en/get-started/start-your-journey/creating-a | quoted: 'To get started with GitHub.com, you need to have a personal account and a verified email address.' |
| 2026-10-24 | docs.github.com/en/authentication/securing-your-account-with | quoted: '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-24 | docs.github.com/en/actions/reference/workflows-and-actions/d | quoted: '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-24 | docs.github.com/en/site-policy/acceptable-use-policies/githu | quoted: '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.meteredegress-unknown$.evidence[19].provedwithheld$.per_object_cap.notesprocess$.per_object_cap.statednot-applicable$.reliability_notenone-observed
Corrections
- 2026-10-22 GitHub Actions public repositories are free and unlimited; the 2,000 minutes are private
GitHub Copilot cloud sandboxes Compute
caveatemail?card?Drequest-rate
| Free tier | a 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 |
|---|---|
| Price | none stated |
| Per-object cap | not stated |
| Retention | not stated |
| Egress | not stated |
| Identity | email (placeholder) not published |
| Limits |
not stated |
| Binding | request-rate |
| Interface | unknown |
| Tooling | not stated |
| Composes with | not stated |
| Reliability | no reliability event recorded |
| Evidence rung | documented 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 |
| Checked | 2026-10-23 (live); stale on 2026-11-22 |
Evidence (2)
| date | source | what it proved |
|---|---|---|
| 2026-10-02 | docs.github.com/en/billing/concepts/product-billing/cloud-an | not published |
| 2026-10-22 | docs.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)
$.chainingnot-stated$.egress.meteredegress-unknown$.egress.termsnot-stated$.evidence[0].provedprocess$.extras.keep_rate_basisprocess$.extras.price_noteprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_notenot-stated$.per_object_cap.notesprocess$.per_object_cap.statednot-stated$.reliability_notenone-observed$.retention.notesnot-extracted$.retention.statednot-stated$.toolingnot-stated
GitHub Secure Open Compute
caveatemailno cardDwrite-gated
| Free tier | Quoted 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 |
|---|---|
| Price | none stated |
| Per-object cap | not applicable |
| Retention | not applicable |
| Egress | not stated |
| Identity | email not published |
| Limits |
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. |
| Binding | 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. |
| Interface | unknown inferred from the tooling the provider documents; not probed |
| Tooling | not stated |
| Composes with | This 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. |
| Reliability | no reliability event recorded |
| Notes | The 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 rung | documented |
| Checked | 2026-10-22 (live); stale on 2026-11-21 |
Evidence (4)
| date | source | what it proved |
|---|---|---|
| 2026-10-22 | github.com/open-source/github-secure-open-source-fund | quoted 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-22 | github.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-22 | github.blog/open-source/maintainers/securing-the-supply-chai | reported: '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-22 | opensource.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.meteredegress-unknown$.egress.termsnot-stated$.identity_cost.detailprocess$.interfaceinterface-unknown$.per_object_cap.notesprocess$.per_object_cap.statednot-applicable$.reliability_notenone-observed$.retention.notesprocess$.retention.statednot-applicable$.toolingnot-stated
GitHub Sponsors Compute
caveatemailno cardphoneD
| Free tier | Quoted: '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 |
|---|---|
| Price | none stated |
| Per-object cap | not applicable |
| Retention | not applicable |
| Egress | not stated |
| Identity | email 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. |
| Binding | none 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. |
| Interface | unknown inferred from the tooling the provider documents; not probed |
| Tooling | not stated |
| Composes with | This 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. |
| Reliability | no reliability event recorded |
| Notes | Recorded 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 rung | documented |
| Checked | 2026-10-22 (live); stale on 2026-11-21 |
Evidence (2)
| date | source | what it proved |
|---|---|---|
| 2026-10-22 | docs.github.com/en/sponsors/getting-started-with-github-spon | quoted 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-22 | github.com/open-source/github-secure-open-source-fund | the 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.meteredegress-unknown$.egress.termsnot-stated$.interfaceinterface-unknown$.per_object_cap.notesprocess$.per_object_cap.statednot-applicable$.reliability_notenone-observed$.retention.notesprocess$.retention.statednot-applicable$.toolingnot-stated
GitHub Actions Artifacts (public repositories) Storage
caveatanonymousno cardRretention-clamped
| Free tier | Plan 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 |
|---|---|
| Price | none stated |
| Per-object cap | not stated |
| Retention | Retention: default 90 days; public repos may be set 1-90 days only (private repos 1-400 days) (90 days) |
| Egress | Free. 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. |
| Identity | anonymous 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: 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. |
| Binding | retention-clamped a clock, not a quota: bytes leave whether or not the client is finished with them |
| Interface | rest, cli rest |
| Tooling | actions/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 with | Unlimited public repos x 500 artifacts/job x jobs. But retention caps it: this is a rotating buffer, never an archive. |
| Reliability | Hard 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. |
| Notes | Plan 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 rung | reported One page read moves it to documented. |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (4)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.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-21 | docs.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-21 | api.github.com/repos/cli/cli/actions/artifacts?per_page=3 | probe: curl -D - -> 200, total_count 9646, expires_at present |
| 2026-10-21 | api.github.com/repos/cli/cli/actions/artifacts/12312575009/z | probe: curl -o /dev/null -> 401 (token required, unlike release assets) |
Unknown or withheld values (4)
$.free_tier.notesprocess$.per_object_cap.notesnot-extracted$.per_object_cap.statednot-extracted$.retention.notesnot-extracted
GitHub Gist Storage
caveatinstitutionno cardRper-object-cap
| Free tier | Unlimited 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 |
|---|---|
| Price | none stated |
| Per-object cap | 100 MiB per single file (104857600 bytes) |
| Retention | not stated |
| Egress | unmetered 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). |
| Identity | institution 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 | 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. |
| Binding | per-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 |
| Interface | s3, rest, git, rclone git |
| Tooling | git 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 with | unlimited 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. |
| Reliability | Push 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. |
| Notes | Unlimited 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 rung | reported One page read moves it to documented. |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
| Parsed numbers |
|
Evidence (4)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.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-21 | withheld | probe: 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-21 | withheld | probe: 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-21 | withheld | probe: 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].urlprivate-url$.evidence[2].urlprivate-url$.evidence[3].urlprivate-url$.free_tier.notesprocess$.per_object_cap.notesnot-extracted$.retention.notesnot-extracted$.retention.statednot-extracted
GitHub Git LFS Storage
caveatcardcardRper-object-cap
| Free tier | 10 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 |
|---|---|
| Price | none stated |
| Per-object cap | Per-file: 2 GB (2000000000 bytes) |
| Retention | not stated |
| Egress | Metered 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 |
| Identity | card 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-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. |
| Binding | per-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 |
| Interface | rest, git git |
| Tooling | git-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 with | 10 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. |
| Reliability | 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. |
| Notes | 10 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 rung | reported One page read moves it to documented. |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
| Parsed numbers |
|
Evidence (3)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.github.com/en/billing/concepts/product-billing/git-lfs | table: 'GitHub Free | 10 GiB | 10 GiB' (bandwidth | storage) |
| 2026-10-21 | docs.github.com/en/repositories/working-with-files/managing- | 'GitHub Free | 2 GB' maximum file size |
| 2026-10-21 | github.com/git-lfs/git-lfs.git/info/lfs/objects/batch | probe: POST (download, bogus oid) -> HTTP 200 (LFS endpoint live, anonymous batch accepted) |
Unknown or withheld values (4)
$.free_tier.notesprocess$.per_object_cap.notesnot-extracted$.retention.notesnot-extracted$.retention.statednot-extracted
GitHub issue/PR comment attachments (user-attachments) Storage
caveatanonymousno cardRper-object-cap
| Free tier | 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) unit MB; metered on unstated |
|---|---|
| Price | none stated |
| Per-object cap | 25 MB/file (25000000 bytes) |
| Retention | not stated |
| Egress | free and unmetered — 'For public repositories, uploaded files can be accessed without authentication'; served from githubusercontent CDN, cached by Camo |
| Identity | anonymous 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 |
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 |
| Binding | per-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 |
| Interface | rest, cli rest |
| Tooling | GitHub 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 with | unlimited 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 |
| Reliability | assets 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 |
| Notes | 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) |
| Evidence rung | reported One page read moves it to documented. |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
| Parsed numbers |
|
Evidence (4)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.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-21 | docs.github.com/en/authentication/keeping-your-account-and-d | uploads get anonymous githubusercontent URLs via Camo |
| 2026-10-21 | github.blog/changelog/2026-09-01-github-cli-media-in-issues- | scriptable attach path exists (API criterion met) |
| 2026-10-21 | github.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.notesprocess$.per_object_cap.notesnot-extracted$.retention.notesnot-extracted$.retention.statednot-extracted
GitHub Packages - public packages (npm/Maven/NuGet/RubyGems) Storage
caveatemail?card?Rdisagrees
Sibling records disagree:
- verdict:
storage/github-packagessays fails-egress, storage/github-packages-public-packages says qualifies-with-caveat - verdict:
storage/github-packages-maven-registrysays fails-quota, storage/github-packages-public-packages says qualifies-with-caveat - verdict:
storage/github-packages-npm-registrysays fails-quota, storage/github-packages-public-packages says qualifies-with-caveat - verdict:
storage/github-packages-public-packagessays qualifies-with-caveat, storage/github-packages-rubygems-registry says fails-quota
| Free tier | Unlimited 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 |
|---|---|
| Price | none stated |
| Per-object cap | not stated |
| Retention | not stated |
| Egress | Free for public packages. Paid only for downloads from private packages. |
| Identity | email (placeholder) not published |
| Binding | none no constraint in the record binds at this scale; the record carries no limit of a kind the vocabulary names |
| Interface | rest rest |
| Tooling | npm/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 with | Unlimited public packages x unlimited versions, each bounded only by the per-ecosystem file cap. Multiplied by unlimited orgs/accounts. |
| Reliability | Immutable versions; deletion requires explicit action. Package-manager clients are the bottleneck for bulk blobs (chunking needed). |
| Notes | Unlimited 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 rung | reported One page read moves it to documented. |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (2)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.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-21 | docs.github.com/en/packages/learn-github-packages/about-gith | same statement repeated in the packages overview |
Unknown or withheld values (7)
$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.per_object_cap.notesnot-extracted$.per_object_cap.statednot-extracted$.retention.notesnot-extracted$.retention.statednot-extracted
GitHub Copilot Student Compute
fails: identityinstitutionno cardphoneDrequest-rate
| Free tier | Quoted 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 |
|---|---|
| Price | none stated |
| Per-object cap | not applicable |
| Retention | not applicable |
| Egress | not stated |
| Identity | institution 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 |
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. |
| Binding | 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. |
| Interface | rest inferred from the tooling the provider documents; not probed |
| Tooling | not stated |
| Composes with | The 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. |
| Reliability | no reliability event recorded |
| Notes | GitHub 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 rung | documented |
| Checked | 2026-10-22 (live); stale on 2026-11-21 |
Evidence (4)
| date | source | what it proved |
|---|---|---|
| 2026-10-22 | docs.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-22 | education.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-22 | docs.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-22 | github.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.meteredegress-unknown$.egress.termsnot-stated$.per_object_cap.notesprocess$.per_object_cap.statednot-applicable$.reliability_notenone-observed$.retention.notesprocess$.retention.statednot-applicable$.toolingnot-stated
GitHub Student Developer Compute
fails: identityinstitutionno cardDwrite-gated
| Free tier | Aggregator 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 |
|---|---|
| Price | none stated |
| Per-object cap | not applicable |
| Retention | not applicable |
| Egress | not stated |
| Identity | institution 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 |
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. |
| Binding | 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. |
| Interface | unknown inferred from the tooling the provider documents; not probed |
| Tooling | not stated |
| Composes with | The 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. |
| Reliability | no reliability event recorded |
| Notes | Refutation 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 rung | documented |
| Checked | 2026-10-22 (live); stale on 2026-11-21 |
Evidence (3)
| date | source | what it proved |
|---|---|---|
| 2026-10-22 | docs.github.com/en/education/about-github-education/github-e | A 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-22 | education.github.com/pack | The 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-22 | docs.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.meteredegress-unknown$.egress.termsnot-stated$.interfaceinterface-unknown$.per_object_cap.notesprocess$.per_object_cap.statednot-applicable$.reliability_notenone-observed$.retention.notesprocess$.retention.statednot-applicable$.toolingnot-stated
GitHub Student Developer Pack Egress and tunnels
fails: identityinstitutionno cardDwrite-gated
| Free tier | Free access to 25+ Microsoft Azure cloud services plus $100 in Azure credit. For students aged 18+. unit mixed; metered on downloaded-bytes |
|---|---|
| Price | USD 100 of Azure credit |
| Per-object cap | not applicable |
| Retention | not 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 |
| Identity | institution verification as a student, which GitHub establishes through the school |
| Limits | |
| Binding | write-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. |
| Interface | cli GitHub Education application, then the partner's own console |
| Tooling | wg-quick on the Azure VM the credit pays for |
| Composes with | no chain for a user: without enrolment the bundle is unreachable, and if it were reachable it would be a slightly worse Azure trial |
| Reliability | the pack is re-verified annually and partner offers are withdrawn without notice |
| Notes | Arithmetic: 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 rung | documented the pack's current partner list was read today and no longer includes DigitalOcean |
| Checked | 2026-10-23 (live); stale on 2026-11-22 |
| Parsed numbers |
|
Evidence (2)
| date | source | what it proved |
|---|---|---|
| 2026-10-23 | education.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-23 | education.github.com/pack | the 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.statednot-applicable$.retention.statednot-applicable
github lfs as bulk storage Storage
fails: egressemail?card?R
| Free tier | 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. unit none; metered on none |
|---|---|
| Price | none stated |
| Per-object cap | not recorded |
| Retention | not recorded |
| Egress | not recorded |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | unknown |
| Tooling | not recorded |
| Composes with | not recorded |
| Reliability | 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. |
| Notes | 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. |
| Evidence rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (1)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.github.com/en/billing/concepts/product-billing/git-lfs | 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. |
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)
$.chainingnot-recorded$.confidence_notewithheld$.egress.termsnot-recorded$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_noteprocess$.per_object_cap.notesnot-recorded$.per_object_cap.statednot-recorded$.retention.notesprocess$.retention.statednot-recorded$.toolingnot-recorded
github packages Storage
fails: egressemail?card?Rdisagrees
Sibling records disagree:
- verdict:
storage/github-packagessays fails-egress, storage/github-packages-maven-registry says fails-quota - verdict:
storage/github-packagessays fails-egress, storage/github-packages-npm-registry says fails-quota - verdict:
storage/github-packagessays fails-egress, storage/github-packages-public-packages says qualifies-with-caveat - verdict:
storage/github-packagessays fails-egress, storage/github-packages-rubygems-registry says fails-quota
| Free tier | Already 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 |
|---|---|
| Price | none stated |
| Per-object cap | not recorded |
| Retention | not recorded |
| Egress | not recorded |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | unknown |
| Tooling | not recorded |
| Composes with | not recorded |
| Reliability | Already covered (dossiers/github-packages.json); 500 MB storage + 1 GB transfer free on Free plan, metered beyond — far below the bar. |
| Notes | Already covered (dossiers/github-packages.json); 500 MB storage + 1 GB transfer free on Free plan, metered beyond — far below the bar. |
| Evidence rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (1)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | withheld | Already 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)
$.chainingnot-recorded$.confidence_notewithheld$.egress.termsnot-recorded$.evidence[0].urlprivate-url$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.free_tier.source_urlprivate-url$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_noteprocess$.per_object_cap.notesnot-recorded$.per_object_cap.source_urlprivate-url$.per_object_cap.statednot-recorded$.retention.notesprocess$.retention.source_urlprivate-url$.retention.statednot-recorded$.toolingnot-recorded$.urlprivate-url
github pages as bulk storage Storage
fails: egressemail?card?R
| Free tier | 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. unit none; metered on none |
|---|---|
| Price | none stated |
| Per-object cap | not recorded |
| Retention | not recorded |
| Egress | not recorded |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | unknown |
| Tooling | not recorded |
| Composes with | not recorded |
| Reliability | 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. |
| Notes | 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. |
| Evidence rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (1)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.github.com/en/pages/getting-started-with-github-pages/g | 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. |
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)
$.chainingnot-recorded$.confidence_notewithheld$.egress.termsnot-recorded$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_noteprocess$.per_object_cap.notesnot-recorded$.per_object_cap.statednot-recorded$.retention.notesprocess$.retention.statednot-recorded$.toolingnot-recorded
Git-tracked repo files (direct, or via git-unlimited-storage wrapper) Storage
fails: quotaemailno cardRper-object-cap
| Free tier | 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". unit GB; metered on unstated |
|---|---|
| Price | none stated |
| Per-object cap | per 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 |
| Egress | Unmetered via raw.githubusercontent.com (probed 200) and codeload.github.com (probed 200 on a 270,150,054-byte tarball). Free, anonymous, CDN-fronted. |
| Identity | email 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 |
100 MiB hard per file, 50 MiB warning, 5 GB strongly recommended per repo, ~80 write req/min and 500/hr per token. |
| Binding | per-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 |
| Interface | s3, git git |
| Tooling | git; 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 with | 100 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'. |
| Reliability | Clone 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. |
| Notes | 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". |
| Evidence rung | reported One page read moves it to documented. |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
| Parsed numbers |
|
Evidence (3)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.github.com/en/repositories/working-with-files/managing- | 'GitHub blocks files larger than 100 MiB'; 'less than 5 GB is strongly recommended' |
| 2026-10-21 | withheld | probe: 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-21 | raw.githubusercontent.com/bharatcj/git-unlimited-storage/mai | honest 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].urlprivate-url$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.per_object_cap.notesnot-extracted$.retention.notesnot-extracted
github actions artifacts as an archive Storage
fails: quotaemail?card?R
| Free tier | 500 MB on Free, 90-day retention, token required for download. It is a build handoff medium, not storage. unit none; metered on none |
|---|---|
| Price | none stated |
| Per-object cap | not recorded |
| Retention | not recorded |
| Egress | not recorded |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | unknown |
| Tooling | not recorded |
| Composes with | not recorded |
| Reliability | 500 MB on Free, 90-day retention, token required for download. It is a build handoff medium, not storage. |
| Notes | 500 MB on Free, 90-day retention, token required for download. It is a build handoff medium, not storage. |
| Evidence rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (1)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.github.com/en/actions/reference/limits | 500 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)
$.chainingnot-recorded$.confidence_notewithheld$.egress.termsnot-recorded$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_noteprocess$.per_object_cap.notesnot-recorded$.per_object_cap.statednot-recorded$.retention.notesprocess$.retention.statednot-recorded$.toolingnot-recorded
GitHub Actions dependency cache Storage
fails: quotaemail?card?R
| 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 |
|---|---|
| Price | none stated |
| Per-object cap | not stated |
| Retention | 10 GB/repo; entries unaccessed for over 7 days are removed; 200 uploads/min, 1500 downloads/min, 400 deletes/min per repo. (7 days) |
| Egress | Not a serving path — caches are only reachable from inside a workflow run. |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | rest rest |
| Tooling | actions/cache, /repos/{o}/{r}/actions/caches REST. |
| Composes with | 10 GB x unlimited repos, but every entry self-destructs — multiplication does not help against a 7-day TTL. |
| Reliability | Explicitly 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 rung | reported One page read moves it to documented. |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (2)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.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-21 | withheld | probe: 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].urlprivate-url$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.per_object_cap.notesnot-extracted$.per_object_cap.statednot-extracted$.retention.notesnot-extracted
github actions dependency cache (as storage) Storage
fails: quotaemail?card?R
| Free tier | 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 unit none; metered on none |
|---|---|
| Price | none stated |
| Per-object cap | not recorded |
| Retention | not recorded |
| Egress | not recorded |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | unknown |
| Tooling | not recorded |
| Composes with | not recorded |
| Reliability | 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 |
| Notes | 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 |
| Evidence rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (2)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.github.com/en/actions/reference/workflows-and-actions/d | 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 |
| 2026-10-21 | github.blog/changelog/2025-11-20-github-actions-cache-size-c | cited 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)
$.chainingnot-recorded$.confidence_notewithheld$.egress.termsnot-recorded$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_noteprocess$.per_object_cap.notesnot-recorded$.per_object_cap.statednot-recorded$.retention.notesprocess$.retention.statednot-recorded$.toolingnot-recorded
github campus program (school-level github enterprise cloud) Storage
fails: quotaemail?card?R
| 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 |
|---|---|
| Price | none stated |
| Per-object cap | not recorded |
| Retention | not recorded |
| Egress | not recorded |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | unknown |
| Tooling | not recorded |
| Composes with | not 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 rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (1)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.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)
$.chainingnot-recorded$.confidence_notewithheld$.egress.termsnot-recorded$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_noteprocess$.per_object_cap.notesnot-recorded$.per_object_cap.statednot-recorded$.retention.notesprocess$.retention.statednot-recorded$.toolingnot-recorded
github codespaces disk Storage
fails: quotaemail?card?R
| Free tier | 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. unit none; metered on none |
|---|---|
| Price | none stated |
| Per-object cap | not recorded |
| Retention | not recorded |
| Egress | not recorded |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | unknown |
| Tooling | not recorded |
| Composes with | not recorded |
| Reliability | 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. |
| Notes | 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. |
| Evidence rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (1)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.github.com/en/billing/concepts/product-billing/github-c | 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. |
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)
$.chainingnot-recorded$.confidence_notewithheld$.egress.termsnot-recorded$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_noteprocess$.per_object_cap.notesnot-recorded$.per_object_cap.statednot-recorded$.retention.notesprocess$.retention.statednot-recorded$.toolingnot-recorded
github packages — maven registry Storage
fails: quotaemail?card?Rdisagrees
Sibling records disagree:
- verdict:
storage/github-packagessays fails-egress, storage/github-packages-maven-registry says fails-quota - verdict:
storage/github-packages-maven-registrysays fails-quota, storage/github-packages-public-packages says qualifies-with-caveat
| Free tier | 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"). unit none; metered on none |
|---|---|
| Price | none stated |
| Per-object cap | not recorded |
| Retention | not recorded |
| Egress | not recorded |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | unknown |
| Tooling | not recorded |
| Composes with | not recorded |
| Reliability | 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"). |
| Notes | 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"). |
| Evidence rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (1)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.github.com/en/packages/working-with-a-github-packages-r | 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"). |
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)
$.chainingnot-recorded$.confidence_notewithheld$.egress.termsnot-recorded$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_noteprocess$.per_object_cap.notesnot-recorded$.per_object_cap.statednot-recorded$.retention.notesprocess$.retention.statednot-recorded$.toolingnot-recorded
github packages — npm registry Storage
fails: quotaemail?card?Rdisagrees
Sibling records disagree:
- verdict:
storage/github-packagessays fails-egress, storage/github-packages-npm-registry says fails-quota - verdict:
storage/github-packages-npm-registrysays fails-quota, storage/github-packages-public-packages says qualifies-with-caveat
| Free tier | 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 unit none; metered on none |
|---|---|
| Price | none stated |
| Per-object cap | not recorded |
| Retention | not recorded |
| Egress | not recorded |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | unknown |
| Tooling | not recorded |
| Composes with | not recorded |
| Reliability | 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 |
| Notes | 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 |
| Evidence rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (1)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.github.com/en/packages/working-with-a-github-packages-r | 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 |
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)
$.chainingnot-recorded$.confidence_notewithheld$.egress.termsnot-recorded$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_noteprocess$.per_object_cap.notesnot-recorded$.per_object_cap.statednot-recorded$.retention.notesprocess$.retention.statednot-recorded$.toolingnot-recorded
github packages — rubygems registry Storage
fails: quotaemail?card?Rdisagrees
Sibling records disagree:
- verdict:
storage/github-packagessays fails-egress, storage/github-packages-rubygems-registry says fails-quota - verdict:
storage/github-packages-public-packagessays qualifies-with-caveat, storage/github-packages-rubygems-registry says fails-quota
| Free tier | 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 unit none; metered on none |
|---|---|
| Price | none stated |
| Per-object cap | not recorded |
| Retention | not recorded |
| Egress | not recorded |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | unknown |
| Tooling | not recorded |
| Composes with | not recorded |
| Reliability | 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 |
| Notes | 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 |
| Evidence rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (1)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.github.com/en/packages/working-with-a-github-packages-r | 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 |
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)
$.chainingnot-recorded$.confidence_notewithheld$.egress.termsnot-recorded$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_noteprocess$.per_object_cap.notesnot-recorded$.per_object_cap.statednot-recorded$.retention.notesprocess$.retention.statednot-recorded$.toolingnot-recorded
GitHub Pages (Fastly-served, 1 GB site) Storage
fails: quotaemail?card?R
| 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 |
|---|---|
| Price | none stated |
| Per-object cap | not stated |
| Retention | not stated |
| Egress | 100 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 |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | git git |
| Tooling | git push to a pages branch, or actions/deploy-pages; any static generator. No special client needed. |
| Composes with | one 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. |
| Reliability | Soft 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 rung | reported One page read moves it to documented. |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (2)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.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-21 | withheld | probe: 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].urlprivate-url$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.per_object_cap.notesnot-extracted$.per_object_cap.statednot-extracted$.retention.notesnot-extracted$.retention.statednot-extracted
github pages as a >1 gb site Storage
fails: quotaemail?card?R
| Free tier | 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 unit none; metered on none |
|---|---|
| Price | none stated |
| Per-object cap | not recorded |
| Retention | not recorded |
| Egress | not recorded |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | unknown |
| Tooling | not recorded |
| Composes with | not recorded |
| Reliability | 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 |
| Notes | 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 |
| Evidence rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (2)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.github.com/en/pages/getting-started-with-github-pages/g | 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 |
| 2026-10-21 | docs.github.com/en/pages/getting-started-with-github-pages/u | cited 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)
$.chainingnot-recorded$.confidence_notewithheld$.egress.termsnot-recorded$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_noteprocess$.per_object_cap.notesnot-recorded$.per_object_cap.statednot-recorded$.retention.notesprocess$.retention.statednot-recorded$.toolingnot-recorded
github student developer pack (as a storage programme) Storage
fails: quotaemail?card?R
| Free tier | 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 unit none; metered on none |
|---|---|
| Price | none stated |
| Per-object cap | not recorded |
| Retention | not recorded |
| Egress | not recorded |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | unknown |
| Tooling | not recorded |
| Composes with | not recorded |
| Reliability | 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 |
| Notes | 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 |
| Evidence rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (1)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | education.github.com/pack | 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 |
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)
$.chainingnot-recorded$.confidence_notewithheld$.egress.termsnot-recorded$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_noteprocess$.per_object_cap.notesnot-recorded$.per_object_cap.statednot-recorded$.retention.notesprocess$.retention.statednot-recorded$.toolingnot-recorded
github student developer pack (bundled storage) Storage
fails: quotaemail?card?R
| Free tier | 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 unit none; metered on none |
|---|---|
| Price | none stated |
| Per-object cap | not recorded |
| Retention | not recorded |
| Egress | not recorded |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | unknown |
| Tooling | not recorded |
| Composes with | not recorded |
| Reliability | 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 |
| Notes | 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 |
| Evidence rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (2)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | education.github.com/pack | 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 |
| 2026-10-21 | docs.github.com/en/billing/reference/product-usage-included | cited 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)
$.chainingnot-recorded$.confidence_notewithheld$.egress.termsnot-recorded$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_noteprocess$.per_object_cap.notesnot-recorded$.per_object_cap.statednot-recorded$.retention.notesprocess$.retention.statednot-recorded$.toolingnot-recorded
github student developer pack — storage angle Storage
fails: quotaemail?card?R
| Free tier | 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 unit none; metered on none |
|---|---|
| Price | none stated |
| Per-object cap | not recorded |
| Retention | not recorded |
| Egress | not recorded |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | unknown |
| Tooling | not recorded |
| Composes with | not recorded |
| Reliability | 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 |
| Notes | 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 |
| Evidence rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (1)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | education.github.com/pack | 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 |
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)
$.chainingnot-recorded$.confidence_notewithheld$.egress.termsnot-recorded$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_noteprocess$.per_object_cap.notesnot-recorded$.per_object_cap.statednot-recorded$.retention.notesprocess$.retention.statednot-recorded$.toolingnot-recorded
iroh-live Storage
fails: quotaemail?card?R
| Free tier | Media 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 |
|---|---|
| Price | none stated |
| Per-object cap | not recorded |
| Retention | not recorded |
| Egress | not recorded |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | unknown |
| Tooling | not recorded |
| Composes with | not recorded |
| Reliability | Media livestreaming over iroh (134 stars). Live media is a stream fan-out problem, not a stored-object problem; nothing is retained. |
| Notes | Media livestreaming over iroh (134 stars). Live media is a stream fan-out problem, not a stored-object problem; nothing is retained. |
| Evidence rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (1)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | api.github.com/orgs/n0-computer/repos | Media 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)
$.chainingnot-recorded$.confidence_notewithheld$.egress.termsnot-recorded$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_noteprocess$.per_object_cap.notesnot-recorded$.per_object_cap.statednot-recorded$.retention.notesprocess$.retention.statednot-recorded$.toolingnot-recorded
github releases as buzzheavier's actual upstream (the fafda path) Storage
deademail?card?R
| Free tier | 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 accouunit none; metered on none |
|---|---|
| Price | none stated |
| Per-object cap | not recorded |
| Retention | not recorded |
| Egress | not recorded |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | unknown |
| Tooling | not recorded |
| Composes with | not recorded |
| Reliability | 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 |
| Notes | 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 |
| Evidence rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (3)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | api.github.com/repos/GrandpaNutz/fafda | 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-21 | api.github.com/users/GrandpaNutz | cited 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-21 | git.gay/ajtabjs/fafda | cited 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)
$.chainingnot-recorded$.confidence_notewithheld$.egress.termsnot-recorded$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_noteprocess$.per_object_cap.notesnot-recorded$.per_object_cap.statednot-recorded$.retention.notesprocess$.retention.statednot-recorded$.toolingnot-recorded