Open-source project
linuxmint/warpinator avatar
linuxmint/warpinator

Warpinator for LAN file sharing: installation, security modes, and limits

Share files across the LAN

1,593 stars117 forksCGPL-3.0

At a glance

What is it?
Warpinator is a Linux Mint project for transferring files between devices on a local network. It offers shared-code discovery, user-approved transfers, and several folder-isolation modes, but its documented workflow remains tied to local-network use rather than internet relay.
Who is it for?
Adopt Warpinator when Linux devices need direct file transfer on a trusted or isolated network and participating systems can satisfy its GTK, XApp, gRPC, cryptography, and discovery dependencies. Do not choose it as a documented replacement for an internet-facing transfer service.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 32 days ago.
What is it written in?
Mainly C, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Warpinator's LAN transfer boundary

Warpinator addresses a narrow but common desktop problem: moving files between computers on the same local network without emailing attachments, mounting a shared filesystem, or configuring an external server. Its intended users are Linux Mint and related Linux desktop users who want a graphical peer-to-peer workflow. The repository and README also point to unofficial Android and Windows implementations, but those projects are separate and are not covered by the installation paths below.

The security boundary is local. Warpinator uses a shared group code to decide which trusted devices on the LAN may see one another. The documented default is `Warpinator`, which is convenient but unsuitable as a meaningful trust setting on a shared network. A unique code is the basis of Secure Mode, so both ends of a transfer need the same value. The README recommends standard alphanumeric characters and requires a code between 8 and 32 characters. Non-ASCII input can have a shorter effective maximum.

This design does not make Warpinator a cloud sync system. The README does not document relay through an internet service, public accounts, offline retrieval, web links, or synchronization after both endpoints disconnect. Its scope is transferring files between participating devices that can discover one another on the local network.

Discovery, gRPC, and the shared-code path

Based on the repository layout and declared dependencies, Warpinator is built around local peer discovery and gRPC-backed communication. The `generate-protobuf` entry, build dependency on `python3-grpc-tools`, runtime dependency on `python3-protobuf`, and gRPC Python packages support a protocol-buffer service. Discovery comes through Zeroconf, represented by the `python3-zeroconf` dependency and the `bundle-zeroconf` build option.

The shared group code controls which devices appear as peers. It functions as a local trust credential rather than as protection for data after transfer. The README does not document transport encryption settings, certificate handling, proxy behavior, or a mechanism for crossing router boundaries. Those omissions matter because a tool can be appropriate on an office LAN while remaining the wrong choice across networks that do not permit peer discovery or direct connections.

Some dependencies can be bundled because distributions may provide incompatible versions or behavior. The README specifically identifies Zeroconf as a candidate for bundling and provides a Meson option to disable it. It also distinguishes `bundle-grpc` dependencies from system-provided packages. This configurability helps packagers address distribution differences, but it adds build-time decisions that users of a binary package may never see.

Installing Warpinator from supported Linux packages

On Mint 20 or later and LMDE 4 or later, the README gives a package-manager installation path. This is the clearest first route for users who do not need to build a particular source revision.

bash
sudo apt-get install warpinator

The command asks the system package manager to install the packaged application and its declared dependencies. The README does not provide a launch command or document the exact menu sequence for selecting two devices and sending a first file, so this tutorial cannot safely invent those interface steps. After installation, the first real checks are therefore configuration checks: confirm that both devices use the same group code, inspect the active security state, and verify that the intended receiver appears as a peer.

Arch Linux users receive a separate command:

bash
sudo pacman -S warpinator

For distributions with Flatpak support, the README links to Flathub and gives this installation command:

bash
flatpak install flathub org.x.Warpinator

The Flatpak form has filesystem-sandbox implications discussed below. Its available isolation behavior is not identical to a native installation because Flatpak already uses Bubblewrap.

Building a selected Warpinator source revision

For Ubuntu 20.04 and related systems, the source workflow starts with gRPC build and runtime packages, followed by a clone of the repository:

bash
sudo apt-get install python3-grpc-tools python3-grpcio
git clone https://github.com/linuxmint/warpinator.git
cd warpinator

The README says to select a version when a particular release is required. Its example uses a concrete historical version number:

bash
git checkout 1.2.3

The checkout step is optional according to the documentation, which says it can be skipped to build from the current source. A source build then requires packaging tools and several build dependencies:

bash
sudo apt-get -y install debhelper dh-python meson gobject-introspection cython3
dpkg-buildpackage --no-sign

After a successful package build, the documented installation step changes to the parent directory and installs the generated Debian package:

bash
cd ..
sudo dpkg -i *warp*.deb

If `dpkg` reports missing runtime dependencies, the README says to install them and repeat the installation. It also says `apt-get install -f` may work. The source instructions include distribution-specific guidance for Mint 19.x and Ubuntu Bionic through a grpc PPA.

Meson installation for distributions without a Warpinator package

The README offers a direct Meson and Ninja path as a package-manager-independent option. It describes `/usr` as the typical prefix and notes that `/usr/local` is another possible choice:

bash
meson builddir --prefix=/usr
ninja -C builddir
sudo ninja -C builddir install

This workflow separates configuration, compilation, and installation into three commands. It also makes build options visible. For example, the README documents disabling bundled Zeroconf in projects that need to use the system package:

bash
meson builddir --prefix=/usr -Dbundle-zeroconf=false
ninja -C builddir
sudo ninja -C builddir install

