Note: This is an unofficial way to sync and back up your notes. Obsidian Sync is the official supported option.

If the video is blurry, you can download it here.
.obsidian/ folder syncs automatically to share themes, snippets, and plugin settings across devicesThe plugin is pending review in the community plugin store. Install it via BRAT (recommended) or manually in the meantime.
BRAT lets you install and auto-update beta plugins directly from GitHub.
https://github.com/brianstm/obsidian-supabase-jumpmain.js and manifest.json from the latest release<vault>/.obsidian/plugins/supabase-jump/https://xxxxx.supabase.co)That's it! Your vault will start syncing automatically.
Once connected, the plugin automatically:
When two devices open the same markdown note, they join an ephemeral Supabase Realtime channel for that file. Edits are merged using Yjs CRDTs. Changes appear on the other device instantly as you type, with no full-document replacement or text duplication. The Yjs state is kept only in memory; once you close the note the channel is released and normal mtime-based conflict resolution takes over.
In Settings → Platform-specific config paths, toggle which Obsidian config files should sync only to the current platform (mobile or desktop):
| Toggle | Path | Example use |
|---|---|---|
| Appearance | appearance.json |
Different theme on mobile |
| Themes folder | themes/ |
Mobile-only themes |
| CSS Snippets | snippets/ |
Mobile/desktop-only CSS |
| All plugins | plugins/ |
Desktop-only plugin data |
| Installed plugins list | community-plugins.json |
Different plugins per platform |
| Custom hotkeys | hotkeys.json |
Different shortcuts on mobile |
| Workspace layout | workspace.json |
Different pane layout |
Use the Custom paths field to add any other paths not listed above.
When a file matches a platform-specific path, it is tagged in the database (platform = 'mobile' or platform = 'desktop'). Pull operations skip rows tagged for a different platform.
Use the Actions section in settings:
Or use the command palette:
SupaBase Jump: Force sync nowSupaBase Jump: Fetch from databaseSupaBase Jump: Show sync statusTo exclude folders from syncing, add them to Excluded folders (comma-separated) in settings.
Example: Templates, archive/old
By default no folders are excluded. If you want to prevent vault settings from syncing entirely, add .obsidian to your excluded list (or use the platform-specific config paths feature for finer control).
The plugin works with any Supabase-compatible URL. Enter your self-hosted instance URL in the Project URL field. Note that the one-click setup uses the Supabase cloud management API, so for self-hosted instances you will need to run the SQL manually using the guide in the settings panel.
.md, .txt, etc.) - Content stored directly in the vault_files PostgreSQL tablevault_filesmtime (modification time) wins for file-level sync; Yjs handles in-session edits automaticallyThe plugin creates a vault_files table with:
| Column | Type | Description |
|---|---|---|
id |
text (PK) | {vaultId}::{filePath} (slashes → __SLASH__) |
vault_id |
text | Unique ID for your vault |
path |
text | File path relative to vault root |
content |
text | File content (text files only) |
storage_path |
text | Supabase Storage key (binary files only) |
frontmatter |
jsonb | All YAML frontmatter properties |
tags |
text[] | Tags extracted from the tags: frontmatter field |
platform |
text | 'all', 'mobile', or 'desktop' |
mtime, ctime, size |
bigint | File metadata |
deleted |
boolean | Soft-delete flag |
user_id |
uuid | Used by RLS to scope rows to each user |
Once notes are synced you can query them directly from the Supabase SQL editor or any Postgres client:
-- All notes tagged "book"
SELECT path, frontmatter->>'title', tags
FROM vault_files
WHERE 'book' = ANY(tags) AND deleted = false;
-- Notes where status is not "done"
SELECT path, frontmatter->>'status'
FROM vault_files
WHERE frontmatter->>'status' != 'done' AND deleted = false;
-- Notes by a specific author, sorted by date
SELECT path, frontmatter->>'date'
FROM vault_files
WHERE frontmatter->>'author' = 'Alice'
ORDER BY frontmatter->>'date' DESC;
-- Count notes per tag
SELECT tag, COUNT(*)
FROM vault_files, unnest(tags) AS tag
WHERE deleted = false
GROUP BY tag ORDER BY count DESC;
-- Desktop-only config files
SELECT path FROM vault_files
WHERE platform = 'desktop' AND deleted = false;
Binary files are stored in a private vault-attachments bucket with:
vault-attachments (Private) in Supabase → Storagestorage schema enabledIf you see this error after connecting:
Or disable email confirmation:
.md files in a MarkdownViewThe plugin automatically handles special characters in filenames by base64url-encoding storage keys. If you still see this error:
git clone https://github.com/brianstm/obsidian-supabase-jump.git
cd obsidian-supabase-jump
npm install
npm run dev
npm run build
src/
├── main.ts # Plugin entry point and lifecycle management
├── settings.ts # Settings interface and UI
├── supabase.ts # Supabase client and authentication
├── sync.ts # File sync logic and Realtime listeners
├── realtime-crdt.ts # Yjs CRDT manager for real-time co-editing
└── frontmatter.ts # YAML frontmatter parser
MIT - see LICENSE
Built with: