Skip to content
Β 
Β 

Latest commit

Β 

History

615 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🌊 Flux

Rust GTK4 License

Flux is the fastest modern GUI file manager on Linux. It combines a minimalist, high-performance architecture with the sleek aesthetic of Libadwaita, delivering a native desktop experience with zero compromise on speed.

flux-screenshot

Why Flux?

#CPU: AMD Ryzen 5 5600X (6 Cores, 12 Threads @ 3.7GHz Base / 4.6GHz Boost)
#Methodology: High-precision time.perf_counter() differential, IPC event stream.

~ ❯❯❯ python measure_app_speed.py flux-fm
Startup Time: 113.18 ms    # 18-run mean (range: 110.73 - 117.08 ms, uncached)

# --- GUI File Managers ---
~ ❯❯❯ python measure_app_speed.py pcmanfm
Startup Time: 134.43 ms    # warm: 132.32 ms
~ ❯❯❯ python measure_app_speed.py spacefm
Startup Time: 169.31 ms    # warm: 169.15 ms
~ ❯❯❯ python measure_app_speed.py thunar
Startup Time: 289.60 ms    # warm: 182.37 ms
~ ❯❯❯ python measure_app_speed.py nautilus
Startup Time: 742.84 ms    # warm: 449.54 ms

# --- Terminal Emulators (Performance Baseline) ---
~ ❯❯❯ python measure_app_speed.py kitty
Startup Time: 107.45 ms    # warm: 107.29 ms
~ ❯❯❯ python measure_app_speed.py alacritty
Startup Time: 107.44 ms    # warm: 71.08 ms
  • Unrivaled Cold Launch: The fastest modern GUI file manager on Linux-outperforming traditional lightweight C benchmarks like PCManFM and Thunar while launching up faster than mainstream alternatives, with zero background pre-warming daemons.
  • Asynchronous Heart: Driven by a non-blocking Tokio and Rayon pipeline, chunked directory loading and background thumbnail workers ensure the UI thread never stutters or drops frames.
  • Zero Clutter: A sleek, native Libadwaita interface with a dynamic header and adaptable grid/list views that prioritize your files over bulky window chrome.
  • Shortcut First: Built from the ground up for keyboard-centric workflows, featuring vim-like speed, editable breadcrumb navigation, and an embedded VTE terminal that syncs directories on the fly.

Features

Navigation

  • Autoplay video previews: automatically plays a loop preview when a single video file is selected.
  • Dual view modes: responsive grid cards and compact list view
  • Breadcrumb navigation supporting local paths, /archive:// virtual roots, and network URIs
  • Forward/backward history (Alt+Left, Alt+Right, Backspace, mouse side buttons)
  • Automatic UI sync on filesystem changes via GIO directory monitors
  • Configurable sorting by Name, Date, Size, or Type with Folders First toggle

Search & Filtering

Instant filename filter - type to filter the current directory live.

Size filter - mathematical operators directly in the search bar:

Pattern Matches
>10MB Files larger than 10 MB
<500KB Files smaller than 500 KB
10MB..50MB Files between 10 MB and 50 MB
>1GB video Size + name combined

Supported units: B, KB, MB, GB, TB.

Deep content search - prefix with : to search inside file bodies recursively:

  • :term - search all files
  • :.rs:term - scope to an extension
  • :.rs,py:term - multiple extensions

