looper

Looper for Linux

Looper 1.2.0 for macOS and Looper 1.1.6 for Linux preview are available. Download for macOS · Download for Linux. Linux runtime proof covers Ubuntu 24.04 x86_64 binaries; systemd installation was not tested. See release status 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. The published package targets Ubuntu 24.04 x86_64.

Inspect and install

The following commands download the installer for inspection. The installer exits without changing your installation while release status is pending.

curl --fail --show-error --silent --location \
  --proto '=https' --proto-redir '=https' \
  https://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.

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 uses the specified server directly; no camera scan, SSH tunnel, or LAN discovery is needed. 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