looper

Looper for Linux

Looper 1.2.1 is available. Get Mac and Linux releases. See release metadata for exact versions and SHA-256 digests.

Requirements

A Linux x86_64 computer with Bash, curl, Python 3, sha256sum, tar, and a working systemd --user session. This package runs as your user account and requires no Rust toolchain. Ubuntu 24.04 x86_64 is the current runtime verification target.

Inspect and install

The independent download index is hosted on Cloudflare. Its installer, release metadata and packages remain available when the main website is unavailable.

The following commands download the installer for inspection and installation.

curl --fail --show-error --silent --location \
  --proto '=https' --proto-redir '=https' \
  https://downloads.looper.fyi/install.sh -o looper-install.sh
less looper-install.sh
bash looper-install.sh

When a release is published, the installer selects its exact version from release.json, downloads the matching immutable URL declared for the Linux asset, checks SHA-256, and runs looper-linux.sh install from the verified archive. To require a particular published version, use bash looper-install.sh --version X.Y.Z, replacing X.Y.Z with the Linux asset's version in the manifest. A different version is refused.

Installation enables and starts or restarts looper.service in your user session. It writes owned files under ~/.local/lib/looper, links commands in ~/.local/bin, and installs units under ~/.config/systemd/user. The existing package helper preserves configuration and backs up owned files on replacement. Desktop notifications remain opt-in. The bootstrap installer does not edit your shell profile, install hooks, configure Tailscale, or use sudo.

Verify

~/.local/bin/looper-linux status
systemctl --user is-active looper.service

Open ~/.local/bin/looper for the terminal interface. Add ~/.local/bin to your shell's PATH yourself if you want to use shorter command names. The server's user service depends on the user manager; a headless machine may need an administrator to configure lingering separately.

Add this Linux computer to your iPhone over Tailscale

Use Linux 1.1.6 preview or later for this flow. The older September 21 Linux 1.1.5 preview does not support remote browser setup. Install or update using the installer above, then connect this Linux computer and your iPhone to your Tailscale network.

If this Linux computer is already paired on the iPhone over LAN, keep that saved computer and its credentials. After enabling the Tailscale route below, choose Settings → Computers → Connection → Route → Tailscale on the phone; no new code is needed. The code steps below are for adding a different, unpaired computer.

Enable remote setup explicitly. For a hosting dashboard or startup command, use:

AGENT_CONTROL_PLANE_LISTEN=0.0.0.0:8765 looper serve --tailscale

For the packaged user service, run systemctl --user edit looper.service and add:

[Service]
ExecStart=
ExecStart=%h/.local/lib/looper/looper-server serve --tailscale

Then apply the setting:

systemctl --user daemon-reload
systemctl --user restart looper.service
systemctl --user is-active looper.service
tailscale ip -4

The service user must have access to the local Tailscale daemon socket. A custom socket can be configured with LOOPER_TAILSCALE_SOCKET in ~/.config/looper/server.env. If your SSH session has no user-bus environment, use export XDG_RUNTIME_DIR=/run/user/$(id -u) only when that directory and its bus socket belong to your user.

On your iPhone:

  1. Connect Tailscale and open Looper → Settings → Add Computer.
  2. Turn on Connect over Tailscale and enter the Linux computer's Tailscale IP or full .ts.net name. Bare addresses use port 8765.
  3. Open Server Pairing Page, generate a four-letter code, return to Looper, and enter it.
  4. Choose Connect with Code. Check that the selected computer is your Linux host and its connection is Live.

Pairing a new computer uses the specified server directly; no camera scan, SSH tunnel, or LAN discovery is needed. A connected Mac can suggest the Linux address, but does not relay the phone's connection or replace the Linux computer's pairing code. Tailscale policy must allow TCP 8765 for setup and TCP/UDP 8766 for session transport. Restrict these ports to devices allowed to control Looper: --tailscale allows verified, reachable tailnet peers to generate pairing codes. Requests through public ingress, forwarded headers, or an unverifiable peer are rejected. The installer does not install Tailscale or enable this setting silently.

If the page says Open setup on this computer using localhost, check both the installed version and the service's --tailscale flag. Run ~/.local/bin/looper --version and systemctl --user cat looper.service. Do not use localhost in the iPhone browser: that points at the iPhone itself.

Remove the installation

~/.local/bin/looper-linux uninstall --yes

The package helper stops its user services and moves owned installed files to a recoverable backup. It preserves configuration and session data by default.

Installation overview · Troubleshooting