A macOS GUI application for anylinuxfs - mount Linux filesystems (ext4, btrfs, XFS, etc.) on macOS.
- Disk Management - Browse and mount Linux partitions (ext2/3/4, btrfs, XFS, ZFS, etc.)
- Safe Eject - Properly unmount and eject external drives with one click
- Encrypted Drives - Unlock encrypted volumes with a passphrase, recovery key, or key file (requires an
anylinuxfsCLI with--key-filesupport) - Embedded VM Shell - Interactive terminal with image selector (Alpine Linux or FreeBSD)
- Custom Actions - Create and manage mount/unmount hooks with environment variables
- Image Management - Install/uninstall VM images (Alpine Linux, FreeBSD for ZFS)
- Package Management - Add/remove custom Alpine packages to extend VM capabilities
- Real-time Monitoring - Live mount status and log viewer with follow mode
- VM Configuration - Customize RAM, vCPUs, and log verbosity
- System Tray - Menu bar icon with quick access to show/hide, unmount, and quit
- Admin Mode - Privilege escalation for accessing disks that require sudo
- Launch at Login - Optional auto-start via macOS Launch Agent
- Quit Protection - Warns before quitting if a filesystem is still mounted
- Force Cleanup - Detect and clean up orphaned VM instances from failed mounts
- Auto-refresh - Disk list updates automatically when drives are connected/ejected
- Native macOS - Light/dark mode support, Apple Silicon optimized
brew install fenio/tap/anylinuxfs-guiThis will automatically install the anylinuxfs CLI dependency.
If you get "damaged" or Gatekeeper warnings, run:
xattr -cr /Applications/anylinuxfs-gui.appDownload the latest DMG from Releases, open it, and drag the app to Applications.
Important: The app is not notarized by Apple. After installation, remove the quarantine attribute:
xattr -cr /Applications/anylinuxfs-gui.appThen you can open the app normally.
The default Native sudo mode uses cached/native PAM authentication and falls back to the app's password dialog. This works for normal macOS administrator accounts.
Mount-option suggestions are scoped by filesystem. Btrfs compression/subvolume options are not offered for XFS, ext filesystems, or other known types; conflicting ro,rw options are rejected. Existing saved options are preserved and incompatible selections are shown as errors rather than silently removed. For ZFS, RO requests a read-only pool import; ordinary Linux mount options are not applied to datasets and are rejected when ZFS is known. Dataset properties and snapshots are managed through the CLI. For encrypted or unidentified filesystems, inner-filesystem option compatibility cannot yet be checked; enable Admin mode for detection where possible. Dirty or damaged filesystems may require recovery outside the GUI; it does not automatically force repairs or suggest disabling write barriers.
Filesystem behavior depends on the installed anylinuxfs CLI, VM kernel, and tools. Automated regression checks and opt-in disposable-image compatibility tests are documented in tests/README.md; a supported type is not a guarantee that every filesystem feature has been tested.
Btrfs partitions have a Btrfs subvolume selector. Choose the filesystem default, the top-level filesystem (ID 5), or click Discover subvolumes to list nested subvolumes and snapshots. Discovery requires an anylinuxfs CLI supporting vm exec and btrfs-progs in its Linux VM.
For an unmounted drive, discovery temporarily mounts the top level with ro,nologreplay,subvolid=5, reads the metadata, and unmounts it again. This uses the normal CLI mount flow and may request administrator approval. Encrypted filesystems use the existing passphrase/key-file dialog. If the inner filesystem is not yet known, enable + → Btrfs inside encrypted volume (show subvolumes). For an already-mounted Btrfs drive, discovery reads metadata without unmounting or changing the current mount; unmount it before selecting a different subvolume.
Selections are remembered per filesystem UUID (device path when unavailable) and use subvolid=, so paths with spaces or special characters work without typing mount options. Read-only subvolumes are marked, snapshots are identified by their parent UUID, and selecting a read-only subvolume enables RO. The filesystem's on-disk default is never changed. You can also enter subvol=@, subvol=@home, or subvolid=256 in + mount options. Only one subvolume per device can be mounted at a time in the current GUI; discovery results are refreshed on demand rather than persisted. Subvolume creation/deletion and filesystem maintenance are not included.
For managed Macs where an endpoint privilege manager requires an interactive terminal, open Preferences → Administrator authentication and select Interactive Terminal (managed Macs). Admin scans and mount operations then open an owner-only temporary .command file in Terminal. Complete the organization's approval or justification prompt there. LUKS and BitLocker secrets are requested directly by anylinuxfs in Terminal; they are not placed in the generated command file or its environment.
In the unlock dialog, select Key file → Browse… to use a local encryption key file instead of a passphrase. Only its path is passed to anylinuxfs; the GUI does not read or save the key contents or remember the selected path. In Interactive Terminal mode, key-file mounts still request administrator approval in Terminal. For encrypted ZFS pools or volumes whose encryption was not detected during scanning, open the partition's + mount options and enable Unlock with passphrase or key file before mounting. Key-file formats and filesystem support are handled by the installed anylinuxfs CLI.
Interactive mount commands use macOS script -q /dev/null as a bidirectional pseudo-terminal relay and are not piped through an output-capture process. Terminal echo is disabled before the command and restored by a cleanup trap. This is required for endpoint privilege managers that place an elevated child on another pseudo-terminal, and prevents encryption secrets from being echoed or written to a handoff transcript. Output capture remains enabled only for non-secret discovery commands such as list.
Interactive Terminal mode never opens a window for automatic background refreshes. With Admin mode enabled, click Refresh when disks are connected or removed. A pending mount can be cancelled from the GUI; the app terminates its Terminal handoff and requests device-specific cleanup. This mode does not bypass organizational policy: the privilege manager can still approve or deny each command.
The Rust backend owns and persists the elevation setting. It cannot be changed while a privileged operation is active, so the authentication and cancellation behavior remain stable until that operation finishes.
- macOS (Apple Silicon)
- anylinuxfs CLI (installed automatically via Homebrew)
npm install
npm run tauri buildThe built app will be at src-tauri/target/release/bundle/macos/anylinuxfs-gui.app
Logo designed by Junaid Iqbal.
GPL-3.0 - see LICENSE
