Publishing an Analysis Site¶
One-off analysis pages (dashboards, side-by-side comparisons, dossiers) often end up on personal
sites that disappear when the author moves on. Marin gives them a durable, public home: a page
published here gets a stable https://storage.googleapis.com/marin-public/... URL, is recorded as
an Artifact so it can be fetched from code, and is listed in a public discovery index.
The marin-public bucket is world-readable
Everything you publish is readable by anyone on the internet, and any handle is unauthenticated (there is no per-user ownership). Never publish anything sensitive — no private data, no sampled corpus text, no credentials.
Publish¶
source is either a single .html file or a directory whose index.html is the entrypoint (a
multi-file site — HTML plus JS/CSS/data). Versions are calendar versions, YYYY.MM.DD[.N].
The page lands at gs://marin-public/<user>/<slug>/<version>/, alongside an .artifact.json record.
A new version publishes to a new path, so old links keep working.
Fetch from code¶
The address is a pure function of (user, slug, version), so no registry lookup is needed:
from marin.publish.sites import site_uri
from marin.execution.artifact import Artifact
site = Artifact.raw_load(site_uri("held", "datakit-sidebyside", "2026.07.01"))
print(site.path) # gs://marin-public/held/datakit-sidebyside/2026.07.01/
print(site.record.config) # {"user", "slug", "version", "url", "title", "summary"}
site_url(...) and site_uri(...) are pure string builders if you only need the link or the path.
Discovery¶
Every publish upserts an entry into gs://marin-public/index.json, a list of
{name, version, url, title, summary}. Read it to enumerate published sites; the curated list also
appears under Published analysis sites.