README.md

August 1, 2026 ยท View on GitHub

anylinuxfs GUI

A macOS GUI application for anylinuxfs - mount Linux filesystems (ext4, btrfs, XFS, etc.) on macOS.

Features

  • 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 - Support for LUKS and BitLocker encrypted volumes
  • 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

Installation

brew install fenio/tap/anylinuxfs-gui

This will automatically install the anylinuxfs CLI dependency.

If you get "damaged" or Gatekeeper warnings, run:

xattr -cr /Applications/anylinuxfs-gui.app

Manual

Download 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.app

Then you can open the app normally.

Administrator authentication

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.

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.

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.

Screenshots

Disks Shell Images Packages Actions Logs Settings

Requirements

  • macOS (Apple Silicon)
  • anylinuxfs CLI (installed automatically via Homebrew)

Building from Source

Prerequisites

Build

npm install
npm run tauri build

The built app will be at src-tauri/target/release/bundle/macos/anylinuxfs-gui.app

Credits

Logo designed by Junaid Iqbal.

License

GPL-3.0 - see LICENSE