Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 67 additions & 11 deletions .github/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,32 +15,88 @@ Files is created and maintained by the [Files Community](https://github.com/file

This fork runs Files natively on Linux (Uno Platform, Skia, X11). The shell, Settings, file operations, trash, archives, clipboard and drag and drop, UDisks2 volumes and desktop integration are in place. See the [showcase](../docs/linux-port/SHOWCASE.md) for the full feature checklist and what is not working yet.

## Installing LinuxFiles
## Install

Packages are coming soon; until then, install from a local build:
[![Latest release](https://img.shields.io/github/v/release/MemerGamer/LinuxFiles?include_prereleases&filter=linux-v*&label=release)](https://github.com/MemerGamer/LinuxFiles/releases/tag/linux-v0.1.0-alpha1)

| Method | Status |
|---|---|
| AppImage | coming soon |
| Flatpak (`io.github.memergamer.LinuxFiles`) | coming soon |
| AUR `linuxfiles-bin` | coming soon |
| `scripts/linux/install-local.sh` | available now |
> [!NOTE]
> **0.1.0-alpha1 is the first public release and an alpha.** Expect rough edges and missing features, and keep backups of anything you care about. Please report problems in the [issue tracker](https://github.com/MemerGamer/LinuxFiles/issues).

Grab the assets from the [0.1.0-alpha1 release page](https://github.com/MemerGamer/LinuxFiles/releases/tag/linux-v0.1.0-alpha1). Requirements: x86_64 Linux with an X11 session or XWayland (Wayland desktops work through XWayland); the packages are self-contained, so no .NET install is needed.

### Arch Linux (AUR)

```sh
yay -S linuxfiles-bin # or: paru -S linuxfiles-bin
```

This is the only format that also installs the polkit helper for the optional [root actions](#root-actions).

### AppImage

```sh
curl -LO https://github.com/MemerGamer/LinuxFiles/releases/download/linux-v0.1.0-alpha1/Files-x86_64.AppImage
chmod +x Files-x86_64.AppImage
./Files-x86_64.AppImage
```

### Flatpak bundle

```sh
flatpak install --user Files-x86_64.flatpak
flatpak run io.github.memergamer.LinuxFiles
```

The bundle needs the `org.freedesktop.Platform//25.08` runtime; Flatpak offers to install it from Flathub.

### Tarball

```sh
tar xzf files-linux-x64.tar.gz
./linux-x64/Files # run it in place
```

To install it for your user (menu entry, icons, `files` launcher in `~/.local`), use the script from a clone of this repository, which also supplies the desktop entry and icons:

```sh
git clone https://github.com/MemerGamer/LinuxFiles.git
cd LinuxFiles
scripts/linux/install-local.sh
scripts/linux/install-local.sh --from /path/to/linux-x64
```

`files-packaging.tar.gz` holds only the desktop entry, metainfo, icons, launcher and licence, for packagers (the AUR package consumes it together with the tarball above). `scripts/linux/uninstall-local.sh` reverses a local install.

### Root actions

Optional. **Open in terminal as root** works everywhere (it asks your terminal elevation tool: run0, sudo or pkexec). The polkit-authenticated Delete/Rename/Paste-as-root actions need the root helper, which only the AUR package installs; they are off in the AppImage and Flatpak. Start a root-mode window with:

```sh
files --root
```

or pick **Open in Root Mode** from the launcher's desktop actions. Each action asks for authentication for that exact operation, and the GUI itself stays unprivileged. See the [elevation threat model](../docs/linux-port/threat-model-elevation.md).

### Verify downloads

Download `SHA256SUMS` next to the files you fetched and check them (missing files are reported, not fatal, with `--ignore-missing`):

```sh
sha256sum -c --ignore-missing SHA256SUMS
```

### Nightly builds

Every merge to `main` publishes a tarball and AppImage to the rolling [nightly pre-release](https://github.com/MemerGamer/LinuxFiles/releases/tag/nightly). Run it with:
Every merge to `main` publishes a tarball and AppImage to the rolling [nightly pre-release](https://github.com/MemerGamer/LinuxFiles/releases/tag/nightly). It is untested bleeding edge. Run it with:

```sh
curl -LO https://github.com/MemerGamer/LinuxFiles/releases/download/nightly/LinuxFiles-nightly-x86_64.AppImage && chmod +x LinuxFiles-nightly-x86_64.AppImage && ./LinuxFiles-nightly-x86_64.AppImage
```

See [docs/linux-port/packaging.md](../docs/linux-port/packaging.md) for packaging details and [docs/linux-port/PLAN.md](../docs/linux-port/PLAN.md) for the roadmap.
### More

- [CHANGELOG.md](../CHANGELOG.md): what is in each release
- [Showcase](../docs/linux-port/SHOWCASE.md): screenshots and the feature checklist
- [Packaging details](../docs/linux-port/packaging.md) and the [roadmap](../docs/linux-port/PLAN.md)

## Reporting bugs

Expand Down
93 changes: 75 additions & 18 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,43 +5,100 @@ Community. This changelog covers the fork only.

## 0.1.0-alpha1 - 2026-10-06

First alpha. Expect rough edges; please report issues at https://github.com/MemerGamer/LinuxFiles/issues.
First public alpha. Expect rough edges and do not rely on it for data you cannot afford to lose. Please report
issues at https://github.com/MemerGamer/LinuxFiles/issues. Downloads and install instructions are on the
[release page](https://github.com/MemerGamer/LinuxFiles/releases/tag/linux-v0.1.0-alpha1).

### Platform
### Highlights

- Files runs natively on Linux (X11 / XWayland) on the Uno Platform Skia desktop head instead of WinUI 3.
- Grouped views are virtualized: a 10,000-file folder grouped in the Grid went from 90 s to 1.7 s, and grouping
in Downloads works again.
- KDE service menus appear under "Show more options", filtered per action by the current shell.
- Root actions through a polkit-authenticated helper, with the prompt bound to the exact operation, plus a root
mode (`files --root`) and "Open in terminal as root".
- Native file pickers, opening files inside archives, tabs in a client-side title bar and the Win11 icon theme.
- Packages for Arch (AUR `linuxfiles-bin`), AppImage, Flatpak and a self-contained tarball.

### Features

Platform

- The app now runs natively on Linux (x11 / XWayland) on the Uno Platform Skia desktop head instead of WinUI 3.
The Windows-only code paths are kept but are not built or tested.
- Linux-specific services replace the Win32/COM layer: XDG paths and settings store, folder watching,
freedesktop trash, XDG thumbnails and icon themes, MIME types and `.desktop` launchers, drives via UDisks2,
GVfs network and MTP locations, Secret Service credentials, D-Bus notifications and recent files.
- The Windows-only code paths are kept but are not built or tested.

### File management
File management

- Browsing, copy/move/delete/rename and undo-friendly file operations on Linux, with fd-relative, symlink-safe
recursive operations and special-file handling.
- Browsing, copy/move/delete/rename and undo-friendly file operations, with fd-relative, symlink-safe recursive
operations and special-file handling.
- Trash: move to trash, restore and empty, with containment and ownership checks.
- Archives (zip, tar, 7z, rar and more) via SharpCompress, with extraction hardening.
- Search, tags (extended attributes) and a Linux Properties window with POSIX permissions.
- Archives (zip, tar, 7z, rar and more) via SharpCompress with hardened extraction. Browse inside archives, open
files from them (read-only) and use the Extract actions.
- Search, tags (extended attributes), file previews and a Linux Properties window with POSIX permissions.
- Clipboard and drag and drop with other Linux applications (X11 file clipboard, XDND).
- Native file and folder pickers.
- Native file and folder pickers through the desktop portal.

### Desktop integration
Desktop integration

- KDE service menus under "Show more options", with per-action shell filtering.
- Context menus: Open with, New from templates, Open in terminal.
- Confirmation before running binaries or untrusted launchers; launch arguments are exact-argv, never shell
interpolated.
- Root mode: `files --root`, the "Open in Root Mode" desktop action, or simply running as root (the tab and title
show "(Root mode)" or "(Running as root)").
- "Open in terminal as root" using run0, sudo or pkexec, starting root's login shell.
- Single instance, and `org.freedesktop.FileManager1` (ShowFolders, ShowItems, ShowItemProperties) so other
applications can reveal files in LinuxFiles.
- Can be set as the default file manager for `inode/directory`; nothing changes automatically.
- System theme, fonts, SVG icons, folder icons and native window decorations.

Look and feel

- A client-side title bar with tabs, a live window title and a Home-rooted breadcrumb.
- The Win11 icon theme is supported; folder icons always show with Win11-style themes.
- HiDPI scale detection from the desktop settings, labelled Sort and Layout toolbar buttons, accessibility names
on controls and a translation fallback to English for missing strings.
- System theme, bundled UI font, SVG icons and window decorations.
- Settings changed in one window are merged with the other windows instead of overwriting them.

### Fixes

- Grouped file lists render and scroll quickly in the Grid, List and Cards layouts.
- A slow second click on a file no longer starts a rename by mistake.
- Column widths in Details are persisted correctly.
- Large folders with many PDFs load faster.
- Renames work on NFS/FUSE filesystems without hardlinks, and cross-device trash restores are staged safely.
- Toolbar icons and the toolbar row, Sort/Group/View buttons, status bar sizes and Recycle Bin columns.
- Keyboard shortcuts, Enter in the address bar and typed paths; layout shortcuts and Settings tab reuse.
- Light-theme grid selection, list row height, Grid labels and Details alignment.
- Flatpak: XDG user folders (Desktop, Downloads, ...) are found reliably, also without a `user-dirs.dirs` file.

### Packaging

- Self-contained tarball, AppImage, Flatpak bundle (`io.github.memergamer.LinuxFiles`) and an AUR binary package
(`linuxfiles-bin`). Rolling `nightly` builds are published for every push to `main`.
- Self-contained tarball (`files-linux-x64.tar.gz`), AppImage (`Files-x86_64.AppImage`), Flatpak bundle
(`Files-x86_64.flatpak`, app id `io.github.memergamer.LinuxFiles`) and the AUR binary package `linuxfiles-bin`.
`SHA256SUMS`, `PKGBUILD` and `SRCINFO` are attached to the release.
- The launcher command is `files`.
- Tagged-release CI is idempotent (re-running replaces the assets) and the AUR recipe generation was fixed.
- A rolling `nightly` pre-release is published for every push to `main`.

### Security

- Root actions run through a root-owned, non-setuid helper behind a polkit action that requires administrator
authentication every time; the prompt names the exact operation. The GUI stays unprivileged.
- AppImage and Flatpak never include the helper, so root actions are disabled there.
- Confirmation before running binaries or untrusted launchers; launch arguments are exact-argv, never shell
interpolated.
- The preview pane never opens device files, even under a path-swap race.
- Archive extraction, trash and recursive file operations are hardened against symlink and path-swap tricks.

### Known limitations
### Known issues

- In the light theme, toolbar buttons can fade when they have focus.
- The Grid context menu acrylic can show an olive smear.
- The Properties dialog has no backdrop.
- Long file names wrap in the Details layout.
- The length of the polkit prompt depends on your authentication agent.
- Wayland sessions run through XWayland; there is no native Wayland support or AT-SPI accessibility yet.
- The Windows build has not been restored (planned for phase 8).
- x86_64 only; arm64 is wired but untested.
- Wayland sessions run through XWayland.
- Windows-only features (Windows integrations, cloud drive and Store specifics) are not available.
2 changes: 2 additions & 0 deletions docs/linux-port/SHOWCASE.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ The shots use the public "Win11" icon theme, selected the way the app does on a

Last updated: commit `e1eaca8dc`, 2026-10-06 (see `showcase/captured.txt` for the exact shot list).

Install instructions for the 0.1.0-alpha1 release (AUR, AppImage, Flatpak, tarball) are in the [README](../../.github/README.md#install).

## What works today

Taken from the merged state of `main` and [PLAN.md](PLAN.md).
Expand Down
4 changes: 2 additions & 2 deletions docs/linux-port/packaging.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Linux packaging (Phase 6 groundwork)
# Linux packaging

App id (used everywhere): `io.github.memergamer.LinuxFiles`. Binary/launcher: `files`. Assembly: `Files.dll`
(apphost `Files`).
Expand Down Expand Up @@ -127,7 +127,7 @@ unbuilt.

### Publishing a release (exact procedure)

The draft release `linux-vX.Y.Z[-pre]` already holds hand-uploaded assets; CI replaces them with its own build.
First used for `linux-v0.1.0-alpha1` (prerelease; install instructions are in `.github/README.md`, the release body is kept in `docs/linux-port/release-notes/<version>.md`). Create a draft release `linux-vX.Y.Z[-pre]` with the notes, optionally with hand-uploaded assets; CI replaces them with its own build.

1. Undraft the release (GitHub UI, or `gh release edit linux-vX.Y.Z-pre -R MemerGamer/LinuxFiles --draft=false`).
Publishing creates the tag, which triggers `package-linux.yml`. The `release` job finds the existing release
Expand Down
69 changes: 69 additions & 0 deletions docs/linux-port/release-notes/0.1.0-alpha1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# LinuxFiles 0.1.0-alpha1

First public alpha of LinuxFiles, an unofficial native Linux port of [Files](https://github.com/files-community/Files) by the Files Community. Expect rough edges and keep backups of anything you care about.

## Highlights

- Files running natively on Linux (X11 / XWayland), no Wine or Windows needed.
- Fast grouped views: 10,000 files grouped in the Grid went from 90 s to 1.7 s.
- KDE service menus under "Show more options".
- Optional root actions through a polkit-authenticated helper (the prompt names the exact operation), root mode (`files --root`) and "Open in terminal as root".
- Native file pickers, opening files inside archives, tabs in a client-side title bar, Win11 icon theme, HiDPI scale detection.
- Fixes for slow-click rename, Details column widths and multi-window settings.

Full notes: [CHANGELOG.md](https://github.com/MemerGamer/LinuxFiles/blob/main/CHANGELOG.md).

## Install

Requires x86_64 Linux with X11 or XWayland. Packages are self-contained.

**Arch (AUR)**, which also installs the optional polkit root helper:

```sh
yay -S linuxfiles-bin # or paru -S linuxfiles-bin
```

**AppImage**:

```sh
chmod +x Files-x86_64.AppImage && ./Files-x86_64.AppImage
```

**Flatpak bundle** (root actions are off in the sandbox):

```sh
flatpak install --user Files-x86_64.flatpak
flatpak run io.github.memergamer.LinuxFiles
```

**Tarball**:

```sh
tar xzf files-linux-x64.tar.gz && ./linux-x64/Files
```

To install the tarball for your user, run `scripts/linux/install-local.sh --from <path to linux-x64>` from a clone of the repository. `files-packaging.tar.gz` is for packagers.

## Checksums

Download `SHA256SUMS` into the same folder as your download and run:

```sh
sha256sum -c --ignore-missing SHA256SUMS
```

## Known issues

- Light-theme toolbar buttons can fade when focused.
- The Grid context-menu acrylic can show an olive smear.
- The Properties dialog has no backdrop.
- Long file names wrap in Details.
- The polkit prompt length depends on your authentication agent.
- Wayland runs through XWayland.
- The Windows build is not restored yet (phase 8).

Report problems at https://github.com/MemerGamer/LinuxFiles/issues.

## Credits

LinuxFiles is built on [Files](https://github.com/files-community/Files) by the [Files Community](https://github.com/files-community) and its contributors, used under the MIT licence. This port is not affiliated with or endorsed by the Files Community; the supported Files for Windows is at [files.community](https://files.community/). Thanks also to the Uno Platform and SkiaSharp projects that make the Linux port possible. See [NOTICE.md](https://github.com/MemerGamer/LinuxFiles/blob/main/NOTICE.md).
7 changes: 6 additions & 1 deletion packaging/linux/io.github.memergamer.LinuxFiles.metainfo.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@
</supports>
<content_rating type="oars-1.1"/>
<releases>
<release version="0.1.0-alpha1" date="2026-10-06" type="development"/>
<release version="0.1.0-alpha1" date="2026-10-06" type="development">
<url type="details">https://github.com/MemerGamer/LinuxFiles/releases/tag/linux-v0.1.0-alpha1</url>
<description>
<p>First public alpha of LinuxFiles. Faster grouped views, KDE service menus, optional root actions and root mode, native file pickers, opening files inside archives and a client-side title bar with tabs.</p>
</description>
</release>
</releases>
</component>
Loading