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. |
||
|---|---|---|
| .github | ||
| assets | ||
| docs | ||
| release | ||
| scripts | ||
| src | ||
| tests | ||
| .eslintrc.json | ||
| .gitattributes | ||
| .gitignore | ||
| .markdownlint.json | ||
| ARCHITECTURE.md | ||
| CHANGELOG.md | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| jest.config.js | ||
| LICENSE | ||
| manifest.json | ||
| package-lock.json | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| qodana.yaml | ||
| README.md | ||
| styles.css | ||
| tsconfig.json | ||
| versions.json | ||
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: falsefrom 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)
- Open Obsidian and go to Settings → Community Plugins.
- Make sure Safe Mode is turned off.
- Click Browse and search for Make It Rain or click this link to open the plugin directly.
- Click Install, then Enable.
Option B: Manual Installation
- Download
make-it-rain.zipfrom the latest release. - Extract to get
main.js,manifest.json, andstyles.css. - Copy these files to your vault's
.obsidian/plugins/make-it-rain/folder and restart Obsidian.
Step 2️⃣: Get Your API Token
- Go to Raindrop.io Apps settings
- Click + Create new app
- Give it a name (e.g., "Make It Rain")
- Click Create test token
- Copy the token to your clipboard
Step 3️⃣: Configure & Import
- Open Obsidian
Settings→Make It Rain - Paste your API token
- Click Verify Token to test the connection
- (Optional) Set your default import folder
- 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
- Open Command Palette (
Ctrl/Cmd+P) - Run "Fetch raindrops (filtered)"
- Select your collection from the dynamic list
- Click Fetch raindrops
Import a single bookmark by URL
- Open Command Palette
- Run "Quick import raindrop by url/id"
- Paste the raindrop URL or id
- Click Import
Aggregate highlights by tag
- Open Command Palette
- Run "Aggregate highlights by tag"
- Enter the tag to aggregate highlights for
- Click Aggregate
Use different templates for different import types
- Open "Fetch raindrops (filtered)" modal
- Configure your filters
- Enable "Use default template only" or "Force use of content-type templates"
- Fetch!
Share a template between vaults
- Open Settings → Make It Rain → Templates → Manage templates…
- Click Export on the template you want to share — JSON goes to your clipboard
- On the destination vault, click Import in the same dialog, paste the JSON, name it
- Import rejects name collisions (no silent overwrite) and surfaces errors in the modal
Edit a template with live preview
- Open Settings → Make It Rain → Templates
- Pick a content type in the dropdown
- Edit the template on the left; the rendered preview on the right updates as you type
- The preview is locked to the selected content type, so switching types swaps the preview, no bleed
Automatically organize by collection
- In settings, ensure your collection hierarchy matches your desired folder structure
- Enable "Include Subcollections" when fetching
- 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+I→Consoletab) - 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
- Read our Contributing Guide
- Check the Developer Guide
- 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! ☕
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
- 📖 Check the FAQ
- 💬 Ask in GitHub Discussions
- 📧 Email frostmute@gmail.com
I found a bug
- 🐛 Report it on GitHub Issues
- 📋 Use the bug report template for details
I have a feature idea
- 💡 Suggest it on GitHub Issues
- 📝 Use the feature request template
I want to contribute
- 🤝 See Contributing Guide
- 👨💻 Check Developer Guide
📊 Project Status
| Aspect | Status |
|---|---|
| Build | ✅ Passing |
| Tests | ✅ Setup Complete |
| Documentation | ✅ Comprehensive |
| Community | ✅ Welcoming |
| Maintenance | ✅ Active |
Quick Links
📖 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! 🌧️✨