Expand description
§TurboVault Parser
Obsidian Flavored Markdown (OFM) parser built on pulldown-cmark.
This crate provides:
- Fast markdown parsing (CommonMark foundation)
- Frontmatter extraction (YAML)
- Obsidian-specific syntax: wikilinks, embeds, callouts, tasks, tags, headings
- Link extraction and resolution
§Architecture
Parser pipeline:
- Frontmatter Extraction: Using regex for —YAML—
- Link Parsing: Wikilinks and embeds
- OFM Elements: Tags, tasks, callouts, headings with regex
§Quick Start
use turbovault_parser::Parser;
use std::path::PathBuf;
let content = r#"---
title: My Note
tags: [important, review]
---
[[WikiLink]] and [[Other Note#Heading]].
- [x] Completed task
- [ ] Pending task
"#;
let vault_path = PathBuf::from("/vault");
let parser = Parser::new(vault_path);
let path = PathBuf::from("my-note.md");
if let Ok(result) = parser.parse_file(&path, content) {
// Access parsed components
if let Some(frontmatter) = &result.frontmatter {
println!("Frontmatter data: {:?}", frontmatter.data);
}
println!("Links: {}", result.links.len());
println!("Tasks: {}", result.tasks.len());
}§Supported OFM Features
§Links
- Wikilinks:
[[Note]] - Aliases:
[[Note|Alias]] - Block references:
[[Note#^blockid]] - Heading references:
[[Note#Heading]] - Embeds:
![[Note]]
§Frontmatter
YAML frontmatter between --- delimiters is extracted and parsed.
§Elements
- Headings: H1-H6 with level tracking
- Tasks: Markdown checkboxes with completion status
- Tags: Inline tags like
#important - Callouts: Obsidian callout syntax
> [!TYPE]
§Performance
The parser uses pulldown-cmark for the CommonMark foundation, providing:
- Linear time complexity O(n)
- Zero-copy parsing where possible
- Streaming-friendly architecture
§Error Handling
Parsing errors are wrapped in turbovault_core::error::Result. Common errors:
- Invalid file paths
- YAML parsing failures in frontmatter
- Invalid unicode in content
Re-exports§
pub use parsers::Parser;