The project declares minimum versions for Meson, gRPC tools, GTK, and XApp components. Its dependency list also includes Python, cryptography, NaCl, network address libraries, interface libraries, and GTK introspection bindings. Some dependencies are conditional. `python3-grpc-tools` is described as necessary only when updating protobuf files, while `python3-async-timeout` applies only with Python older than 3.11 when Zeroconf is bundled. A manual build therefore requires reading `meson_options.txt` and `debian/control` carefully rather than assuming every listed dependency is unconditional.

Secure Mode and incoming folder isolation

Before Secure Mode is enabled, the README documents three restrictions: starting automatically at login is disabled, every incoming transfer requires user approval, and Warpinator exits after sixty minutes. Secure Mode can be enabled by replacing the default group code with a unique value. This does more than hide a peer from casual discovery; it changes the operating restrictions described in the documentation.

Incoming files create a separate security concern. A sender could construct symbolic links that point outside the intended incoming directory. Warpinator attempts to detect harmful incoming content and can add kernel-level or process-level isolation. Landlock is used automatically when available. It confines writes during a transfer so that the incoming folder operates as an isolated area.

Bubblewrap is the fallback when Landlock is unavailable. Its documented drawbacks are specific: changing the incoming folder requires restarting Warpinator, and the rest of the filesystem becomes read-only. For example, the file dialog cannot create a new directory elsewhere on the system. If neither mechanism is available, Warpinator enters legacy mode without filesystem isolation, although incoming transfers are still analyzed.

This is a real tradeoff rather than a single uniform security posture. Native installations may have Landlock, Bubblewrap, or legacy behavior. A Flatpak installation has only Landlock or legacy modes according to the README because Bubblewrap is already used by Flatpak.

Flatpak filesystem permissions and maintenance cost

The Flatpak configuration needs particular attention when the destination is inside the user's home directory. The README gives a command that makes the home directory read-only while granting write access only to a selected save folder:

bash
flatpak run --filesystem=home:ro --filesystem=<path-to-your-save-folder> org.x.Warpinator --mode=legacy

The placeholder must be replaced by the actual save path. The command selects legacy mode because Flatpak already supplies a Bubblewrap sandbox, but these permissions still need to match the user's chosen destination. The README also mentions Flatseal and custom launcher arguments as alternatives for making such configuration persistent.

The repository is not archived, and its last push was on 2026-09-21. Recent release entries include `master.mint22` and `master.lmde6`. That indicates recent repository activity, but it does not remove upgrade work from the dependency model. Maintainers must account for Python versions, GTK and XApp minimums, protobuf generation, Zeroconf behavior, cryptography, and Flatpak filesystem policy. Users choosing a source build also carry that compatibility burden.

Warpinator is licensed under GPL-3.0. The repository includes `COPYING`, packaging files, translation data, and platform packaging for Debian, Arch-related, and Flatpak forms. The GPL-3.0 identifier describes the project's license, but the README does not provide legal guidance about distribution or modification obligations.

Where Warpinator differs from mounted or server-based sharing

A mounted filesystem keeps a location continuously visible as a filesystem path. A server-based transfer service can queue files for later retrieval and may be designed for connections beyond one LAN. Warpinator instead presents a direct device-to-device transfer model, with peer visibility controlled by a shared group code and incoming transfers governed by approval and isolation settings. That is a better match for moving a selected set of files between active local machines, but it is different from durable synchronization or general-purpose network storage.

Warpinator is also the wrong choice when network discovery is blocked, participating machines cannot communicate directly, or a workflow requires access after the sending device is no longer present. The README does not document relay, persistent transfer queues, browser-based downloads, or administration of user accounts. It also does not claim support for transferring to an arbitrary internet host.

The official-domain warning should be taken literally. The README identifies `warpinator[.]com`, `warpinator[.]net`, and `warpinator.technab[.]com` as fake or malicious websites and explicitly says not to download or run software from them. It links the official project context to `https://xapp-project.org`, the source repository to GitHub, and the Flatpak application to Flathub.

Editorial conclusion

Adopt Warpinator when Linux devices need direct file transfer on a trusted or isolated network and participating systems can satisfy its GTK, XApp, gRPC, cryptography, and discovery dependencies. Do not choose it as a documented replacement for an internet-facing transfer service. Verify the group code, available isolation mechanism, destination folder, and inbound approval settings on each participating device before sending private files.

Frequently asked questions

What is the default Warpinator group code?

The README says the default group code is `Warpinator`. Changing it to a unique code enables Secure Mode.

How do I install Warpinator on Mint, LMDE, or Ubuntu?

Mint 20+ and LMDE 4+ can use `sudo apt-get install warpinator`. Ubuntu 20.04 and related systems can follow the repository's gRPC dependency, clone, build, and `dpkg -i` workflow.

Which filesystem isolation methods does Warpinator use?

Warpinator uses Landlock when available and can fall back to Bubblewrap. If neither is available, it operates in legacy mode without filesystem isolation while continuing to analyze incoming transfers.

Can I install Warpinator from Flatpak?

Yes. The documented command is `flatpak install flathub org.x.Warpinator`. The README states that only Landlock and legacy modes are available in the Flatpak because Flatpak already uses Bubblewrap.

Does Warpinator support transfers outside the local network?

The README documents device discovery and file transfer across a local network. It does not document internet relay, remote access, offline links, or synchronization after disconnect.

Official sources

  1. License: GPL-3.0
  2. linuxmint/warpinator on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/linuxmint-warpinator.svg)](https://hysenlabs.com/projects/linuxmint-warpinator)

Was this useful?