marrow.config.yaml
Global configuration — the settings that are identical across every diagram you build.
One file at the repo root holds everything static across every diagram. Topology files describe a network; this file describes who it belongs to.
brand:
name: Marrow
note: Proprietary & Confidential
logo: brand/logo.svg
link: https://marrow.network
github: https://github.com/marrow-net/marrowbrand
| Key | Type | Notes |
|---|---|---|
name | string | Shown beside the logo in the sidebar footer, the inspector drawer, and the top brand strip |
note | string | Footer line — e.g. a classification banner. "" means no line |
logo | path | Relative to this file. A path, never a URL |
link | http(s) URL | The logo and name link here |
github | http(s) URL | Small source mark beside the brand |
Delete a key, or leave it blank, to fall back to Marrow's own mark.
Logo handling
| Extension | Embedding |
|---|---|
.svg | Inlined as markup. Use fill="currentColor" so it follows the theme |
.png .jpg .webp .gif | Embedded as a data: URI |
Height is clamped in the chrome (14–20 px by position), so source size doesn't matter.
Markup is sanitized before inlining: <script>, <iframe>, <object>,
<embed>, <link>, <meta>, inline event handlers, and any URL that would
reach outside the document are all removed. Problems are reported, not
swallowed. This is what keeps the offline guarantee true.
Links are not loads
link and github are http(s)-only hyperlinks. Nothing is fetched when a
diagram opens; following one is an explicit reader action. Diagrams still
render fully offline.
theme
Override default palette colors, device status badges, and link stroke widths. Both SVG and Canvas renderers read these values dynamically via CSS custom properties.
theme:
dark:
bg: "#090d16"
accent: "#3b82f6"
accent_ink: "#ffffff"
up: "#22c55e"
down: "#ef4444"
light:
bg: "#ffffff"
accent: "#2563eb"
links:
default_stroke: 1.5
ten_g_stroke: 2.5
forty_g_stroke: 4.0
trunk_stroke: 3.0
slot_stroke: 1.0
stack_stroke: 5.0| Key | Type | Notes |
|---|---|---|
dark | map | Palette tokens (bg, panel, surface, line, subtle, ink, muted, faint, accent, accent_hover, accent_subtle, accent_ink) and status tokens (up, down, degraded, admin_down, unknown) |
light | map | Same token keys for light theme |
links | map | Stroke widths in pixels: default_stroke, ten_g_stroke, forty_g_stroke, trunk_stroke, slot_stroke, stack_stroke |
Color values are validated against CSS injection (SAFE_COLOR_REGEX). Values containing semicolons, braces, or angle brackets are rejected with warnings.
layout
Default density preset and scale multiplier applied across all compiled diagrams when not overridden in the topology YAML header.
layout:
density: compact # compact | standard | spacious (default: standard)
scale: 1.0 # float between 0.4 and 2.5 (default: 1.0)| Key | Type | Notes |
|---|---|---|
density | compact | standard | spacious | Default standard. Scales node chips (48px / 64px / 80px), typography (10px / 12px / 14px), layer spacing, and port chips |
scale | float 0.4–2.5 | Multiplies box padding, icon chip size, and layer spacing |
Edits to marrow.config.yaml hot-reload automatically in marrow serve without restarting the server.
Pointing elsewhere
npm run marrow -- build input/x.yaml --config brands/customer-a.yaml
npm run marrow -- serve input --config brands/customer-a.yaml
npm run marrow -- snapshot input/x.yaml --config brands/customer-a.yamlThis is the supported way to produce differently-branded outputs. There is no per-topology branding — see ADR-0003.
Unknown keys
Unknown keys here warn rather than error (the opposite of topology files,
where they're fatal). x- prefixed keys are preserved and ignored.
npm run setup writes this file interactively on a fresh clone — organization
name, footer note, theme, accent color, and a drop-in icon pack for your own
logos. Re-running setup never overwrites what you've edited.