fshy

fshy / Storage

Stoat

stoat.chat · Storage · 3 records · JSON

Stoat (formerly Revolt) — official instance Storage

caveatemail?card?Rper-object-capdisagrees

stoat.chat · messaging · storage/stoat-official-instance · JSON · compare

Sibling records disagree:

Free tier20,000,000 bytes (20 MB) per attachment as the server-enforced default, no paid tier to raise it, and no documented total storage cap.
unit MB; metered on stored-bytes
Pricenone stated
Per-object cap20 MB per file (20000000 bytes)
Retention| Critically different from Discord: attachment URLs are UNSIGNED and permanent
EgressFree and unmetered from cdn.stoatusercontent.com (Cloudflare). The CDN responses I fetched carried Cache-Control: public, max-age=2073600 — 24 days of edge caching — which is good for the 500 GB/day serving workload.
Identityemail (placeholder) not published
Limits
  • per-object-cap 20 MB per file source
20 MB per file; 5 attachments per message; body_limit_size 20,000,000 bytes globally. Live limits object also gives: emojis 500 KB, icons 2.5 MB, banners/backgrounds 6 MB, avatars 4 MB — those are separate, smaller buckets.
Bindingper-object-cap the per-object cap sets the shard size and therefore the object count; it bounds the total more tightly than any headline quota
Interfacerest rest
ToolingAutumn file service: POST {autumn}/attachments with multipart file and X-Bot-Token/X-Session-Token. Documented at stoatchat/stoatchat docs/docs/developers/api/uploading-files.md. Bots are first-class; 5 bots per account.
Composes with100 servers per account x 200 channels per server (from the live / limits object) = 20,000 channels, each with unlimited messages. Servers are capped at 100 for existing accounts / 50 for new ones.
ReliabilityCritically different from Discord: attachment URLs are UNSIGNED and permanent. The platform renamed Revolt->Stoat in Oct 2025 and moved the CDN (autumn.revolt.chat -> cdn.revoltusercontent.com) in May 2025 with 301s still in place; old IDs from the pre-refactor Autumn do 404.
Notes20,000,000 bytes (20 MB) per attachment as the server-enforced default, no paid tier to raise it, and no documented total storage cap.
Evidence rungreported One page read moves it to documented.
Checked2026-10-21 (inherited); stale on 2026-11-04
Parsed numbers
  • $.limits[0].value limit:per-object-cap 20.0 MB
Evidence (4)
datesourcewhat it proved
2026-10-21api.stoat.chat/probe: GET -> features.limits.default.file_upload_size_limits.attachments = 20000000 (20 MB), server_channels = 200, servers = 100, message_attachments = 5
2026-10-21cdn.stoatusercontent.com/attachments/f749zVPTYPo_id3VY9IwZYMprobe: GET -> 200 OK, Content-Length 10886, Cache-Control: public, max-age=2073600 — no ex/is/hm, no expiry
2026-10-21cdn.stoatusercontent.com/attachmentsprobe: POST with no auth -> 401 (upload requires a token; read does not)
2026-10-21stoat.chat/'Custom emojis, a 20MB file upload limit and a server-specific profile picture with no subscription required.'
Unknown or withheld values (5)
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.per_object_cap.notes not-extracted
  • $.retention.notes not-extracted

revolt/stoat public instance as bulk storage Storage

fails: quotaemail?card?R

stoat.chat/ · rejected-provider · storage/revolt-stoat-public-instance-as-bulk-storage · JSON · compare

