Open-source project
torproject/torbrowser-launcher avatar
torproject/torbrowser-launcher

torbrowser-launcher is the small installer that verifies Tor Browser for you

Securely and easily download, verify, install, and launch Tor Browser in Linux. This repository is a mirror of https://gitlab.torproject.org/tpo/applications/torbrowser-launcher

886 stars189 forksPythonMIT

At a glance

What is it?
Tor Browser Launcher is the piece of the Tor Browser install on GNU/Linux that fetches the browser, checks that it was signed by the Tor developers, and hands it to you. It is a MIT licensed Python program, shipped as a distro package and as a Flatpak, and it is distributed from a GitLab repository with the GitHub one being a mirror.
Who is it for?
Adopt torbrowser-launcher if you install Tor Browser on Linux and you would rather have the download, the signature check and the desktop entries handled for you than follow a manual verification procedure every time the browser updates. Do not adopt it if you are on macOS or Windows, since this is a GNU/Linux tool, and do not use the Flatpak route without reading the security design document first, because the containment story is the interesting part of it.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 58 days ago.
What is it written in?
Mainly Python, 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

Four jobs, and the second one is the point

Tor Browser Launcher is intended to make Tor Browser easier to install and use for GNU/Linux users. You install torbrowser-launcher from your distribution's package manager and it handles everything else, and the README lists four things it takes care of.

The first is downloading and installing the most recent version of Tor Browser in your language and for your computer's architecture, or launching Tor Browser if it is already installed, in which case Tor Browser will automatically update itself. So the launcher is both an installer and a launcher, and it defers to the browser's own updater once the browser is present.

The second job is the one that matters. The launcher verifies Tor Browser's signature for you, to ensure the version you downloaded was cryptographically signed by Tor developers and was not tampered with.

The third is cosmetic but useful. It adds Tor Browser and Tor Browser Launcher Settings entries to your desktop environment's application menu, so the browser is not a file you have to find.

The fourth is the containment layer. The launcher includes AppArmor profiles to make a Tor Browser compromise not as bad.

Those four items together are the whole product, and they explain the design. A manual Tor Browser install on Linux is a sequence of steps involving a download, a signature file, a key, and a verification command, repeated every time the browser updates. The launcher exists to make that sequence invisible, and to make it impossible to skip the verification step by accident.

The licence is MIT, the primary language is Python, the default branch is main, and the last push was on 2026-08-26. The repository has no GitHub releases, and the release tags are Tor Browser Launcher 0.3.7 from 2024-01-28 and 0.3.6 from 2022-12-14.

AppArmor is the layer that changes the risk calculation

The fourth feature deserves more attention than the README gives it, because it is the one that is specific to Linux and the one with the clearest effect on what happens if something goes wrong.

The AppArmor profiles are included so that a Tor Browser compromise is not as bad. That is a precise phrase and it is worth unpacking. A browser that is fully compromised, with the attacker's code running inside the browser process with the user's session, is a bad position. A browser that is compromised but confined by a profile which limits what the process can reach, is a less bad one, because the damage stops at the boundary the profile draws.

For a tool whose entire job is to install software that is expected to handle hostile input, that containment is a sensible part of the package. It also means the launcher is not only a convenience wrapper, it is a component in the security architecture of the install, and the repository treats it that way, with the apparmor/ directory at the root alongside the Python package.

The README points at a security design document for the reasoning, at security_design.md in the repository root. The same directory also holds BUILD.md for the build instructions and CONTRIBUTING notes, so the three documents a security conscious adopter would want, the design rationale, the build, and the change log, are all in the tree rather than on a website.

The practical advice that follows from this is simple. If you are installing the launcher on a machine where the containment matters to you, read security_design.md before you start, and install it from Flatpak or from source rather than from a distribution package that may not ship the profiles in the configuration your distribution chose.

Two install routes, and a warning about the distro package

The installation section gives two routes, and it is careful about the difference between them.

The first is the distribution package. You can install torbrowser-launcher from your operating system's package manager, and Tor Browser Launcher is included in Ubuntu, Debian and Fedora. To install it in any other distribution, the README points at the build instructions in BUILD.md.

The warning comes with it. The package might be out of date and have issues working, and if you want to make sure you always have the latest version, the README says to use Flatpak.

The Flatpak route starts with installing Flatpak using the instructions linked from the project, and then the launcher itself:

bash
flatpak install flathub org.torproject.torbrowser-launcher -y

After that you run it either from the GUI desktop launcher or from the command line:

bash
flatpak run org.torproject.torbrowser-launcher

The Flatpak route is not only about being current. It is about isolation, and it puts the launcher and the browser in a sandbox that the AppArmor profiles complement rather than replace. For a user who is installing a browser designed to be hostile to its own environment, the container is doing part of the same job that the profiles do in the native install.

