{"eid":"matrix-org-github-io","name":"Self-hosted Synapse media repository","domain":"matrix-org.github.io","resolved_by":"host","topics":["storage"],"n_records":1,"best_vorder":5,"review":null,"aliases":["Self-hosted Synapse media repository","matrix-org.github.io"],"records":[{"rid":"storage/self-hosted-synapse-media-repository","card":{"rid":"storage/self-hosted-synapse-media-repository","eid":"matrix-org-github-io","topic":"storage","slug":"self-hosted-synapse-media-repository","provider":"Self-hosted Synapse media repository","url":"https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html","domain":"matrix-org.github.io","category":"messaging","tier":null,"verdict":"fails-egress","vorder":5,"grp":"rejected","confidence":"reported","binding":"none","identity_kind":"institution","identity_basis":"stated","needs_card":0,"needs_phone":0,"needs_id":0,"needs_institution":1,"country":null,"crypto":null,"interfaces":"s3,rest,webdav,rclone","egress_metered":0,"per_object_bytes":null,"retention_days":null,"verified_at":"2026-10-21T00:00:00.000Z","verified_basis":"inherited","checked_on":"2026-10-21","stale_on":"2026-11-04","n_evidence":2,"usd_month":null,"usd_per_tb_month":null,"summary":"Unbounded — `max_upload_size` defaults to 50M and can be set to any value; storage and media retention are entirely operator-controlled.","duplicate_of":null,"n_unknown":6},"record":{"topic":"storage","slug":"self-hosted-synapse-media-repository","provider":"Self-hosted Synapse media repository","url":"https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html","category":"messaging","free_tier":{"stated":"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","source_url":"https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html","read_on":"2026-10-21","notes":null},"per_object_cap":{"stated":"not stated","source_url":"https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html","notes":"not stated"},"retention":{"stated":"not stated","source_url":"https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html","notes":"not stated"},"egress":{"terms":"Your own server's bandwidth. Fits the 500 GB/day job if you front it with a free CDN (Cloudflare caches media aggressively if you allow it).","metered":false},"interface":["s3","rest","webdav","rclone"],"interface_detail":"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.","chaining":"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.","limits":[],"limits_note":"`max_upload_size` default 50M; reverse proxy must be raised too (nginx default body size bites first). `media_retention.local_media_lifetime` / `remote_media_lifetime` can silently delete anything not accessed within the window.","identity_cost":{"kind":"institution","detail":"derived from the record's prose, not from an identity field, and no signup was executed: — enabling media_retention turns the repo into a TTL cache. Federation media cache is the first thing purged. Not a free provider — the multiplier angle is that media is content-addressed an","country":null},"reliability_note":"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.","confidence":"reported","confidence_note":"One page read moves it to documented.","evidence":[{"url":"https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html","date":"2026-10-21","proved":"'max_upload_size — The largest allowed upload size in bytes... Defaults to 50M.'"},{"url":"https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html","date":"2026-10-21","proved":"'media_retention ... control whether media will be purged if it has not been accessed in a given amount of time'"}],"verdict":"fails-egress","verified_at":"2026-10-21T00:00:00.000Z","notes":"Unbounded — `max_upload_size` defaults to 50M and can be set to any value; storage and media retention are entirely operator-controlled.","extras":{"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"}},"binding":"none","binding_note":"no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit"},"claims":[{"path":"$.free_tier.stated","kind":"free-quota","num":null,"unit":null,"per":null,"currency":null,"usd":null,"fx_date":null,"parse":"unparsed"}],"unknown":[["$.extras.dead_end.retry_when","process"],["$.free_tier.notes","process"],["$.per_object_cap.notes","not-extracted"],["$.per_object_cap.stated","not-extracted"],["$.retention.notes","not-extracted"],["$.retention.stated","not-extracted"]],"history":[],"drift":[]}]}