Install

Installing Laser

One line, four package formats, and a short list of things it refuses to do to your machine. This is what that line actually does, in order.

What to have first

The release is public. The install command needs curl to download it and GitHub CLI 2.49 or newer to verify its signed build provenance offline. You do not need a GitHub account, a sign-in, or a token.

It is worth being precise about what this prerequisite is not. It belongs to the fetch and verification, not to the application. Laser itself needs nothing on the machine — no Node, no npm, no coding agent, no runtime of any kind. It carries all of that inside the package. A machine that has never run any of it can install Laser and be finished.

$curl -fsSLo laser-install.sh https://github.com/youssefsiam38/laser/releases/latest/download/install.sh && sh laser-install.sh

Note the shape of the command: it writes the script to a file and then runs the file. Nothing is piped into a shell. The difference matters because it gives you a moment in which the thing about to run is sitting on disk in front of you, readable, before it runs. An install that streams straight into sh never offers that moment.

What it checks before it writes anything

Three checks happen before the first byte is written anywhere it will stay. The download is compared against a checksum manifest, that manifest must match Laser's pinned maintainer key, and the GitHub build provenance is verified from its signed offline bundle. Only then does the installer begin placing files.

The order is the point. A verification that runs after the install has already half-finished tells you that something went wrong, which you would have found out anyway; a verification that runs first is the only kind that can prevent it.

Native by default, no-root when you choose it

On Ubuntu and Debian, the installer chooses the .deb. On Fedora, RHEL and openSUSE, it chooses the .rpm. The package manager asks for your normal administrator password once, installs the menu entry and icon, and registers Laser's signed update feed. Later versions then arrive through Ubuntu Software Updater, GNOME Software, Discover or dnf like any other system package.

If you do not want a system package, pass --format appimage. That path writes only under your home directory, never asks for root, and rolls back an interrupted upgrade. Because it is outside APT and DNF, upgrade it by re-running the install command.

Four formats, and how to choose

AppImage
Explicit no-root option. Runs from your home directory and upgrades when you re-run the installer.
.deb
Default on Debian and Ubuntu. Registers the signed APT feed for native update notifications.
.rpm
Default on Fedora, RHEL and openSUSE. Registers the signed DNF repository.
tar.gz
Everything else, and any situation where you would rather place the files yourself.

Each format is built for x86-64 and arm64. The installer picks the right one; the list exists for the cases where you would rather pick it yourself, or where something else — a configuration manager, an image build — is doing the placing.

Upgrading, and getting rid of it

With the default native package, the operating system discovers and announces later Laser releases through its normal updater. With the AppImage option, re-running the same line upgrades in place and tells you which version it moved from.

--uninstall removes exactly what the installer created. Not a directory it found and assumed was its own, not a configuration file that looked related — what it created. Anything you made, it asks about first.

This is a smaller promise than "clean uninstall" and a more useful one. It is easy to delete too much and call it thorough. The guarantee here is symmetry: the uninstall undoes the install, and stops.