An Obsidian plugin that enables smart auto-suggestion of frame names from .excalidraw.md files when typing [[filename# in the editor.
Watch Excalink in action: Type [[filename# and get instant frame suggestions with fuzzy search and auto-completion!
- 🔍 Smart Frame Detection: Automatically scans all
.excalidraw.mdfiles in your vault - 🎯 Real-time Pattern Detection: Detects
[[filename#typing patterns in the editor - 🎭 Fuzzy Search Modal: Shows interactive frame suggestions with fuzzy matching
- 📅 Smart Frame Ordering: Displays frames in reverse chronological order (newest first)
- 🖼️ Frame Preview: Visual frame suggestions with icons and file context
- 🔗 Auto-completion: Automatically replaces partial links with complete frame references
- 🗜️ Format Support: Handles both compressed and regular Excalidraw formats
- 🔧 Smart Filename Matching: Supports multiple filename variations and formats
- ⚡ Debounced Input: Optimized performance with intelligent timing
- 🎯 Cursor Management: Preserves cursor position and handles edge cases gracefully
- 💾 Performance Caching: Intelligent caching system to avoid repeated file reads
- 📡 File Watching: Automatically updates frame index when files change
- 🛡️ Robust Error Handling: Graceful handling of malformed files and edge cases
- 🧪 Comprehensive Testing: Built-in test suite for validation and debugging
- ⚙️ Comprehensive Settings: Full user configuration with settings panel for all features
- Create frames in your Excalidraw drawings and give them names
- Type the pattern
[[filename#in any note - the plugin detects this in real-time - Select from suggestions - A fuzzy search modal appears showing all matching frames from that file (newest frames first)
- Navigate and filter - Use ↑↓ to navigate, ↵ to select, or Esc to dismiss. Type to filter with fuzzy search
- Auto-insertion - Selecting a frame automatically inserts the complete link:
[[filename#^frame=frameName]] - Continue editing - The cursor is positioned after the inserted link for continued editing
Access plugin settings via Settings → Community Plugins → Excalink Plugin → Settings
- Enable Frame Suggestions: Main toggle for the plugin functionality
- Enable File Watching: Automatic updates when Excalidraw files change
- Auto Scan on Startup: Scan all files when Obsidian starts
- Enable Caching: Improves performance by caching frame data
- Max Cache Size: Control memory usage (default: 100 files)
- Debounce Delay: Typing delay before triggering suggestions (default: 300ms)
- Enable Fuzzy Search: Smart matching of frame names
- Show Recent Frames First: Newest frames appear at the top
- Max Suggestions Displayed: Limit number of suggestions shown (default: 50)
- Modal Theme: Choose between 'default' and 'minimal' appearance
- Enable Debug Logging: Detailed console output for troubleshooting
- Show Diagnostics in Notices: Display plugin status messages
- Show Frame Icons: Visual frame indicators in suggestions
- Show File Context: Display source file information in suggestions
The plugin workflow is simple and intuitive:
- 📝 Type the pattern: Start typing
[[your-excalidraw-file#in any note - ⚡ Instant detection: Plugin detects the pattern in real-time
- 🎭 Modal appears: Fuzzy search modal shows all available frames
- 🔍 Filter & select: Type to filter, use arrows to navigate, Enter to select
- ✅ Auto-completion: Complete link inserted:
[[file#^frame=FrameName]]
- Intelligent Caching: Files are only re-processed when they change
- Content Hashing: Detects actual content changes, not just modification times
- Memory Efficient: Optimized cache structure with minimal memory footprint
- Automatic Updates: Frame index updates automatically when files are modified
- Real-time Updates: Automatic frame index updates when Excalidraw files change
- Event Handling: Listens for file modifications, deletions, and renames
- Background Processing: All updates happen seamlessly without user intervention
- Error Recovery: Graceful handling of file system events and edge cases
- Malformed File Support: Gracefully handles broken or corrupted Excalidraw files
- Fallback Mechanisms: Multiple parsing strategies for maximum compatibility
- Edge Case Handling: Comprehensive validation and boundary checking
- User Feedback: Clear error messages and helpful guidance for troubleshooting
Access these commands through the Command Palette (Ctrl/Cmd + P):
- Show Cache Statistics: View current cache performance and memory usage
- Show Plugin Diagnostics: Comprehensive plugin health and status information
- Force Rescan All Files: Manually trigger a full rescan of all Excalidraw files
- Run Comprehensive Tests: Execute the built-in test suite for validation
- Open Settings in Obsidian
- Navigate to Community Plugins
- Click Browse and search for "Excalink"
- Click Install and then Enable
- Download the latest release from GitHub Releases
- Extract the files to your vault's plugins folder:
VaultFolder/.obsidian/plugins/excalink-plugin/ - Refresh plugins in Obsidian settings or restart Obsidian
- Enable the plugin in Settings → Community Plugins
# Clone the repository
git clone https://github.com/AarambhaAnta/Excalink.git
cd Excalink
# Install dependencies
npm install
# Start development build (watch mode)
npm run dev
# Build for production
npm run buildAfter building, enable the plugin in Obsidian settings.
-
No frames showing up:
- Ensure your Excalidraw files contain named frames
- Use "Force Rescan All Files" command to refresh the index
- Check console for error messages
-
Modal not appearing:
- Verify you're typing the correct pattern:
[[filename# - Ensure the filename matches an existing Excalidraw file
- Check "Show Plugin Diagnostics" for initialization status
- Verify you're typing the correct pattern:
-
Performance issues:
- Use "Show Cache Statistics" to monitor cache usage
- Clear cache using "Force Rescan All Files" if needed
- Check console for performance warnings
- Enable console logging to see detailed debug information
- Use the built-in diagnostic commands for troubleshooting
- Check the plugin status with "Show Plugin Diagnostics"
- FrameIndexer: Handles file scanning, frame extraction, and caching
- EditorExtension: Manages pattern detection and editor integration
- FrameSuggestModal: Provides fuzzy search interface for frame selection
- ExcalidrawDecompressor: Handles compressed Excalidraw file formats
- Discovery: Scan vault for
.excalidraw.mdfiles - Parsing: Extract JSON data using multiple fallback strategies
- Frame Extraction: Identify and catalog named frames
- Caching: Store results with content hashing for efficiency
- Indexing: Build searchable frame database
- Real-time Monitoring: CodeMirror integration for live text analysis
- Debounced Processing: Optimized performance with intelligent timing
- Pattern Matching: Robust wikilink pattern detection
- Modal Triggering: Smart modal activation based on context
- Day 1: Vault scanning & frame extraction
- Day 2: Editor integration & pattern detection
- Day 3: Auto-suggestion modal with fuzzy search
- Day 4: Frame text replacement with Obsidian block reference format (
#^frame=frameName) - Day 5: Performance caching & automatic file watching
- Day 6: Polish & test - Robust error handling, malformed file support, comprehensive testing
- Day 7: Settings & release - Comprehensive user configuration and release preparation
- Batch Operations: Bulk frame management tools
- Advanced Filtering: Date-based and tag-based frame filtering
- Frame Templates: Quick frame creation with predefined layouts
- Integration Improvements: Better mobile support and theme compatibility
- Performance Optimizations: Lazy loading and virtual scrolling for large collections
- Export Features: Frame data export and backup utilities
- ✅ Security Enhancement: Replaced
innerHTMLwith safe DOM API methods - ✅ Styling Improvements: Moved inline styles to CSS for better theme compatibility
- ✅ Performance Optimization: Reduced console logging to prevent dev console pollution
- ✅ Code Quality: Enhanced adherence to Obsidian plugin development guidelines
Initial Release - Complete 7-Day Development Sprint
- ✅ Smart Frame Detection: Comprehensive
.excalidraw.mdfile scanning and frame extraction - ✅ Real-time Editor Integration: Instant pattern detection for
[[filename#typing patterns - ✅ Interactive Modal Interface: Fuzzy search modal with keyboard navigation and filtering
- ✅ Intelligent Auto-completion: Automatic link insertion with proper Obsidian block reference format
- ✅ Performance Caching: Advanced caching system with content hashing and automatic invalidation
- ✅ File Watching: Real-time frame index updates when Excalidraw files change
- ✅ Comprehensive Settings Panel: Full user configuration with granular control options
- ✅ Visual Frame Preview: Frame suggestions with icons and file context information
- ✅ Smart Ordering: Chronological frame display with newest frames prioritized
- ✅ Robust Error Handling: Graceful handling of malformed files and edge cases
- ✅ Debug Tools: Built-in diagnostic commands and comprehensive logging
- ✅ Modular Design: Clean separation of concerns with dedicated components
- ✅ Type Safety: Full TypeScript implementation with comprehensive type definitions
- ✅ Memory Efficiency: Optimized data structures and intelligent cache management
- ✅ Extensibility: Plugin architecture designed for future enhancements
- Day 1: Foundation - Vault scanning & frame extraction system
- Day 2: Integration - Editor integration & pattern detection engine
- Day 3: Interface - Auto-suggestion modal with fuzzy search capabilities
- Day 4: Completion - Frame text replacement with Obsidian block reference format
- Day 5: Performance - Advanced caching & automatic file watching system
- Day 6: Polish - Comprehensive error handling, testing, and malformed file support
- Day 7: Release - Settings configuration, documentation, and release preparation
If Excalink saves you time and enhances your Excalidraw workflow, consider supporting its development:
- ⭐ Star the repository on GitHub
- 💖 Sponsor on GitHub: github.com/sponsors/AarambhaAnta
- ☕ Buy me a coffee: ko-fi.com/aarambhaanta
- 🐛 Report issues and suggest improvements
- 📢 Share with others who use Excalidraw + Obsidian
Need a custom Obsidian plugin for your workflow? I offer:
- Custom Plugin Development: Tailored solutions for your specific needs
- Plugin Consultation: Expert advice on Obsidian automation and workflows
- Training & Workshops: Learn to build your own plugins
Contact: your-email@example.com
MIT License - see LICENSE file for details.
