Skip to content

senatov/MiMiNavigator

Repository files navigation


MiMiNavigator
MiMiNavigator

A modern dual-panel file manager for macOS, built with SwiftUI

macOS 15+ Swift 6.2 SwiftUI Strict Concurrency MIT Active Development

Features · Screenshots · Getting Started · Architecture · Archive Support · Roadmap


⚠️ Under active development. APIs and UI may change without notice.

What is MiMiNavigator?

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

Screenshots

Main Interface
Dual-panel interface with Finder-style table, sortable columns, and glass menu bar
File Operations Context Menus
Drag & drop with confirmation dialog Context menus and file operations

Features

Core

Feature Description
Dual Panels Two independent file panels with synchronized operations
Finder-Style Table Sortable columns: Name, Size, Date, Permissions, Owner, Type
Drag & Drop Between panels and into directories, with HIG confirmation dialog
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
Favorites Sidebar Quick access to bookmarked locations (FavoritesKit package)
Real-time Updates Automatic refresh on file system changes

Keyboard Shortcuts

Key Action Key Action
Navigate Tab Switch panels
Enter Open ⌘R Refresh
F5 Copy to other panel ⌘. Toggle hidden files
⌘O Open / Get Info ⌘W Close window

TC-Style Menu System

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.

UI & Design

  • macOS 26 Liquid-Glass menu bar with ultra-thin material, gradient borders, and multi-layered shadows
  • Pixel-perfect Retina rendering via backingScaleFactor
  • Sticky column headers, zebra-striped rows, animated toolbar buttons
  • Hidden files shown in bluish-gray, symlinks labeled as "Alias"

Archive Support

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.


Getting Started

Requirements

  • macOS 15.0+ (Apple Silicon or Intel)
  • Xcode 16+ with Swift 6.2
  • Optional: brew install swiftlint swift-format p7zip

Build & Run

git clone https://github.com/senatov/MiMiNavigator.git
cd MiMiNavigator
open MiMiNavigator.xcodeproj
# ⌘R to build and run

Or via command line:

xcodebuild -scheme MiMiNavigator -configuration Debug \
  -destination 'platform=macOS' CODE_SIGNING_ALLOWED=NO build

Architecture

MiMiNavigator/
├── Gui/Sources/
│   ├── App/                # Entry point, FileScanner, logging
│   ├── States/             # AppState (@Observable), DualDirectoryScanner (actor)
│   ├── FilePanel/          # FilePanelView, FileRow, table components
│   ├── Archive/            # ArchiveManager (actor), Extractor, Repacker, FormatDetector
│   ├── FindFiles/          # Search UI, ViewModel, Coordinator
│   │   └── Engine/         # FindFilesEngine (actor), NameMatcher, ContentSearcher, ArchiveSearcher
│   ├── ContextMenu/        # Context menus, dialogs, file operations, batch manager
│   ├── DuoPanel/           # Dual-panel layout, PanelDividerView
│   ├── DragDrop/           # Transferable, DragPreview, confirmation dialog
│   ├── Menus/              # TC-style glass menu bar
│   ├── BreadCrumbNav/      # Breadcrumb path bar with navigation
│   ├── HotKeys/            # Customizable keyboard shortcuts
│   ├── History/            # Navigation history popover
│   ├── Favorite/           # Favorites sidebar adapter (FavoritesKit bridge)
│   ├── Primitives/         # ParentDirectoryEntry, shared types
│   └── Config/             # DesignTokens, UserPreferences
├── Packages/
│   └── FavoritesKit/       # Reusable favorites module (.dylib)
└── Gui/Docs/               # Architecture docs, screenshots

Key Patterns

Pattern Usage
@Observable + @MainActor AppState — global app state, panels, archive states
actor DualDirectoryScanner — thread-safe file scanning
actor ArchiveManager — session lifecycle, dirty tracking, extraction, repacking
AsyncStream FindFilesEngine — streaming search results with cancellation
Security-Scoped Bookmarks Persistent file access in sandboxed mode
Swift Package (dynamic) FavoritesKit — extracted as reusable .dylib

Logging

Uses SwiftyBeaver with tags: [FindEngine] [ArchiveSearcher] [Extractor] [Repacker] [FormatDetector] [SELECT-FLOW] [NAV] [DOUBLE-CLICK]

Log file: ~/Library/Logs/MiMiNavigator.log


Roadmap

Done ✅

  • 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, batch operations
  • Column width persistence
  • Hotkey customization

In Progress 🚧

  • Terminal integration at current path
  • Custom themes and color schemes
  • Three-panel layout option
  • Tabbed interface

Planned 🎯

  • FTP/SFTP connectivity
  • Cloud storage (iCloud, Dropbox)
  • Network filesystem (SMB)
  • Advanced file comparison
  • Batch rename
  • Plugin system
  • App Store release

Contributing

Contributions welcome! This is a learning project — if you see mistakes or have suggestions, please open an issue or PR.

I openly acknowledge using AI assistants for architecture discussions and code review. This README was crafted with care for both humans and crawlers.


License

MIT — Iakov Senatov

LinkedIn GitHub

Made with ❤️ for macOS · Building the future of file management, one commit at a time