https://weversonl.github.io/gnome-quick-share/
GnomeQS is a GNOME-first Quick Share client for Linux.
It is a Rust-based port built specifically with GNOME in mind, using GTK4 and libadwaita for the main application and a separate tray helper for Linux environments that still rely on AppIndicator-style integration.
GnomeQS was created as a modern GNOME-oriented continuation of ideas that were already explored in rQuickShare.
That project was extremely important to the existence of this one and deserves explicit credit:
Many implementation and product decisions in GnomeQS were informed by the work behind rQuickShare.
- a GTK4 + libadwaita desktop application
- a Rust core library for discovery, transfers, and protocol handling
- a separate Linux tray helper
- local packaging for Flatpak, Arch, Debian, and RPM-based workflows
- Rust 2024 edition
- GTK4
- libadwaita
- gettext-rs
- Protocol Buffers via
prost - mDNS discovery via
mdns-sd - Ayatana AppIndicator for the tray helper
- Meson as the build and install system
core_lib: transfer logic, discovery, networking, inbound/outbound flowapp/gtk: GTK4/libadwaita applicationapp/tray-helper: tray helper processbuild-aux: build helper scripts used by Mesonaur: Arch packaging filespackaging/flatpak: Flatpak manifest and helperspackaging/deb: local Debian packaging helperpackaging/rpm: local RPM packaging helper
GnomeQS is intentionally built for:
- Linux
- GNOME
- modern GTK/libadwaita environments
The primary target is a GNOME desktop running on Wayland, although X11 or non-GNOME setups may still work depending on the rest of the environment.
Before using or packaging the application, keep these limits in mind:
- Linux-only
- GNOME-first, not a generic cross-platform desktop app
- the tray implementation is Linux-specific
- tray behavior depends on desktop shell support and AppIndicator compatibility
- Flatpak builds intentionally ship without the tray helper
- desktop environments outside GNOME are not the primary support target
In short: this project is designed to feel right on GNOME first, and broad desktop portability is a secondary concern.
If your system uses a firewall, you should strongly consider using a fixed listening port instead of a random one.
Why this matters:
- GnomeQS needs inbound local network connectivity to receive transfers
- if the listening port changes constantly, firewall rules become harder to manage
- a fixed port makes it much easier to create a permanent allow rule
Recommended approach:
- choose a fixed port in the application settings
- allow that port in your firewall
- make sure the rule applies to your local network profile
Examples of what to check:
ufwfirewalld- raw
iptables/nftables - router or host-level filtering in stricter network setups
If discovery works but transfers do not start, firewall rules are one of the first things to verify.
You need a Linux system with the Rust toolchain, Meson, and GNOME-related development packages.
Typical requirements:
- Rust and Cargo
- Meson (>= 1.0) and Ninja
- GTK4 development files
- libadwaita development files
- GTK3 development files
glib2gettextlibayatana-appindicator
sudo pacman -S rust cargo meson ninja gtk4 libadwaita gtk3 libayatana-appindicator glib2 gettextFor day-to-day development, cargo run still works as before — schemas and
locales are compiled on the fly by build.rs:
cargo run -p gnomeqsIf an old instance is still alive and holding the port or tray helper:
pkill -f gnomeqs-tray
pkill -f target/debug/gnomeqsThen start it again:
cargo run -p gnomeqsMeson is used for official release builds and all packaging workflows. It compiles both binaries, installs data files, schemas, icons, and locales to the correct system paths.
meson setup --buildtype=release build
ninja -C build
sudo meson install -C buildTo install to a custom prefix (e.g. for testing without root):
meson setup --prefix="$HOME/.local" --buildtype=release build
ninja -C build
meson install -C buildTo uninstall the application and clean up system caches:
sudo ninja -C build full-uninstallOr using the standard uninstall (which might not update all caches):
sudo ninja -C build uninstallFor a clean rebuild:
rm -rf build
meson setup --buildtype=release build
ninja -C buildBuild the Flatpak bundle:
./packaging/flatpak/build.shOutput:
packaging/out/flatpak/io.github.weversonl.GnomeQuickShare.flatpak
Install locally:
flatpak install --user packaging/out/flatpak/io.github.weversonl.GnomeQuickShare.flatpakRun:
flatpak run io.github.weversonl.GnomeQuickShareGnomeQS is available on the AUR as gnome-quick-share.
Install it with yay:
yay -S gnome-quick-shareOr by cloning the AUR package and building it manually:
git clone https://aur.archlinux.org/gnome-quick-share.git
cd gnome-quick-share
makepkg -siTo build the package locally from this repository:
cd aur
makepkg -fBuild a local .deb:
./packaging/deb/build.shOutput:
packaging/out/deb/*.deb
Install locally:
sudo apt install ./packaging/out/deb/*.debIf you prefer dpkg, you may need an extra dependency resolution step afterward:
sudo dpkg -i packaging/out/deb/*.deb
sudo apt-get install -fTypical extra local tooling on Debian-based systems:
dpkg-devmeson,ninja-buildgettext- Rust toolchain
- GTK4 development packages / libraries
- libadwaita development packages / libraries
- GTK3 development packages / libraries
- Ayatana AppIndicator development packages / libraries
libglib2.0-dev
Build a local RPM:
./packaging/rpm/build.shOutput:
packaging/out/rpm/rpmbuild/RPMS/**/*.rpm
Install locally with dependency resolution:
sudo dnf install packaging/out/rpm/rpmbuild/RPMS/*/*.rpmTypical extra local tooling on RPM-based systems:
rpm-buildmeson,ninja-buildgettext- Rust toolchain
- GTK4 development packages / libraries
- libadwaita development packages / libraries
- GTK3 development packages / libraries
- Ayatana AppIndicator development packages / libraries
glib2-devel
- The main app and the tray helper are separate binaries by design.
- The tray helper exists because GTK4/libadwaita and Linux tray integration have different constraints.
- Flatpak intentionally excludes the tray helper.
- Packaging choices prioritize GNOME behavior and Linux desktop integration over broad platform reach.
cargo runstill works for development; Meson is only required for release builds and packaging.
AGPL-3.0