Session glob / MIME filter - filter the current directory by pattern or type:

  • *.png, *.rs - extension globs
  • image/*, video/*, audio/* - built-in category shorthands
  • application/zip, image/png - any system MIME type (resolved via /usr/share/mime/globs)

Advanced Search Dialog (F12) - modal combining name, content, extension, date range, size constraints, and recursion depth toggles.

Tag search - FreeDesktop user.xdg.tags xattr system with SQLite indexing. Use #tagname or :tag:name to filter globally, with a dedicated tag navigator.

Quick List / Triage Panel

Temporary pinned directory panel for fast multi-directory cycling:

  • Insert - pin current path
  • Tab / Ctrl+PageDown / Ctrl+PageUp - cycle entries
  • Ctrl+End - clear

File Operations

  • Background task queue with speed, elapsed time, and ETA
  • Conflict resolution dialog with auto-rename, Replace All, Skip All policies
  • Undo/Redo (Ctrl+Z / Ctrl+Shift+Z) for renames, moves, and trash
  • Clipboard: file lists, text-to-file, HTML, and image-to-file buffers
  • Protected system path guards preventing accidental deletion of root/OS paths

Context Menus & Custom Actions

  • Primary menu - right-click
  • Secondary MIME-matched menu - Ctrl+Right-Click, matched per file type
  • Visual Menu Editor (F9) - reorder, add, and configure DSL action rules without touching config files

Custom Icons

  • Assign any image (.png, .jpg, .webp, .svg) or symbolic theme icon to files and folders (F3)
  • Reset to system default (Ctrl+F3)
  • Associations are re-keyed automatically on rename, move, and drag-and-drop

Integrated Terminal (F4)

  • Embedded terminal pane directly below the file grid
  • OSC 7 sync - cd in the terminal automatically navigates the file manager
  • Auto-adapts colors to the active Libadwaita theme
  • Idle detection via TIOCGPGRP before directory respawns

Properties & Inspection

  • File identity: symlink targets, extended attributes, inodes, device IDs
  • Security: Shannon entropy, SHA-256 hash, ELF architecture/endianness
  • Media: image dimensions, audio/video duration via ffprobe, line/word/TODO counts
  • Git: commit history for files under version control
  • Default app handler - view and reassign MIME type associations

πŸ“¦ Archive Browsing (/archive://)

Browse archive contents as a virtual filesystem without extraction.

Format Backend Password
.zip zip (deflate, bzip2, zstd, aes) Yes
.7z sevenz-rust (AES256) Yes
.rar unar / unrar Yes
.tar, .tar.gz, .tgz tar + flate2 No
.tar.bz2, .tbz2 tar + bzip2 No
.tar.xz, .txz tar + xz2 No
.tar.zst, .tzst tar + zstd No
.tar.lz4 tar + lz4_flex No
.iso ISO 9660 reader No
.deb ar + tar No
.gz, .bz2, .xz, .zst, .lz4 (standalone) Streaming decoders No

πŸ”’ LUKS Encrypted Volumes

  • Magic-byte detection of LUKS containers and partition images
  • Integrated passphrase dialog, keyfile-based unlock via udisksctl
  • Eject automatically locks the dm-crypt device and detaches the loop

Requires cryptsetup and udisks2.


🌐 Network Browsing

Integrates with GVFS for remote filesystem access. Connect via Ctrl+Shift+L.

Protocol Scheme
SMB/Samba smb://
SFTP sftp://
FTP / FTPS ftp:// ftps://
WebDAV / HTTPS dav:// davs://
NFS nfs://
AFP afp://
MTP mtp://
Google Drive google-drive://

Active mounts appear in the sidebar with eject controls. Network bookmarks persist in config.toml.

Requires gvfs and relevant backend packages (e.g. gvfs-smb, gvfs-sftp).


⌨️ Keyboard Shortcuts

Key Action
F1 Keyboard shortcut reference
F2 / Ctrl+I Inline rename
F3 Set custom icon
Ctrl+F3 Reset custom icon
F4 Toggle integrated terminal
F5 Refresh current directory
F9 Visual menu editor
F10 Open preferences
F12 Advanced search dialog
Ctrl+F Search / filter bar
:term / :.ext:term Start content search
Esc Cancel content search
Ctrl+H Toggle hidden files
Ctrl+L Go to location
Ctrl+Shift+L Connect to server
Ctrl+T Edit tags for selection
Ctrl+Shift+T Open tag navigator
Ctrl+S Cycle sort criteria
Ctrl+Shift+S Toggle sort order
Shift+S Toggle folders first
Ctrl+A Select all
Ctrl+C / X / V Copy / Cut / Paste
Ctrl+Shift+C Copy absolute path of selected items
Ctrl+Shift+V Create symbolic link from clipboard paths
Ctrl+Alt+Shift+V Create hard link from clipboard paths
Delete Move to trash
Ctrl+Z Undo
Ctrl+Shift+Z / Ctrl+Y Redo
Backspace / Alt+Left Go back in history
Alt+Right Go forward in history
Enter Open selected file or directory
/ Navigate to root directory
Insert Pin to quick list
Tab Next quick list entry
Ctrl+PageUp/Down Previous / next quick list entry
Ctrl+End Clear quick list
Ctrl+Insert Pin current dir to sidebar permanently
Ctrl+Scroll Resize grid items
Ctrl+Middle Click Open folder in new window
Ctrl+Shift+F7 Open memory debug profiler

Testing

  • 350+ tests covering core services, UI logic, utilities, and security invariants
  • Fuzzing via libFuzzer on all parsers (archive URIs, glob patterns, search queries, media probes)
sh tests.sh

# Fuzzing (requires nightly Rust)
cd fuzz/fuzz_targets
python fuzz.py --level default                       # 10k iterations
python fuzz.py --target fuzz_glob --level medium     # 50k
# Levels: default (10k), medium (50k), high (200k), extreme (1M)

Extra Themes

git clone https://github.com/killown/flux-themes.git
mkdir -p ~/.local/share/flux/themes
cp flux-themes/themes/* ~/.local/share/flux/themes/

Installation

Ubuntu / Debian

sudo apt install libadwaita-1-dev libgtk-4-dev libpango1.0-dev libgraphene-1.0-dev \
  libcairo2-dev libgdk-pixbuf-2.0-dev libpoppler-glib-dev ffmpeg imagemagick icoutils

Arch Linux

sudo pacman --needed -S libadwaita gtk4 glib2 pango graphene cairo gdk-pixbuf2 poppler-glib ffmpeg imagemagick icoutils

Fedora

sudo dnf install libadwaita-devel gtk4-devel pango-devel graphene-devel cairo-devel \
  gdk-pixbuf2-devel poppler-glib-devel ffmpeg ImageMagick icoutils
git clone https://github.com/killown/flux.git
cd flux
cargo build --release

Tech Stack

  • Rust 1.75+ - memory safe, zero-cost abstractions
  • Relm4 + GTK4 - native GNOME experience
  • Tokio - non-blocking async I/O
  • SQLite (rusqlite) - tag indexing and persistent state

Contributing

Pull requests are welcome. For major changes please open an issue first. Run the test suite before submitting.

License

GPLv3

About

A blazingly fast, multi-threaded Linux file manager built with Rust and GTK4/Libadwaita. Features a reactive architecture via Relm4, utilizing Rayon for parallel file processing and Tokio for async I/O.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages