{"id":29537850,"url":"https://github.com/cryptogladi/obsidian-parser","last_synced_at":"2026-01-20T17:03:34.066Z","repository":{"id":302940151,"uuid":"1014004768","full_name":"CryptoGladi/obsidian-parser","owner":"CryptoGladi","description":"Blazingly fast Obsidian vault parser with graph analysis","archived":false,"fork":false,"pushed_at":"2025-07-12T00:39:01.000Z","size":70,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-07-12T03:03:24.032Z","etag":null,"topics":["graph","knowledge-graph","obsidian","parser","vault"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CryptoGladi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-04T21:26:07.000Z","updated_at":"2025-07-12T00:39:04.000Z","dependencies_parsed_at":"2025-07-04T22:30:46.997Z","dependency_job_id":"2f8b11f4-2491-4e73-a320-0049435ad6fa","html_url":"https://github.com/CryptoGladi/obsidian-parser","commit_stats":null,"previous_names":["cryptogladi/obsidian-parser"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/CryptoGladi/obsidian-parser","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CryptoGladi%2Fobsidian-parser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CryptoGladi%2Fobsidian-parser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CryptoGladi%2Fobsidian-parser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CryptoGladi%2Fobsidian-parser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CryptoGladi","download_url":"https://codeload.github.com/CryptoGladi/obsidian-parser/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CryptoGladi%2Fobsidian-parser/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265563712,"owners_count":23788746,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["graph","knowledge-graph","obsidian","parser","vault"],"created_at":"2025-07-17T04:02:22.682Z","updated_at":"2026-01-20T17:03:34.060Z","avatar_url":"https://github.com/CryptoGladi.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# obsidian-parser\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Crates.io](https://img.shields.io/crates/v/obsidian-parser.svg)](https://crates.io/crates/obsidian-parser)\n[![Docs.rs](https://docs.rs/obsidian-parser/badge.svg)](https://docs.rs/obsidian-parser)\n[![Rust](https://img.shields.io/badge/Rust-orange.svg)](https://www.rust-lang.org)\n\nBlazingly fast Rust library for parsing and analyzing [Obsidian](https://obsidian.md) vaults.\n## Features\n- ⚡ **High Performance**: Parses 1000+ notes in under 3ms\n- 🧠 **Knowledge Graphs**: Built-in integration with [`petgraph`](https://docs.rs/petgraph/latest/petgraph) for advanced analysis\n- 🧩 **Flexible API**: Supports both in-memory and on-disk note representations\n- 🔍 **Frontmatter Parsing**: Extract YAML properties with [`serde`](https://docs.rs/serde/latest/serde) compatibility\n- 🌐 **Link Analysis**: Identify connections between notes\n- 👾 **WebAssembly Support**: Add `obsidian-parser` to your Obsidian plugins\n## Quick Start\nAdd to `Cargo.toml`:\n```toml\n[dependencies]\nobsidian-parser = \"0.9\"\n```\n### Basic Usage\n* Basic Parsing\n```rust\nuse obsidian_parser::prelude::*;\nuse serde::Deserialize;\n\n// Parse single file with `HashMap`\nlet note_hashmap = NoteInMemory::from_file_default(\"note.md\").unwrap();\nprintln!(\"Content: {}\", note_hashmap.content().unwrap());\nprintln!(\"Properties: {:#?}\", note_hashmap.properties().unwrap().unwrap());\nprintln!(\"Tags: {:?}\", note_hashmap.tags().unwrap());\n\n// Parse single file with custom struct\n#[derive(Clone, Deserialize)]\nstruct NoteProperties {\n    created: String,\n    tags: Vec\u003cString\u003e,\n    priority: u8,\n}\nlet note_with_serde: NoteInMemory\u003cNoteProperties\u003e = NoteInMemory::from_file(\"note.md\").unwrap();\n```\n* Vault Analysis\n```rust\nuse obsidian_parser::prelude::*;\n\n// Load entire vault\nlet options = VaultOptions::new(\"/path/to/vault\");\nlet vault: VaultInMemory = VaultBuilder::new(\u0026options)\n    .into_iter()\n    .filter_map(Result::ok)\n    .build_vault(\u0026options)\n    .unwrap();\n\n// Check for duplicate note names\nif !vault.have_duplicates_notes_by_name() {\n    eprintln!(\"Duplicate note names detected!\");\n}\n\n// Access parsed notes\nfor note in vault.notes() {\n  println!(\"Note: {:?}\", note);\n}\n```\n* Graph Analysis (requires [`petgraph`](https://docs.rs/petgraph/latest/petgraph) feature)\n```rust\n#[cfg(feature = \"petgraph\")]\n{\n    use obsidian_parser::prelude::*;\n    use petgraph::dot::{Dot, Config};\n    let options = VaultOptions::new(\"/path/to/vault\");\n    let vault: VaultInMemory = VaultBuilder::new(\u0026options)\n        .into_iter()\n        .filter_map(Result::ok)\n        .build_vault(\u0026options)\n        .unwrap();\n    let graph = vault.get_digraph().unwrap();\n    \n    // Export to Graphviz format\n    println!(\"{:?}\", Dot::with_config(\u0026graph, \u0026[Config::EdgeNoLabel]));\n    \n    // Find most connected note\n    let most_connected = graph.node_indices()\n        .max_by_key(|n| graph.edges(*n).count())\n        .unwrap();\n    println!(\"Knowledge hub: {:?}\", graph[most_connected]);\n}\n```\n## Example: Analyze Knowledge Connectivity\nIncluded example `analyzer` calculates connected components in your Obsidian vault's knowledge graph:\n\n```bash\ncargo run --example analyzer --release --features=\"petgraph rayon\" -- --path=\"Path to Obsidian vault\"\n```\n## Performance\nMy PC AMD Ryzen 5 3600X with `NVMe` SSD\n| Operation                | Time       |\n|--------------------------|------------|\n| Vault initialization     | 739.35 µs  |\n| Graph construction       | 1.22 ms    |\n| Peak memory usage        | 900 KiB    |\n## License\nMIT © [CryptoGladi](https://github.com/CryptoGladi)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcryptogladi%2Fobsidian-parser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcryptogladi%2Fobsidian-parser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcryptogladi%2Fobsidian-parser/lists"}