feinix849 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:// deep-link back to the tweetDesktop only. This plugin uses Electron's
<webview>tag, which is not available in Obsidian mobile.
x-bookmarks/).Check Sync from last in the toolbar before clicking Extract bookmarks. The plugin stops as soon as it reaches bookmarks you've already imported — ideal for regular top-up syncs without re-reading 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.

For bookmarks that point at native X long-form articles (URLs like x.com/<user>/status/<id> rendered as an Article), the plugin can pull the full article body into the note. Three entry points:
obsidian:// link; while on a /status/ or /article/ page, click Import article in the toolbar. The plugin finds the matching bookmark note by id, fetches the article in a hidden background webview, appends the body under a ## Full article heading, and renames the file to the article's title (keeping the {date}-{author}- prefix).If the bookmarked tweet isn't actually an article, the plugin shows a Notice and skips the import — no replies or unrelated content get pulled in.
Need to refresh a single note (for example, you imported it before long-tweet support landed)? Right-click in the note's editor → Re-import this bookmark on next sync (also in the command palette). The plugin removes the tweet id from import history and moves the file to the system trash; on the next sync the bookmark appears as new in the selection modal.
While viewing any X page in the webview, click Copy main content in the toolbar to copy the focal tweet or article as Markdown to your clipboard. Replies and surrounding thread context are stripped automatically — you get just the post you opened.
| Action | Right-click in bookmark note | Command palette | Toolbar button (X bookmarks view) |
|---|---|---|---|
| Open the X bookmarks view | — | Open X bookmarks view | — |
| Sync bookmarks from the bookmarks page | — | — | Extract bookmarks (visible on /i/bookmarks) |
| Copy the focal tweet/article to clipboard | — | — | Copy main content (visible on any non-bookmarks X page) |
| Import the article body into the bookmark note | Import X article body | Import X article body to current note | Import article (visible on /status/ or /article/ pages) |
| Re-import a single bookmark on the next sync | Re-import this bookmark on next sync | Re-import this bookmark on next sync | — |
The right-click menu items only appear on bookmark notes — that is, notes whose YAML frontmatter contains an X URL (url: or article_url:).
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 |
| Note name format | How note filenames are built — Date – author – title, Author – title, Date – title, or Title – author | Date – author – title |
| 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.
Use this if you want early access to fixes or features that haven't been published to the community store yet.
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.
Each saved bookmark becomes a Markdown file. Optional sections are added when the bookmark contains photos, a video/GIF, a quoted tweet, an article card, or has had its article body imported.
---
id: "1234567890"
author: "Display Name"
username: "@handle"
published: 2024-01-12 # the tweet's original post date
scraped_date: 2024-01-15 # when it was imported
url: "https://x.com/handle/status/1234567890"
article_url: "https://x.com/handle/article/1234567890" # only if the tweet links to an X article
tags: [twitter, bookmark]
---
# Tweet by Display Name (@handle)
The full text of the tweet goes here...

[▶ Video](https://x.com/handle/status/1234567890/video/1) # only if the tweet has a video/GIF
[](https://x.com/handle/status/1234567890/video/1)
## Quoted tweet # only if the tweet quotes another tweet
> **Quoted Author** (@quoted_handle)
>
> The quoted tweet's text…
>
> [View on X](https://x.com/quoted_handle/status/...)
## Linked article # only if the tweet contains an X article card
**Article title here**
Short excerpt rendered in the card…
[Read full article](https://x.com/...)
[View on X](https://x.com/...) | [Open in Obsidian Webview](obsidian://x-bookmarks?url=...)
## Full article # added by Import X article body
…full Defuddle-extracted article body…
File naming: configurable via the Note name format setting (default {date}-{author}-{title}). The title comes from the tweet's text — or the article's title for bookmarked X articles. Import X article body renames the note to the article's title. All names are sanitized and length-capped to stay within filesystem limits.
<webview> tag, not available in Obsidian mobile.pbs.twimg.com). If X removes the image, the link in your note breaks. Local-download support is planned.MIT