Skip to content
🚧 Early alpha — building the foundation. See the roadmap →

Prior art

Updated

The project began as “Frameworker” — a concept for mapping plaintext markdown files to taxonomical frameworks with CSV import, YAML frontmatter, and 2-way sync. The core insight: GRC involves massive knowledge work, and keeping structured frameworks side-by-side with the knowledge we create could change how compliance teams operate.

The frameworks_to_obsidian.py script was the first implementation. It takes tabular framework data (CSV/XLSX) and translates it into hierarchical Obsidian vault structures with:

  • Folder taxonomy generation from hierarchy columns
  • Markdown notes with YAML frontmatter
  • WikiLinks between framework nodes (crosswalks)
  • Custom transforms per framework (tag aggregation, regex normalization, hierarchical forward-fill)

Supported frameworks: MITRE ATT&CK + D3FEND + ENGAGE, NIST 800-53, CSF v2, CIS v8, CRI Profile

Architecture: Load → Clean → Transform → Deduplicate → Configure → Generate → Link

The plugin extends the Python tool into a general-purpose import wizard with a UI, config system, and broader format support. It makes the import process accessible to non-developers.

An open-source community building resources for using Obsidian in cybersecurity:

  • Framework crosswalk engine
  • Starter vaults for SecOps, GRC, and personal branding
  • Knowledge organization meta-framework SEACOW — lives in the cybersader/cyberbase public vault. See the SEACOW + folder-tag-sync prior-art log for how it connects to Crosswalker’s Foundation decisions.
  • obsidian-folder-tag-sync — the project owner’s other active plugin (lives in the same plugin_development/ workspace as Crosswalker) that provides bidirectional folder↔tag sync for polyhierarchy. Direct reuse candidate for Crosswalker’s generation engine — see the prior-art log and the roadmap research item.

A key discovery during research: no existing Obsidian plugin can attach data to relationships between notes. Every plugin evaluated falls short:

PluginWhat it doesWhy it’s not enough
Breadcrumbs V4Edge fields and field groupsIndividual key:value pairs per edge only — no structured JSON metadata
JugglGraph visualization with typed linksNo powerful query/reasoning over the graph; needs export/import
ExcalibrainVisual graph like Juggl/BreadcrumbsDisplay-only, no metadata encoding
Graph Link TypesTurns Dataview inline tags into graph edgesDisplay-only, no additional metadata
Semantic CanvasAnother graph view with link typesDisplay-only
Supercharged LinksCSS styling based on target note YAMLVisual only, no edge data

This gap is what motivated the link metadata system — using Dataview inline fields with dot notation and JSON to encode structured metadata on links.

  • ServiceNow GRC, Archer, LogicGate — Enterprise GRC with proprietary databases
  • Drata, Vanta — Automated compliance, SaaS-locked
  • CISO Assistant — Open-source, 80+ frameworks, auto-mapping between standards
  • Trade-off: Full-featured but expensive (commercial) or limited UI (open-source), locked-in
  • SCF with STRM — Set Theory Relationship Mapping, mathematical approach to crosswalking
  • Apptega — Commercial crosswalking platform
  • HITRUST MyCSF — Compliance framework tool
  • RegScale — OSCAL-native compliance automation
  • See framework standards for full list
  • Obsidian + Dataview — Flexible but no structured import
  • Notion databases — Good structure but no graph navigation
  • Roam Research — Graph-first but no filesystem

No tool bridges structured framework data and a personal/team knowledge base with typed, queryable links. That’s the Crosswalker niche.

PluginOverlapDifference
DataviewQueries generated dataDoesn’t import structured data
Folder NotesFolder-as-note patternNo import or generation
Metadata MenuProperty managementNo bulk import from external files
Database FolderTable viewsNo external data import wizard
Obsidian BasesBuilt-in table/card viewsNo external data import
  • match_value() — flexible string/array/regex matcher for crosswalking
  • build_full_path_components() / split_folders() — path construction
  • sanitize_column_name() — normalize column headers
  • hierarchical_ffill() — grouped forward-fill for merged cells in Excel
  • Taxonomy builder — DataFrame + config → folders + markdown files
  • Linker — two frameworks + matching rules → inject WikiLinks
  • CRI: Tag aggregation from subject areas
  • NIST 800-53: Regex ID normalization for assessment procedures
  • D3FEND: Hierarchical forward-fill for ontology structure
  • CIS v8: Preamble extraction from control descriptions

See helper functions for algorithm specifications and framework data sources for per-framework sheet and column details.

Cross-project learnings: DFD-Excalidraw System

Section titled “Cross-project learnings: DFD-Excalidraw System”

The DFD-Excalidraw System is a separate project that transforms Excalidraw diagrams into a queryable markdown-based graph database — solving identical problems to Crosswalker:

Shared ProblemDFD SolutionCrosswalker Application
File-based graph databaseMarkdown files as nodes (Assets) and edges (Transfers)Framework notes as nodes, WikiLinks as edges
No referential integrityDefensive scripts that self-heal on each runImport wizard validates before generating
Schema versioningdfd-asset-v1, dfd-transfer-v1 identifiers_crosswalker.schema_version field
Orphan detectionForward scan + Bases audit viewsBacklink-count detection via Bases
Data model resilience4-tier metadata system_crosswalker metadata tiers
Eventual consistencyManual sync via script runsManual sync via re-import

Key insight from DFD: design for lazy detection, not eager prevention. File-based systems can never be ACID-compliant, so the focus should be on surfacing inconsistencies (via Bases views) and providing repair tools (re-import, link cleanup), not trying to prevent all invalid states.