Branding bundles
Everything under Settings → Branding can be moved between nodes as a
bundle: a zip file with branding.yaml at its root and one file per image.
Export
Section titled “Export”From the app: Settings → Branding → Download bundle (admins only).
From a terminal, against the node’s state database, with no login needed:
streamplace branding export branding.zipWhat’s inside
Section titled “What’s inside”version: 1branding: # only what is set on this node siteTitle: Sample Node primaryColor: "#11e8b2" navLinks: # JSON-valued keys are plain YAML - { label: Home, url: https://example.com, icon: home } socialLinks: - { label: Bluesky, url: https://bsky.app/profile/example.com, icon: bluesky, } - { label: Forum, url: https://example.com/forum, icon: socialIcon1 } mainLogo: mainLogo.svg # image keys name a file in the zip socialIcon1: socialIcon1.svg linkBanner: linkBanner.pngdefaults: # informational: the app's default for each key primaryColor: "#6366f1" accentColor: "#8b5cf6"The YAML is meant to be edited by hand. Colors are hex, enum keys accept the same values as the Branding screen, and every value is validated on import exactly as it would be there, so a typo is rejected by key name rather than silently stored.
Import
Section titled “Import”From the app: Import bundle… shows what would be added, changed and removed before anything is written; Apply commits it.
From a terminal:
streamplace branding import --dry-run branding.zip # previewstreamplace branding import branding.zip # applyImport replaces the node’s branding: keys the bundle does not mention
are removed, so importing a bundle makes the node look like the bundle and
nothing else. Pass --merge (or tick Merge in the app) to keep settings
the bundle leaves out.
Bundles are capped at 8MB. Seeding a brand new node before anyone can sign in is the terminal import’s main job: run it once against the data directory, then start the node.