Crates.io | obsidian-parser |
lib.rs | obsidian-parser |
version | 0.4.2 |
created_at | 2025-07-06 20:04:58.428209+00 |
updated_at | 2025-08-28 21:00:28.735714+00 |
description | Blazingly fast Obsidian vault parser with graph analysis |
homepage | |
repository | https://github.com/CryptoGladi/obsidian-parser |
max_upload_size | |
id | 1740409 |
size | 105,886 |
Blazingly fast Rust library for parsing and analyzing Obsidian vaults.
petgraph
for advanced analysisserde
compatibilityAdd to Cargo.toml
:
[dependencies]
obsidian-parser = "0.4"
use obsidian_parser::prelude::*;
use serde::Deserialize;
// Parse single file with `HashMap`
let note_hashmap = ObFileInMemory::from_file_default("note.md").unwrap();
println!("Content: {}", note_hashmap.content().unwrap());
println!("Properties: {:#?}", note_hashmap.properties().unwrap().unwrap());
// Parse single file with custom struct
#[derive(Clone, Deserialize)]
struct NoteProperties {
created: String,
tags: Vec<String>,
priority: u8,
}
let note_with_serde: ObFileInMemory<NoteProperties> = ObFileInMemory::from_file("note.md").unwrap();
use obsidian_parser::prelude::*;
// Load entire vault
let vault = Vault::open_default("/path/to/vault").unwrap();
// Check for duplicate note names
if !vault.check_unique_note_name() {
eprintln!("Duplicate note names detected!");
}
// Access parsed files
for file in vault.files {
println!("Note: {:?}", file.path());
}
petgraph
feature)Enable in Cargo.toml
:
obsidian-parser = { version = "0.4", features = ["petgraph"] }
# obsidian-parser = { version = "0.4", features = ["petgraph", "rayon"] } is fast
Then:
use obsidian_parser::prelude::*;
use petgraph::dot::{Dot, Config};
let vault = Vault::open_default("/path/to/vault").unwrap();
let graph = vault.get_digraph().unwrap();
// Export to Graphviz format
println!("{:?}", Dot::with_config(&graph, &[Config::EdgeNoLabel]));
// Find most connected note
let most_connected = graph.node_indices()
.max_by_key(|n| graph.edges(*n).count())
.unwrap();
println!("Knowledge hub: {}", graph[most_connected]);
Included example analyzer
calculates connected components in your Obsidian vault's knowledge graph:
cargo run --example analyzer --release --features="petgraph rayon" -- --path="Path to Obsidian vault"
My PC AMD Ryzen 5 3600X with NVMe
SSD
Operation | Time |
---|---|
Vault initialization | 739.35 µs |
Graph construction | 1.22 ms |
Peak memory usage | 900 KiB |
MIT © CryptoGladi