Files
ideadrop.nvim/CHANGELOG.md
Carlos Gutierrez 6cacbcc704 docs: update changelog with caching and performance improvements
Add documentation for:
- Graph caching system with mtime-based invalidation
- Layout algorithm optimizations (Barnes-Hut, reduced iterations)
- New commands: :IdeaGraph rebuild, :IdeaGraphClearCache
- File scanning improvements
2026-01-10 23:19:27 -05:00

135 lines
5.7 KiB
Markdown

# Changelog
All notable changes to ideaDrop.nvim will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
#### 🕸️ Graph Visualization (Obsidian-style)
A new force-directed graph view that visualizes connections between your notes:
- **Graph Data Model**: Parses `[[Note Name]]` wiki-style links from markdown files
- Supports `[[link|alias]]` format
- Builds bidirectional edges (undirected graph)
- Extracts tags and folder metadata for filtering
- **Force-Directed Layout**: Implements Fruchterman-Reingold algorithm
- Spring forces attract connected nodes
- Repulsion forces prevent node overlap
- Gravity pulls high-degree nodes toward center
- Inverse gravity pushes orphan nodes to periphery
- Temperature-based cooling for stable convergence
- Supports both synchronous and animated layout modes
- **Visual Rendering**:
- Dark background canvas for visual clarity
- Node size scales with degree (number of connections)
- Color-coded nodes: blue (default), purple (hubs), gray (orphans), red (selected)
- Semi-transparent edge lines showing connections
- Labels for selected and high-degree nodes
- **Interactive Features**:
- `h/j/k/l` navigation between nodes
- `Enter` to open selected note in right-side buffer
- `t` filter by tag, `f` filter by folder, `r` reset filter
- `+/-` zoom in/out, `c` center graph
- `L` toggle labels, `?` toggle help overlay
- `q/Esc` close graph, `R` refresh graph data
- Smooth layout reflow when nodes are filtered
- **New Commands**:
- `:IdeaGraph` - Opens the graph visualization
- `:IdeaGraph animate` - Opens with animated layout
- `:IdeaGraph refresh` - Refreshes graph data
- `:IdeaGraph rebuild` - Force full cache rebuild
- `:IdeaGraph close` - Closes the graph window
- `:IdeaGraphFilter tag <name>` - Filter graph by tag
- `:IdeaGraphFilter folder <name>` - Filter graph by folder
- `:IdeaGraphClearCache` - Clear the graph cache file
- **New Configuration Options**:
- `graph.animate` - Enable animated layout (default: false)
- `graph.show_orphans` - Show nodes without connections (default: true)
- `graph.show_labels` - Show node labels by default (default: true)
- `graph.node_colors` - Custom colors by folder/tag
- **New Files**:
- `lua/ideaDrop/ui/graph/types.lua` - Type definitions
- `lua/ideaDrop/ui/graph/data.lua` - Graph data model
- `lua/ideaDrop/ui/graph/layout.lua` - Force-directed layout algorithm
- `lua/ideaDrop/ui/graph/renderer.lua` - Character-based canvas renderer
- `lua/ideaDrop/ui/graph/init.lua` - Main graph module
- `lua/ideaDrop/ui/graph/cache.lua` - Caching system for fast loading
#### ⚡ Graph Performance Optimizations
Fast loading system similar to Obsidian's caching approach:
- **Caching System** (`cache.lua`):
- Stores parsed links and tags per file in `.ideadrop-graph-cache.json`
- Only re-parses files that have been modified (mtime-based invalidation)
- First load scans all files, subsequent loads are nearly instant
- Cache stored in idea_dir alongside your notes
- **Layout Algorithm Optimizations**:
- Reduced max iterations (300 → 100) for faster convergence
- Barnes-Hut approximation for large graphs (100+ nodes)
- Skip distant node pairs in repulsion calculations
- Local math function caching for speed
- Tuned force parameters for faster stabilization
- **File Scanning**:
- Uses `vim.fs.find` for faster directory scanning (Neovim 0.8+)
- Fallback to glob for older versions
- Better path handling with environment variable expansion
#### Other Additions
- Added `CHANGELOG.md` to track project changes
- Added `llms.txt` for AI/LLM context about the project
- Added graph-related constants and settings in `constants.lua`
- Added graph-related notification messages
### Changed
- Updated help documentation (`doc/ideaDrop.txt`) to include all commands: `IdeaBuffer`, `IdeaRight`, `IdeaTree`, tag commands, and search commands
- Improved nvim-tree integration to preserve user's existing nvim-tree configuration
- Updated `README.md` with comprehensive graph visualization documentation
- Extended configuration options to include graph settings
### Fixed
- **Critical**: Fixed glob pattern bug where files were not being found due to missing path separator (`/`) between directory and pattern in `list.lua`, `tags.lua`, and `search.lua`
- **Critical**: Fixed nvim-tree integration that was overriding user's nvim-tree configuration on every `:IdeaTree` call. Now uses nvim-tree API directly without calling `setup()`
- Fixed deprecated Neovim API usage: replaced `vim.api.nvim_buf_set_option()` and `vim.api.nvim_win_set_option()` with `vim.bo[]` and `vim.wo[]` in `sidebar.lua`
- Fixed missing arguments in `sidebar.open()` call in `list.lua` which could cause unexpected behavior
- Removed unused variable in `tags.lua` (`filename` in `show_files_with_tag` function)
## [1.0.0] - Initial Release
### Added
- Multiple view modes: floating window, current buffer, right-side buffer
- Smart tagging system with `#tag` format
- Advanced fuzzy search through titles and content
- nvim-tree integration for file browsing
- Markdown support with syntax highlighting
- Auto-save functionality
- Date-based file organization
- Nested folder support
### Commands
- `:Idea` - Open idea in floating window
- `:IdeaBuffer` - Open idea in current buffer
- `:IdeaRight` - Open idea in right-side buffer
- `:IdeaTree` - Open file tree browser
- `:IdeaTags` - Browse and filter by tags
- `:IdeaAddTag` / `:IdeaRemoveTag` - Manage tags
- `:IdeaSearch` / `:IdeaSearchContent` / `:IdeaSearchTitle` - Search functionality