Thanks to visit codestin.com
Credit goes to github.com

Skip to content
 
 

Repository files navigation

Strata logo

Strata

Navigate every layer. A fast, keyboard-first file manager for modern Linux desktops.

CI Latest release License: MIT Linux

Strata browsing files and showing settings, themes, Icons view, and folder creation

The animation respects reduced-motion preferences. View the static preview.

Strata combines spatial Miller-column navigation with familiar Icons and List views, instant fuzzy filename search, rich previews, and native Linux desktop integration. It is designed for Omarchy and works on compatible GTK4 Linux environments.

Contents

Features

  • Three browser modes: navigable Columns, an Icons grid, and a sortable List table.
  • Keyboard-first control: directional-key movement, navigation history, location entry, pane filtering, fuzzy search, file operations, and quick previews. An optional footer and F1 shortcut reference help you learn each mode; the footer also highlights when files are available to paste. See keyboard navigation and paste destinations.
  • Fast recursive search: press Ctrl+K to find files and directories by name or path while the tree is still being indexed. Global search covers Home and all mounted local drives, regardless of the current folder. Hover the search field to see the included locations. The dialog warns when results are incomplete; folder-scoped filtering/search remains separate. URI-native remote shares are not yet included.
  • Rich previews and thumbnails: bounded previews for text, source code, images, camera RAW, PDF, audio, and video, with native parser-backed formats isolated from the application.
  • Responsive filesystem work: cancellable directory loading, bounded streaming, incremental monitoring, stable selection, and virtualized large directories.
  • Everyday file operations: create folders, rename, cut, copy, paste, trash, permanent delete, sorting, hidden files, pins, and history.
  • Remote locations: browse GIO/GVfs locations such as authenticated SMB shares from the location field.
  • Adaptive appearance: compact or airy density, six bundled themes, custom themes, and live Omarchy Quattro theme following.
  • Updates in the app: opt-in automatic checks, release notes, verified downloads, and in-place installation for release binaries.
  • System file chooser: opt in through Settings → General → System file chooser, the installer, or strata --install-portal; see portal setup.

Installation

Arch Linux and Omarchy are the primary supported environments. Current binaries require glibc 2.39 or newer and the runtime libraries listed below.

Interactive installation

The interactive installer detects the Linux architecture, glibc version, Arch Linux, and Omarchy 3 or 4. It installs the latest verified stable release and offers optional desktop-menu, default-folder-handler, "Open file location", system file chooser, SMB, broader image/RAW, and Omarchy keybind integration:

curl -fsSL https://raw.githubusercontent.com/lgse/strata/main/install.sh | bash

The installer shows every privileged package operation before asking to run it. It verifies both the published SHA-256 digest and GitHub Actions provenance before installing anything from the release archive. The binary is installed per-user at ~/.local/bin/strata.

For an unattended Arch or Omarchy installation, pass --non-interactive. This installs required dependencies and the binary without prompting; optional integrations remain disabled unless explicitly selected:

curl -fsSL https://raw.githubusercontent.com/lgse/strata/main/install.sh \
  | bash -s -- --non-interactive \
      --with-smb \
      --with-raw \
      --with-desktop-entry \
      --with-folder-association \
      --with-omarchy-keybinds

Each --with-* flag implies --non-interactive, and folder association implies the desktop entry and --with-file-manager. Use --with-file-manager by itself to enable only "Open file location" integration. File chooser replacement is separate: use --with-file-chooser to opt in, or --without-file-chooser to keep your current chooser and dismiss the one-time in-app offer. Neither folder association nor an unattended install enables the chooser automatically. Non-interactive package installation requires passwordless sudo or cached credentials. Run ./install.sh --help for the full option list.

AI-assisted installation

Use this option to have a coding agent install and verify the latest release archive.

Give this prompt to a coding agent with terminal access:

Install the latest stable Strata release from https://github.com/lgse/strata safely.

Before changing anything:
1. Confirm this is a glibc-based Linux system with a graphical GTK4 environment.
2. Detect whether the machine is x86_64 or aarch64 and select only the matching
   *-unknown-linux-gnu archive from the canonical lgse/strata GitHub release.
