taggrobs28 downloadsBidirectional sync with Taggr, a decentralized publishing platform. Push notes to publish in social feeds, pull posts back as markdown. Earn from engagement.
Publish your Obsidian notes into a social network. Earn when people engage. Own your content forever.
Bidirectional sync between your Obsidian vault and Taggr — a decentralized publishing platform on the Internet Computer. Write in Obsidian, push to publish, pull to get your posts back. No build pipeline, no static site, no monthly subscription. Your notes land in feeds and communities where people read, comment, react, and tip.
Developers and AI agents: Start with
docs/agents.mdfor architecture, design decisions, and Taggr API specifics. Then readdocs/logs.mdfor chronological development history with justifications.docs/roadmap.mdfor planned features.
.md filestaggr/CRYPTO/, taggr/AI/)_comments/ folder, each linked to its parent post on Taggr[[links]] in Obsidian become [links](#/post/ID) on Taggr and vice versaObsidian vault Taggr canister (IC)
+---------------------+ +------------------+
| /taggr/ | | 6qfxa-ryaaa-... |
| CRYPTO/ | <-- pull ---- | post #4527 |
| analysis.md | --- push ---> | post #4528 |
| _general/ | | |
| hello.md | | |
+---------------------+ +------------------+
| |
YAML frontmatter Candid / JSON
tracks taggr_id, over HTTPS to
hash, patches, cost ic0.app
You need one of the following to create a Taggr account:
Once you have one of these:
Important: Remember your seed phrase and username. You'll need both for the plugin.
Option A: Download release (recommended)
main.js and manifest.json from the latest release.obsidian/plugins/taggr-sync/Option B: Build from source
git clone https://github.com/taggrobs/obsidian-taggr-sync.git
cd obsidian-taggr-sync
npm install
npm run build
Copy main.js and manifest.json to your vault's .obsidian/plugins/taggr-sync/ folder, then enable in Obsidian.
taggr/ folder, organized by realm.md file in the taggr/ folder (or a realm subfolder like taggr/CRYPTO/)published: true is in the frontmatter (or use Cmd+P → "Create new Taggr post" for a template)See Step 2 above.
Taggr IS your sync. Each device syncs directly with the Taggr canister — no iCloud, no Obsidian Sync, no third-party service needed.
main.js and manifest.json to your phone (from the GitHub release).obsidian/plugins/taggr-sync/ (use the Files app on iOS, any file manager on Android)No subscription. No cloud service. The blockchain is the sync layer.
Open Settings → Taggr Sync:
| Setting | Description |
|---|---|
| Taggr Handle | Your username on taggr.link |
| Seed Phrase | Your Taggr login seed phrase (key derived locally, never sent anywhere) |
| Identity Key (hex) | Alternative: controller key for Internet Identity users (see Auth below) |
| Sync Folder | Vault folder for synced posts (default: taggr) |
| Sync Direction | Pull only, Push only, or Bidirectional |
| Default Realm | Realm for new posts — click "Test Connection" to load your realms |
| Realm Filter | Only pull posts from a specific realm (empty = all) |
| Pull Comments | Also pull your comments (replies to other posts), stored in _comments/ folder with a link to the original post |
| Auto-sync Interval | Minutes between automatic syncs (0 = manual only) |
Click Test Connection to verify your credentials. It shows your cycle balance, post count, and populates the realm dropdown.
Two methods are supported:
Seed phrase (simplest): Enter your Taggr seed phrase — the same one you created at signup on taggr.link. The key is derived locally (SHA-256 x 15,000 iterations → Ed25519) and never transmitted. Just fill in the Seed Phrase field, leave Identity Key empty.
Controller key (for Internet Identity users): If you log in to Taggr with Internet Identity, you can't use a seed phrase. Instead:
Use one or the other, not both. If both fields are filled, seed phrase takes priority.
Cmd+P (desktop) or command palette (mobile) → "Pull posts from Taggr"
Posts are saved as markdown files organized by realm:
taggr/
├── CRYPTO/
│ ├── My crypto analysis.md
│ └── Market update.md
├── AI/
│ └── Thoughts on LLMs.md
└── _general/
└── Hello world.md
Each file has YAML frontmatter tracking sync state:
---
taggr_id: 1455999
taggr_user: 5619
taggr_realm: "CRYPTO"
taggr_timestamp: 1775455322776852000
taggr_hash: "5766e5ec"
taggr_patches: 0
taggr_cost: 11
published: true
taggr_status: "live on Taggr — uncheck published to delete from Taggr"
taggr_link: "https://taggr.link/#/post/1455999"
---
Your post content here in markdown.
Cmd+P → "Push changes to Taggr"
The plugin scans all .md files in the sync folder (including subfolders):
taggr_id and published: true → updates the existing post on Taggrtaggr_id and published: true → publishes as a new postpublished: false and no taggr_id → local draft, ignoredpublished: false and taggr_id → deletes the post from Taggr (irreversible, file kept locally)taggr_realm > default realm settingPull: Taggr images are rendered inline in Obsidian via bucket canister URLs.
Push: Local images referenced in your post are automatically uploaded to Taggr:
![[image.png]] — Obsidian embed format — standard markdownPull: Taggr internal links [text](#/post/ID) become Obsidian backlinks [[text]]. User mentions @username become [[@username]].
Push: Obsidian backlinks [[Post Title]] are converted to Taggr links [Post Title](#/post/ID) if the linked post is synced. [[@username]] becomes @username.
The published checkbox in frontmatter controls the post's lifecycle:
| State | What happens at Push |
|---|---|
published: true + no taggr_id |
Publishes as new post on Taggr |
published: true + has taggr_id |
Syncs edits to existing post |
published: false + no taggr_id |
Local draft — ignored |
published: false + has taggr_id |
Deletes from Taggr (irreversible), file kept locally |
Cmd+P → "Create new Taggr post"
Creates a template file with the default realm pre-filled. Or just create a .md file manually in the realm subfolder you want.
Cmd+P → "Sync with Taggr" or click the refresh icon in the left sidebar.
| Command | Action |
|---|---|
| Pull posts from Taggr | Fetch journal → create/update local files |
| Push changes to Taggr | Publish new posts / update changed posts / delete unpublished |
| Sync with Taggr | Pull then push |
| Create new Taggr post | New .md with frontmatter template |
Every post on Taggr costs cycles (1000 credits = 1 XDR ≈ $1.37):
The total accumulated cost is shown in the taggr_cost frontmatter field and as a notification during push.
add_post (new) or edit_post (update) via Candid-encoded IC update callspublished → push → calls delete_post (JSON-encoded IC update call).conflict.md and the remote version winsgit clone https://github.com/taggrobs/obsidian-taggr-sync.git
cd obsidian-taggr-sync
npm install
npm run build # production → main.js (~295kb)
npm run dev # development with sourcemaps
Copy main.js and manifest.json to your vault's .obsidian/plugins/taggr-sync/ folder.
6qfxa-ryaaa-aaaai-qbhsq-caiGPL-3.0 (matching Taggr's license)