Hackage
haskell.org · Storage · 2 records · JSON
- Hackage (hackage.haskell.org) Storagecaveatinstitutionno cardRdisagrees
- hackage (haskell) Storagefails: quotaemail?card?Rdisagrees
Hackage (hackage.haskell.org) Storage
caveatinstitutionno cardRdisagrees
Sibling records disagree:
- verdict:
storage/hackagesays qualifies-with-caveat, storage/hackage-2 says fails-quota - identity_kind:
storage/hackagesays institution, storage/hackage-2 says email
| Free tier | No published per-package or total quota found on the upload page or the server API. Uploads are permanent: 'Upload and publish a package permanently' and 'You can only upload a package version once and this cannot be undone'. Real large package verified: pandoc-3.5.tar.gz is 7,483,625 bytes. Packages must be cabal sdist output (gzipped tar with package.cabal).unit mixed; metered on unstated |
|---|---|
| Price | none stated |
| Per-object cap | not stated |
| Retention | No published per-package or total quota found on the upload page or the server API. Uploads are permanent: 'Upload and publish a package permanently' and 'You can only upload a package version once and this cannot be undone' |
| Egress | Free. Content is served from hackage.haskell.org and the hackage-content.haskell.org CDN. No billing, no bandwidth meter. |
| Identity | institution derived from the record's prose, not from an identity field, and no signup was executed: kage or total quota found on the upload page or the server API. Uploads are permanent: 'Upload and publish a package permanently' and 'You can only upload a package version once and |
| 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 | cabal upload / stack upload (write), hup (a dedicated upload client, hackage.haskell.org/package/hup), Hackage server API at hackage-origin.haskell.org/api (open, 62,403-byte route listing), plain HTTPS tarball GET (read). |
| Composes with | unlimited packages x unlimited versions per package (versions are never deleted and the index keeps all of them) x unlimited free Hackage accounts. Content must be a Cabal sdist, but the sdist can contain arbitrary files declared in extra-source-files - so a multi-GB blob can be shipped as a package's data. Multiply: N accounts x M packages x K versions. |
| Reliability | Immutable by design - a bad upload cannot be deleted, which is irreversibility risk in the other direction. No documented byte ceiling means the ceiling is empirical and could change without notice. Read path is plain static files and reliable. |
| Notes | No published per-package or total quota found on the upload page or the server API. Uploads are permanent: 'Upload and publish a package permanently' and 'You can only upload a package version once and this cannot be undone'. Real large package verified: pandoc-3.5.tar.gz is 7,483,625 bytes. Packages must be cabal sdist output (gzipped tar with package.cabal). |
| Evidence rung | reported One page read moves it to documented. |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (3)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | hackage.haskell.org/package/pandoc-3.5/pandoc-3.5.tar.gz | probe: GET -> 200, 7,483,625 bytes |
| 2026-10-21 | hackage-origin.haskell.org/api | probe: GET -> 200, 62,403 bytes (open route listing) |
| 2026-10-21 | hackage.haskell.org/upload | 'Upload and publish a package permanently ... You can only upload a package version once and this cannot be undone' |
Unknown or withheld values (4)
$.free_tier.notesprocess$.per_object_cap.notesnot-extracted$.per_object_cap.statednot-extracted$.retention.notesnot-extracted
hackage (haskell) Storage
fails: quotaemail?card?Rdisagrees
Sibling records disagree:
- verdict:
storage/hackagesays qualifies-with-caveat, storage/hackage-2 says fails-quota - identity_kind:
storage/hackagesays institution, storage/hackage-2 says email
| Free tier | No documented size limit and no documented quota — could not establish any number from the upload page, the FAQ, or the server source (the upload handler has no size guard visible in Distrib 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 documented size limit and no documented quota — could not establish any number from the upload page, the FAQ, or the server source (the upload handler has no size guard visible in Distrib |
| Notes | No documented size limit and no documented quota — could not establish any number from the upload page, the FAQ, or the server source (the upload handler has no size guard visible in Distrib |
| Evidence rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (2)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | hackage.haskell.org/upload | No documented size limit and no documented quota — could not establish any number from the upload page, the FAQ, or the server source (the upload handler has no size guard visible in Distrib |
| 2026-10-21 | raw.githubusercontent.com/haskell/hackage-server/master/src/ | cited as the basis of the rejection: No documented size limit and no documented quota — could not establish any number from the upload page, the FAQ, or the server source (the upload handler has no size guard visible in Distrib |
More fields (1)
{
"dead_end": {
"failure_class": "quota",
"why": "No documented size limit and no documented quota — could not establish any number from the upload page, the FAQ, or the server source (the upload handler has no size guard visible in Distrib",
"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