3. Show me the runtime packages you need and ask before using sudo or changing
   my default file-manager association.

Then:
- Install the required GTK4, GtkSourceView 5, Poppler GLib, Fontconfig, Bubblewrap,
  FFmpeg/GStreamer, and desktop-integration runtime dependencies using the system
  package manager. Add gvfs-smb only if I want SMB support.
- Download the archive and its matching .sha256 file from the latest GitHub release.
- Verify the checksum with sha256sum --check. If GitHub CLI is installed and
  authenticated, also verify GitHub Actions provenance with
  `gh attestation verify <archive> --repo lgse/strata`. Stop if either attempted
  verification fails; never install a binary with an invalid checksum.
- Extract it and install `strata` to ~/.local/bin/strata without overwriting an
  unrelated file. Ensure ~/.local/bin is on PATH.
- Ask whether I want a per-user desktop entry and inode/directory association;
  if yes, install the archive's io.github.lgse.Strata.desktop and io.github.lgse.Strata.svg
  under ~/.local/share, pointing Exec at the installed binary, then refresh the
  desktop database and icon cache.
- Separately ask whether Strata should handle "Open file location" requests. If
  yes, verify no other per-user service provides org.freedesktop.FileManager1,
  then install the archive's io.github.lgse.Strata.FileManager1.service under
  ~/.local/share/dbus-1/services with Exec pointing at the installed binary.
- Launch `strata`, report its installed version/source release, and verify the
  desktop association if one was requested. Do not weaken the preview sandbox.

Manual installation

Install the release archive directly if you prefer to perform each step yourself.

1. Check the architecture and install dependencies

case "$(uname -m)" in
  x86_64)  target=x86_64-unknown-linux-gnu ;;
  aarch64) target=aarch64-unknown-linux-gnu ;;
  *) echo "Strata has no prebuilt release for $(uname -m)" >&2; exit 1 ;;
esac
printf 'Use the %s release archive.\n' "$target"
getconf GNU_LIBC_VERSION   # must report glibc 2.39 or newer

On Arch Linux or Omarchy:

sudo pacman -S --needed bubblewrap ffmpeg ffmpegthumbnailer fontconfig \
  gstreamer gst-libav gst-plugins-base gst-plugins-good gtk4 gtksourceview5 gvfs poppler-glib
# Optional SMB and broader camera RAW support:
sudo pacman -S --needed gvfs-smb imagemagick libraw dcraw

GTK 4.12 or newer and glibc 2.39 or newer are required. Other glibc-based distributions may work when they provide equivalent runtime libraries, but their package names and binary compatibility vary. Systems with an older glibc must build Strata from source.

Device discovery requires the GVfs UDisks2 volume monitor (gvfs on Arch and Fedora; gvfs-daemons on Debian/Ubuntu). Without that backend, removable drives may be absent from Devices. SMB support remains optional.

2. Download and verify

From the latest release, download the .tar.gz matching $target and its identically named .sha256 file over HTTPS. Then verify its digest:

cd ~/Downloads
archive="strata-<version>-${target}.tar.gz"
sha256sum --check "${archive}.sha256"

If GitHub CLI is installed and authenticated, you can additionally verify the archive's signed GitHub Actions provenance before extracting it:

gh attestation verify "$archive" --repo lgse/strata

Every verification you run must succeed. Extract the archive, install the binary, and confirm it starts:

tar -xzf "$archive"
install -Dm755 "${archive%.tar.gz}/strata" "$HOME/.local/bin/strata"
command -v strata
strata

If command -v fails, add $HOME/.local/bin to your shell's PATH. Every archive contains SOURCE_COMMIT, identifying the exact source revision used by GitHub Actions.

Debug a release crash

Download the matching strata-<version>-<target>.debug asset from the same release and place it beside the installed strata binary, keeping its filename unchanged. Then run coredumpctl debug strata; GDB will load its Rust function names and source lines.

3. Update or uninstall

For a manual installation, use Settings → Updates for verified in-app updates, or repeat the download, verification, and install steps for a newer release. An in-app update also refreshes an already installed desktop entry and application icon from the new archive; it never creates desktop metadata that was not installed before. If the user opted into Strata's system file chooser, the update restarts the portal frontend so subsequent dialogs use the newly installed build. Package-managed installations are updated only by their system package manager. To remove a per-user installation:

