Turn your Obsidian vault into an operational GRC knowledge graph.
Import structured ontologies — compliance frameworks, taxonomies, any hierarchical data — into Obsidian with folder hierarchies, typed links, and queryable metadata. Link evidence to controls, crosswalk between frameworks, and manage the full ontology lifecycle in plain markdown.
Crosswalker is a meta-system for ontology lifecycle management, not just a framework importer. Read why.
┌─ 1. IMPORT ───────────────────────────────────────────┐
│ │
│ Spreadsheets, JSON, OSCAL, scraped pages, anything │
│ structured — NIST, ISO, CIS, MITRE, your own. │
│ │
│ ▼ │
│ Import wizard: pick a recipe — which columns │
│ become folders / headings / tags / wikilinks / │
│ frontmatter. Save the recipe; rerun on updates. │
└────────────────────────┬──────────────────────────────┘
▼
┌─ 2. VAULT ────────────────────────────────────────────┐
│ │
│ Ontologies/Frameworks/ │
│ NIST 800-53 r5/ │
│ AC/ │
│ AC-2.md ─── crosswalk ───┐ │
│ ISO 27001/ │ typed link │
│ A.9.2.1.md ◄───────────────┘ + edge metadata │
│ (predicate, │
│ Evidence/ coverage, │
│ MFA-Policy.md ─ covers ──► AC-2, A.9.2.1, … │
│ │
│ Plain markdown · YAML frontmatter · git-friendly │
└────────────────────────┬──────────────────────────────┘
▼
┌─ 3. USE ──────────────────────────────────────────────┐
│ │
│ Bases, Obsidian search, AI agents: │
│ │
│ "Show all evidence covering AC-2" │
│ "Which ISO controls map to NIST AC family?" │
│ "Coverage gaps across our frameworks" │
│ │
└───────────────────────────────────────────────────────┘
The same source can land as a deep folder tree, a single document with nested headings, a flat tag-indexed pile, or a hybrid — pick whatever shape your team works in. Each note gets full YAML frontmatter with _crosswalker provenance metadata, WikiLinks for cross-references, and (where you set them up) typed links carrying edge metadata for crosswalks and evidence.
| Feature | Details | |
|---|---|---|
| ⚡ | Import wizard | 4-step modal: select file, configure columns, preview tree, generate |
| 📊 | Smart parsing | CSV streaming (PapaParse) for files over 5 MB, column type auto-detection |
| 📁 | Flexible layouts | Compose folders, headings, tags, and wikilinks in one recipe — the same source can produce a deep folder tree, a flat tag-indexed pile, or a hybrid |
| 🔗 | Typed links | WikiLinks with metadata for crosswalk relationships and evidence links — capture not just "AC-2 maps to ISO A.9.2.1" but how, by whom, and how complete |
| ⚙️ | Config system | Save, load, and auto-match configurations via fingerprinting |
| 🔍 | Queryable output | Works with Obsidian Bases or plain search — plain-text frontmatter means no lock-in |
| 🧪 | Debug logging | Toggle logging to a vault file for troubleshooting |
- Download
main.js,manifest.json, andstyles.cssfrom the latest release - Create
your-vault/.obsidian/plugins/crosswalker/ - Copy the three files in
- Enable in Settings > Community plugins
Ctrl/Cmd + P> Crosswalker: Import structured data- Select your CSV (XLSX support coming in v0.2)
- Map columns: hierarchy levels, frontmatter properties, links, body
- Preview the folder tree and sample notes
- Generate
A note like AC-2.md:
---
control_id: AC-2
control_name: Account Management
control_family: Access Control
related_controls:
- "[[AC-2]]"
- "[[AC-3]]"
_crosswalker:
source_file: nist-800-53.csv
import_date: 2026-04-02
config_id: abc123
---All configuration (output path, key naming, array handling, link syntax, matching sensitivity) lives in Settings > Crosswalker.
Architecture decisions come first, features are built on that foundation. Full roadmap with linked rationale: docs/roadmap
| Phase | Focus | Status |
|---|---|---|
| v0.1 | Import wizard, config system, generation engine, fast embedded-SQLite query cache, docs site | 🚧 In progress |
| v0.2 | XLSX and JSON parsers, additional starter recipes, tag-based and wikilink-based layouts | Planned |
| v0.5 | Optional external Python helper for messy spreadsheets and large datasets (desktop only) | Planned |
| v1.0 | Shareable framework registry, OSCAL export, crosswalk dashboards, framework version tracking | Planned |
The original Python CLI (frameworks_to_obsidian.py) is also included for batch-importing cybersecurity frameworks (NIST 800-53, CSF v2, CIS v8, MITRE ATT&CK/D3FEND/ENGAGE, CRI Profile) with crosswalk linking.
pip install -r requirements.txt
python frameworks_to_obsidian.pyCrosswalker fits alongside a few other tools that all aim at making Obsidian a serious knowledge platform:
| Project | Role | Link |
|---|---|---|
| SEACOW | Meta-framework for organizing knowledge inside Obsidian — folder + parallel tag hierarchies, naming conventions, and curation patterns. Crosswalker recipes can default to the SEACOW dual-emit pattern (folders for canonical path, tags for cross-cutting facets). | cybersader/seacowr-knowledge-platform-meta-framework |
| folder-tag-sync | Obsidian plugin that bidirectionally synchronizes folder hierarchy with tag hierarchy via regex rules. Pairs naturally with Crosswalker's dual-emit recipes — Crosswalker generates the initial folder + tag layout; folder-tag-sync keeps them in sync as you refactor by hand. | cybersader/obsidian-folder-tag-sync |
https://cybersader.github.io/crosswalker/ — 100+ pages covering concepts, architecture, the ontology evolution problem, an entity registry, and development logs.
Found an error? Click Edit page on any docs page, or see the contributing guide.
# Run docs locally
cd docs && bun install && bun run devFrom the repo root, use the local dev orchestrator — an interactive menu wrapping every workflow (docs dev, plugin watch, Tailscale/Cloudflare sharing, Playwright tests):
bun install # Install plugin dependencies
bun run serve # Interactive menu (docs dev, plugin watch, etc.)
bun run serve:docs # Docs dev server on :4321
bun run serve:plugin # Plugin watch build → test-vault
bun run serve:both # Both in parallelOr raw commands:
bun run dev # Plugin watch mode (outputs to test-vault)
bun run build # Plugin production build (type-check + bundle)
bun run test # Plugin unit tests
bun run lint # Plugin lint (required for community plugin submission)
cd docs && bun run test:local # Docs Playwright E2E testsSee CONTRIBUTING.md for conventions (including the MDX inline-SVG kebab-case gotcha) and the docs contributing page for the log / challenge / roadmap / decision lifecycle that new research follows.
MIT — see LICENSE for details.