Free tier20 MB per file with no paid tier and no public way to raise it, and the public instance runs signup human-verification step. 1 TiB = 52,000 files. Only self-hosting removes the cap, which is no longer free
unit none; metered on none
Pricenone stated
Per-object capnot recorded
Retentionnot recorded
Egressnot recorded
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaceunknown
Toolingnot recorded
Composes withnot recorded
Reliability20 MB per file with no paid tier and no public way to raise it, and the public instance runs signup human-verification step. 1 TiB = 52,000 files. Only self-hosting removes the cap, which is no longer free
Notes20 MB per file with no paid tier and no public way to raise it, and the public instance runs signup human-verification step. 1 TiB = 52,000 files. Only self-hosting removes the cap, which is no longer free
Evidence rungreported
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (2)
datesourcewhat it proved
2026-10-21stoat.chat/20 MB per file with no paid tier and no public way to raise it, and the public instance runs signup human-verification step. 1 TiB = 52,000 files. Only self-hosting removes the cap, which is no longer free
2026-10-21github.com/revoltchat/self-hosted/issues/53cited as the basis of the rejection: 20 MB per file with no paid tier and no public way to raise it, and the public instance runs signup human-verification step. 1 TiB = 52,000 files. Only self-hosting removes the cap, which is no longer free
More fields (1)
{
 "dead_end": {
  "failure_class": "quota",
  "why": "20 MB per file with no paid tier and no public way to raise it, and the public instance runs signup human-verification step. 1 TiB = 52,000 files. Only self-hosting removes the cap, which is no longer free",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (15)
  • $.chaining not-recorded
  • $.confidence_note withheld
  • $.egress.terms not-recorded
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note process
  • $.per_object_cap.notes not-recorded
  • $.per_object_cap.stated not-recorded
  • $.retention.notes process
  • $.retention.stated not-recorded
  • $.tooling not-recorded

Stoat (formerly Revolt) + Autumn file service Storage

fails: quotaemail?card?Rper-object-capdisagrees

stoat.chat/ · messaging · storage/stoat-autumn-file-service · JSON · compare

Sibling records disagree:

Free tier20 MB per file, no subscription: 'Custom emojis, a 20MB file upload limit and a server-specific profile picture with no subscription required.' No published total-storage cap and no paid tier that raises the file size.
unit MB; metered on stored-bytes
Pricenone stated
Per-object cap20 MB per file (20000000 bytes)
Retentionnot stated
EgressFree and — importantly — UNSIGNED. Autumn 301s to cdn.stoatusercontent.com and the object URL is a bare path with no expiry parameters, unlike Discord. So a stored URL stays valid and is trivially Cloudflare-cacheable.
Identityemail (placeholder) not published
Limits
  • per-object-cap 20 MB per file source
20 MB per file is fixed and low; there is no path to a bigger unit. Upload limits are server-configurable only on SELF-hosted instances ('Upload limits are controlled via the Autumn config'), so on the public instance you are stuck at 20 MB.
Bindingper-object-cap the per-object cap sets the shard size and therefore the object count; it bounds the total more tightly than any headline quota
Interfacerest rest
ToolingGenuinely open: 'Our public API is so powerful that we use it ourselves for the official apps', API root answers live (GET https://api.revolt.chat/ -> {"stoat":"0.16.2","revolt":"0.16.2", features...}). Backend is open source (revoltchat/autumn, stoatchat/*). Self-hostable, which is both the appeal and the caveat.
Composes withUnlimited servers x unlimited channels with a 20 MB cap, so 1 TB needs ~52,000 uploads. With no signed URLs, the reads are the easy part; the writes are the bottleneck.
ReliabilitySmaller operator, recent rebrand to Stoat, and the public instance runs human-verification step on signup. Data longevity is a real question for a 20 TiB cold archive; treat as experimental.
Notes20 MB per file, no subscription: 'Custom emojis, a 20MB file upload limit and a server-specific profile picture with no subscription required.' No published total-storage cap and no paid tier that raises the file size.
Evidence rungreported One page read moves it to documented.
Checked2026-10-21 (inherited); stale on 2026-11-04
Parsed numbers
  • $.limits[0].value limit:per-object-cap 20.0 MB
Evidence (3)
datesourcewhat it proved
2026-10-21stoat.chat/'Custom emojis, a 20MB file upload limit and a server-specific profile picture with no subscription required'
2026-10-21autumn.revolt.chat/attachments/abc123probe: curl -D - -> 301 location: https://cdn.stoatusercontent.com/attachments/abc123 (no signature, no expiry params)
2026-10-21api.revolt.chat/probe: curl -> 200, {"stoat":"0.16.2",...} — public API live
More fields (1)
{
 "dead_end": {
  "failure_class": "quota",
  "why": "20 MB per file, no subscription: 'Custom emojis, a 20MB file upload limit and a server-specific profile picture with no subscription required.' No published total-storage cap and no paid tier that raises the file size.",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (7)
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.per_object_cap.notes not-extracted
  • $.retention.notes not-extracted
  • $.retention.stated not-extracted