How to Embed Content from Other Obsidian Notes: Complete Syntax Guide
Obsidian lets you pull live content from other notes directly into your current document using the ![[…]] embed syntax, rendering everything from full notes to specific blocks and media files inline without duplicating source material.
The kepano/obsidian-skills repository documents how to embed content from other Obsidian notes using native Obsidian-flavored markdown. According to the source code in skills/obsidian-markdown/references/EMBEDS.md, the embed engine parses these tokens at render time and replaces them with the target content while keeping the source note unchanged.
Understanding the Core Embed Syntax
The embed system is built on a simple convention: a wikilink prefixed with an exclamation mark (!). When Obsidian encounters ![[Target]], it extracts the referenced content and displays it inline, creating dynamic, modular documents that stay synchronized with their sources.
The complete specification for all embed types spans lines 5-62 of skills/obsidian-markdown/references/EMBEDS.md. A high-level workflow summary appears in lines 45-55 of skills/obsidian-markdown/SKILL.md, while related front-matter patterns are documented in skills/obsidian-markdown/references/PROPERTIES.md and callout containers in skills/obsidian-markdown/references/CALLOUTS.md.
Embedding Specific Content Types
Full Notes and Headings
To embed an entire note, wrap the note title in the embed syntax:
![[Project Overview]]
For specific sections, append a hash symbol and the exact heading text, as detailed in lines 14-17 of skills/obsidian-markdown/references/EMBEDS.md:
![[Project Overview#Milestones]]
When targeting a heading, Obsidian extracts the entire subtree beginning at that header. The engine preserves all nested markdown structure—including lists, code blocks, and subheadings—until the next peer-level heading in the source document.
Individual Blocks by ID
For granular control, you can embed a single paragraph, list item, or quote using block IDs. First, add a caret-prefixed identifier to any line in the source note (e.g., ^milestone-list), then reference it using the syntax documented in lines 28-31 of the embeds reference:
![[Project Overview#^milestone-list]]
The block ID must be unique within the target note. This method renders only that specific block and its immediate children, making it ideal for reusable snippets like callouts or task lists that need to appear in multiple contexts.
Media Files with Size Parameters
The same embed syntax handles images, PDFs, audio, and video files. Optional size hints control displayed dimensions using the pipe character, as shown in lines 36-39 of skills/obsidian-markdown/references/EMBEDS.md:
![[architecture.png|300]]
![[diagram.jpg|640x480]]
For PDFs, you can specify exact page numbers using query parameters:
![[specs.pdf#page=3]]
These media embeds render native players or image tags inline, respecting the vault's relative path resolution and maintaining links to the original files.
Dynamic Search Results
Query embeds display live search results inside your note. Unlike static embeds, these use a fenced code block with the query language specifier, documented in lines 60-62 of the reference file:
```query
tag:#project status:done
When rendered, Obsidian replaces this block with a live list of matching notes. This creates self-updating dashboards that reflect your vault's current state without requiring manual refreshes or copy-pasting.
## Practical Implementation Examples
The following patterns demonstrate the complete embed workflow as implemented in `kepano/obsidian-skills`:
```markdown
# Embed a complete note
![[Meeting Notes]]
# Embed only the Action Items section
![[Meeting Notes#Action Items]]
# Embed a specific task list by block ID
![[Meeting Notes#^action-list]]
# Display an image at 300px width
![[screenshot.png|300]]
# Embed page 5 of a PDF document
![[handbook.pdf#page=5]]
# Show all completed project tasks dynamically
```query
tag:#project status:done
These examples demonstrate how modular content composition works in practice, allowing you to build rich dashboard pages that assemble information from many sources.
## Summary
- Use `![[Note Name]]` to embed content from other Obsidian notes inline while keeping the source file unchanged.
- Target specific headings with `![[Note#Heading]]` or individual blocks with `![[Note#^block-id]]` for precise content reuse.
- Control media dimensions using pipe syntax like `![[image.png|300]]` and navigate PDFs with `#page=N` parameters.
- Create dynamic dashboards using ```query` blocks that render live search results automatically.
- All syntax variations are documented in `skills/obsidian-markdown/references/EMBEDS.md` (lines 5-62) and summarized in `skills/obsidian-markdown/SKILL.md` (lines 45-55).
## Frequently Asked Questions
### What is the difference between a wikilink and an embed in Obsidian?
A wikilink uses double brackets `[[Note Name]]` to create a clickable reference to another note, while an embed adds an exclamation mark prefix `![[Note Name]]` to render the target content directly inside the current note at display time.
### Can I embed content from notes located in different folders?
Yes, the embed syntax supports relative paths. Use `![[Folder/Subfolder/Note Name]]` to reference notes outside the current directory, or rely on Obsidian's unique note name resolution when vault titles are distinct.
### How do I create a block ID for embedding a specific paragraph?
Add a caret symbol and unique identifier at the end of any line in your source note, such as `This is important text ^key-point`. You can then embed just that block using `![[Source Note#^key-point]]` without pulling in surrounding content.
### Do embedded search results update automatically?
Yes, query embeds using the ```query` syntax refresh automatically when the vault index changes, displaying current search results without requiring manual edits to the containing note.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →