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:
| Toggle | What 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
| Badge | Meaning |
|---|---|
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:
- Lets the user copy win (your override is the whole point of being able to override).
- Surfaces an amber
overridechip on the row. - 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 JSON —
sigla.jsondoesn’t parse. Underlying error included. - Id mismatch — the manifest’s
idfield 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[].filetries 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 large —
render.html,missing.html, orerror.htmlover 16 KB. - Unknown render kind —
render.kindis something other thantemplateorprocess. - Process spec field missing / invalid — for
kind: process, one ofbinary,binary.name,binary.search,invocation.stdoutAs, ormissing.htmlwas missing or malformed. - Bundled manifest tampered — a bundled
sigla.jsondoesn’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
| Surface | UserDefaults key |
|---|---|
| Built-in renderer toggle | FeatureFlag.Renderer.<id>.Enabled |
| Global extension kill switch | FeatureFlag.Extensions.Enabled |
| Per-extension toggle | FeatureFlag.Extension.<id>.Enabled |
| Override acceptance | Sigla.Extension.<id>.OverrideAcceptedAt |
Domain: com.slantedt.sigla. Inspect with defaults read com.slantedt.sigla.