Changelog
What changed
The current version is 0.1.2.
Version 0.1.2
October 2, 2026
- Under-the-hood bug fixes
Version 0.1.0
October 1, 2026
The biggest update so far: a rebuilt Mac app, a safer library, an encrypted companion connection, and a companion that works without your Mac.
β οΈ Before You Update
- Your library is updated the first time 0.1.0 opens. A backup is saved first, in
Application Support/DriveIndex/Backups/. Earlier versions of DriveIndex cannot open the updated library. - DriveIndex Companion must be updated too, and paired again. The companion connection is now encrypted; older companions are told to update and can no longer browse.
π Features
A New Main Window
- Files show as a table, a thumbnail grid, or by folder, with one search field, one filter bar and a details inspector shared by all three
- Search every drive or only the ones you select; narrow a search to a drive by typing its name
- Quick Look, drag files out, copy paths, reveal in Finder, and edit tags and notes with Undo
- Settings is now a standard Settings window with one tab per topic; the menu bar item brings the window back
- A short introduction on first launch, and new drives are asked about one at a time
Faster, Safer Indexing
- Re-indexing no longer removes the old index first: the previous index stays searchable until the new one is complete, and a cancelled or failed run leaves it untouched
- Only read files that have changed (Settings β Indexing): a re-index keeps the details and thumbnails of files that have not changed. A 270,000-file drive that took over five minutes now re-indexes in about half a minute
- A drive is searchable as soon as its files and details are read; thumbnails finish afterwards
- Much faster folder scanning on large drives
- Network volumes (SMB, NFS, AFP, WebDAV) can be indexed
- Indexing can be cancelled, and failures are shown instead of passing silently
Faster Search
- Text search uses a new full-text index, so searches across hundreds of thousands of files answer immediately
- Browsing a large drive no longer loads every file into memory
Encrypted Companion Connection
- Pair an iPhone or iPad once by scanning a code in Settings β Companion; the connection is encrypted and only paired devices can connect
- "New Pairing Code" unpairs every device at once
- Each app tells you when the other needs an update: the Mac shows a notice when an older companion tries to connect, and the companion says when the Mac is running an older DriveIndex
DriveIndex Companion 0.1.0 (iPhone and iPad)
- Works without your Mac: file names, folders, sizes and dates are copied to the device whenever your Mac is reachable, so you can find which drive a file is on from anywhere
- New layout with Drives, Search and Settings tabs, and a sidebar on iPad
- Browse a drive as a list or as thumbnails
- Ask Siri or Spotlight: "Find a file in DriveIndex" answers which drives have it
- Copy and share a file's location; choose which drives are kept on the device and see how much space the catalog uses
Catalog Export and Import
- File β Export Catalogβ¦ saves your whole library to one file; Import Catalogβ¦ brings it into another Mac
π Bug Fixes
- Fixed duplicate drives appearing in the library; duplicates are resolved when the library is updated
- Fixed stalls and timeouts while reading MXF files, and thumbnails for ARRI ProRes MXF and very short clips
- Fixed two indexing runs starting on the same drive at once
- Fixed the companion server failing to start when its port was already in use
- Fixed false "changed" detection for files whose dates differed only by fractions of a second
- Audio files are read with the system's own frameworks, which is faster and more reliable
- Fixed several problems at launch, including a brief freeze and layout warnings
- The trial and license check can no longer be reset locally
π§ Under the Hood
- Bundled ExifTool updated to 13.55; ffmpeg and ffprobe rebuilt as universal binaries (FFmpeg 8.1.3)
- Sparkle updated to 2.10
- Diagnostics pane in Settings shows whether the bundled tools can run
- Usage data can be turned off in Settings β Privacy
Version 0.0.6
May 12, 2026
π Features
CSV Drive Export
- New "Export as CSVβ¦" command (ββ§X) in the Drive menu
- Selection sheet lets you choose individual drives or export all at once with a single toggle
- Exported columns: drive number, name, root folder structure, file count, first indexed date, last indexed date, oldest file date, newest file date, total size, and free space
- Root folders show actual top-level folder names rather than volume mount paths
- Dates export in a clean, locale-independent format
First Indexed Date Tracking
- Each drive now records when it was first indexed
- Date persists across subsequent re-indexes and appears in CSV exports
π Performance
Indexing Speed
- Eliminated a full second filesystem traversal that previously ran before every index β the drive is now scanned once instead of twice
- Reduced database round-trips during metadata saving from one query per file to one query per batch, significantly faster on large drives
- Same batch query improvement applied to thumbnail path saves
- Metadata extraction concurrency is now properly capped to the system-tuned limit, preventing resource contention on drives with many media files
- ExifTool batch size and flush interval now scale with system capabilities rather than using fixed values
- Metadata extraction processes that finish early no longer hold a background thread for the full timeout duration
- Redundant second pass over extracted metadata results removed β results are accumulated correctly in a single pass
- File attribute reads reduced from two per file to one, eliminating a duplicate filesystem call during metadata extraction
- Thumbnail generation no longer waits for an entire group of files to finish before starting the next β slots fill immediately as completions arrive
- Thumbnail cache is pruned after each drive completes rather than accumulating indefinitely across re-indexes
App Launch
- Fixed temporary unresponsiveness at launch caused by drive index count queries running synchronously on the main thread β counts now fetch on a background thread and update the menu bar item asynchronously
- Verbose per-file progress logging suppressed in release builds, reducing string formatting overhead during large indexing runs
π Bug Fixes
License Activation
- Fixed intermittent HTTP 404 errors when activating a Gumroad license caused by incorrect URL encoding in the activation request
App Startup
- Fixed a warning caused by the Core Data model being loaded more than once at startup, which could produce duplicate entity registration errors
- Fixed a startup race condition where internal services were initialized twice in quick succession, causing redundant work on launch
Local Network Server
- Fixed a race condition where starting the local network server twice in rapid succession could result in an "Address already in use" error
Settings
- Fixed blank rows appearing in the Metadata Enrichment section of Settings
- Updated copyright year to Β© 2025β2026 Neon Media, LLC
π Security
App Data Storage
- Thumbnails and drive icons now stored in Application Support rather than the system Caches directory β Application Support is not subject to OS cache purges
- One-time background migration automatically moves existing cached files to the new location on first launch; no user action required
- Existing thumbnails from previous versions continue to display during and after migration
π§ Technical Improvements
- Security-scoped drive bookmarks now keyed by volume UUID rather than mount path, improving reliability across drive remounts and renames
- Automatic migration of legacy bookmark keys runs transparently on first launch for existing users
- Telemetry now correctly reports the number of files indexed per drive (previously reported zero)
Version 0.0.5
December 20, 2025
β¨ Enhancements
Unified Search Experience
- Implemented unified search with scope controls (All Drives / This Drive)
- Eliminated confusing dual search boxes - one search field handles both global and drive-specific search
- "Clear Filters" now returns to global search and clears drive selection
- Search prompt dynamically updates based on context
- Fixed threading issues causing QoS warnings and UI freezing during large searches
- Implemented debounced filter application to prevent race conditions
- Search results now remain stable during rapid filter changes
- NEW: Added always-visible segmented control toggle for switching search modes
- NEW: Toggle positioned right before search box for intuitive context
- NEW: Bidirectional sync between toggle and drive selection
- NEW: Intelligent auto-selection when switching to "This Drive" mode without drive selected
Search Functionality Overhaul
- NEW: Fixed critical issue where drive-specific search only searched filenames/paths, not metadata
- NEW: Local drive search now searches all metadata fields: camera make/model, lens make/model, codec, scene, take, reel
- NEW: Directory tree view now applies metadata search filtering (previously ignored search queries)
- NEW: Search behavior now consistent between flat list and directory tree modes
- NEW: Fixed double-filtering bug where DirectoryTreeView would show 0 results despite FilteredIndexView finding matches
- Search results now properly display in tree structure when local search is active
UI Polish & Professional Design
- NEW: Repositioned search mode toggle from far left navigation to right before search box
- NEW: Applied
.controlSize(.small)to segmented control for tighter, more professional appearance - NEW: Reduced toggle width from 200px to 180px for better space utilization
- NEW: Removed redundant external drive selector button (replaced by unified toggle)
- NEW: Cleaner toolbar organization: navigation controls left, search controls right
- Toolbar layout now follows macOS design patterns (Settings, Photos, Music apps)
π Performance
App Launch
- Fixed critical performance issue causing 6+ second unresponsive startup with beach ball cursor
- Window now appears and becomes interactive in under 500ms (92% faster)
- Implemented non-blocking startup with progressive loading and professional loading UI
- Eliminated main thread blocking through async initialization of Core Data, services, and volume monitoring
- Reduced memory usage from potential 1GB+ spikes to ~200MB through batched file loading
- Deferred update checks and telemetry by 10 seconds to avoid blocking launch
Startup Optimization
- Fixed excessive duplicate drive checks on app launch (200+ redundant checks reduced to ~10)
- Startup latency improved from 2-3s to <0.5s (4-6x faster)
- Implemented 4-part optimization: publisher deduplication, single-publish model, 2-second mount status cache, early-exit checks
- Eliminated CPU spike during app launch
- Optimized Combine publishers to eliminate redundant triggers
- Added drive mount status cache eliminating 80x repeated IOKit lookups
Search
- Dramatically improved search speed with query cancellation, result caching (LRU with 60s TTL), and parallel execution
- Reduced debounce from 300ms to 200ms for snappier response
- Cache hits now return in <5ms instead of 200-500ms
- Increased initial page size to 1500 results
- Optimized batch rendering with larger batches and longer intervals for smoother scrolling
Filter Loading
- Fixed critical issue causing 2-3 second beach ball cursor when loading filter dropdowns
- Implemented proper Core Data background contexts with parallel execution
- All filter queries now run simultaneously on background threads without blocking UI
π Bug Fixes
Search
- Fixed multi-word search returning zero or incomplete results (e.g., "arri alexa", "red helium")
- Implemented proper tokenization with cross-field matching
- Fixed drive selection accidentally filtering all searches when "Restrict to Selected Drives" was disabled
- Search now correctly includes all indexed drives by default
- Fixed search flicker where results would temporarily drop to 0
- Fixed issue where "Clear Filters" would leave user stuck in drive-specific mode
- NEW: Fixed critical bug where searching for camera metadata (e.g., "alexa", "arri") in drive view returned 0 results
- NEW: Fixed search only matching filenames/paths when it should search all metadata fields
- NEW: Fixed directory tree view not displaying filtered results (showed all files regardless of search)
- NEW: Fixed race condition where filtered results would be calculated but not rendered in UI
- NEW: Fixed double-filtering issue in tree view causing valid search results to be hidden
- NEW: Search queries now properly passed from FilteredIndexView to DriveDirectoryTreeView
Security & Permissions
- Fixed app requesting drive permission on every reindex
- Implemented consistent path normalization for bookmark keys
- Permission dialog now appears only once per drive (on first index)
- Bookmarks persist correctly across app restarts and reboots
- Better handling of marker file permission errors with sandbox
- Falls back gracefully to serial number matching when marker files are inaccessible
Drive Identification
- Fixed app incorrectly showing multiple drives as mounted when only one connected
- Implemented hierarchical drive matching: hardware serial β hardware fingerprint β volume UUID
- Added self-healing to correct stale volume identifiers in database
- Physical drives now uniquely identified by serial numbers
Network & Connectivity
- Fixed iOS app connection timeouts when fetching large drives (18k+ files, 7k+ directories)
- Increased client timeout from 10s to 60s, resource timeout from 30s to 120s
- Added cooperative task yielding in recursive tree building
- Large drives (up to 50k files) now load successfully in 20-40 seconds
- Fixed iOS app unable to discover macOS host in TestFlight and distributed builds
- Added missing network entitlements for proper Bonjour functionality
Camera RAW Thumbnails
- Added support for 13+ additional camera RAW formats (Kodak, Minolta, Mamiya, Leica, Samsung, Epson, Casio, older Canon, Pentax, Panasonic)
- Total of 30+ RAW formats now supported for thumbnail generation
UI & Navigation
- Fixed directory tree not rendering when switching from list view
- Fixed drive selection not triggering view switch
- Fixed thumbnails not loading in Drive View
- Fixed "Clear Filters" button to clear all filters, not just file type
β¨ Features
Drive View Enhancements
- Complete directory tree overhaul: now shows ALL directories regardless of pagination or filters
- New persistent search bar for searching within selected drive
- Filters now apply only to files, never hiding directory structure
- Visual design alignment with Search View (frosted glass, rounded corners, animations)
- Filter toggle (βF) for cleaner workspace
- Drive View now defaults to directory tree view
Search View Improvements
- Removed confusing directory tree mode from global search
- Clearer separation: Search View for cross-drive search, Drive View for single-drive exploration
- Added context menus to all file rows (Reindex, Add Notes, Add Tags, Remove)
Filter Improvements
- New toggle-based date range filter with clear on/off state
- Date pickers only appear when filter is enabled
- All filters now use consistent 200ms debounce
- Complete filter clearing with one click
π§ Technical Improvements
- Implemented Swift 6 concurrency compliance throughout
- Converted
DriveHardwareInfoResolverto actor for thread-safe caching - Progressive volume classification (basic info β hardware β classification)
- Service singleton pattern eliminates redundant initialization
- DiskUtil cache actor replaces NSLock for better async/await integration
- Immutable concurrency patterns with
withTaskGroup - Enhanced bookmark lifecycle logging with clear success/failure indicators
- Improved diagnostic logging in drive detection
- Code cleanup: removed ~300 lines of obsolete code
- NEW: Introduced unified search mode architecture with
SearchModeenum (.allDrives/.currentDrive) - NEW: Implemented bidirectional state synchronization between toggle UI and internal state
- NEW: Created intelligent mode switching with auto-selection fallback for edge cases
- NEW: Unified metadata search logic across FilteredIndexView and DriveDirectoryTreeView
- NEW: Comprehensive search field matching now includes: name, path, directory, extension, tags, camera make/model, lens make/model, codec, scene, take, reel
- NEW: Added extensive debug logging for search filtering lifecycle and race condition diagnosis
Version 0.0.4
December 14, 2025
π Features
License Management & Trial System
- 7-day free trial with full feature access (no credit card required)
- License activation via Gumroad ($19.99 one-time purchase)
- Secure license storage in macOS Keychain
- 30-day offline grace period after initial activation
- Up to 2 device activations per license
- License management in Settings (view status, activate, deactivate)
File List Pagination
- File lists now load in batches of 2,000 files for improved performance
- "Show More" button for directories with more than 2,000 files
- File count status shows "Showing X of Y files"
- Dramatically faster initial load for large directories (10,000+ files)
QR Code Enhancements
- "Print All Labels" option for batch printing QR codes for all indexed drives
- Improved QR code generation reliability and scanning accuracy
π Bug Fixes
Drive Identification
- Fixed critical cache bug causing multiple drives to show the same serial number
- Changed cache key from BSD disk name to volume mount path
- Cache now properly invalidates when drives are unmounted
- Fixed new drives incorrectly matching to existing drives via volume ID
- Improved hardware serial number verification in all drive identification flows
Window & Application Management
- Fixed duplicate windows when clicking dock icon or reopening app
- Fixed window restoration from minimized state
- Improved window lifecycle handling for better macOS integration
Media & Network
- Improved thumbnail extraction reliability across all media types
- Better handling of camera RAW formats
- Enhanced thumbnail streaming to iOS app
- Improved iOS network connection stability
- Better handling of server disconnections and reconnections
Permissions & Security
- Better handling of marker file permission errors with sandbox
- Falls back gracefully to serial number matching when marker files are inaccessible
- Improved diagnostic logging for permission issues
β¨ Enhancements
- Clean welcome screen on first launch with trial, license, or purchase options
- License status clearly displayed in Settings
- Trial countdown shows days remaining
- License validation with Gumroad API (server-side, secure)
- Minimum macOS version updated to 13.0 (Ventura)
Version 0.0.3
December 12, 2025
π Features
iOS Companion App
- Complete iOS companion app for browsing indexed drives from iPhone/iPad
- QR code scanning with deep link support
- Local network browsing via Bonjour/mDNS
- Directory tree browser with file metadata display
- Search functionality with metadata filtering
- Thumbnail streaming from Mac
- Recent drives list (up to 10 drives)
- Token-based authentication
- Camera autofocus optimization for 1"Γ1" QR labels
macOS Local Network Server
- HTTP API server on port 5050 for iOS companion
- Bonjour/mDNS advertisement
- 8 REST API endpoints (status, drives, drive details, thumbnails, search, filters)
- Token authentication with XXX-XXX-XXX format
- Auto-start server on launch option
- New "Local Network" settings tab
QR Code Label Generation
- Printable QR code labels (1"Γ1") for drives
- PDF export for label printing
- Deep link encoding with drive identity verification
- Batch label generation support
β¨ Enhancements
UX Improvements
- iOS: Token visibility toggle, dynamic version numbers
- macOS: Readable XXX-XXX-XXX token format, large styled token display with copy button
- Developer mode toggle for unauthenticated API access
- Proper IPv6 URL formatting, IPv4 preference for compatibility
- Ultra-wide camera support for macro QR scanning
- Continuous autofocus with optimal lens positioning
π Bug Fixes
- Fixed 20+ main actor isolation errors for Swift 6 compliance
- Fixed Info.plist conflicts, duplicate package references
- Fixed hardware info display issues, PDF filename generation
- Fixed iOS black screen on launch, connection sandbox permissions
- Fixed macOS connection refused errors, cache migration crashes
- Fixed database migration path resolution
- Fixed thumbnail generation across various formats
- Fixed IPv6 URL formatting, QR scanner autofocus
- Implemented request throttling for stability under heavy load
π§ Technical Improvements
- Created DriveIndexShared package for cross-platform code sharing
- Added proper
@MainActorannotations throughout - Enhanced Core Data operations with
context.perform - Prevented retain cycles with weak self captures
Version 0.0.2
December 11, 2025
β¨ Features
- Improved access token management for API authentication
- Batch QR code generation for multiple drives
- Enhanced QR code stability and reliability
π Bug Fixes
- Improved drive identity detection
- Fixed QR code generation edge cases
- Various UI polish improvements
Version 0.0.1
December 10, 2025
π Initial Release
Core Features
- Index external drives and capture complete file metadata
- Full-text search across indexed files with advanced filtering
- Directory tree browser for intuitive file exploration
- Drive management with hardware fingerprinting
- Thumbnail generation and caching
Professional Camera Support
- RED R3D files via RED SDK
- Blackmagic RAW files via BRAW SDK
- ARRI formats with ALE sidecar support
- Sony, Canon, Nikon, and other cinema cameras
- Support for camera RAW formats (.cr2, .cr3, .nef, .arw, .dng)
Metadata Extraction
- Vendor SDKs (RED, Blackmagic) for native format metadata
- Sidecar file support (ARRI ALE, Sony XML)
- ExifTool integration for EXIF/QuickTime metadata
- MediaInfo/ffprobe for generic container formats
- Comprehensive camera metadata (make, model, lens, settings)
Supported Formats
- Cinema: .r3d, .braw, .ari, .arx, .mxf
- Video: .mov, .mp4, .avi, .mkv
- RAW Photos: .cr2, .cr3, .nef, .arw, .dng, and more
- Sidecar: .ale, .xml, .xmp
Technical Foundation
- SwiftUI for modern, native macOS interface
- Core Data for efficient persistence
- Combine for reactive updates
- Swift concurrency (async/await) throughout
- Sparkle framework for auto-updates
Project Information
Repository: DriveIndex
License: Proprietary
Company: Neon Media, LLC
Platform: macOS 13.0+ / iOS 16.0+
Language: Swift 5.9+
Notes
Version Numbering
- 0.0.x: Pre-release / Alpha
- 0.x.0: Beta releases
- x.0.0: Production releases
Categories
- π Major Features: Significant new functionality
- β¨ Enhancements: Improvements to existing features
- π Bug Fixes: Error corrections and stability improvements
- π¦ Code Structure: Architecture and organization changes
- π Statistics: Quantitative project metrics
- β οΈ Breaking Changes: Changes that require user action
- ποΈ Deprecated: Features marked for removal
- π Security: Security-related changes
Contributing
This is a private project. For internal use only.