rm -f ~/.local/bin/strata \
  ~/.local/share/applications/io.github.lgse.Strata.desktop \
  ~/.local/share/dbus-1/services/io.github.lgse.Strata.FileManager1.service \
  ~/.local/share/icons/hicolor/scalable/apps/io.github.lgse.Strata.svg
update-desktop-database ~/.local/share/applications 2>/dev/null || true
gtk-update-icon-cache -qtf ~/.local/share/icons/hicolor 2>/dev/null || true

User preferences and custom themes remain under the XDG configuration directories so an uninstall does not destroy personal settings.

Usage and desktop integration

Launch Strata with an optional local directory:

strata                 # home directory
strata ~/Documents     # a specific directory
strata --version       # print the installed version

Useful shortcuts include Ctrl+K for recursive search, Ctrl+L for a path or URI, Ctrl+F to filter the current pane, Ctrl+Z to undo the latest move or move to Trash, Space for preview, F2 to rename, and Alt+arrow keys for history and parent navigation.

Desktop entry

Every release archive ships io.github.lgse.Strata.desktop and the Strata application icon io.github.lgse.Strata.svg. Install both to give Strata a per-user launcher with its own icon in launchers, docks, task switchers, and window overviews, and optionally make Strata the default directory handler:

cd ~/Downloads/"${archive%.tar.gz}"
install -Dm644 io.github.lgse.Strata.svg \
  ~/.local/share/icons/hicolor/scalable/apps/io.github.lgse.Strata.svg
install -d ~/.local/share/applications
sed "s|^Exec=strata |Exec=$HOME/.local/bin/strata |" io.github.lgse.Strata.desktop \
  > ~/.local/share/applications/io.github.lgse.Strata.desktop
update-desktop-database ~/.local/share/applications
gtk-update-icon-cache -qtf ~/.local/share/icons/hicolor 2>/dev/null || true
xdg-mime default io.github.lgse.Strata.desktop inode/directory
xdg-mime query default inode/directory

The final command should print io.github.lgse.Strata.desktop. The desktop entry's filename matches the io.github.lgse.Strata application ID that Strata's windows report, so desktop shells match a running window to this entry and draw its Icon value. Log out and back in if a shell caches launcher icons.

When building from source, mise run install-local installs the binary, icon, and desktop entry in the same locations, and mise run uninstall-local removes them.

"Open file location" from other applications

Browsers and GTK/GNOME applications reveal a file by calling the org.freedesktop.FileManager1 D-Bus interface instead of consulting the inode/directory association. The interactive installer offers this separately; for unattended installation, pass --with-file-manager. Folder association enables it automatically.

For a source installation, enable Strata as the per-user activatable provider explicitly:

mise run install-file-manager

For an AUR package, copy its inactive service template into your per-user service directory:

install -Dm644 /usr/share/strata/io.github.lgse.Strata.FileManager1.service \
  ~/.local/share/dbus-1/services/io.github.lgse.Strata.FileManager1.service

For a release archive installation, install the included service manually instead:

cd ~/Downloads/"${archive%.tar.gz}"
install -d ~/.local/share/dbus-1/services
sed "s|^Exec=/usr/bin/strata |Exec=$HOME/.local/bin/strata |" \
  io.github.lgse.Strata.FileManager1.service \
  > ~/.local/share/dbus-1/services/io.github.lgse.Strata.FileManager1.service

A per-user provider takes precedence over system providers shipped by other file managers. Before enabling Strata manually, remove any other per-user service whose Name is org.freedesktop.FileManager1; two providers for the same name in one service directory are chosen arbitrarily. If another file manager already owns the bus name, exit it before testing. Use mise run uninstall-file-manager for a source installation, or remove the per-user service file, to disable Strata again.

Strata then answers ShowFolders, ShowItems, and ShowItemProperties, opening the directory that holds the named items with those items selected:

busctl --user call org.freedesktop.FileManager1 /org/freedesktop/FileManager1 \
  org.freedesktop.FileManager1 ShowItems ass 1 "file://$HOME/Downloads" ""

Make Strata the Omarchy file manager

