Marrow

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.

marrow.config.yaml
brand:
  name: Marrow
  note: Proprietary & Confidential
  logo: brand/logo.svg
  link: https://marrow.network
  github: https://github.com/marrow-net/marrow

brand

KeyTypeNotes
namestringShown beside the logo in the sidebar footer, the inspector drawer, and the top brand strip
notestringFooter line — e.g. a classification banner. "" means no line
logopathRelative to this file. A path, never a URL
linkhttp(s) URLThe logo and name link here
githubhttp(s) URLSmall source mark beside the brand

Delete a key, or leave it blank, to fall back to Marrow's own mark.

Logo handling

ExtensionEmbedding
.svgInlined as markup. Use fill="currentColor" so it follows the theme
.png .jpg .webp .gifEmbedded 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.

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.

marrow.config.yaml
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
KeyTypeNotes
darkmapPalette 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)
lightmapSame token keys for light theme
linksmapStroke 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.

marrow.config.yaml
layout:
  density: compact   # compact | standard | spacious (default: standard)
  scale: 1.0         # float between 0.4 and 2.5 (default: 1.0)
KeyTypeNotes
densitycompact | standard | spaciousDefault standard. Scales node chips (48px / 64px / 80px), typography (10px / 12px / 14px), layer spacing, and port chips
scalefloat 0.4–2.5Multiplies 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.yaml

This 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.