No description
Find a file
Jonathan J. Wagner 5cdd957322 fix(release): drop 'v' prefix from tag and release name
The Obsidian community release bot only recognises tag names that
match the version string verbatim (no 'v' prefix). Tag 2.1.0 was
initially pushed as v2.1.0 by this workflow, breaking auto-publish
until the release was recreated at tag 2.1.0. Strip the 'v' from
TAG_NAME, tag_name, and the release title so future workflow runs
emit the bot-compatible shape on first try.
2026-07-16 02:13:32 -05:00
.github fix(release): drop 'v' prefix from tag and release name 2026-07-16 02:13:32 -05:00
assets housekeeping 2026-05-23 16:03:15 -05:00
docs chore(gitignore): untrack local agent-harness + one-off scripts 2026-07-15 02:37:34 -05:00
release chore(release): 2.0.0 — promote beta.2 to stable 2026-07-15 02:28:46 -05:00
scripts chore(gitignore): untrack local agent-harness + one-off scripts 2026-07-15 02:37:34 -05:00
src fix(settings): rename display() to update() (deprecated since 1.13) 2026-07-16 01:30:12 -05:00
tests fix(settings): rename display() to update() (deprecated since 1.13) 2026-07-16 01:30:12 -05:00
.eslintrc.json release: v1.10.0 — archive scraping overhaul, YAML type coercion fixes, template engine improvements 2026-06-05 23:10:45 +00:00
.gitattributes fix: line endings and add troubleshooting guide 2026-03-25 01:19:48 -05:00
.gitignore chore: update .gitignore 2026-07-14 19:38:25 -05:00
.markdownlint.json docs: fix markdown linting issues and doc overhaul 2025-05-24 07:05:17 -05:00
ARCHITECTURE.md chore: update .gitignore 2026-07-14 19:38:25 -05:00
CHANGELOG.md chore(release): 2.0.0 — promote beta.2 to stable 2026-07-15 02:28:46 -05:00
CODE_OF_CONDUCT.md perf: Optimize folder existence check during bulk processing 2026-04-04 10:20:14 +00:00
CONTRIBUTING.md 🧹 [Code Health] Remove unused variable 'header' in settings.ts and fix eslint config 2026-06-05 17:45:22 +00:00
jest.config.js chore: adjust jest global thresholds for coverage 2026-04-25 20:22:40 +00:00
LICENSE chore: initial setup with MIT license and basic structure 2025-05-16 03:39:43 -05:00
manifest.json chore(release): 2.1.0 — bot fixes (lint, deprecated display, release assets) 2026-07-16 02:08:59 -05:00
package-lock.json chore(release): 2.1.0 — bot fixes (lint, deprecated display, release assets) 2026-07-16 02:08:59 -05:00
package.json chore(release): 2.1.0 — bot fixes (lint, deprecated display, release assets) 2026-07-16 02:08:59 -05:00
pnpm-lock.yaml chore: add pnpm workspace configuration and patch changelog script 2026-06-11 00:21:25 -05:00
pnpm-workspace.yaml chore: add pnpm workspace configuration and patch changelog script 2026-06-11 00:21:25 -05:00
qodana.yaml fix: remediate automated scan issues and lint errors 2026-04-26 10:45:34 -05:00
README.md chore(release): 2.0.0 — promote beta.2 to stable 2026-07-15 02:28:46 -05:00
styles.css Update styles.css 2026-06-13 18:40:38 -05:00
tsconfig.json sentence case revisions 2026-04-30 01:36:56 -05:00
versions.json chore(release): 2.1.0 — bot fixes (lint, deprecated display, release assets) 2026-07-16 02:08:59 -05:00

Make It Rain Banner

GitHub release (latest by date) License Documentation Code of Conduct

Make It Rain

Pull your Raindrop.io bookmarks with flexible filtering, customization, and location options.

Transform your web clippings, articles, and research into a powerful knowledge base.

🚀 Quick Start📚 Features📖 Documentation🤝 Contributing💬 Support