The XDG association above handles folders opened by applications. On current Lua-based Omarchy releases, also override the stock Nautilus shortcuts in ~/.config/hypr/bindings.lua so Omarchy launches Strata directly.

First inspect the active bindings and back up your user configuration:

omarchy menu keybindings --print | grep -i "file manager"
cp ~/.config/hypr/bindings.lua ~/.config/hypr/bindings.lua.bak.$(date +%s)

Append these overrides to ~/.config/hypr/bindings.lua:

-- Use Strata instead of Nautilus for Omarchy's file-manager shortcuts.
hl.unbind("SUPER + SHIFT + F")
hl.unbind("SUPER + ALT + SHIFT + F")
o.bind("SUPER + SHIFT + F", "File manager", { launch = "strata" })
o.bind("SUPER + ALT + SHIFT + F", "File manager (cwd)",
  "uwsm-app -- strata \"$(omarchy-cmd-terminal-cwd)\"")

The stock shortcut is Super+Shift+F, not Ctrl+Shift+F. To support the Ctrl chord too, first confirm that it is not assigned to another action, then optionally append:

o.bind("CTRL + SHIFT + F", "File manager", { launch = "strata" })

Apply and validate the configuration:

hyprctl reload
hyprctl configerrors
omarchy menu keybindings --print | grep -i "file manager"

hyprctl configerrors should produce no errors. These user overrides survive Omarchy updates; do not edit files under /usr/share/omarchy/.

Network shares

Press Ctrl+L, enter an address such as smb://server/share, and press Enter. Strata uses GIO/GVfs and prompts for credentials when required. Install your distribution's SMB GVfs backend (gvfs-smb on Arch) to enable SMB browsing.

Theming

Open Settings → Appearance from the gear menu or with Ctrl+,. Theme changes apply immediately across the interface.

Use Search settings to filter options across pages and navigate to the closest match, including keywords such as “font size.” In compact windows, the magnifying-glass button opens the search field. Clear the query or press Esc in the field to restore all settings.

Strata Theme and appearance settings showing Omarchy following, six bundled themes, and the Add a theme option

Follow Omarchy Quattro

On Omarchy Quattro, turn on Follow Omarchy under Settings → Appearance. Strata maps the active Omarchy palette to its semantic colors, monitors the current theme, and updates live whenever Omarchy's theme changes.

This integration supports Omarchy Quattro only. The switch is hidden when Strata cannot find a valid Quattro current-theme state; legacy Omarchy theme layouts are not supported.

Bundled themes

Choose any included theme from Settings → Appearance: Azure Glow, Tokyo Night, Catppuccin, Everforest, Rosé Pine, or Omarchy Light. Selecting a bundled theme turns off Omarchy following and keeps that theme active across restarts.

Custom themes

Select Add a theme, enter a name, and choose the semantic colors for the background, surfaces, text, accent, danger, muted and highlighted elements, borders, and dimmed text. Strata previews edits live and saves completed themes under Your themes.

Custom themes are stored as shareable TOML files in ~/.config/strata/themes/. See Themes for the schema, file location, and Omarchy color mapping.

Release channels

Strata defaults to the Stable channel: only final tagged releases are ever offered, and a Stable install never receives, sees, or is notified about a prerelease.

To try upcoming changes early, choose a channel in Settings → Updates. Preview receives curated alpha, beta, and release-candidate builds but excludes nightlies. Nightly receives every recognised prerelease, including daily development builds. The update dialog and release notes always identify the exact build kind.

When a prerelease installation selects Stable, the Updates card immediately offers the newest stable release as the channel target—even when that requires a semantic downgrade—and labels the action Return to stable. Preview and Nightly selections use the same card for ordinary forward updates, so channel changes never create a separate competing rollback card.

See Releasing for the tag grammar these channels rely on and, for maintainers, how a release candidate is cut and promoted.

Under the hood

Why search stays fast

Strata walks and indexes the selected directory tree on a background thread, never on GTK's UI thread. Results appear progressively during that walk. Names and relative paths are normalized once as index entries are created, and each query maintains only the best 100 fuzzy-ranked matches instead of sending an unbounded result set to the interface.

