Loupe
GNOME's default image viewer since GNOME 45, written in Rust with GTK4 and sandboxed image loading via the glycin library.
Loupe is the official GNOME image viewer, shipped as part of GNOME Core since
GNOME 45, replacing the long-serving Eye of GNOME (eog). It is written entirely
in Rust using GTK4 and libadwaita, bringing GPU-accelerated rendering and a
modern adaptive interface to everyday image browsing. What sets Loupe apart
architecturally is its use of the glycin library, which decodes each image
format in a separate sandboxed process — meaning a maliciously crafted image
file cannot compromise the host application or the user's session.
Features
- Sandboxed image decoding — The
glycinlibrary runs each image decoder in an isolated subprocess, preventing malicious image files from escaping into the viewer process. - GPU-accelerated rendering — GTK4's scene graph renders images on the GPU, enabling smooth zoom and pan even on large files.
- SVG support with tiled rendering — Scalable vector graphics are rendered at native resolution using tiled rendering to handle arbitrarily large SVGs without exhausting memory.
- EXIF-aware rotation — Rotating a JPEG writes the new orientation to the file's EXIF metadata rather than re-encoding pixel data, preserving quality.
- Print layout dialog — A dedicated print dialog lets you set paper size, margins, and image scaling before sending to a printer.
- Touch and trackpad gestures — Pinch-to-zoom and swipe-to-navigate work naturally on touchscreens and precision touchpads.
- High-DPI aware — Images are displayed at the correct physical size on HiDPI screens without blurring.
- Adaptive layout — The UI adapts to narrow windows and mobile form factors, consistent with libadwaita design conventions.
- Wide format support — JPEG, PNG, WebP, AVIF, HEIC, GIF, TIFF, BMP, SVG, and more via the glycin loader ecosystem.
- GNOME Core — Loupe is installed on every standard GNOME desktop; no separate installation is needed on GNOME-based systems.
Installation
On most GNOME-based desktops Loupe is already present. If you need to install or update it:
# Flatpak — Flathub (recommended for latest version)
flatpak install flathub org.gnome.Loupe
# Fedora (included in GNOME spin by default)
sudo dnf install loupe
# Debian 13 (Trixie) / Ubuntu 24.10+
sudo apt install loupe
# Arch Linux
sudo pacman -S loupe
# Nix
nix-env -iA nixpkgs.loupeUsage
Loupe registers itself as the default image viewer on GNOME, so double-clicking any image in Files (Nautilus) opens it automatically. You can also launch it from the terminal:
# Open a single image
loupe photo.jpg
# Open multiple images — navigate between them with arrow keys
loupe *.png
# Open from a directory — all images in the directory become navigable
loupe ~/Pictures/holiday/IMG_0001.jpgKeyboard shortcuts
| Action | Shortcut |
|---|---|
| Next image | → or Space |
| Previous image | ← |
| Zoom in | + or Ctrl+= |
| Zoom out | - |
| Fit to window | 0 |
| Full-screen | F or F11 |
| Rotate clockwise | R |
| Rotate counter-clockwise | Shift+R |
| Open print dialog | Ctrl+P |
| Copy image | Ctrl+C |
| Trash file | Delete |
Viewing image properties
Click the ⓘ button in the header bar to open the Properties panel. It shows file size, dimensions, colour profile, camera make and model, exposure settings, and GPS coordinates (with a map link) when EXIF data is present.
glycin: Sandboxed image loading
The glycin library is the security foundation that distinguishes Loupe from
most image viewers. Traditional viewers load image data directly in the
application process; a heap overflow in a JPEG decoder, for example, could give
an attacker control of the viewer process and access to the user's files.
Glycin addresses this by forking a separate, sandboxed loader process for each image. The loader process:
- Runs under a restrictive seccomp-bpf syscall filter
- Has no network access
- Can only read the specific file it was asked to decode
- Communicates results back to Loupe over a private D-Bus socket
If the loader crashes or is exploited, the damage is contained to that short-lived process. This architecture also means adding a new image format only requires writing a new loader — the viewer itself needs no changes.
Loupe vs Eye of GNOME
| Feature | Loupe | Eye of GNOME |
|---|---|---|
| Language | Rust | C |
| Toolkit | GTK4 + libadwaita | GTK3 |
| Sandboxed loading | ✅ (glycin) | ❌ |
| GPU rendering | ✅ | ❌ |
| AVIF / WebP support | ✅ | Limited |
| Adaptive / mobile UI | ✅ | ❌ |
| Print dialog | ✅ | ✅ |
| Touch gestures | ✅ | ❌ |
| Maintained | ✅ | Minimal |