A full kitchen-sink test article verifying Outline image attachments, callout blocks, Mermaid diagrams, Shiki syntax highlighting, and GFM tables.
1. Outline Image & File Attachments โ
When you drag-and-drop or paste an image into Outline, Outline stores a private redirect path (/api/attachments.redirect?id=<uuid>). During pnpm sync, VitePaper automatically authenticates with your OUTLINE_API_KEY, downloads the binary into content/public/attachments/<uuid>.<ext>, and rewrites the Markdown URL so public visitors can see it without needing an Outline login.
Here is a real attachment pulled directly from your Outline instance (id=7cf59078-4d40-460a-a2c9-411025d62f05):

2. Callout / Notice Blocks (:::) โ
Outline's native notice blocks export as fenced ::: containers. All four semantic styles work natively:
INFO
Info Callout (:::info) โ Used for background context, register addresses, or protocol notes. Supports bold, italics, dashed links, and inline code.
TIP
Tip Callout (:::tip) โ Useful for pro-tips, shortcuts, and recommended configurations.
WARNING
Warning Callout (:::warning) โ Highlights hardware voltage warnings, EULA caveats, or breaking changes.
DANGER
Danger Callout (:::danger) โ Critical alerts such as avoiding overwriting EC health flags (FANE bit 0).
3. Mermaid Diagrams โ
Both flowcharts and sequence diagrams render client-side via mermaid and automatically adapt when you toggle between Warm Parchment Light and Slate & Orange Dark mode:
4. Syntax Highlighting & ProseMirror Quirk Normalizer โ
Testing Shiki syntax highlighting across multiple systems languages (powershell, asl, c, bash), plus verifying that Outline's bold-inline-code serialization quirk (**CommandType 0x28**) renders cleanly without literal asterisks:
# Query HP Thermal Profile via WMI
$instance = Get-CimInstance -Namespace "root\wmi" -ClassName "hpqBIntM"
$result = Invoke-CimMethod -InputObject $instance -MethodName "hpqBIOSInt4"
Write-Host "Current Mode: $($result.OutData.Data[0])" -ForegroundColor GreenDevice (EC0)
{
Name (_HID, EisaId ("PNP0C09"))
Method (FRSP, 0, NotSerialized)
{
Return (Multiply (FRPM, 0x64))
}
}5. Tables, Blockquotes & Task Lists โ
| Feature | Outline Syntax | VitePaper Output | Status |
|---|---|---|---|
| YAML Frontmatter | Top ```yaml code block | Parsed & stripped into .md frontmatter | โ Verified |
| Private Attachments | /api/attachments.redirect?id=... | Cached to /attachments/<uuid>.<ext> | โ Verified |
| Callouts | :::info, :::tip, :::warning | Styled .custom-block containers | โ Verified |
| Mermaid | ```mermaid | Theme-aware SVG diagram | โ Verified |
"Any sufficiently advanced firmware bug is indistinguishable from a feature." โ Embedded Controller Proverbs
- [x] Verify YAML frontmatter overrides (
tags,updated,featured,nav,excludeFromPosts) - [x] Verify authenticated Outline attachment downloading & URL rewriting
- [x] Verify Mermaid & Shiki rendering in Light and Dark modes
- [ ] Deploy container to Unraid and wire up
POST /api/webhook/outline
TIP
Live Webhook & Cross-Link Test: This callout links directly to another Outline document โ Dumping SPI Flash Firmware with a Raspberry Pi Pico โ to verify cross-document link rewriting and automatic Referenced In backlinks!
Tabbed Code Groups ([tab: ...] & [tab-group: ...]) โ
Two back-to-back named tab groups (request and response):
POST /api/webhook/outline HTTP/1.1
Host: blog.jcktwd.uk
Content-Type: application/json
Outline-Signature: t=1727798000,s=4b8e9a...{
"event": "documents.update",
"payload": {
"id": "72fa8be6-5ddb-49f4-90ee-0131fdc46c9e",
"title": "Hello World"
}
}HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache{
"ok": true,
"event": "documents.update"
}