Marina Operational · 37/38 PoPs serving

Docs

From a built directory to a cached, integrity-checked URL. Everything below is the whole workflow.

Quickstart
  1. Install the CLI

    The berth command is a single static binary.

    npm install --global @marina/berth
    berth login --token $MARINA_TOKEN
  2. Publish a release

    Point it at a built directory and give it a version. Re-publishing an existing version is rejected.

    berth push ./dist --pkg chartline --version 4.2.1
    chartline.min.js   sha384-Hd3mRb…u0LwA   18.2 KB (br 6.1 KB)
    chartline.min.css  sha384-Kp7vT2…Zx9Qe    3.4 KB (br 1.0 KB)
    live at https://cdnmarina.com/v/chartline/4.2.1/
  3. Link it with integrity

    Paste the printed digest into the tag. Browsers refuse the file if a single byte differs.

    <script src="https://cdnmarina.com/v/chartline/4.2.1/chartline.min.js"
      integrity="sha384-Hd3mRb…u0LwA"
      crossorigin="anonymous"></script>
URL anatomy
https://cdnmarina.com
  /v/chartline
  /4.2.1
  /chartline.min.js

/v/ marks an immutable path, followed by the package name, an exact semver and the file path inside the release.

Pre-release tags such as 5.0.0-rc.2 are valid versions.

Cache behaviour
Path shapeCache-ControlEdge TTLNotes
/v/<pkg>/<semver>/…public, max-age=31536000, immutableuntil evictedNever revalidated. A change means a new version.
/a/<pkg>/<channel>public, max-age=6060 s302 to the current immutable path.
/m/<pkg>.jsonpublic, max-age=300300 sVersion list and digests as JSON.
unknown pathno-storenone404 with a small HTML body.
Integrity and CORS

Every file is served with Access-Control-Allow-Origin: * and Timing-Allow-Origin: *, so SRI works with crossorigin="anonymous" and resource timing is visible to your RUM.

Digests are computed over the uncompressed bytes at publish time. Compression is transparent: SRI is verified after decoding.

Fetch the digest list for a release at https://cdnmarina.com/m/chartline.json.
Limits
Max file size25 MB
Files per release2,000
Release size150 MB
Publish rate60 / hour / token
Allowed typesjs, css, wasm, fonts, images, json, map
Response codes
StatusMeaning
200Asset served from the edge or shield.
206Range request served, used for large WASM and font files.
304Conditional request matched the ETag.
404No such package, version or file. Check the path, immutable URLs never move.
410Version retired by its owner for a security or legal reason.

See where the points of presence are →