hfknight68 downloadsSave your X (Twitter) bookmarks as structured Markdown notes, with selective import, incremental sync, and no API key needed.
Sync your X (Twitter) bookmarks directly into your Obsidian vault as clean, structured Markdown notes. No API key. No OAuth. Just your existing browser session.

obsidian:// link to re-open the tweet in the webviewDesktop only. This plugin uses Electron's
<webview>tag, which is not available in Obsidian mobile.
hfknight/x-bookmarks-sync
x-bookmarks-sync.zip from the Releases page.main.js and manifest.json..obsidian/plugins/ (create the folder if it doesn't exist).x-bookmarks-sync.main.js and manifest.json inside it.git clone https://github.com/hfknight/x-bookmarks-sync
cd x-bookmarks-sync
npm install
npm run build:plugin
Copy obsidian-plugin/main.js and obsidian-plugin/manifest.json into .obsidian/plugins/x-bookmarks-sync/ in your vault.

x-bookmarks/).Check Sync from last in the toolbar before clicking Extract Bookmarks. The plugin will automatically stop scrolling once it encounters a bookmark that has already been imported — ideal for regular top-up syncs without traversing your entire history.
First sync: The checkbox is unchecked by default until you have completed at least one full sync. This ensures your entire bookmark history is captured on the first run.
While browsing any page in the webview, click Copy as MD to extract and copy the content as Markdown to your clipboard.
This is especially handy when a bookmark links to an article or long-form post. Use the Open in Obsidian Webview link at the bottom of a saved note to open the linked page, then click Copy as MD to capture the full article content. Paste it directly into your note in Obsidian for a complete, annotatable record.

Open Settings → X Bookmarks Sync to configure:

| Setting | Description | Default |
|---|---|---|
| Default folder | Vault folder where bookmark notes are saved | x-bookmarks |
| Default tags | Tags applied to every imported note (chip UI — press Enter to add) | twitter, bookmark |
| Last sync | Timestamp of the most recent successful import (read-only) | — |
| Clear import history | Removes all tracked import IDs, allowing previously imported bookmarks to be re-imported | — |
Note on Clear import history: This resets all record of previously imported bookmarks. On the next sync, everything will be treated as new. Use this if you want to start fresh or re-import after cleaning up your vault.
Each saved bookmark becomes a Markdown file with this structure:
---
id: "1234567890"
author: "Display Name"
username: "@handle"
scraped_date: 2024-01-15
url: "https://x.com/handle/status/1234567890"
tags: [twitter, bookmark]
---
# Tweet by Display Name (@handle)
The full text of the tweet goes here...
[View on X](https://x.com/...) | [Open in Obsidian Webview](obsidian://x-bookmarks?url=...)
File naming: {folder}/{YYYY-MM-DD}-{author}-{first 40 chars of tweet}.md
<webview> tag, not available in Obsidian mobile.MIT