🌟 What is Make It Rain?

Make It Rain is a powerful Obsidian plugin that brings your Raindrop.io bookmarks, highlights, and notes directly into your vault. Whether you're a researcher collecting articles, a reader saving interesting finds, or a developer curating resources, Make It Rain helps you integrate your web discoveries seamlessly into your knowledge base.

The Problem: Your bookmarks live in Raindrop.io, but your knowledge base lives in Obsidian. Keeping your vault manually updated is tedious.

The Solution: Make It Rain automates the import process with flexible filtering, customizable templates, and smart organization.


Features at a Glance

🎨 Powerful Template System

Fully customize how your notes look with our flexible template system. Choose from pre-configured templates for different content types, or build your own with smart variables.

  • Nesting-aware AST Parser for complex conditional Handlebars-like logic ({{#if}}, {{#each}})
  • Pre-configured templates for articles, books, videos, images, links, and more
  • Smart variables (formatted dates, domains, tag lists, collection groups)
  • One-click reset to default templates
  • Per-import overrides to use different templates on demand
  • Import / export templates to JSON via clipboard — share, back up, or migrate template libraries between vaults (#84)
  • Live template preview in Settings — renders the currently-selected content-type template as you edit

🎯 Advanced Filtering & Selection

Import exactly what you need with granular filtering options.

  • Bulk import with filtering by collections, tags, and content types
  • Quick import by URL or ID for individual items
  • Dynamic collection selector - browse and select from your Raindrop account
  • Tag filtering with AND/OR logic
  • Aggregate highlights by tag - Consolidate highlights from across your vault into a single summary note
  • Content type filtering (links, articles, images, videos, documents, audio, books)
  • Selective imports - fetch only new items or update existing notes

🗂️ Smart Organization

Your imported notes organize themselves based on your Raindrop structure.

  • Automatic folder hierarchy seamlessly mirroring your Raindrop Groups and Collections
  • Automatic Folder Notes (FOLDER_NAME.md) generated to serve as structured indexes
  • Native File Downloads to directly retrieve PDFs, EPUBs (Books), video, and audio file attachments, with full S3 secure redirect support
  • Archive Scraping using Obsidian's native htmlToMarkdown() to extract structured Markdown from Raindrop.io's permanent archives
  • Rich YAML frontmatter with comprehensive metadata
  • Customizable filenames with template variables
  • Auto-tagging - append custom tags to all imports
  • Banner images automatically included in notes

⚙️ Reliable & Robust

Built to handle large Raindrop libraries with confidence.

  • Smart rate limiting (default 60 requests/minute) with automatic retries
  • Modular architecture - Improved reliability with dedicated collection fetching logic
  • Enhanced tag handling - Automatic tag sanitization and appending from settings
  • Safe by default - prevents accidental overwrites
  • Detailed logging for troubleshooting
  • Comprehensive error handling with descriptive user-facing notices
  • Automated testing with integration coverage

🔄 Safe Sync (Issue #9)

Detect Raindrop bookmarks that have been deleted or renamed remotely, then prompt for action in a per-item modal. Each candidate can be ignored, archived to .trash/, or permanently deleted. Settings let you choose the default action (Prompt, Archive, Delete), and ambiguous results (API errors after retries, missing data, unexpected shape) are bucketed separately and forced to Ignore until you review manually.

  • Vault scan for notes carrying raindrop_id (frontmatter added in 1.10.0)
  • 10-way concurrent batch-checks against the Raindrop API
  • Auto-runs after each import when enabled, or on demand via command palette: Safe sync: scan for deleted/renamed Raindrops
  • Defense-in-depth on uncertain answers — only an explicit result: false from Raindrop counts as a confirmed deletion; everything else lands in an ambiguous bucket that requires manual review before any destructive action
  • Configurable trash folder (defaults to .trash/)

🚀 Quick Start

Get started in 3 simple steps:

Step 1: Install the Plugin

Option A: Official Community Plugins (Recommended)

  1. Open Obsidian and go to SettingsCommunity Plugins.
  2. Make sure Safe Mode is turned off.
  3. Click Browse and search for Make It Rain or click this link to open the plugin directly.
  4. Click Install, then Enable.

Option B: Manual Installation

  1. Download make-it-rain.zip from the latest release.
  2. Extract to get main.js, manifest.json, and styles.css.
  3. Copy these files to your vault's .obsidian/plugins/make-it-rain/ folder and restart Obsidian.

Step 2: Get Your API Token

  1. Go to Raindrop.io Apps settings
  2. Click + Create new app
  3. Give it a name (e.g., "Make It Rain")
  4. Click Create test token
  5. Copy the token to your clipboard

Step 3: Configure & Import

  1. Open Obsidian SettingsMake It Rain
  2. Paste your API token
  3. Click Verify Token to test the connection
  4. (Optional) Set your default import folder
  5. Done! Run "Fetch raindrops (filtered)" from the Command Palette to start importing

💡 New to Make It Rain? Check out the Installation Guide for detailed instructions.


📚 Documentation

Comprehensive documentation is available on our Documentation Site.

📖 For Users

Start here based on your experience level:

Guide Purpose Time
Quick Start Get up and running 5 min
Installation Install and configure 10 min
Configuration Customize settings 15 min
Usage Guide Learn all features 30 min
Template System Customize note format 45 min
Troubleshooting Fix common issues 10 min
FAQ Common questions 5 min

🛠️ For Developers

Learn how to contribute to the project:

Resource Purpose
Architecture Deep dive into design
Developer Guide Architecture & setup
Contributing Guide How to contribute
Testing Guide Write tests
API Reference API documentation

⚙️ Configuration Reference

Settings Overview

Setting Description Default
API Token Your Raindrop.io test token (required) -
Default vault save location Folder path for imported notes Vault root
Filename template Template for note filenames {{title}}
Show ribbon icon Display plugin icon in sidebar Enabled
Banner field name Frontmatter field for banner images banner
Create folder notes Generate index notes for each collection folder Enabled
Download files Fetch native Raindrop upload attachments Enabled
Archive scraping Extract full text from Raindrop archives Disabled

Filename template placeholders

Use these variables in your filename template:

  • {{title}} - Raindrop bookmark title
  • {{id}} - Raindrop unique ID
  • {{collectionTitle}} - Collection name
  • {{date}} - Creation date (YYYY-MM-DD format)

Example: {{date}} - {{title}} produces 2024-01-15 - My Bookmark Title.md


📝 How Notes Are Structured

Each imported Raindrop becomes a beautifully formatted Markdown note with YAML frontmatter.

Example Note Frontmatter

---
title: "Understanding React Hooks"
source: https://example.com/article
type: article
created: 2024-01-15T10:30:00Z
lastupdate: 2024-01-16T14:20:00Z
id: 123456789
collectionTitle: "Web Development"
collectionPath: "Learning/Web Development"
collectionGroup: "CORE KNOWLEDGE"
collectionParentId: 987654321
tags:
  - react
  - javascript
  - frontend
banner: https://example.com/cover-image.jpg
---

Example Note Body

The default template structures your notes like this:

# Understanding React Hooks

Your bookmark's description and highlights are formatted with:
- Description section
- Personal notes and annotations
- Highlights with inline comments
- Full article content (via Archive Scraping)
- Local file attachments (PDFs, images, etc.)
- Metadata and details
- Source link

For complete details, see the Note Structure documentation.


🎯 Common Tasks

Import bookmarks from a specific collection

  1. Open Command Palette (Ctrl/Cmd+P)
  2. Run "Fetch raindrops (filtered)"
  3. Select your collection from the dynamic list
  4. Click Fetch raindrops

Import a single bookmark by URL

  1. Open Command Palette
  2. Run "Quick import raindrop by url/id"
  3. Paste the raindrop URL or id
  4. Click Import

Aggregate highlights by tag

  1. Open Command Palette
  2. Run "Aggregate highlights by tag"
  3. Enter the tag to aggregate highlights for
  4. Click Aggregate

Use different templates for different import types

  1. Open "Fetch raindrops (filtered)" modal
  2. Configure your filters
  3. Enable "Use default template only" or "Force use of content-type templates"
  4. Fetch!

Share a template between vaults

  1. Open Settings → Make It Rain → TemplatesManage templates…
  2. Click Export on the template you want to share — JSON goes to your clipboard
  3. On the destination vault, click Import in the same dialog, paste the JSON, name it
  4. Import rejects name collisions (no silent overwrite) and surfaces errors in the modal

Edit a template with live preview

  1. Open Settings → Make It Rain → Templates
  2. Pick a content type in the dropdown
  3. Edit the template on the left; the rendered preview on the right updates as you type
  4. The preview is locked to the selected content type, so switching types swaps the preview, no bleed

Automatically organize by collection

  1. In settings, ensure your collection hierarchy matches your desired folder structure
  2. Enable "Include Subcollections" when fetching
  3. Notes will automatically create nested folders

For more tips and workflows, see the Usage Guide.


🔧 Troubleshooting

"API token is not set" Error

  • Verify you've copied your token correctly
  • Click "Verify Token" in settings to test the connection
  • Token should start with eyJ (JWT format)

Notes Not Importing

  • Check the Developer Console (Ctrl/Cmd+Shift+IConsole tab)
  • Verify collections/tags exist in your Raindrop account
  • Ensure the target vault folder exists
  • Check that you have bookmarks in the selected collections

Template Not Working

  • Verify the template syntax is correct
  • Check the browser console for error messages
  • Reset to default template to test
  • See the Template System guide for syntax help

Performance Issues with Large Libraries

  • Fetch in smaller batches using collection filters
  • Import by content type to reduce load
  • Enable "Fetch only new items" to skip existing notes

Still need help?


🗺️ Roadmap

Active development focuses on these features:

  • 🔄 Two-way updates - (Roadmap) Send notes and annotations back to Raindrop.io
  • 📌 Enhanced highlights - Better highlight handling in notes
  • 💾 Saved presets - Store and reuse fetch configurations
  • 🎬 Video tutorials - Learn by watching
  • ↩️ Undo functionality - Recover from mistakes

See the full GitHub Issues for more planned features.


🤝 Contributing

We welcome contributions from the community! Whether you're fixing bugs, adding features, or improving documentation, your help makes Make It Rain better.

Getting Started

  1. Read our Contributing Guide
  2. Check the Developer Guide
  3. Follow our Code of Conduct

Ways to Contribute

  • Code - Submit pull requests with bug fixes or features
  • Documentation - Improve guides or add examples
  • Testing - Report bugs or test new features
  • Ideas - Suggest features via GitHub Issues
  • Translation - Help localize the plugin

Development Quick Start

# Install dependencies
npm install

# Run in development mode (watches and deploys to configured vaults)
npm run dev

# Scan for secrets
npm run scan-secrets

# Run tests
npm test

# Build for production
npm run build

See the Developer Guide for detailed setup instructions.


📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

This means you're free to use, modify, and distribute Make It Rain, provided you include the original license.


💖 Support Make It Rain

If you find Make It Rain useful and want to support its development, consider buying me a coffee!

Support on Ko-fi

Even if you can't contribute financially, you can help by:

  • Starring the repository
  • 📢 Sharing the project with friends
  • 🐛 Reporting bugs
  • 💡 Suggesting features
  • 📚 Improving documentation

🆘 Getting Help

I have a question

I found a bug

I have a feature idea

I want to contribute


📊 Project Status

Aspect Status
Build Passing
Tests Setup Complete
Documentation Comprehensive
Community Welcoming
Maintenance Active

📖 Documentation📋 Changelog🐛 Issues📦 Releases🤝 Contributing💬 Code of Conduct


About the Author

Made with ❤️ by frostmute

Whether you're importing bookmarks or building features, thank you for being part of the Make It Rain community! 🌧️