File format reference
Everything Fable writes is a plain, documented format you could parse with a script. This page is the compatibility contract: what each file is, and what guarantees Fable makes about reading and writing it.
Notes: .md
A note is a UTF-8 plain-text Markdown file. The flavor is Obsidian Flavored Markdown: CommonMark, plus the GFM additions Obsidian adopts (tables, task lists, strikethrough, autolinks), plus the extensions covered in basic and advanced syntax: ==highlights==, callouts, [[wikilinks]], embeds, #tags, block ids, comments and math.
- An optional YAML frontmatter block, fenced by
---lines at the very top, carries properties. The file always stores YAML even though the app shows a typed editor. - All formatting is derived from the markup at load time. There is no hidden rich-text state anywhere.
Canvas: .canvas (JSON Canvas 1.0)
A canvas is a JSON file following the open JSON Canvas 1.0 specification: two optional arrays, nodes and edges.
Node fields
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | Unique within the file |
type | string | yes | text, file, link or group |
x, y | integer | yes | Position in pixels |
width, height | integer | yes | Size in pixels |
color | string | no | Preset "1" to "6", or hex like "#FF5500" |
Per type: text nodes carry a required text field of Markdown; file nodes a required vault-relative file path plus an optional subpath beginning with #; link nodes a required url; group nodes an optional label, and optionally a background image path with a backgroundStyle of cover, ratio or repeat. Nodes render in array order: the first node is drawn beneath all others.
Edge fields
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | Unique within the file |
fromNode, toNode | string | yes | Node ids |
fromSide, toSide | string | no | top, right, bottom or left |
fromEnd, toEnd | string | no | none or arrow; defaults none and arrow |
color | string | no | Same values as node colors |
label | string | no | Caption drawn on the edge |
Fable preserves fields it does not recognize when saving, so files round-trip safely with other JSON Canvas tools.
Configuration: the .obsidian folder
Per-vault settings live in the hidden .obsidian folder as JSON files, written only when you change something. The ones you are most likely to meet:
| File | Holds |
|---|---|
workspace.json | The window layout: open tabs, splits, sidebar state, the active file. Rewritten as you work. |
app.json | Editor and file/link preferences, such as attachment location and default view. |
appearance.json | Color scheme, accent, fonts, and which CSS snippets are on. |
core-plugins.json | Which core plugins are enabled. |
hotkeys.json | Your custom shortcuts. {} when untouched. |
graph.json | Saved graph settings. |
types.json | Manually assigned property types. |
bookmarks.json, daily-notes.json, templates.json, … | Per-plugin settings, each named after its plugin, present only once configured. |
Subfolders: snippets/ for CSS snippets, themes/<Theme Name>/ for installed themes, and plugins/ where Obsidian keeps community plugins (which Fable leaves untouched).
Of these config files, only workspace.json is an officially documented name in the Obsidian ecosystem; the rest are widely observed conventions. Fable reads and writes them tolerantly, preserves unknown keys, and never treats config files as the source of truth for your content.
Themes: folder + manifest
A theme is a folder in .obsidian/themes/ named exactly after the theme, containing:
.obsidian/themes/My Theme/
manifest.json name, version, minAppVersion, author
theme.css the stylesheet, pure CSS
The portability guarantees
- Read tolerantly, write conservatively. Fable accepts both wikilink and Markdown link styles, legacy and current config shapes, and JSON it does not fully recognize, and it writes clean, standard forms.
- Unknown data survives. Unrecognized keys in
.canvasand config files are preserved on save. - No lock-in. Delete the
.obsidianfolder and you lose only settings, never content. Your notes remain a folder of Markdown. - Two-way with Obsidian. A vault can move between Fable and Obsidian in either direction, at any time, with no conversion.