oikeya119 downloadsImport Raindrop.io bookmarks as AI-friendly reference notes without storing full page content.
RefRaindrop is an Obsidian plugin that syncs Raindrop.io bookmarks into your vault and adds AI-oriented bookmark indexes.
It is designed for using bookmarks as a lightweight knowledge base for later AI-assisted thinking. It does not store full page content in your vault. Instead, each note keeps the URL, Raindrop metadata, your local notes, and compact AI index fields.
The name "RefRaindrop" is a wordplay on "reference", "refrain", and "Raindrop". This project is an independent community plugin and is not affiliated with or endorsed by Obsidian or Raindrop.io.
RefRaindrop is provided as-is under the MIT License. You are responsible for configuring and monitoring any third-party services used with it, including Raindrop.io, OpenAI, Gemini, Ollama, and network access to bookmarked websites.
AI providers and SaaS APIs may incur charges, fail with quota/rate-limit errors, or change their behavior. RefRaindrop includes throttling, ignored-host rules, private-network blocking, and retry handling, but it cannot guarantee cost limits, availability, accuracy, or that every bookmarked website is safe or appropriate to fetch. Review the settings before running large imports or AI indexing.
{raindrop_id}.md as the filenameraindrop_id or URL instead of recreating files## Local Noteslast_http_status only when Raindrop metadata changesai_summary valuesRefRaindrop uses a readable Markdown structure and updates only the sections and frontmatter fields it owns.
---
title: Example
source: https://example.com/article
type: article
created: 2026-06-27T01:02:03.000Z
lastupdate: 2026-06-27T04:05:06.000Z
id: 123
raindrop_id: 123
raindrop_account: home
tags:
- ai
raindrop_tags:
- ai
ai_summary:
ai_keywords:
ai_concepts:
ai_technologies:
ai_use_cases:
ai_limitations:
ai_writeprotect: false
last_http_status:
---
Reserved AI status values:
ai_summary: __AI_PROCESSING__
ai_summary: __AI_FAILED__
Notes with either reserved value are retried on the next AI indexing run. AI output is stored only in ai_xxx frontmatter fields and is not written to the note body.
Body structure:
# Title
# User Notes
## Raindrop Note
Raindrop note. Updated by sync.
## Local Notes
Your own notes. Preserved by sync.
# Raindrop
## Description
Raindrop excerpt. Updated by sync.
---
## Details
- **Type**: article
- **Domain**: example.com
- **Created**: ...
- **Updated**: ...
- **Tags**: #ai
- **Source**: [Open](https://example.com/article)
Plugin files live under:
plugin/ref-raindrop/
Manual install:
mkdir -p /path/to/YourVault/.obsidian/plugins/ref-raindrop
cp plugin/ref-raindrop/manifest.json /path/to/YourVault/.obsidian/plugins/ref-raindrop/
cp plugin/ref-raindrop/main.js /path/to/YourVault/.obsidian/plugins/ref-raindrop/
cp plugin/ref-raindrop/styles.css /path/to/YourVault/.obsidian/plugins/ref-raindrop/
cp plugin/ref-raindrop/versions.json /path/to/YourVault/.obsidian/plugins/ref-raindrop/
Then open Obsidian and enable RefRaindrop from Settings -> Community plugins.
Open Settings -> RefRaindrop.
Raindrop account settings:
Enabled: include this account in syncAccount name: written to raindrop_account, for example home or workRaindrop test token: Raindrop.io test tokenDestination folder: for example Bookmarks/Raindrop/homeMultiple account example:
home -> Bookmarks/Raindrop/home
work -> Bookmarks/Raindrop/work
AI settings:
AI provider: Ollama, OpenAI, or GeminiAI model: model for the selected provider. If model listing is not allowed, only the current/default model is shownOllama URL: default http://localhost:11434OpenAI base URL: default https://api.openai.com/v1OpenAI API key: stored only in Obsidian plugin settingsGemini API key: stored only in Obsidian plugin settingsOutput language: language for AI summaries and index fields. Default is JapaneseIgnored hosts: hosts that must never be fetched or summarizedBlock private networks: enabled by defaultSync on startup: run one sync after Obsidian startsIndex after startup sync: also run AI indexing after startup syncPage request timeout seconds: default 20Ollama timeout seconds: default 120; also used for OpenAI/Gemini generationRaindrop timeout seconds: default 30Max AI indexes per run: default 50; use 0 for unlimited only when you intentionally accept the risk of many page fetches and AI API calls in one runDelay between AI indexes milliseconds: default 1000; use 0 for no delayAPI keys are stored in Obsidian plugin settings. They are not written to bookmark notes.
OpenAI uses the Responses API (/v1/responses). Gemini uses models/{model}:generateContent. The default Gemini model is gemini-2.5-flash.
For a restricted OpenAI API key, the required permission is Responses (/v1/responses): Write. If List models is not allowed, the model dropdown falls back to gpt-5-nano.
Raindrop:
Raindrop test token.The plugin uses the token to read your Raindrop bookmarks. It does not write back to Raindrop.
Raindrop sync uses the API maximum page size of 50 items per request. After the first full sync, RefRaindrop stops fetching when Raindrop's lastUpdate reaches the newest raindrop_last_update already stored in the vault. A vault folder deletion or empty destination folder causes the next sync to fetch all bookmarks again.
OpenAI:
Responses (/v1/responses): Write.List models is optional. Without it, the model dropdown shows only the current/default model.Gemini:
Gemini API key.Keep all tokens and API keys out of Git. They belong only in Obsidian plugin settings.
Run commands from the Command Palette:
RefRaindrop: Sync Raindrop bookmarksRefRaindrop: Sync Raindrop bookmarks, then indexRefRaindrop: Index current bookmarkRefRaindrop: Force index current bookmarkRefRaindrop: Index all synced bookmarksRefRaindrop: Force index all synced bookmarksRefRaindrop: Reload ignored hostsStart with Sync Raindrop bookmarks and verify the generated Markdown before running AI indexing.
Initial AI indexing is intentionally throttled. By default, RefRaindrop indexes at most 50 bookmarks per run and waits 1000 ms between page fetches. This avoids hitting many bookmarked websites in a burst during the first import. If deferred appears in the result, the safety limit was reached; run the same indexing command again to continue. Setting Max AI indexes per run to 0 disables this per-run cap and may cause many external page fetches and AI API calls, so use it only deliberately.
Raindrop API rate limits are retried automatically for HTTP 429 and temporary 5xx responses. If Raindrop sends Retry-After, RefRaindrop waits for it, capped at 120 seconds.
Hosts that must never be fetched for AI indexing can be listed in Settings → Community plugins → RefRaindrop → Ignored hosts.
Example:
intranet.local
corp.example.com
*.internal.example.com
https://private.example.com/path
Matching rules:
corp.example.com matches both corp.example.com and its subdomains*.internal.example.com matches subdomains onlyThe plugin also blocks localhost, .local, private IPv4 ranges, and link-local IPv4 ranges by default.
Release files:
manifest.json
versions.json
plugin/ref-raindrop/manifest.json
plugin/ref-raindrop/main.js
plugin/ref-raindrop/styles.css
plugin/ref-raindrop/versions.json
Run release checks:
PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests
These checks validate plugin metadata, release files, delimiter balance in main.js, and accidental legacy naming. They do not replace manual testing inside Obsidian.
GitHub Actions runs the same release checks.
Release a new version:
version in manifest.json and plugin/ref-raindrop/manifest.json.versions.json and plugin/ref-raindrop/versions.json.git tag 0.1.0.git push origin 0.1.0.The release workflow also accepts v0.1.0 style tags, but Obsidian's sample plugin recommends using the exact manifest version without a v prefix.
The release workflow creates a GitHub Release and attaches:
main.jsmanifest.jsonstyles.cssFor Obsidian community plugin submission, keep these files available in the repository root:
README.mdLICENSEmanifest.jsonversions.jsonMIT License. See LICENSE.