Settings — Renderers

The Renderers pane in Settings (⌘, → Renderers) is the central control panel for every block renderer Sigla knows about — both the compiled-in built-ins (Mermaid, Vega-Lite, CSV/TSV) and the manifest-driven extensions discovered at launch (bundled and user-installed).

This page tours each section and what it controls.

How to open

⌘, (Sigla → Settings…) → Renderers tab.

Section 1: Built-in

Three toggles for the renderers compiled directly into Sigla:

ToggleWhat it controls
Mermaid```mermaid fences (flowcharts, sequence diagrams, ER diagrams, etc.)
Vega-Lite```vega-lite fences (statistical charts)
CSV / TSV table```csv and ```tsv fences (tabular data)

Disabling a built-in falls the fence back to a plain <pre><code class="language-…"> block so the source stays visible (and syntax-highlighted, if a theme is configured). The currently open document re-renders immediately when you toggle — no app restart.

State persists across launches via FeatureFlag.Renderer.<id>.Enabled in UserDefaults. Equivalent shell:

defaults write com.slantedt.sigla FeatureFlag.Renderer.mermaid.Enabled -bool false

Section 2: Extensions (kill switch)

A single master toggle plus two buttons.

Enable extensions — turning this off disables every extension, bundled and user alike. Built-in renderers above stay on. This is the emergency kill: useful if a broken extension is preventing the app from rendering anything, or if you want to confirm a rendering bug isn’t extension-induced.

Default state: on. Bundled extensions ship inside the signed app bundle and must load even when you have no ~/.config/sigla/extensions/ directory.

Equivalent shell:

defaults write com.slantedt.sigla FeatureFlag.Extensions.Enabled -bool false

Reveal Extensions Folder — opens ~/.config/sigla/extensions/ in Finder (creating the directory if needed). Hidden in the Mac App Store build, which can’t reach outside its sandbox.

Reload (⌘⇧R) — rescans both the bundled directory and the user directory for changes. Equivalent to View → Reload Extensions.

Section 3: Installed extensions

One row per extension that loaded successfully. Each row carries up to three badges, a name, a subtitle, and a per-extension toggle.

Badges

BadgeMeaning
bundled (blue)Ships inside the signed Sigla.app. SHA-verified at load.
user (green)Loaded from ~/.config/sigla/extensions/. HTML allowlist-sanitized at render.
process (gray)Renders by spawning an external binary (e.g. PlantUML, Graphviz).
template (gray)Renders via HTML substitution (e.g. Gherkin).
assets (gray)Asset-only extension: injects scripts or styles but claims no fence labels.
override (amber)A user extension with the same id as a bundled one. The user copy wins.

Override warning

If you install a user extension whose directory name (= its manifest id) collides with a bundled extension, Sigla:

  1. Lets the user copy win (your override is the whole point of being able to override).
  2. Surfaces an amber override chip on the row.
  3. Prompts once, on first appearance, asking you to confirm the replacement.

[!WARNING] A user-installed extension can declare a different binary, different assets, and different HTML. Id-shadowing is the highest-value attack surface, so the override flow is deliberately friction-y. If you didn’t install an override and one appears, investigate before accepting.

The one-time acceptance is stored in UserDefaults under Sigla.Extension.<id>.OverrideAcceptedAt.

Per-extension toggle

The trailing toggle binds to FeatureFlag.Extension.<id>.Enabled. Defaults to on once the extension loads. Disabling falls the relevant fences back to plain code blocks. Equivalent shell:

defaults write com.slantedt.sigla FeatureFlag.Extension.graphviz.Enabled -bool false

Section 4: Diagnostics

Appears only when extensions failed to load. Each row is one extension that didn’t register, with a one-line explanation:

  • Manifest missing — the directory has no sigla.json.
  • Manifest too large — over 64 KB. Likely a misnamed file.
  • Invalid JSONsigla.json doesn’t parse. Underlying error included.
  • Id mismatch — the manifest’s id field doesn’t match the directory name.
  • Min host version too high — the extension was built for a newer Sigla.
  • Asset escapes directory — a relative path in assets[].file tries to climb out via .. or absolute paths.
  • Asset file missing — a declared asset doesn’t exist on disk.
  • Asset too large — over 2 MB per file.
  • Too many assets — over 32 assets per extension.
  • Extension directory too large — total directory size over 50 MB.
  • HTML slot too largerender.html, missing.html, or error.html over 16 KB.
  • Unknown render kindrender.kind is something other than template or process.
  • Process spec field missing / invalid — for kind: process, one of binary, binary.name, binary.search, invocation.stdoutAs, or missing.html was missing or malformed.
  • Bundled manifest tampered — a bundled sigla.json doesn’t match its build-time SHA-256. The extension is dropped.
  • Bundled overridden by user — informational. A user extension is shadowing a bundled one.

For the underlying field and limit reference, see Extensions — authoring.

What persists where

SurfaceUserDefaults key
Built-in renderer toggleFeatureFlag.Renderer.<id>.Enabled
Global extension kill switchFeatureFlag.Extensions.Enabled
Per-extension toggleFeatureFlag.Extension.<id>.Enabled
Override acceptanceSigla.Extension.<id>.OverrideAcceptedAt

Domain: com.slantedt.sigla. Inspect with defaults read com.slantedt.sigla.