Assets and embeds
Drop files into the editor and reference them with wiki-style embeds.
Open Knowledge treats assets (images, PDFs, video, audio) as first-class content alongside markdown. This page covers how asset references behave when shared outside the editor.
Sharing across apps
Local-path images (), wiki-embeds (![[diagram.png]]), and any other reference whose URL only resolves on your machine cannot render in apps that don't have access to your filesystem. When you copy a section containing one of these and paste into Gmail, Outlook, Notion, Slack, Discord, or Google Docs, Open Knowledge degrades visibly instead of silently:
- Non-portable URLs surface as a styled code block. Recipients see the literal markdown source (e.g.
) in monospace, not a broken-image icon. They can read what the section was meant to include and ask for the file or accept the textual reference. - Inline images in paragraphs surface as inline source. A paragraph with a local-path image keeps its prose flow — only the
<img>collapses to inline source markup, the surrounding sentence is unaffected. - Wiki-links surface as anchor links.
[[OtherDoc]]cross-app becomes a clickable<a href="#otherdoc">OtherDoc</a>— the link shape signals that something was referenced, though the fragment href will not resolve in the destination.
Two affordances are preserved across the cross-app boundary, not degradations themselves:
- Markdown-aware destinations get the source. Linear, Outline, Obsidian, and similar apps that read
text/plainfirst receive clean canonical markdown — the cross-app degradation only affects thetext/htmlpayload that destinations like Gmail render. - Open Knowledge → Open Knowledge paste round-trips faithfully. Copying out of one Open Knowledge doc and pasting into another preserves the original markdown image / wiki-link / wiki-embed shape — the cross-app degradation only fires when the receiving app reads
text/htmlinstead oftext/plain.
Source-mode copy (the CodeMirror toggle) works the same way: the clipboard's text/html payload is always a styled code block of the raw markdown bytes, never the rendered output. Pasting a # Heading from source-mode into Gmail produces a code block, not a rendered heading — consistent with VS Code, Obsidian source mode, GitHub textareas, and CodeMirror itself.
If you want recipients to see rendered images cross-app, host the file at a public URL (https://...) and reference it that way — public URLs are passed through unchanged. Public IP literals (https://1.2.3.4/img.png, https://[2001:4860:4860::8888]/img.png) are also passed through; only private, loopback, link-local, and other non-public ranges trigger the source-fallback shape.