FractalHoard

Login
Register

Drop files or folders to upload

(They will be uploaded to the currently selected node)

×

Node Settings

📜 Version history
versions per file
View version history…
Loading…
×

New Node

Choose a type, then give it a name.

No type selected.
×

×

Tools

Maintenance utilities scoped to your own tree. Sync conflicts merge per-field where shapes are known; dangling refs flags node:<uuid> links whose target is gone.

Sync Conflicts

fh-sync leaves .conflict files when two devices edit the same structured file. The resolver re-combines fields that the shape says are safely combinable (merge semantics). Dry-run previews without writing.

Merge semantics summary

The winner is the live file kept by fh-sync (newer mtime). The loser is the .conflict sibling. Per-shape rules:

FileRule
.node.yaml Scalars: winner wins. tags: array union. Unknown fields preserved from whichever side has them.
.installed.json, .applet-keys.json, .applet-state/**/*.json Deep object merge; arrays and primitives: winner wins.
.auto-update-log.json Not merged. Append-only log; interleaving cycles would be incoherent.
Any other file Surfaced in the scan but never auto-merged.

Not a CRDT. Two concurrent edits to the same scalar still lose one side. The goal is to stop losing fields that can be combined.

On resolve, the merged value is written atomically and the conflict file is renamed to .merged so it's preserved but no longer scanned.

Click "Scan" to look for unresolved conflicts.
Dangling Refs

Scans your tree for node:<uuid> references in text files whose target no longer exists.

Click "Scan".
Migrate Path Refs → node:<uuid>

Rewrites markdown link targets like [text](projects/foo) to [text](node:<uuid>) so renames won't break the link. Anchors, external URLs, and canonical refs are left alone. Dry-run first.

Dry-run first to preview.
×

Account settings

Change password
App passwords (for CalDAV / WebDAV / etc.)

Per-app passwords let your bookmark sync extension, calendar client, and similar tools sign in without your main account password. Issued once, shown once, scoped to DAV protocols.

When on, DAV clients can only sign in with an app password. Turn off to allow your main login as well — easier but less safe.
Bookmarks sync (Pinboard)

Bind a bookmarks node to the Pinboard-compatible API (/api/pinboard/v1/…) so Pinboard clients and CLIs can read and write it. Uses the app passwords above for sign-in.

×

Upload conflicts

Files that arrived under a name already in use, but with different content. FractalHoard keeps both so you can pick which one to keep. Files with the conflict-… suffix in their name are the new arrivals.

Loading…
×

Dock settings

Pick which screen edges the persistent applet dock can use. Docked applets appear on the first enabled edge; you can enable more so multiple applets can dock side-by-side.