fshy

fshy / Storage

Modrinth

modrinth.com · Storage · 1 record · JSON

Modrinth Storage

caveatemail?card?Rrequest-rate

modrinth.com · registry · storage/modrinth · JSON · compare

Free tier500 MiB per version file (hard code-level cap: read_from_field(field, 500 * (1 << 20), "Project file exceeds the maximum of 500MiB...")). No stated total-account storage quota. Per-user quotas read from user_limits: projects = 256, projects_per_day = 10, versions_per_project = 10000, versions_per_day = 150.
unit mixed; metered on stored-bytes
Pricenone stated
Per-object capnot stated
Retentionnot stated
EgressFree. All files served from cdn.modrinth.com behind Cloudflare with Accept-Ranges: bytes, no auth, no signed URLs, no expiry.
Identityemail (placeholder) not published
Limits
  • request-rate 150 uploads/day source
500 MiB/version-file; 150 version uploads/day; 10,000 versions per project; 256 projects; version_number must be unique per project (1-32 chars); moderation may reject non-mod content; project file type must be in project_file_type allowlist (jar/zip/mrpack etc.), so arbitrary blobs need wrapping.
Bindingrequest-rate calls are bounded rather than bytes, which is fatal to a nightly job on a monthly counter
Interfacerest, rclone rest
ToolingDocumented public REST API v2 (api.modrinth.com/v2/project/{id}/version, POST /version with multipart file upload + PAT auth); labrinth OpenAPI spec published at docs.modrinth.com. No rclone backend, but the API is simple enough for a dozen-line client.
Composes with256 projects x 10,000 versions/project x 500 MiB = ~1.22 PiB theoretical per account; practically throttled by versions_per_day=150 -> 150 x 500 MiB = 73 GiB/day/account = ~2.2 TiB/month/account. Unlimited free accounts; each new account resets all four counters. Idle accounts keep all existing files downloadable forever (no TTL on published versions).
ReliabilityModerated registry: junk projects can be removed and files hard-deleted; no rate-limit survival guarantee past 150 uploads/day.
Notes500 MiB per version file (hard code-level cap: read_from_field(field, 500 * (1 << 20), "Project file exceeds the maximum of 500MiB...")). No stated total-account storage quota. Per-user quotas read from user_limits: projects = 256, projects_per_day = 10, versions_per_project = 10000, versions_per_day = 150.
Evidence rungreported One page read moves it to documented.
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (5)
datesourcewhat it proved
2026-10-21raw.githubusercontent.com/modrinth/code/main/apps/labrinth/s'500 * (1 << 20)' hard file cap for project version files
2026-10-21raw.githubusercontent.com/modrinth/code/main/apps/labrinth/mprojects_per_day 10, versions_per_project 10000, versions_per_day 50 raised to 150 by 20260917120000_raise_versions_per_day_limit.sql
2026-10-21raw.githubusercontent.com/modrinth/code/main/apps/labrinth/mdefault projects 256, organizations 16
2026-10-21withheldprobe: GET api.modrinth.com/v2/version/g6ju16VJ -> 200, files[0].url = cdn.modrinth.com/data/AANobbMI/versions/g6ju16VJ/...jar, size 1912496
2026-10-21withheldprobe: GET cdn.modrinth.com/...jar with Range: bytes=0-0 -> 206 Partial Content, Content-Range bytes 0-0/1912496, Accept-Ranges: bytes, Server: cloudflare
More fields (1)
{
 "unit_note": "free_tier.unit is 'mixed' because the headline is denominated in MiB or KiB, which the schema enum does not carry; the verbatim free_tier.stated keeps the true unit. See the storage-dossier handover."
}
Unknown or withheld values (9)
  • $.evidence[3].url private-url
  • $.evidence[4].url private-url
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.per_object_cap.notes not-extracted
  • $.per_object_cap.stated not-extracted
  • $.retention.notes not-extracted
  • $.retention.stated not-extracted