Native GTK4 & libadwaita

Turn any website into
a real GNOME app

Install web apps that look and behave like native software — their own window, icon, profile and notifications. Built for GNOME, powered by Chromium.

Four web apps running as separate native GNOME windows, tiled
Your web apps run as real, separate GNOME windows — tile them, Alt-Tab between them, each with its own icon and session.
DRM streaming is not supported. Netflix, Spotify, Apple Music, Disney+ and other DRM services won't play and aren't offered as templates — they need a Google-certified (VMP-signed) Widevine that no embeddable engine can obtain (we verified CEF and WebKitGTK both hit this wall). Everything without DRM works: YouTube, Twitch, SoundCloud, and every non-streaming web app. Details in issue #36.
Features

Everything a desktop app should be

One-click templates

A curated catalog of 50+ popular apps — Gmail, Teams, Spotify, WhatsApp, Notion, Figma and the major AI tools — added in a single click.

Shared logins + profile color

Group apps onto a profile to sign in once and run them side by side with one session, or keep each private — a colored indicator shows which identity (Work vs Private) each app uses.

Identify as any OS

Spoof the browser user agent — Windows, macOS, Mobile or a custom string — for services that gate features by operating system.

Native window & identity

Each app gets its own libadwaita window, dock icon and Alt-Tab entry — not a browser tab.

Smart link handling

Keep everything in-window, or send other sites to your browser — with an SSO/CAPTCHA allowlist so multi-domain sign-in (Microsoft, Google) never breaks.

Sticky notifications + background

Notifications carry the app's name and icon and stay in the list; background mode keeps an app running so they keep arriving after you close it.

Ad & tracker blocking

An optional per-app blocklist strips ads and trackers from sites like YouTube — no extension needed.

Force light or dark

Pin a site to light or dark per app, independent of your system theme. Plus custom CSS and per-app zoom that's remembered.

Default handlers

Make a web app your default for email, calendar or calls — even Teams/Zoom deep links that have no Linux app.

Permission control

Camera, microphone and location are blocked unless you allow them per app. Downloads land in your Downloads folder.

Crisp on HiDPI

Renders at the display's true fractional scale, so it stays sharp on scaled and fractional-scaling setups.

Automatic icons

Crisp logos from the manifest, an online icon search, or your own file. Always a clean icon.

Real site compatibility

Chromium (CEF) rendering means Chrome-only sites and the full codec set just work.

Templates

Add your favourites in seconds

No need to hunt for URLs or icons. Open the template gallery, click an app, choose a login profile and you're done — perfect for the web-only services Linux desktops are missing.

The Add from Template gallery of popular web apps
The web-app editor with profile and default-handler options
Per-app control

Profiles, icons & defaults

Share a login profile across apps to sign in once, search icons online, and set an app as your system default for email, calendar or calls — the toggles adapt to what each app can do.

A web app rendering natively in its own GNOME window
Crisp native rendering in a real window — indistinguishable from a desktop app.
In use

Work and personal, side by side

Microsoft Teams running as a native window on a shared Work profile
Microsoft Teams on a shared “Work” profile — the title bar shows the profile indicator. Apps sharing a profile run at the same time with one shared login.
YouTube Music playing in its own window
YouTube Music with full audio — a real media app.
YouTube video playing with full codec support
Video just works — Chromium (CEF) brings the full codec set.
Install

Up and running in one command

NixOS / Nix

# try it
nix run github:olafkfreund/gnome-quick-web-apps

# install
nix profile install \
  github:olafkfreund/gnome-quick-web-apps

A Home Manager module lets you declare web apps in your config. On NixOS, URL-scheme handlers (mailto, calendar) can't be set at runtime — opt in per app with setDefaultHandlers = true and the module writes them declaratively. See the README.

Flatpak

# build & install locally
flatpak-builder --user --install \
  --force-clean build \
  build-aux/flatpak/io.github.olafkfreund.QuickWebApps.yml