XeFM can run as a native desktop application on Windows and macOS with GPU acceleration, providing a modern windowed experience while maintaining the same powerful keyboard-driven interface you know from terminal mode.
Install the desktop package. That is the supported way to run XeFM as a
desktop app: a native .app (macOS) or a self-contained XeFM.exe folder
(Windows), with Python bundled in — no Python install of your own required. On
Windows, install from the
Microsoft Store; the macOS
DMG (and a portable Windows zip) are published on the
latest GitHub release;
the next section walks through it.
Then launch it the way you launch any other application — Launchpad, Spotlight or the Dock on macOS; the Start menu or a pinned taskbar shortcut on Windows.
xefm --backend gui?The --backend gui flag opens the same window from a terminal. It exists
because it is how XeFM is developed — it is a poor way to actually use
XeFM, for three reasons:
.app has its own bundle identity, so it asks for, and keeps,
its own permissions.--backend gui stays the right tool when you are working on XeFM itself from a
source checkout, where rebuilding the app bundle on every edit would be far too
slow:
python3 -m xefm --backend gui # from a checkout
make run-gui # the same thing, through .venv
| Platform | Install | Signed? |
|---|---|---|
| Windows 10/11 x64 | Microsoft Store (recommended) | Yes — signed by Microsoft |
| Windows 10/11 x64 | XeFM-<version>-win64.zip (portable alternative) |
No — needs unblocking once |
| macOS 10.13+ (Intel & Apple Silicon) | XeFM-<version>-macos.dmg |
Yes — Apple Developer ID |
Every stable release attaches the ready-to-run DMG and zip; the
latest-release link always
resolves to the newest stable release. You can also link straight to a specific
release, e.g. https://github.com/crftwr/xefm/releases/tag/v1.0.1.
Install from the Store page, or from a shell:
winget install --id 9PK2X44W810V --source msstore
The Store package is signed by Microsoft during certification, so there is no
SmartScreen prompt; it appears in the Start menu, updates automatically through
the Store, and uninstalls from Settings → Apps. Settings live in
%USERPROFILE%\.xefm\, shared with every other install of XeFM, and survive an
uninstall unless you delete that folder yourself.
XeFM-<version>-macos.dmg from the release page.The app is signed with the author’s Apple Developer ID, so Gatekeeper opens it normally. If macOS ever refuses with “XeFM cannot be opened because the developer cannot be verified” — which happens when the quarantine attribute survives an unusual download path — right-click the app in Applications and choose Open, then confirm. That whitelists it permanently.
To remove it: drag XeFM.app to the Trash. Settings live in ~/.xefm/ and can
be deleted separately.
The zip is the alternative to the Store install: a portable folder, not an
installer. Unzip it and run XeFM.exe — there is no MSI, nothing is written to
the registry, and no admin rights are needed. Reach for it on machines without
Store access, or when you want a copy that runs from a USB stick or a network
share.
Unlike the Store package, which Microsoft signs during certification, the zip on GitHub Releases is unsigned — which is what causes the warning handled below.
Unblock the zip first. Right-click the downloaded
XeFM-<version>-win64.zip → Properties → tick Unblock at the bottom
of the General tab → OK.
Windows tags internet downloads with a Mark of the Web, and extracting a tagged zip copies that tag onto every file inside. Unblocking the zip before extracting clears all of them in one step. From PowerShell, the equivalent is:
Unblock-File .\XeFM-<version>-win64.zip
XeFM folder somewhere convenient:
%LOCALAPPDATA%\Programs\XeFM — per-user, no elevation requiredC:\Program Files\XeFM — all users, needs administrator rightsRun XeFM.exe. If step 1 was skipped, SmartScreen shows “Windows
protected your PC”. Click More info, then Run anyway. The prompt
appears once per downloaded copy, not on every launch.
XeFM.exe → Pin to Start / Create shortcut for
quicker access.To remove it: delete the extracted folder (and %USERPROFILE%\.xefm\ if you also
want the settings gone).
Why not a downloadable .msix? The repository can build one
(make windows-msix), but an MSIX must be signed before Windows will install
it, and the unsigned build exists only as a Microsoft Store submission
artifact — Microsoft signs it during certification. So a downloadable .msix
would simply refuse to install; outside the Store, the portable zip is the
installable form.
Prefer not to run an unsigned binary? Install from the
Microsoft Store — Store
packages are signed by Microsoft — or install from PyPI (pipx install xefm)
and use XeFM in terminal mode.
When you launch XeFM in desktop mode:
The installed desktop package always starts in desktop mode — its launcher selects the native backend, so there is nothing to pass and nothing to configure.
The --backend flag only matters when you run XeFM from a Python install or a
source checkout. There it defaults to terminal mode, and there is no
configuration-file key to change that; desktop mode is --backend gui (aliases
macos / windows), with the caveats in
Why not xefm --backend gui? above.
Font settings live in ~/.xefm/config.py (they apply to desktop/GUI mode only):
MONO_FONT_NAME = 'Menlo' # monospaced face for aligned columns (None = bundled default)
UI_FONT_NAME = None # proportional face for names/labels (None = bundled/OS default)
FONT_SIZE = 12 # point size applied to both faces (8–72)
The window’s size and position are remembered automatically across runs (via the native macOS window autosave); there are no window-geometry config keys.
Common monospace fonts on macOS:
Built-in Fonts:
Menlo (default) - Apple’s default monospace font, excellent readabilityMonaco - Classic Mac monospace font, slightly more compactCourier New - Traditional monospace font, widely compatibleOptional Fonts (if installed):
SF Mono - San Francisco Mono, modern Apple fontFira Code - Popular programming font with ligaturesJetBrains Mono - Modern programming font, excellent for codeSource Code Pro - Adobe’s programming fontHack - Designed specifically for source codeTo check installed fonts, open Font Book.app and filter by “Fixed Width” (monospace).
Open XeFM from Launchpad, Spotlight or the Dock (macOS), or from the Start menu / a pinned shortcut (Windows). The installed package needs no flags.
From a source checkout, during development, --backend picks the renderer:
# Terminal mode (the default)
python3 -m xefm
# Desktop mode — development only, see "Why not xefm --backend gui?"
python3 -m xefm --backend gui
Terminal mode comes from the PyPI install (pipx install xefm) or a source
checkout — the desktop package is a self-contained application and does not put
an xefm command on your PATH, so the two installs coexist rather than replace
each other:
xefm # terminal mode
xefm --backend curses # the same thing, stated explicitly
All your settings, favorites, and history live in ~/.xefm/ and are shared
between the desktop app and terminal mode.
All keyboard shortcuts work identically in desktop mode:
See the User Guide for the complete keyboard reference.
Resizing:
Full-Screen:
Multiple Windows:
Problem: Desktop mode doesn’t launch or falls back to terminal mode.
Solutions:
uname -s # macOS shows "Darwin"
python3 -c "import objc; print('PyObjC OK')"
python3 --version # Should be 3.10 or higher
Problem: Desktop mode starts but no window appears.
Solutions:
python3 -m xefm --backend curses
Problem: Error message about font not being available.
Solutions:
MONO_FONT_NAME = 'Menlo' # Correct
MONO_FONT_NAME = 'menlo' # Wrong - case matters
Font Book.appMONO_FONT_NAME = 'Menlo' # Always available on macOS
# Comment out or remove this line
# MONO_FONT_NAME = 'CustomFont'
Problem: Desktop mode feels slow or laggy.
Solutions:
Make the window smaller by resizing it (the size is remembered for next time).
MONO_FONT_NAME = 'Monaco' # Simpler font
Close other applications to free resources
Problem: Colors appear different from terminal mode.
Explanation: Desktop mode uses true RGB colors, which may look different from terminal mode’s limited color palette. This is expected and provides more accurate colors.
Solutions:
T keyProblem: Text appears blurry or misaligned.
Solutions:
FONT_SIZE = 14 # Try different sizes
MONO_FONT_NAME = 'Monaco' # Try different fonts
Check display scaling settings in macOS System Preferences
| Feature | Terminal Mode | Desktop Mode |
|---|---|---|
| Platform | All (macOS, Linux, Windows) | Windows and macOS |
| Dependencies | Python + curses | Python (+ PyObjC on macOS, installed for you) |
| Window | Terminal window | Native desktop window |
| Rendering | Terminal-based | GPU-accelerated |
| Performance | Good | Excellent (60 FPS) |
| Colors | Terminal palette | True RGB |
| Fonts | Terminal font | Customizable |
| Resizing | Terminal resize | Native window resize |
| Full-Screen | Terminal full-screen | Native full-screen |
| Keyboard | Identical | Identical |
| Features | All features | All features |
Recommended for:
Recommended for:
Flexible Approach:
Choosing per run: open the installed XeFM app for desktop mode, and run
xefm in a terminal for terminal mode. The two coexist and share ~/.xefm/, so
there is nothing to switch — pick whichever fits the task.
Installing XeFM.app is what makes the desktop integration work — all of it
follows from the app bundle, and none of it needs a launcher script or an
Automator wrapper:
Older versions of this guide suggested wrapping python3 -m xefm --backend gui
in a shell script or an Automator application to get a Dock and Spotlight entry.
Don’t — that is exactly the setup that produces the generic Python icon and
misattributed permission prompts described in
Why not xefm --backend gui?. Install the .app
instead.
The packaged apps take no command-line arguments — their launchers start XeFM
with the native backend and nothing else, so --left / --right are available
only when running from the command line.
You rarely need them there: each pane’s directory is saved to ~/.xefm/state.db
on exit and restored on the next launch, so the desktop app reopens where you
left off. For jumping elsewhere, use the favorites dialog (J).
If you encounter issues not covered here:
Desktop mode provides a modern, native macOS experience while maintaining XeFM’s powerful keyboard-driven interface. With GPU acceleration, true RGB colors, and customizable fonts, it offers an enhanced experience for macOS users while remaining fully compatible with terminal mode.
Key benefits:
Try desktop mode today and experience XeFM in a whole new way!