There is one more piece of advice at the top of the README that is easy to miss and useful in practice. Sometimes updates in Tor Browser itself will break Tor Browser Launcher, and the problem you are experiencing may already have been fixed in the newest version, so try installing from Flatpak or build from source. That is an acknowledgement that the launcher and the browser move on different schedules, and that the pairing is not always healthy.

The repository is the packaging, and most of it is not Python

The file listing shows a project that is mostly about getting a program onto Linux systems, and that is visible in the root.

There is the torbrowser_launcher/ directory with the Python package, setup.py, the torbrowser-launcher entry point script, and a share/ directory for the data that gets installed alongside. Then there is the packaging machinery: build_deb.sh and build_rpm.sh for the two main distribution formats, ppa_release.sh for the Ubuntu Personal Package Archive, stdeb.cfg for the Debian source build, git-tag_release.sh for tagging, and makepot.sh with a po/ directory for translations, alongside a torbrowser_launcher.pot template. There is a CHANGELOG.md, a CODEOWNERS file, an apparmor/ directory, and both a .gitlab/ directory and a .github/ directory, which is the trace of the mirror relationship.

The gettext setup is the part that explains the language support, and it connects back to the first feature in the list. The launcher downloads Tor Browser in your language, and the po/ directory and the makepot.sh script are how the launcher's own interface is translated.

For a contributor, the practical note is that the interesting work is not only the Python. Adding a language to the launcher means touching the translation workflow, and shipping the AppArmor profiles means understanding how they are installed alongside the package.

Distribution detection and message compilation in setup.py

The setup.py is where two of the launcher's specific behaviours are visible, and both are small pieces of logic that would otherwise be invisible to a reader.

The first is distribution detection. The script imports the distro package and calls distro.name() at the top level, before the setup call, and the comment above it says detect linux distribution. That value is what lets the launcher pick the right Tor Browser build and the right integration for the platform it is running on.

The second is the translation compilation, which is what the po/ directory is for:

python
def create_mo_files():
    po_dir = "po/"
    if not os.path.exists(po_dir):
        return []
    domain = "torbrowser-launcher"

The function walks the po/ directory, keeps the files whose extension is the one that holds the translations, and compiles them into the binary message catalogues the gettext runtime reads at run time. The domain string is the gettext domain, which has to match the one used in the source, and the existence check means a checkout without the translation directory still builds.

The setup.py also carries the licence header, the MIT text with the copyright lines for Micah Lee from 2013 to 2023 and for the Tor Project from 2024, which tells you something about the handover: the project had an individual maintainer for most of its life and is now maintained by the organisation.

The imports at the top of the file are the other quick read: os and sys for the filesystem work, distro for the platform detection, subprocess for running the things that have to run, and setuptools for the package definition.

Editorial conclusion

Adopt torbrowser-launcher if you install Tor Browser on Linux and you would rather have the download, the signature check and the desktop entries handled for you than follow a manual verification procedure every time the browser updates. Do not adopt it if you are on macOS or Windows, since this is a GNU/Linux tool, and do not use the Flatpak route without reading the security design document first, because the containment story is the interesting part of it. Before you install, check whether your distribution's package is current, since the README warns that a distribution version can be out of date, and keep the launcher and the browser in step, because the README notes that updates to Tor Browser itself can break the launcher.

Frequently asked questions

What does Tor Browser Launcher actually do?

It downloads and installs the most recent version of Tor Browser for your language and architecture, or launches Tor Browser if it is already installed, verifies Tor Browser's signature so you know it was signed by the Tor developers and not tampered with, adds application menu entries, and includes AppArmor profiles.

How do I install torbrowser-launcher on Linux?

It is included in Ubuntu, Debian and Fedora, and the README warns that the distribution version can be out of date and have issues. For the latest version, install from Flatpak with flatpak install flathub org.torproject.torbrowser-launcher -y, then run it with flatpak run org.torproject.torbrowser-launcher.

What do the AppArmor profiles in torbrowser-launcher do?

They are included to make a Tor Browser compromise not as bad, by confining what a compromised browser process can reach. The README also points to a security design document in the repository root for the reasoning behind the design.

Where is the canonical source for torbrowser-launcher?

This GitHub repository is a mirror. The project description points to the original at the Tor Project GitLab instance, and the releases are tagged there, with 0.3.7 from 2024-01-28 and 0.3.6 from 2022-12-14 as the most recent.

Why did torbrowser-launcher stop working after a Tor Browser update?

The README says updates in Tor Browser itself can break the launcher, and that the problem may already be fixed in the newest version of the launcher. It suggests installing from Flatpak or building from source as the way forward.

Official sources

  1. Issues
  2. License: MIT
  3. README
  4. Releases
  5. torproject/torbrowser-launcher on GitHub
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/torproject-torbrowser-launcher.svg)](https://hysenlabs.com/projects/torproject-torbrowser-launcher)

Was this useful?