π΅π¬ Smart, cross-platform media file manager and auto-organizer
Rust core + native UIs β inspired by MusicBee's flexibility, built for everywhere
(C) 2025β2026 MWBM Partners Ltd
MeedyaManager is a cross-platform media file management application that automatically monitors folders, reads metadata from audio and video files, and renames/organizes them according to user-defined rules β inspired by MusicBee's auto-organize feature. It is built on a shared Rust core library with fully native UIs on each platform: SwiftUI on macOS, WinUI 3 on Windows, and GTK4 on Linux. This architecture β the same pattern used by 1Password, Dropbox, and Firefox β delivers native look-and-feel on every platform while sharing all business logic through a single Rust codebase.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Native UI Layer β
β ββββββββββββ ββββββββββββββββ ββββββββββββββββββ β
β β macOS β β Windows β β Linux β β
β β SwiftUI β β WinUI 3 β β GTK4 (gtk4-rs) β β
β β (Swift 6) β β (C# .NET) β β (Rust) β β
β βββββββ¬ββββββ ββββββββ¬βββββββ βββββββββ¬βββββββββ β
β β β β β
β UniFFI cbindgen/ Direct Rust β
β (auto-gen P/Invoke (no FFI) β
β Swift) (C#) β
ββββββββββ΄ββββββββββββββββββ΄βββββββββββββββββββ΄βββββββββββββ€
β Rust Core (mm-core) β
β ββββββββββ ββββββββββββ ββββββββββββ ββββββββββββββββ β
β βWatcher β βRule Eng. β βMetadata β β Classifier β β
β β(notify)β β(lexer/ β β(lofty) β β (4-level) β β
β β β βparser/ β β β β β β
β β β βevaluator)β β β β β β
β ββββββββββ ββββββββββββ ββββββββββββ ββββββββββββββββ β
β ββββββββββ ββββββββββββ ββββββββββββ ββββββββββββββββ β
β βRenamer β βCompanion β βProviders β β Config β β
β β β βTracker β β(19+ APIs)β β (JSON5+.env) β β
β ββββββββββ ββββββββββββ ββββββββββββ ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
FFI Strategy:
- macOS: UniFFI (Mozilla) auto-generates Swift bindings from Rust
- Windows:
cbindgen/csbindgengenerates C headers β C# P/Invoke calls Rust.dll - Linux: Direct Rust (GTK4 via
gtk4-rs+libadwaita) β no FFI needed
| Feature | Description |
|---|---|
| ποΈ Real-Time File Watching | Monitors folders for new media files and processes them automatically (notify crate) |
| π MusicBee-Inspired Rule Engine | Template syntax with <Tag>, $If(), $And(), $Or(), 20+ functions, regex, deep nesting |
| βοΈ Metadata Editing | Read/write tags across audio and video formats via lofty |
| π 19+ Metadata Lookup Providers | Music (10), Video (5), Podcasts (1), Identifiers (3) β with fuzzy matching and cover art |
| π§ Smart Classification | 4-level hierarchy: Media Group β Format β Class β Quality |
| π Companion File Tracking | Moves subtitles, cover art, and disc images alongside media |
| ποΈ External JSON5 Config | File types and metadata tags defined in filetypes.json5 / tags.json5 β editable without recompile, user-overridable |
| π File Integrity Checking | SHA256 hash before/after every metadata write; atomic rename (rename(2)); rollback + corruption log on failure |
| βοΈ Background Service Mode | Runs as systemd user unit (Linux), launchd agent (macOS), or Windows Service; managed via meedya service CLI |
| π¦ Settings Export / Import | Portable .mmprofile bundles for device migration and backup (meedya config export/import) |
| π§ͺ Test Mode | Safe editing β creates _MeedyaManager copies instead of modifying originals; commit or revert when done |
| π‘οΈ Pre-release Safety | Pre-release builds auto-enable Test Mode; stable upgrade prompts to disable |
| π Privacy Policy | No tracking, no analytics; full third-party provider disclosure |
| βοΈ Cloud Storage Sync | OneDrive, Google Drive, Dropbox, MEGA, iCloud (planned) |
| ποΈ Database Export | MySQL, MariaDB, SQL Server, SQLite, PostgreSQL |
| π Secure Media Server | REST API with JWT auth, media streaming, web frontend |
| π¨ Native Look & Feel | SwiftUI + Liquid Glass on macOS, WinUI 3 + Mica on Windows, GTK4 + Libadwaita on Linux |
| Platform | Architectures | UI Framework | FFI Binding | Store Target |
|---|---|---|---|---|
| π macOS | Apple Silicon (arm64) | SwiftUI (Swift 6) | UniFFI | App Store |
| πͺ Windows | x64, ARM64 | WinUI 3 (C# .NET 8) | cbindgen / P/Invoke | Microsoft Store |
| π§ Linux | x86_64, ARM64 | GTK4 + Libadwaita (gtk4-rs) | Direct Rust | Flatpak / Snap |
- Rust (stable, via rustup)
- Platform-specific toolchain (see below)
# Clone the repository
git clone https://github.com/MWBMPartners/MeedyaManager.git
cd MeedyaManager
# Build all Rust crates (core, CLI, providers, GTK UI)
cargo build --workspace
# Run all tests
cargo test --workspace
# Run the CLI
cargo run -p mm-cli -- scan ~/Music# Build the Rust FFI library for macOS
cargo build -p mm-ffi --release
# Open in Xcode and build
open macos/MeedyaManager.xcodeproj
# Or build from command line:
cd macos && swift build# Build the Rust FFI library for Windows
cargo build -p mm-ffi --release
# Build the C# / WinUI 3 project
cd windows
dotnet build# Build the GTK4 UI directly (no FFI needed)
cargo build -p mm-gtk --releaseMeedyaManager/
βββ Cargo.toml # Workspace root
βββ rust-toolchain.toml # Pin Rust version
βββ .rustfmt.toml / clippy.toml / deny.toml
β
βββ crates/
β βββ mm-core/ # Core business logic
β β βββ src/ (config/, watcher/, classify/, rule_engine/,
β β renamer/, companion/, metadata/, state/,
β β logging/, health/, error.rs)
β βββ mm-providers/ # 19+ metadata lookup providers
β β βββ src/ (traits.rs, registry.rs, credentials.rs,
β β rate_limiter.rs, match_scoring.rs, cover_art.rs,
β β music/, video/, podcasts/, identifiers/)
β βββ mm-cloud/ # Cloud storage (M7)
β βββ mm-export/ # Database export (M9)
β βββ mm-server/ # Media server (M10)
β βββ mm-cli/ # Cross-platform CLI (clap)
β βββ mm-ffi/ # FFI bindings (UniFFI + cbindgen)
β βββ mm-gtk/ # Linux GTK4/Libadwaita UI
β
βββ macos/ # Swift/SwiftUI app
β βββ MeedyaManager.xcodeproj/
β βββ MeedyaManager/ (Views/, Models/, Bindings/, Resources/)
β
βββ windows/ # WinUI 3 / C# app
β βββ MeedyaManager.sln
β βββ MeedyaManager/ (Views/, ViewModels/, Interop/, Assets/)
β
βββ config/settings.json5 # Shared default config
βββ assets/ # Shared icons/branding
βββ branding/ # Logos
βββ docs/ # Developer docs
βββ help/ # User documentation
βββ .github/workflows/ # CI/CD (7 workflows)
βββ .claude/ # Project context
βββ Project_Plan.md / PROJECT_STATUS.md / README.md
βββ justfile # Task runner
| # | Milestone | Status | Description |
|---|---|---|---|
| M0 | π§ Repository Setup & Scaffolding | β Complete | Archive Python, init Cargo workspace, scaffold native apps, CI stubs |
| M1 | π§± Core Engine (Rust) | β Complete | Config, classification, metadata (lofty), watcher (notify), renamer, logging (217 tests) |
| M2 | π Rule Engine | β Complete | Lexer, recursive descent parser, evaluator, 20+ template functions (182 tests) |
| M3 | β¨οΈ CLI | β Complete | clap-based commands: scan, debug, watch, rule, edit, lookup, config (45 tests) |
| M4 | π₯οΈ FFI Layer & Native UI Shells | β Complete | UniFFI + cbindgen, SwiftUI/WinUI 3/GTK4 app shells (20 tests) |
| M5 | π Metadata Lookup Providers | β Complete | 19+ providers, fuzzy matching, rate limiting, cover art (332 tests) |
| M6 | π¨ Full Native UI | β Complete | Rule Builder, Metadata Editor, Lookup Panel on all platforms (~90 tests) |
| M7 | βοΈ Cloud Storage Monitoring | β Complete | OneDrive, Google Drive, Dropbox, MEGA stub, iCloud stub (~90 tests) |
| M8 | π¦ Packaging & Public Release | β Complete | App Store, Microsoft Store, Flatpak/Snap, auto-updater (~33 tests) |
| M9 | ποΈ Database Export | β Complete | MySQL, MariaDB, SQL Server, SQLite, PostgreSQL (~90 tests) |
| M10 | π Secure Media Server | β Complete | axum HTTP server, REST API, JWT auth, media streaming β v1.0.0 released (~90 tests) |
| β | π§ Post-Release Enhancements (v1.1.0) | β Complete | Accessibility (AT-SPI2/VoiceOver/XAML), i18n (gettextrs/.xcstrings/.resw), external filetype registry, extended metadata tags |
| β | π§ Post-Release Enhancements (v1.2.0) | β Complete | External JSON5 tag registry, file integrity (SHA256 + atomic write), background service mode, settings export/import |
| Purpose | Crate |
|---|---|
| File watching | notify |
| Metadata read/write | lofty |
| CLI framework | clap |
| HTTP client | reqwest |
| Async runtime | tokio |
| Config (JSON5) | json5 + serde |
| Environment vars | dotenvy |
| Logging | tracing + tracing-subscriber |
| FFI (Swift) | uniffi |
| FFI (C header) | cbindgen |
| GTK4 UI | gtk4-rs + libadwaita |
| Rate limiting | governor |
| Fuzzy matching | fuzzy-matcher |
| Credential storage | keyring |
| Error types | thiserror |
| Regex | regex |
| OAuth2 | oauth2 |
| JWT | jsonwebtoken |
| Platform | Language | Framework | Version |
|---|---|---|---|
| macOS | Swift 6 | SwiftUI | Xcode 16+ |
| Windows | C# | WinUI 3 / .NET 8 | Visual Studio 2022+ |
| Linux | Rust | GTK4 + Libadwaita | gtk4-rs |
The following Apple-specific and Apple-enhanced features are planned for future releases on macOS (and potentially iOS/iPadOS). These extend MeedyaManager beyond cross-platform parity to take full advantage of the Apple ecosystem.
| Feature | Description | GitHub Issue |
|---|---|---|
| π΅ Music.app Library Import | Parse the macOS Music app library (~/Music/Music/) to bulk-import existing metadata, ratings, and play counts β zero re-tagging needed for existing collections |
#134 |
| πΌ MusicKit Framework | Replace REST-based Apple Music lookups with the native MusicKit framework for on-device catalog search, richer metadata, and authenticated user-library access |
#135 |
| π Quick Look Extension | Register a QLPreviewExtension so Finder shows rich album-art previews with metadata for any media file managed by MeedyaManager |
#136 |
| π£οΈ Siri Shortcuts / App Intents | Expose MeedyaManager operations (scan folder, rename preview, metadata lookup) as AppIntent actions usable in the Shortcuts app and via Siri voice commands |
#137 |
| π§ Core ML Audio Fingerprinting | Use Apple's Neural Engine (Core ML / Sound Analysis) for on-device audio fingerprinting β identify tracks without an external API, works fully offline | #138 |
| π Spotlight Importer | Publish library metadata to macOS Spotlight via CoreSpotlight so every track is searchable system-wide from Spotlight or Alfred |
#139 |
| π‘ AirPlay 2 Streaming | Stream media from the built-in MeedyaManager server to any AirPlay 2 receiver (HomePod, Apple TV, AirPlay-enabled speaker) | #140 |
| βοΈ CloudKit Settings Sync | Sync rename rules, config, and preferences across all Apple devices via iCloud / CloudKit β rules set on Mac appear automatically on iPhone/iPad | #141 |
These features are tracked as wishlist GitHub Issues and will be scheduled in a future milestone once core cross-platform parity is solid.
This project is licensed under the GPL-2.0-or-later β see the LICENSE file for details.
| Document | Description |
|---|---|
| π Project_Plan.md | Full project plan with architecture, milestones & tech stack |
| π PROJECT_STATUS.md | Current progress tracker |
| π docs/ROADMAP.md | Milestone timeline |
| π¦ docs/changelog.md | Detailed change log |
| π help/getting-started.md | Getting started guide |
| βοΈ help/configuration.md | Configuration reference |
| π help/rule-syntax.md | Rule template syntax guide |
| π΅ help/supported-formats.md | Supported file formats |
| π help/provider-setup.md | Metadata lookup provider setup |
| π§ help/troubleshooting.md | Troubleshooting guide |
| β help/faq.md | Frequently asked questions |
(C) 2025β2026 MWBM Partners Ltd