A CLI tool to install any website as a desktop app on Linux using your system's Chromium.
tack takes a website URL and a name, and automatically sets up a desktop application for it. It features a robust icon fetching pipeline: it first checks your local icon cache, then tries to fetch high-quality SVG logos from svgl.app, scrapes the website's HTML for <link> tags (like apple-touch-icon), and finally falls back to /favicon.ico or the Google Favicons API. It supports .png, .svg, and even legacy .ico formats (which it natively converts to .png). It then generates a .desktop file that launches the website using your browser in a standalone app window. All installed applications are tracked in a metadata manifest.
It can auto-detect installed browsers by scanning your PATH and handles specific command line flags automatically (like --app= for Chromium-based or --ssb for Firefox-based browsers).
tack <url> <name> [--force] [--icon PATH] [--browser BROWSER] [--dry-run] [--quiet] [--verbose]
tack -i # interactive mode
tack list
tack open <name>
tack update <name> [--name NAME] [--url URL] [--browser BROWSER] [--icon PATH] [--dry-run]
tack update --all
tack remove <name>
tack export [file]
tack import <file>
tack completions <bash|zsh|fish>
tack manpage
tack config show
tack config set <key> <value>
tack --versionTo install YouTube as a desktop app:
tack https://youtube.com YouTubeThis will create a "YouTube" application in your app launcher. tack will normalize URLs (adding https:// if missing), validate them, and sanitize app names. If an app with the same name is already installed, it will exit unless you provide the --force flag to overwrite it.
You can also bypass the automatic icon fetching by providing a custom icon path:
tack https://youtube.com YouTube --icon /path/to/my-icon.pngTo specify a browser explicitly instead of relying on auto-detection:
tack https://youtube.com YouTube --browser firefoxFor a guided setup, use -i to be prompted step-by-step for the URL, name, browser, and icon:
tack -iThis will show detected browsers as a numbered list and let you choose an icon source (fetch from URL, custom path, or default).
Preview what tack would do without writing anything to disk:
tack https://youtube.com YouTube --dry-runControl how much output tack produces:
tack https://youtube.com YouTube --quiet # suppress stdout, errors still go to stderr
tack https://youtube.com YouTube --verbose # detailed logs (paths, HTTP status, format detection)To list all applications currently installed and managed by tack:
tack listTo launch a previously installed application from the terminal:
tack open YouTubeTo modify an existing application (e.g., change its name, URL, browser, or icon):
tack update YouTube --name "YouTube Music" --url https://music.youtube.comIf no flags are provided, tack update runs in "repair mode", which re-fetches the favicon and regenerates the .desktop file.
To update all applications at once (e.g. re-fetching missing icons and regenerating desktop files for every installed app):
tack update --allYou can export your installed apps manifest as a portable JSON file, and restore them on another machine:
# Dump JSON to stdout
tack export
# Save to a file
tack export backup.json
# Restore from backup file
tack import backup.jsonTo remove an installed application:
tack remove YouTubeThis removes the .desktop file, the saved icon (if managed by tack), and the app's entry from the manifest.
You can use tack config to manage default behaviors like the default browser and default categories for the generated .desktop files. The config is saved at ~/.config/tack/config.toml.
To show the current configuration:
tack config showTo update a configuration value:
tack config set browser brave-browser
tack config set categories "Network;Entertainment;"Generate tab-completion scripts for your shell:
# Bash — append to ~/.bashrc
tack completions bash >> ~/.bashrc
# Zsh — add to fpath
tack completions zsh > ~/.zfunc/_tack
# Fish
tack completions fish > ~/.config/fish/completions/tack.fishView or install the man page:
tack manpage | man -l - # view directly
tack manpage | sudo tee /usr/local/share/man/man1/tack.1 # install- Auto icon fetching — svgl.app → HTML
<link>tags →/favicon.ico→ Google Favicons API - ICO to PNG conversion — native, no external tools
- Browser auto-detection — scans
PATHfor Chromium/Firefox-based browsers - Colored output — green/yellow/red ANSI colors, respects
NO_COLOR - URL validation — catches malformed URLs before any work is done
- Offline detection — fast TCP check before attempting network requests
- Interactive mode (
-i) — guided step-by-step setup - Dry run (
--dry-run) — preview changes without touching the filesystem - Quiet/Verbose (
--quiet,--verbose) — control output verbosity - Persistent config —
~/.config/tack/config.tomlfor defaults - Export/Import — portable JSON backup and restore
- Shell completions — bash, zsh, fish via
tack completions - Man page — auto-generated via
tack manpage
- Linux
- A supported browser (Chromium-based or Firefox-based) installed on your system
- Rust and Cargo (for building from source)
yay -S tack-cligit clone https://github.com/plasmaDestroyer/tack.git
cd tack
cargo build --release
# The executable will be available at target/release/tack~/.local/share/applications/<slug>.desktop~/.local/share/icons/<slug>.{png,svg}~/.local/share/tack/apps.json(apps tracking manifest)