Documentation
Everything you need to put a hostname behind the edge and keep it there. Examples are copy-pasteable and tested on every release.
Quick start
Create a zone, point DNS at it, and you are serving. The zone is live on every PoP before the API call returns.
# 1. create the zone
meridian zones create dl.example.com \
--origin origin.example.internal:8443 \
--shield eu-central
# 2. point DNS at the anycast name
dl.example.com. 300 IN CNAME z8f21.edge.master-c1.cdnmedia.download.
# 3. confirm
curl -sI https://dl.example.com/releases/client.pkg | grep -i x-cachePOST /v3/zones/{id}/prefetch and the edge will pull the object before your announcement goes out.Concepts
Three ideas explain most of the behaviour you will observe.
- Slice. Objects above 8 MB are fetched and cached in 8 MB slices. A client asking for bytes 0–1023 causes one slice fetch, not a full-object fetch.
- Shield. A regional cache that every edge in that region fetches through. It is what keeps origin load flat.
- Collapse. Concurrent misses for the same slice are merged into one upstream request; the rest wait on it.
Cache keys
The default key is scheme, host, path and the query parameters you declare. Everything else is ignored, which stops tracking parameters from shattering your hit ratio.
| Component | Default | Configurable |
|---|---|---|
| Scheme | included | no |
| Host | included | yes — collapse aliases into one key |
| Path | included | yes — case folding, trailing slash |
| Query | declared parameters only | yes |
| Cookie | excluded | yes — allow-list only |
| Accept-Encoding | normalised | no |
Purging
Three flavours, all global and all asynchronous with a receipt you can poll.
- Path purge — exact URLs, up to 5,000 per call.
- Tag purge — everything tagged by a
Cache-Tagresponse header from your origin. - Prefix purge — a subtree, rate limited to 20 calls per minute because it is expensive.
curl -X POST https://api.master-c1.cdnmedia.download/v3/zones/z_8f21/purge \
-H "Authorization: Bearer $MERIDIAN_TOKEN" \
-d '{"tags":["release-2026.8"]}'Compression
Brotli at level 5 for text types, zstd where the client advertises it, and nothing at all for formats that are already compressed. You can force a policy per rule if your origin knows better.
Range requests
Fully supported, including multi-range. Because storage is sliced, a range request never pulls more than the slices it touches — this is what makes video seeking cheap.
206 with a wrong Content-Range will poison a slice. We validate and reject mismatches, but you will see misses until the origin is fixed.Limits
| Limit | Build | Scale | Enterprise |
|---|---|---|---|
| Object size | 8 GB | 128 GB | unlimited |
| Zones | 10 | unlimited | unlimited |
| Purges per minute | 20 | 600 | negotiated |
| Edge rules per zone | 3 | 200 | negotiated |
| Log delivery lag | 5 min | 30 s | 10 s |