Self-hosted Synapse media repository
- Free allowance
- Unbounded —
max_upload_sizedefaults to 50M and can be set to any value; storage and media retention are entirely operator-controlled. - Verdict
- self-hosted, last resortverdict fails-egress: data cannot be read back out at a usable rate or price. Self-hosted options are listed last, because this site is for users who have no hardware.
- Cost
- free tier
- Identity
- institution?placeholder, not evidence; card unknown, phone unknown
- Binding limit
- noneno named constraint binds
- Evidence
- reported2 sources; a third party said so
- Freshness
- stale on 2026-11-05checked 2026-10-21 (inherited); stale on 2026-11-05
| Free tier | Unbounded — max_upload_size defaults to 50M and can be set to any value; storage and media retention are entirely operator-controlled.unit mixed; metered on stored-bytes |
|---|---|
| Price | none stated |
| Identity | institution (inferred, not read) not published |
| Egress | Your own server's bandwidth. |
| Per-object cap | not stated |
| Retention | not stated |
| Interface | s3, rest, webdav, rclone rest |
| Tooling | Synapse (Python) or Dendrite/Conduit; standard Matrix media API so rclone's s3/webdav-adjacent tooling plus any Matrix SDK works. Admin media API allows listing and purging media per user/room. |
| Composes with | Not a free provider — the multiplier angle is that media is content-addressed and deduplicated by Synapse, and federation lets you push copies to other homeservers as a second replica. |
| Reliability | Default installs are safe; the risk is operator misconfiguration — enabling media_retention turns the repo into a TTL cache. Federation media cache is the first thing purged. |
| Parsed numbers |
|
Evidence 2
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | matrix-org.github.io/synapse/latest/usage/configuration/conf | 'max_upload_size — The largest allowed upload size in bytes... Defaults to 50M.' |
| 2026-10-21 | matrix-org.github.io/synapse/latest/usage/configuration/conf | 'media_retention ... control whether media will be purged if it has not been accessed in a given amount of time' |
More fields 1
| dead end | {"failure_class": "retention","why": "Unbounded — `max_upload_size` defaults to 50M and can be set to any value; storage and media retention are entirely operator-controlled.","retry_when": null,"first_recorded": "2026-10-21"} |
|---|
Unknown values 4
- per object cap notes: the field may be stated in a source that was not read
- per object cap stated: the field may be stated in a source that was not read
- retention notes: the field may be stated in a source that was not read
- retention stated: the field may be stated in a source that was not read