Compatibility

zetl works with any Markdown vault that uses [[wikilink]] syntax. It never modifies your files.

(given obsidian-compatible)
(given logseq-compatible)
(given foam-compatible)
(given dendron-compatible)

Supported tools

ToolStatusNotes
ObsidianFull supportStandard [[wikilink]] syntax, aliases, headings, block references
LogseqFull supportWikilinks in Markdown mode
FoamFull supportVS Code extension using [[wikilinks]]
DendronFull supportVS Code extension with Markdown wikilinks

What zetl reads

zetl parses [[target]], [[target|alias]], [[target#heading]], [[target^block-id]], and ![[embeds]]. It identifies pages by filename (case-insensitive, .md extension stripped). See concepts/Wikilinks for the full grammar.

What zetl ignores

  • Frontmatter (YAML between --- fences) — parsed but not treated as links
  • Code blocks — wikilinks inside fenced code are ignored
  • Comments — HTML comments are skipped

SPL is optional

concepts/Spindle Lisp embedding is entirely optional. Vaults work fine with just wikilinks — SPL adds reasoning capabilities on top. If you don’t use SPL, commands like zetl links, zetl check, and zetl tui work identically.

The .zetl/ directory

The index and theory cache are stored in .zetl/ at the vault root. This directory is disposable — delete it any time, and zetl index rebuilds it. Add .zetl/ to your .gitignore. See architecture/Cache.

See also: Install, concepts/Wikilinks, Local-first Design

Backlinks