Rapid keystrokes are coalesced to the newest query. During indexing, result publication is throttled to 50 ms intervals; the UI consumes those bounded updates on its own timed loop, keeping rendering aligned with responsive frame-sized work. Exact and contiguous matches, word/path boundaries, and names rank ahead of loose path subsequences.

The deliberate tradeoff: this is fast filename and path search, not file-content or metadata search.

How previews contain untrusted parsers

Files shown while browsing are untrusted. Image, camera RAW, PDF, thumbnail, and media parsing therefore runs out of process through Bubblewrap, not inside the main Strata process. Each short-lived helper receives namespace isolation, a minimal read-only runtime, exactly one canonicalized input file, private output and temporary directories, no network, and no capabilities. Memory, CPU/wall time, input, file, and parent-side output limits bound the work.

Only media helpers may receive allowlisted GPU render devices, and only for accelerated decoding; image, PDF, and thumbnail helpers receive no device mounts. Images are normalized to bounded PNG images. Media arrives incrementally as validated raw RGBA frames and fixed-format PCM: GTK presents textures and GStreamer outputs raw audio, without opening the original file or decoding a compressed clip. Four media sessions per process, bounded queues, and paused-worker cleanup limit concurrent work. Cancellation or timeout kills the process group and Bubblewrap PID namespace, tearing down descendants. Missing isolation, crashes, malformed output, timeouts, and permission failures all fail closed to a normal icon or Preview unavailable—Strata never silently retries an untrusted native parser without the sandbox.

Plain-text and source previews are different: they stay in process because they do not invoke a native format parser, and reads are capped at 1 MiB. See Preview sandbox for provider ordering, exact mounts, formats, and resource budgets.

Technical specifications

Area Details
Platform 64-bit Linux with glibc 2.39+; designed for Omarchy and Wayland. GTK may use another backend supplied by the host, but Wayland is the primary display stack.
Release architectures x86_64-unknown-linux-gnu and aarch64-unknown-linux-gnu
UI and runtime Rust 2024, GTK 4.12+, GIO/GLib, Cairo, GtkSourceView 5, Poppler GLib, GDK Pixbuf, GStreamer, and Fontconfig
Filesystems Native Linux paths (including non-UTF-8 names) and GIO/GVfs locations; remote protocol availability depends on installed GVfs backends
Preview boundary Bubblewrap is mandatory for native parser-backed previews; helpers have no network and fail closed. Plain text is read in process with a 1 MiB cap.
Optional preview tools ffmpegthumbnailer/ffmpeg for video; ImageMagick, classic dcraw, and LibRaw simple_dcraw expand camera RAW support
Hardware acceleration Media-only VA-API or Vulkan decoding with software fallback; GPU and codec support depend on host drivers
Scale targets Virtualized browser models and bounded asynchronous updates are tested with deterministic directories up to 100,000 entries
Packaging Dynamically linked release archive with SHA-256 digest, GitHub build-provenance attestation, and SOURCE_COMMIT

Development and documentation

Build requirements are the latest stable Rust toolchain, a C toolchain, pkg-config, GTK 4.12+, GtkSourceView 5, Poppler GLib, Fontconfig, and GStreamer 1.20+ (including its app/base development libraries). mise pins that toolchain locally (mise install). On Arch:

sudo pacman -S --needed base-devel bubblewrap ffmpeg ffmpegthumbnailer fontconfig \
  gstreamer gst-libav gst-plugins-base gst-plugins-good gtk4 gtksourceview5 gvfs poppler-glib
mise run start-dev        # rebuild and restart as files change
mise run dev              # build and launch the main app once
mise run chooser-dev      # build and open an isolated Save chooser with choices
mise run check            # format, compile, Clippy, tests, and policy checks

Start with CONTRIBUTING.md before opening a pull request. Deeper references:

Contributors

Avatars of Strata contributors linked to the contributors graph

This image is generated from GitHub contribution data so new contributors appear without a manual README update. Thank you to everyone who reports issues, improves the documentation, tests releases, and contributes code.

License

Strata is free software licensed under the MIT License. Bundled fonts, icons, and other third-party components retain their own notices in THIRD_PARTY_LICENSES.md.

About

A fast, keyboard-first file manager for Linux

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages