Graphic Organizer

approved

by Nick Le Guillou - Superhuman Curiosity

Interactive tree view for visualizing and managing your vault's file hierarchy.

ā˜… 3 stars↓ 307 downloadsUpdated 1mo agoApache-2.0
View on GitHub

Graphic Organizer

A visual, interactive tree view plugin for Obsidian that displays your vault's file and folder hierarchy in a graphical format with drag-and-drop functionality.

Features

🌳 Interactive Tree Visualization

  • Vertical tree layout showing your vault's folder and file structure
  • Lazy loading - folders load children only when first expanded
  • Real-time updates reflecting changes to your vault structure
  • Zoom and pan capabilities for navigating large vaults

šŸŽÆ Smart Interactions

  • Click files to open them in new tabs
  • Drag and drop files and folders to reorganize your vault
  • Right-click context menus for creating and deleting items
  • Visual feedback highlighting valid drop targets

šŸ“ File Type Support

  • Distinctive icons for different file types:
    • šŸ“ Markdown files
    • šŸ–¼ļø Images (PNG, JPG, GIF, WebP, SVG)
    • šŸ“„ PDFs
    • šŸŽ¬ Videos
    • šŸŽµ Audio files
    • šŸ’» Code files
    • šŸŽØ Canvas files
    • šŸ—ƒļø Base files (databases)
    • šŸ“ Folders (with open/closed states)
    • šŸ“ƒ Generic files

⚔ Performance Features

  • Large folder warnings for folders with 50+ items (configurable)
  • Smooth or instant animations (user preference)
  • Efficient rendering using Konva.js with Svelte

Installation

From Obsidian Community Plugins (Recommended)

  1. Open Obsidian Settings
  2. Go to Community Plugins
  3. Search for "Graphic Organizer"
  4. Install and enable the plugin

Manual Installation

  1. Download the latest release from GitHub Releases
  2. Extract the files to your vault's .obsidian/plugins/graphic-organizer/ directory
  3. Enable the plugin in Obsidian Settings > Community Plugins

Usage

Opening the Graphic Organizer

  • Ribbon Icon: Click the network icon in the left ribbon
  • Command Palette: Use "Open Graphic Organizer" command
  • The view will open in the right sidebar

Navigation

  • Zoom: Use mouse wheel or zoom controls (bottom-right corner)
  • Pan: Drag the canvas background
  • Reset View: Click the reset button in zoom controls

File Operations

  • Open File: Left-click any file to open it in a new tab
  • Expand/Collapse Folder: Click on folders to toggle their state
  • Right-Click Menu:
    • Folders: New note, New folder, New canvas, New base, Rename, Delete
    • Files: Reveal in explorer, Copy path, Rename, Delete

Drag and Drop

  1. Start Drag: Click and drag any file or folder
  2. Valid Targets: Folders will highlight when you hover over them
  3. Drop: Release over a valid folder to move the item
  4. Invalid Drop: Dropping elsewhere returns the item to its original position

Settings

Access settings via Obsidian Settings > Plugin Options > Graphic Organizer:

Performance

  • Large folder threshold: Number of items before showing warning (default: 50)

Animations

  • Smooth animations: Enable/disable smooth tree reorganization
  • Animation duration: Speed of animations (100-1000ms)

Zoom & Navigation

  • Zoom sensitivity: How much to zoom per scroll step
  • Minimum/Maximum zoom: Zoom level limits

Layout

  • Horizontal spacing: Distance between nodes horizontally
  • Vertical spacing: Distance between nodes vertically

Technical Details

Architecture

  • Svelte + Konva.js: Reactive UI with high-performance canvas rendering
  • TypeScript: Full type safety and modern JavaScript features
  • Obsidian Native APIs: Uses official Obsidian APIs for all file operations

File Format Support

The plugin automatically detects file types based on extensions and provides appropriate icons. Support for new file types can be easily added by extending the FileIconService.

Development

Prerequisites

  • Node.js 16+
  • pnpm (recommended) or npm

Setup

git clone <repository-url>
cd obsidian-graphic-organizer
pnpm install

Build

# Development (with watching)
pnpm run dev

# Production build
pnpm run build

Project Structure

ā”œā”€ā”€ main.ts                          # Main plugin class
ā”œā”€ā”€ main.js                          # Compiled main file
ā”œā”€ā”€ view.ts                          # Custom ItemView
ā”œā”€ā”€ manifest.json                    # Plugin manifest
ā”œā”€ā”€ settings.ts                      # Plugin settings
ā”œā”€ā”€ components/                      # Svelte components
│   ā”œā”€ā”€ TreeCanvas.svelte           # Main canvas component
│   ā”œā”€ā”€ Node.svelte                 # Individual node component
│   ā”œā”€ā”€ ContextMenu.svelte          # Right-click menu
│   ā”œā”€ā”€ ZoomControls.svelte         # Zoom controls
│   └── LargeFolderWarningModal.svelte
ā”œā”€ā”€ services/                        # Core services
│   ā”œā”€ā”€ VaultHierarchyService.ts    # Vault structure management
│   ā”œā”€ā”€ DragDropService.ts          # Drag and drop functionality
│   ā”œā”€ā”€ FileIconService.ts          # File type icons
│   ā”œā”€ā”€ FileOperationsService.ts    # File operations
│   ā”œā”€ā”€ CoordinateService.ts        # Node positioning
│   └── SvgIconService.ts           # SVG icon utilities
ā”œā”€ā”€ types/                           # TypeScript definitions
│   ā”œā”€ā”€ TreeNode.ts                 # Tree node types
│   ā”œā”€ā”€ FileTypes.ts                # File type definitions
│   └── PluginSettings.ts           # Settings types
ā”œā”€ā”€ styles.css                       # Plugin styles
ā”œā”€ā”€ esbuild.config.mjs              # Build configuration
ā”œā”€ā”€ tsconfig.json                    # TypeScript config
└── version-bump.mjs                 # Version management

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests if applicable
  5. Submit a pull request

License

Apache License 2.0 - see LICENSE for details.

Support

Changelog

See GitHub Releases for version history and updates.

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.