Open source · Linux · MIT

Double-click.
It opens.

Tandem makes nine kinds of installer — from Windows, Android and Linux — open with a double-click on Linux. When something genuinely can't work, it tells you why, in plain language. No silent failures. No error codes.

A thin layer of decision, translation and diagnosis over Wine, Waydroid, the AppImage runtime, Java, apt and Flatpak — built for people who aren't programmers.

9 install formats 7 languages No jargon, ever Reproducible builds
Tandem's main screen: your installed programs Tandem's main screen: your installed programs

The problem it exists for

You download a program, double-click it, and nothing happens. Or an error appears in a language no one reads — and you're left not knowing whether it installed, failed, or whether it's your fault.

On Linux, that is the everyday experience of installing software that didn't come from the app store. Tandem's one rule is that it must never end there.

Nine formats, one double-click

Every common installer a Linux user runs into — and you never have to know which is which.

Windows.exe · .msi

Runs it under Wine, and when a component is missing, finds and installs it — see below.

Android.apk · .xapk · .apks · .apkm

Installs into Waydroid, split packages included; says plainly when an app is phone-only.

Linux.AppImage

Sets the run bit, checks the architecture, adds a menu entry — and works even without FUSE.

Linux.jar

Tells a program from a library, and which Java it needs — before the JVM ever runs.

Linux.deb

Simulates the install before the password, so nobody types one to be told no.

Linux.rpm

Installs it where it's native (Fedora, openSUSE); elsewhere, finds the apt equivalent.

Linux.flatpakref

Installs per-user from Flathub; tells a source file apart from an app to install.

Linux.snap

Installs a local snap the way it actually needs (--dangerous), and says so.

Anyshell installers

The one handler whose default answer is not to run — it reads it to you first.

How it works: closing the loop

When a Windows program is missing a piece, Tandem doesn't hand you a log. It reads the actual failure, fixes it, and checks the fix landed — then remembers.

1

Run it, and read the real failure

Wine writes the exact library it couldn't load. Tandem reads that line — it doesn't guess from the filename.

err:module:import_dll — Library MSVCP140.dll not found
2

Map the missing piece to a fix

It translates the missing library to the winetricks component that provides it, ignoring the ones Wine implements itself.

MSVCP140.dll → vcrun2022
3

Install it — once

It installs the component and keeps a receipt keyed to the file, so a 30-minute install is never paid for twice.

4

Verify it actually arrived — in the right architecture

"Exit 0" isn't proof. Tandem checks the library is really there, in the caller's bitness, and isn't just one Wine ships with. A 64-bit program can't use a 32-bit delivery — and it catches that.

5

Retry, and remember

It runs the program again. If it works, it records the lesson — keyed to the file, so it survives moving folders and transfers to another machine.

When it can't work, it says so — and why. A protection dongle, a kernel driver, or direct USB won't run under Wine. Tandem recognises those before running anything, explains the reason in a sentence, and names the real route (a Windows virtual machine) instead of failing in silence.

Before it runs anything

It looks first, without executing.

Tandem reads each file the way a technician would — never by running it — so it can catch the failures that are decidable up front.

  • It reads a Windows program's import table without executing it — validated against objdump on 37 real binaries.
  • It computes an AppImage's payload offset from the ELF header, so it can spot a download that stopped halfway.
  • It reads a .jar's bytecode version to know which Java it needs — so it never triggers an error the JVM would have thrown.
  • It reads a .deb or .rpm header by hand to name a wrong-architecture package, a truncated download, or a release mismatch — before apt is asked.

This app is made for phones only and does not run here. Nothing is wrong with the file — it's built for a different kind of device.

Got it

Instead of NO_MATCHING_ABIS — a sentence anyone can read, in any of seven languages.

The inviolable rule

It never touches what already works.

Tandem only ever writes into Wine environments it created itself — marked as its own. Any other one is read-only to it: it runs the program, reports what's missing, and stops.

This exists because the machine Tandem was born on also runs a shop's point-of-sale system in its own environment. Installing a dependency into a working production setup is worse than not automating at all. And every destructive path takes a copy first — backups you can verify the day you make them, and rehearse restoring before the disk ever dies.

Tandem's health screen Tandem's health screen

Built for the counter

Tandem grew up on a shop floor, and it carries the things a point-of-sale machine actually depends on — each checked before it becomes the reason a sale won't go through.

Ports that are real

A modern PC reports 32 serial ports and none of them exist. Tandem shows the printer, pinpad or scale on the port it's actually on — and the one command to enable it.

A clock that's right

A wrong clock breaks TLS, licensing and fiscal software in silence. Tandem checks it before the sale, and names the fix.

Recovery that comes back

A backup you can verify on the spot, and prove would restore on a replacement PC — rehearsed, without touching the live setup.

Wine that stays put

A distro upgrade can break a working program overnight. Tandem notices the change, names it, and offers to pin the version that worked.

One health reading

Clock, disk, Wine, a web service, a backup to fall back on — a dozen checks gathered into one screen, worst first, each naming what to do.

Services that serve

It can stand up a local web service as a real system service and tell you, in plain words, whether it's running, listening and answering.

Where Tandem actually stands

No overclaiming. Here's the honest map of what others already do — and the narrow, specific thing that was left unoccupied.

Detecting dependencies

Bottles' Eagle engine analyses an unknown .exe and names the runtimes it needs. Detection is not new.

Installing from a recipe

umu / protonfixes and CrossOver's CrossTie auto-install dependencies — but only from a per-title recipe keyed to a store ID.

The "explain, don't fail" idea

Zorin OS now markets the same philosophy for .exe/.msi, naming known apps and suggesting alternatives.

Reporting the architecture

Several tools read a program's bitness. What they do with it is print it.

What no project was found to do — and this is the whole claim, stated narrowly: close the entire loop from the double-click, for a non-technical person, verifying the delivered file's architecture, in plain language, for a program nobody wrote a recipe for. The detection and the install, on their own, are occupied ground. Verifying delivery, checking bitness, retrying, and keeping a memory keyed to the file — from a double-click, for someone who never opens a terminal — is the part Tandem occupies.

The same calm interface, everywhere

A modern GTK4 face across every screen — and on any machine without it, the same words fall back to a plain window and then the terminal. It adapts to your light or dark theme on its own.

The program library The program library

The library — Windows, Android and Linux programs, together.

The health screen The health screen

Health — what to act on, worst first, with a one-tap fix.

The tools menu The tools menu

Tools — everything the shop does, one tap away.

Runs across the distributions people actually use

Tandem installs, speaks the machine's own package manager, and handles each native format the way that distribution expects.

Ubuntu / Zorin / Debian — apt Fedora / RHEL — dnf Arch / Manjaro — pacman · AUR openSUSE — zypper Anything else — generic bundle

On a non-Debian machine, tandem setup installs the core through that family's own manager instead of failing with an apt error; an .rpm installs natively where it belongs and is explained where it doesn't; and the generic bundle carries Tandem to any Linux at all. Verified end to end on real Fedora and Arch.

Get it

It installs like any program. After that, a double-click is the whole interface.

On Ubuntu, Zorin or Debian

# install the package sudo apt install ./tandem_*_all.deb # then set up whatever is missing # (Wine, winetricks, Android…) tandem setup

On Fedora, Arch, openSUSE…

# no apt? use the generic bundle tar xzf tandem_*_generic.tar.gz cd tandem-* sudo ./install.sh # or, on Arch, the PKGBUILD (AUR) makepkg -si

Free and open source, MIT-licensed. No account, no subscription. The latest package is on the releases page.