Features · Screenshots · Getting Started · Architecture · Archive Support · Plugin Blue Paper · Roadmap
🔨 Under active development 🔨
APIs and UI may change without notice.
- Breadcrumb hover lens — active path segments now use a stronger convex 3D lens with layered highlight, inner shadow, and raised drawing order above adjacent breadcrumb items.
- Sharper hover text — hover enlargement uses a real font-size change instead of scaling the rendered button, keeping breadcrumb labels clear.
- Build metadata — release version is
0.9.9.5.1, build122.
- v0.9.9.5 — drag-and-drop file operation stability, breadcrumb truncation polish, managed mount cleanup, progress panel hardening, and file context menu cleanup.
- v0.9.9.4 — media conversion presets, External Tool Doctor, FFmpeg/gifski checks, IntelliJ IDEA diff detection, and shared repair flow for archive tools.
- v0.9.9.3 — unified List/Preview/Tree view behavior, Preview drag-and-drop reliability, Tree view mode, and periodic configuration autosave.
See CHANGELOG.md for the full release history.
MiMiNavigator is a dual-panel file manager inspired by Total Commander and Norton Commander, reimagined with native macOS technologies. It combines the efficiency of classic two-panel navigation with modern SwiftUI, Swift concurrency (actors, async/await), and macOS 26 liquid-glass design language.
Why another file manager?
- Finder lacks dual-panel workflow → MiMiNavigator gives you two panels side by side
- Total Commander doesn't exist on macOS → MiMiNavigator brings TC-style menus and hotkeys
- Built as a SwiftUI showcase → clean architecture, strict concurrency, modular packages
![]() |
| Preview |
![]() |
| History |
![]() |
| History |
| Feature | Description |
|---|---|
| Dual Panels | Two independent file panels with synchronized operations |
| Tabbed Interface | Multiple tabs per panel (⌘T open, ⌘W close, ⌘⇧]/[ switch); tab context menu; persistence between launches |
| List & Thumbnail Views | Toggle per panel via toolbar; thumbnail size 16–900 pt via inline status-bar slider |
| Finder-Style Table | Sortable columns: Name, Size, Date, Permissions, Owner, Type |
| Multi-Selection | Cmd+Click toggle, Shift+Click range, Insert mark+next, pattern matching, Ctrl+A |
| Group Operations | Batch Cut/Copy/Compress/Share/Delete on marked files; group context menu |
| Multi-File Drag & Drop | Drag all marked files together; badge preview with count; Finder-compatible; works in both list and thumbnail views |
| Media Actions | Native media info command plus Convert Media ... presets for video, GIF, audio, and image files |
| Find Files | Advanced search: by name (wildcards), content, size, date — with archive search |
| Archive VFS | Open archives as virtual directories, navigate inside, auto-repack on exit |
| Parent Directory | ... entry pinned to top of every panel, archive-aware navigation |
| Navigation History | Per-panel history with quick-jump popover |
| Breadcrumb Nav | Click-to-navigate path bar with arrowshape back/forward/up controls and autocomplete popup (ESC/click-outside dismiss, slide animation) |
| Favorites Sidebar | Quick access to bookmarked locations (FavoritesKit package) |
| Real-time Updates | Automatic refresh on file system changes |
| FTP/SFTP | Remote file browsing via curl (FTP) and Citadel/NIOSSH (SFTP) |
| Network Neighborhood | SMB/AFP share discovery, mounting, and browsing across LAN |
| Connect to Server | Saved server bookmarks with keychain passwords, session reuse, disconnect |
| Key | Action | Key | Action |
|---|---|---|---|
↑ ↓ |
Navigate | Tab |
Switch panels |
Enter |
Open | ⌘R |
Refresh |
F5 |
Copy to other panel | ⌘. |
Toggle hidden files |
⌘O |
Open / Get Info | ⌘T |
New Tab |
⌘W |
Close Tab | ⌘⇧]/⌘⇧[ |
Next/Prev Tab |
Cmd+Click |
Toggle file mark | Shift+Click |
Range select |
Insert |
Toggle mark + next | Ctrl+A |
Mark all files |
Num+ |
Mark by pattern | Num- |
Unmark by pattern |
Num* |
Invert marks | ⌘⌫ |
Delete marked/selected |
Eight menu categories matching Total Commander conventions: Files (F6 Rename, Pack/Unpack, Compare) · Mark (Select/Deselect groups) · Commands (Terminal, CD Tree) · Net (FTP) · Show (View modes, Hidden files) · Configuration · Start (Tabs) · Help.
- macOS 26 Liquid-Glass menu bar with ultra-thin material, gradient borders, and multi-layered shadows
- Context menus reorganized around stable submenu groups instead of fragile Option-only branches
- Pixel-perfect Retina rendering via
backingScaleFactor - Sticky column headers, zebra-striped rows with themed colors (active/inactive panel)
- Zebra background fill extends below file rows to fill empty panel space
- Animated toolbar buttons, NSVisualEffectView popover for autocomplete
- Hidden files shown in bluish-gray, symlinks labeled as "Alias"
MiMiNavigator can browse archives as virtual directories. Double-click opens the archive, .. exits with automatic repacking if files were modified.
50+ formats supported:
| Category | Formats |
|---|---|
| Standard | zip 7z rar tar |
| Compressed TAR | tar.gz tar.bz2 tar.xz tar.zst tar.lz4 tar.lzo tar.lz tar.lzma |
| Packages | deb rpm cab cpio xar |
| macOS | dmg pkg |
| Java/Android | jar war ear aar apk |
| Disk Images | iso img vhd vmdk |
| Legacy | arj lha lzh ace sit sitx Z |
Extraction chain: /usr/bin/unzip → /usr/bin/tar (libarchive) → 7z (fallback). Install 7z for full format support: brew install p7zip.
The app is notarized by Apple. Starting from v0.9.7.4, macOS Gatekeeper will allow it to run without workarounds.
- Download the DMG from the link below
- Open the DMG, drag MiMiNavigator to Applications
- Launch MiMiNavigator from Applications
For older releases (before v0.9.7.4) you may need to run:
xattr -cr ~/Downloads/MiMiNavigator.app
Download MiMiNavigator v0.9.9.5.1 -> All releases →
Requirements:
- macOS 26+ (Apple Silicon)
- Xcode (latest) with Swift 6.2
- Optional:
brew install swiftlint swift-format p7zip
git clone --recurse-submodules https://github.com/senatov/MiMiNavigator.git
cd MiMiNavigator
zsh Scripts/stamp_version.zsh # sync version from git tag
open MiMiNavigator.xcodeproj
# ⌘R to build and runOr via command line:
zsh Scripts/stamp_version.zsh
xcodebuild -scheme MiMiNavigator -configuration Debug \
-destination 'platform=macOS' CODE_SIGNING_ALLOWED=NO buildProduction Build:
xcodebuild -project MiMiNavigator.xcodeproj -scheme MiMiNavigator \
-configuration Release -derivedDataPath /tmp/mimi_build build CODE_SIGNING_ALLOWED=YESBinary output: /tmp/mimi_build/Build/Products/Release/MiMiNavigator.app
MiMiNavigator/
├── GUI/Sources/
│ ├── App/ # Entry point, AppLogger, toolbar
│ ├── AppDelegates/ # NSApplicationDelegate
│ ├── States/
│ │ ├── AppState/ # AppState (@Observable), SelectionManager,
│ │ │ # MultiSelectionManager, StatePersistence,
│ │ │ # FileListSnapshot, FileSortingService
│ │ ├── Commands/ # AppCommands (menu bindings)
│ │ └── History/ # PanelNavigationHistory, SelectionsHistory,
│ │ # HistoryEntry, FileSnapshot
│ ├── Features/
│ │ ├── Tabs/ # TabItem, TabManager, TabBarView, TabItemView,
│ │ │ # TabContextMenu
│ │ ├── Panels/ # FilePanelView, FileRow, FileRowView,
│ │ │ │ # FileTableRowsView, SelectionStatusBar,
│ │ │ │ # AliasIconComposer, PanelDividerView
│ │ │ ├── FileTable/ # FileTableView (+Actions, +State),
│ │ │ │ # TableHeaderView, TableKeyboardNavigation,
│ │ │ │ # ColumnLayoutModel, ResizableDivider
│ │ │ └── Filter/ # PanelFilterBar, PanelFilterHistory
│ │ ├── Network/ # NetworkNeighborhoodView, NetworkHost,
│ │ │ # NetworkMountService, NetworkDeviceFingerprinter,
│ │ │ # FritzBoxDiscovery, WebUIProber
│ │ ├── ConnectToServer/# ConnectToServerView, RemoteFileProvider,
│ │ │ # RemoteConnectionManager, RemoteServerStore
│ │ └── Popups/ # FileInfoPopupController, InfoPopupController, ConnectErrorPopupController, FileInfoPopupController,
│ │ # PopupEventMonitors (@MainActor, deinit-safe monitors)
│ ├── ContextMenu/
│ │ ├── ActionsEnums/ # FileAction, DirectoryAction, MultiSelectionAction,
│ │ │ # PanelBackgroundAction
│ │ ├── Menus/ # FileContextMenu, DirectoryContextMenu,
│ │ │ # MultiSelectionContextMenu, OpenWithSubmenu,
│ │ │ # submenu-based advanced operations
│ │ ├── Dialogs/ # ConfirmationDialog, RenameDialog, PackDialog,
│ │ │ │ # BatchConfirmation/Progress, CreateLinkDialog,
│ │ │ │ # ContextMenuDialogModifier+Builder
│ │ │ └── FileConflict/ # FileConflictDialog, ConflictResolution
│ │ └── Services/ # CntMenuCoord, ClipboardManager,
│ │ │ # CompressService, QuickLookService
│ │ ├── Coordinator/ # CntMenuCoord+FileActions,
│ │ │ # +DirectoryActions, +BackgroundActions,
│ │ │ # +MultiSelectionActions, ActiveDialog
│ │ └── FileOperations/ # FileOperationsService (core: copy/move/conflict),
│ │ # FileOpsService+Delete, +Rename, +SymLink,
│ │ # BatchOperationCoordinator, DirectorySizeCalculator
│ ├── Services/
│ │ ├── Archive/ # ArchiveManager (actor), ArchiveExtractor,
│ │ │ # ArchiveRepacker, ArchiveFormatDetector,
│ │ │ # ArchiveNavigationState, ArchivePasswordStore
│ │ ├── Scanner/ # DualDirectoryScanner (actor), FileScanner,
│ │ │ # FSEventsDirectoryWatcher
│ │ ├── FileOperations/ # BasicFileOperations, FileDialogs, VSCodeIntegration
│ │ ├── ErrorAlertService.swift # show / confirm / promptPassword helpers
│ │ └── Diagnostics/ # SpinnerWatchdog
│ ├── FindFiles/ # FindFilesViewModel, FindFilesCoordinator,
│ │ │ # FindFilesWindowContent, SearchHistoryManager
│ │ └── Engine/ # FindFilesEngine (actor), FindFilesNameMatcher,
│ │ # FindFilesContentSearcher, FindFilesArchiveSearcher,
│ │ # NativeZipReader, FindFilesResultBuffer
│ ├── DragDrop/ # DragDropManager, DragPreviewView,
│ │ # FileTransferConfirmationDialog
│ ├── Menus/ # TC-style glass menu bar, MenuCategory, MenuItem
│ ├── BreadCrumbNav/ # BreadCrumbView, PathAutoCompleteField
│ ├── HotKeys/ # HotKeyStore, HotKeySettingsView, HotKeyRecorderView,
│ │ # ShortcutConflictValidator
│ ├── History/ # HistoryRow, HistoryWindowContent
│ ├── Favorites/ # FavoritesNavigationAdapter, BookmarkStore
│ ├── Settings/ # SettingsWindowView, SettingsColorsPane,
│ │ # DiffToolRegistry, SettingsPermissionsPane
│ ├── SplitLine/ # OrangeSplitView, SplitContainer, DividerAppearance
│ ├── Toolbar/ # ToolbarStore, ToolbarCustomizeView
│ ├── Config/ # DesignTokens, UserPreferences, AppConstants,
│ │ # InterfaceScaleStore, PreferenceKeys
│ └── Localization/ # L10n.swift
├── Packages/ # git submodule → github.com/senatov/MiMiKits (private)
│ ├── ArchiveKit/ # Archive format support module
│ ├── FavoritesKit/ # Reusable favorites module (.dylib)
│ ├── FileModelKit/ # CustomFile model and utilities
│ ├── LogKit/ # Centralized logging (SwiftyBeaver)
│ ├── NetworkKit/ # Network neighborhood discovery (SMB/AFP)
│ ├── RenameKit/ # F2 inline rename with undo support
│ └── ScannerKit/ # File scanning utilities
└── GUI/Docs/ # Architecture docs, screenshots
| Pattern | Usage |
|---|---|
@Observable + @MainActor |
AppState — global app state, panels, archive states |
@Observable + @MainActor |
MultiSelectionManager — Cmd/Shift click, Insert mark, pattern match |
@Observable + @MainActor |
TabManager — per-panel tab collection, persistence, navigation |
@Observable + @MainActor |
CntMenuCoord — singleton handling all context menu actions |
actor |
DualDirectoryScanner — thread-safe file scanning |
actor |
ArchiveManager — session lifecycle, dirty tracking, extraction, repacking |
AsyncStream |
FindFilesEngine — streaming search results with cancellation |
PopupEventMonitors |
@MainActor class, owns NSEvent monitors, nonisolated(unsafe) only in deinit |
ErrorAlertService |
@MainActor enum, replaces scattered NSAlert.runModal() calls |
filesForOperation() |
Unified API: returns marked files if any, single selected file otherwise |
NSEvent.modifierFlags |
Detecting Cmd/Shift during SwiftUI gesture handlers |
| Security-Scoped Bookmarks | Persistent file access in sandboxed mode |
| Swift Package (dynamic) | FavoritesKit — extracted as reusable .dylib |
Uses SwiftyBeaver with tags: [FindEngine] [ArchiveSearcher] [Extractor] [Repacker] [FormatDetector] [SELECT-FLOW] [NAV] [DOUBLE-CLICK]
Log files:
- Sandboxed:
~/Library/Containers/Senatov.MiMiNavigator/Data/Library/Application Support/MiMiNavigator/Logs/MiMiNavigator.log - External (dev):
/private/tmp/MiMiNavigator.log
MiMiNavigator auto-discovers cloud drives mounted on your Mac. Any provider that syncs through ~/Library/CloudStorage appears automatically in the sidebar under Cloud Drives.
| Provider | How it appears |
|---|---|
| Google Drive | Install Google Drive for Desktop → appears automatically; shared uploads appear under My Drive/Public after sync |
| OneDrive | Install OneDrive for Mac → appears automatically |
| Dropbox | Install Dropbox for Mac → appears automatically |
| Proton Drive | Install Proton Drive for Mac → appears automatically |
| iCloud Drive | Built into macOS → appears automatically |
| Any other provider | If it mounts to ~/Library/CloudStorage, it will be detected |
File and directory R-Menu includes Copy Share Link for Google Drive publishing:
- MiMiNavigator uploads the selected item to a
Publicfolder in Google Drive. - It creates an external Google Drive link with View only or Allow editing permission.
- The link is copied to the clipboard.
- The first use opens Google OAuth in the browser. After consent, the refresh token is stored in macOS Keychain and later share-link actions run without opening the browser again unless access is revoked.
Google Drive app credentials are application credentials, not user credentials. A development build can bundle GUI/Resources/google_drive_oauth.json; this file is intentionally git-ignored. Use GUI/Resources/google_drive_oauth.example.json as the template and never commit a real Google OAuth client secret. User access and refresh tokens are never written to project files.
When Google Drive for Desktop syncs the Public folder locally, MiMiNavigator shows it as Google Drive Public in the sidebar.
For power users: rclone can mount virtually any cloud provider (S3, B2, MEGA, etc.) as a local FUSE filesystem. Once mounted, it appears in /Volumes and is browsable in MiMiNavigator.
MiMiNavigator is primarily a filesystem browser. Google Drive share-link generation is the current exception: it uses Google OAuth only to upload selected items to
Publicand create shareable links.
- Dual-panel navigation with breadcrumbs
- Finder-style sortable table (Name, Size, Date, Permissions, Owner)
- Drag & drop with HIG confirmation
- TC-style menu system (8 categories)
- macOS 26 liquid-glass UI
- Navigation history per panel
- File copy (F5), Open/Get Info (⌘O)
- Hidden files toggle with persistence
- Security-scoped bookmarks
- FavoritesKit Swift Package
- Archive virtual filesystem (50+ formats)
- Find Files with archive search
- Parent directory navigation (
..) - Multi-selection: Cmd+Click, Shift+Click, Insert, pattern matching, Ctrl+A
- Group context menu with batch operations
- Multi-file drag & drop with badge preview (list and thumbnail modes)
- Batch-aware file actions (Cut/Copy/Delete/Compress/Share on marked files)
- Total Commander style marking: dark red, .light, enlarged font
- Selection status bar (marked count + total size + disk free space + inline slider)
- Thumbnail grid view per panel (16–900 pt, QL thumbnails, context menu, drag-drop)
- Open With LRU per file extension (max 5, "Other..." picks persisted)
- Column width persistence
- Hotkey customization
- Tabbed interface (multiple tabs per panel, context menu, persistence)
- Archive Open → TC-style virtual directory (not Finder/Archive Utility)
- Media conversion dialog and scripts for
Convert Media... - Zebra-striped background fill for empty panel space
- Autocomplete popup: click-outside / ESC dismiss, slide animation, NSVisualEffectView
- FileOperationsService split into modular extensions (Delete, Rename, SymLink)
- HIGAlertDialog extracted to own file
- Firmlink handling for
/tmp,/var,/etcin scanner and file operations - Rename: panel tracking, scan cooldown fix, firmlink path resolution
- Version auto-sync from git tag via
Scripts/stamp_version.zsh - Google Drive share-link publishing to
Publicwith Keychain-backed OAuth
- Batch rename for marked files
- Terminal integration at current path
- Custom themes and color schemes
- Scroll-to-selection after rename/create operations
- Three-panel layout option
- FTP/SFTP connectivity (Citadel SFTP + curl-based FTP)
- Network filesystem (SMB/AFP mount, Network Neighborhood discovery)
- More cloud provider share-link APIs beyond Google Drive
- Advanced file comparison
- Plugin system — see Plugin Development Blue Paper
- App Store release
These items are based on features that competing macOS file managers use as clear selling points. They should guide future work toward high-value file-manager workflows before adding unrelated experimental features.
| Priority | Feature | Why it matters |
|---|---|---|
| P0 | Batch Rename with live preview and undo | A core power-user workflow. Rule stacking, before/after preview, and one-step rollback make it safer than simple multi-file rename. |
| P0 | Persistent Preview Pane | A permanent panel for images, PDFs, media, Markdown, source code, text, and hex previews is more useful than a temporary Quick Look popup during heavy browsing. |
| P0 | Folder Sync / Directory Compare | Two-pane managers are naturally suited for local-to-local, local-to-remote, and remote-to-remote comparison with one-way/two-way sync and conflict handling. |
| P1 | Command Bar / Quick Open (⌘K) |
A fast command surface for paths, favorites, menu actions, file operations, saved presets, and recently used commands reduces menu hunting without weakening keyboard-first workflows. |
| P1 | Workspaces | Save and restore complete layouts: panes, tabs, paths, sort order, view mode, splitter position, and scroll position. Useful for repeated project, media, server, and archive workflows. |
| P1 | Git status badges and basic Git actions | Developers benefit from inline repository state: modified/untracked/ignored badges, branch display, and focused actions such as open in terminal or reveal changed files. |
| P1 | First-class remote/cloud backends | FTP/SFTP and mounted cloud folders are already present, but competitors sell direct S3, B2, WebDAV, Dropbox, OneDrive, Google Drive, SMB, AFP, and NFS workflows. |
| P2 | Duplicate Finder | Exact duplicates via hashing and near-duplicate images via perceptual hashing turn file cleanup into a built-in workflow instead of a separate utility. |
| P2 | App Deleter / leftovers cleanup | macOS users value safe app removal with related files from Application Support, Caches, Preferences, and launch agents clearly shown before deletion. |
| P2 | Better system integration | Finder services, URL handlers, share extensions, "Open in MiMiNavigator", and optional default-file-viewer behavior make the app feel like part of macOS instead of a standalone island. |
Recommended implementation order:
- Batch Rename with live preview and undo.
- Persistent Preview Pane.
- Folder Sync / Directory Compare.
- Command Bar / Quick Open.
- Workspaces.
- Git status badges.
- Direct WebDAV/S3/B2 support or an rclone-first backend.
Avoid prioritizing AI, Bluetooth, dashboards, or generic device-control features until the core file-manager workflows above feel complete.
Contributions welcome! MiMiNavigator is a real-world SwiftUI project with clean architecture, strict Swift 6.2 concurrency, and plenty of room to grow.
Looking for a way to start? Here are areas where help is especially appreciated:
| Area | Difficulty | Description |
|---|---|---|
| Batch Rename | ⭐⭐ | Rename multiple marked files with pattern (e.g. Photo_{N}.jpg) |
| File Preview | ⭐⭐ | Quick Look panel for selected file (QLPreviewPanel integration) |
| Themes | ⭐⭐ | Dark/light/custom color schemes with persistence |
| Localization | ⭐ | Translate UI strings (German and Russian already done) |
| Unit Tests | ⭐⭐ | Tests for MultiSelectionManager, FileOperations, ArchiveManager |
| FTP/SFTP | ⭐⭐⭐ | Remote file system panel via Network framework |
| Performance | ⭐⭐ |
- Fork the repo and create a feature branch
- Read CONTRIBUTING.md for code style and commit guidelines
- Build and test locally (
⌘Rin Xcode) - Open a PR with a clear description and screenshots for UI changes
- Learn SwiftUI on a real dual-panel file manager (not a todo app)
- Swift 6.2 concurrency — actors, async/await,
@Observable, strict Sendable - macOS-native development — NSWorkspace, security-scoped bookmarks, Quick Look, AppleScript
- Clean architecture — modular structure, no file over 400 lines, extensive logging
- Friendly maintainer who reviews PRs quickly
I openly acknowledge using AI assistants for architecture discussions and code review. This README was crafted with care for both humans and crawlers.
Sincere thanks to the open-source community:
| Author | Project | License | Why it matters |
|---|---|---|---|
| Sebastian Kreutzberger | SwiftyBeaver | MIT | Clean, fast, low-friction logging that simply works |
| Joannis Orlandos | Citadel | MIT | An excellent SSH/SFTP library that fills an important gap not covered by SwiftNIO SSH |
| The Nmap Project | nmap | GPLv2 | The gold standard in network diagnostics, invaluable during LAN discovery development |
| FFmpeg contributors | FFmpeg | LGPL/GPL depending on build | External command-line backend for media conversion presets |
| Apple | VideoToolbox | Apple SDK | Hardware H.264/HEVC encode presets on macOS |
| Kornel Lesinski | gifski | AGPL/commercial | Optional high-quality animated GIF encoder |
| JetBrains | IntelliJ IDEA | Community/free or commercial | Optional external file and directory diff viewer via idea diff |
| Apple | SwiftNIO, SwiftUI, kqueue, NetServiceBrowser | Apple licenses | Making macOS-native development a genuine pleasure |
Full third-party license texts and notices should also be provided in the application bundle, About/Credits section, or in a dedicated Licenses / ThirdPartyNotices folder.
MiMiNavigator is developed by Iakov Senatov -- Diplom-Ingenieur (Chemical Process Engineering), 35 years of programming experience.
AGPL-3.0 — Iakov Senatov


