Debian backports provide newer software versions from the next Debian release, recompiled to work with your current stable system. This approach lets you install updated NVIDIA drivers on Debian, recent development toolchains, or desktop applications with new features without upgrading your entire operating system. By the end of this guide, you will have backports configured, understand how APT’s priority system protects your base system, and know how to selectively install backported packages. The guide also covers the experimental repository for developers testing pre-release software in isolated environments.
Supported Versions
| Release | Status | Backports Suite | Support |
|---|---|---|---|
| Debian 13 (Trixie) | Stable | trixie-backports | Active |
| Debian 12 (Bookworm) | Oldstable | bookworm-backports | Active until ~1 year after next stable |
| Debian 11 (Bullseye) | LTS until Aug 2026 | bullseye-backports | Discontinued (mid-2024) |
Debian 11 (Bullseye) backports were officially discontinued in mid-2024 per the one-year oldstable policy. If you are running Debian 11 and need backported packages, upgrade to Debian 12 or 13 before continuing.
Backports vs. Experimental: Quick Comparison
Debian provides two ways to access newer packages beyond the stable release. Understanding when to use each prevents stability issues and security risks:
| Repository | Package Source | APT Priority | Support Level | Best For |
|---|---|---|---|---|
| Backports | Testing (recompiled for stable) | 100 (manual install) | Best-effort by maintainers | Desktop apps, newer kernels, dev tools on production-adjacent systems |
| Experimental | Alpha/pre-release packages | 1 (never auto-installs) | None (expect breakage) | Developers testing unreleased software in disposable environments only |
For most users, backports are the appropriate choice. Use experimental only if you are a Debian developer, package maintainer, or tester working in isolated virtual machines or containers where complete data loss is acceptable.
What Are Debian Backports?
Debian backports are packages compiled from the next Debian release (testing) but rebuilt to work with the current stable release libraries and dependencies. When you install a backported package, APT automatically assigns it a low priority (100) so regular stable packages take precedence during updates. This prevents backports from accidentally replacing stable system packages unless you explicitly request them, maintaining the stability that makes Debian suitable for servers and production environments.
Backports use distinctive version numbers with the ~bpoXX+Y suffix, where XX represents the Debian version number and Y tracks the backport revision. For example, a package version like 2.4.5-1~bpo13+1 indicates a backport built for Debian 13 (Trixie). The tilde character ensures these versions sort lower than future stable releases, guaranteeing a clean upgrade path when Debian releases the next major version.
Unlike a full distribution upgrade, backports let you selectively update individual packages while keeping the rest of your system on stable. This targeted approach works well for desktop systems needing newer applications, development machines requiring recent toolchains, or servers that need updated drivers for new hardware without the risk and complexity of upgrading the entire operating system.
Enable Debian Backports (DEB822 Format)
Modern Debian releases use the DEB822 .sources format for repository configuration, replacing the legacy one-line .list format. DEB822 provides clearer syntax, multi-architecture support, and easier machine parsing.
Step 1: Identify Your Debian Release Codename
Backports are tied to your release codename, so confirm it before choosing the repository file below:
grep VERSION_CODENAME /etc/os-release
Expected output looks like:
VERSION_CODENAME=trixie
The codename will match your release, such as
trixieorbookworm. If you seebullseye, Debian 11 backports are discontinued, so upgrade before continuing.
If you are using a minimal container or cloud image and HTTPS downloads fail, install the CA bundle first. HTTPS repositories require SSL/TLS certificate verification, and minimal images often omit the root certificate bundle to save space:
sudo apt update
sudo apt install ca-certificates
Step 2: Check for Existing Backports Configuration
Before adding a separate backports file, check whether backports is already configured in your system. This commonly occurs if you previously followed a guide to enable contrib and non-free repositories on Debian, as those configurations often include backports by default:
grep -rE "(trixie|bookworm)-backports" /etc/apt/sources.list.d/ 2>/dev/null
If this command returns output showing backports entries, you already have backports configured and can skip to the “Find Available Backported Packages” section. Adding a separate backports file when one already exists causes duplicate repository warnings during apt update.
If you see warnings like “Target Packages is configured multiple times,” you have duplicate backports entries. Remove the redundant file with
sudo rm /etc/apt/sources.list.d/debian-backports.sourcesand use the existing configuration in yourdebian.sourcesfile instead.
Step 3: Add the Backports Repository
If no existing backports configuration was found, create a dedicated backports repository file. The cat <<EOF heredoc syntax lets you write multiple lines directly without opening a text editor, and tee writes the content to the specified file with elevated privileges:
Use either the Debian 13 or Debian 12 block below, not both. Running both commands will overwrite the same
debian-backports.sourcesfile.
Debian 13 (Trixie)
For Debian 13 (Trixie), the current stable release, create the backports repository configuration:
cat <<EOF | sudo tee /etc/apt/sources.list.d/debian-backports.sources
Types: deb deb-src
URIs: https://deb.debian.org/debian
Suites: trixie-backports
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF
Debian 12 (Bookworm)
For Debian 12 (Bookworm), the current oldstable release with active backports support, create the configuration:
cat <<EOF | sudo tee /etc/apt/sources.list.d/debian-backports.sources
Types: deb deb-src
URIs: https://deb.debian.org/debian
Suites: bookworm-backports
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF
If you do not need source packages for rebuilding or debugging, remove deb-src from the Types: line to reduce download size.
The configuration above includes
contrib,non-free, andnon-free-firmwarecomponents for proprietary software and firmware packages. TheSigned-Byfield references Debian’s official keyring, ensuring package authenticity without deprecatedapt-keyusage. For background on these components and how to enable them in your main repositories, see how to enable contrib and non-free repositories on Debian.
After creating the repository file, refresh APT’s package cache to include backports in the available package list:
sudo apt update
Once completed, the update process fetches package indices from all configured repositories, including your newly added backports source. On Debian 13, output looks like this:
Hit:1 http://deb.debian.org/debian trixie InRelease Hit:2 http://deb.debian.org/debian trixie-updates InRelease Hit:3 http://deb.debian.org/debian-security trixie-security InRelease Get:4 https://deb.debian.org/debian trixie-backports InRelease [54.0 kB] Get:5 https://deb.debian.org/debian trixie-backports/main Sources [120 kB] Get:6 https://deb.debian.org/debian trixie-backports/main amd64 Packages [135 kB] Get:7 https://deb.debian.org/debian trixie-backports/contrib amd64 Packages [5752 B] Get:8 https://deb.debian.org/debian trixie-backports/non-free amd64 Packages [7352 B] Fetched 334 kB in 0s (5067 kB/s) Reading package lists... Building dependency tree... Reading state information...
On Debian 12, the output shows bookworm-backports instead, with similar package fetch lines. The key confirmation is seeing Get lines for your backports suite, indicating APT successfully found and indexed the repository.
Find Available Backported Packages
Backports appear in normal APT searches alongside stable packages, but you can filter results to see only backported versions. The apt search command with the -t flag (target release) limits results to packages available from a specific suite.
To search for packages in the Trixie backports repository:
apt search -t trixie-backports package-name
For Bookworm backports:
apt search -t bookworm-backports package-name
In
apt searchoutput, Debian 13 labels backports asstable-backports, while Debian 12 showsoldstable-backports. Both labels are normal.
To see all available versions of a package across stable and backports repositories, use apt-cache policy. The Linux kernel is a common backports target since newer kernels provide better hardware support:
apt-cache policy linux-image-amd64
Example output on Debian 13 showing version priorities:
linux-image-amd64:
Installed: (none)
Candidate: 6.12.57-1
Version table:
6.17.8-1~bpo13+1 100
100 https://deb.debian.org/debian trixie-backports/main amd64 Packages
6.12.57-1 500
500 http://deb.debian.org/debian trixie/main amd64 Packages
6.12.48-1 500
500 http://deb.debian.org/debian-security trixie-security/main amd64 Packages
This output shows the installed version (if any), the candidate version APT would install by default, and all available versions with their repository sources and priorities. Backports show priority 100, while stable and security packages show priority 500, so the candidate remains the stable version (6.12.57-1) unless you explicitly request backports. The backported version includes a ~bpo13+1 suffix indicating it was rebuilt for Debian 13. On Debian 12, the suffix would be ~bpo12+1.
Install or Upgrade Packages from Backports
Debian backports are low-priority by default, meaning APT will not automatically install or upgrade to backported versions during regular updates. You must explicitly request backports using one of two methods: slash notation (preferred) or the -t target release flag.
Slash Notation Method (Recommended)
The slash notation explicitly tells APT which suite to use for a specific package. This method pulls only the requested package from backports while preferring stable packages for dependencies when possible:
For Trixie backports:
sudo apt install package-name/trixie-backports
For Bookworm backports:
sudo apt install package-name/bookworm-backports
When backported packages have dependencies that also require backports versions, APT will prompt you to install them. You can specify multiple packages from backports in a single command:
sudo apt install package-name/trixie-backports dependency-package/trixie-backports
Target Release Method (Alternative)
The -t flag sets the target release for the entire operation. This method can pull more packages from backports than strictly necessary, potentially including dependencies that have stable versions available:
For Trixie backports:
sudo apt install -t trixie-backports package-name
For Bookworm backports:
sudo apt install -t bookworm-backports package-name
Use slash notation when you want minimal backports installation, and use -t when you need an entire dependency chain from backports.
Example: Installing Newer Kernel from Backports
Linux kernel packages in backports often provide better hardware support for recent devices. For even newer kernels beyond what backports offers, see our guide on installing the latest Linux kernel on Debian. To install the latest kernel from Trixie backports:
sudo apt install -t trixie-backports linux-image-amd64 linux-headers-amd64
On Debian 12, replace
trixie-backportswithbookworm-backportsin the command above.
Reboot after installation to load the newer kernel. Verify the running kernel version:
uname -r
The output shows the backported kernel version, for example on Debian 13:
6.17.8-1~bpo13+1-amd64
The ~bpo13+1 suffix confirms you are running the backported kernel rather than the default stable kernel (6.12.x). On Debian 12, the suffix would be ~bpo12+1.
Verify Backports Installation
After installing backported packages, you can verify which packages came from backports by checking for the distinctive ~bpo version suffix. This helps you track backported packages separately from regular stable packages.
List all installed packages from backports:
dpkg-query -W | grep '~bpo'
Example output showing installed backported packages:
linux-headers-6.17.8+deb13-amd64 6.17.8-1~bpo13+1 linux-image-6.17.8+deb13-amd64 6.17.8-1~bpo13+1
If no output appears, you have no backported packages installed yet. On Debian 12, the suffix would show ~bpo12+1 instead.
For more detailed information about a specific package, including which repository it came from:
apt-cache policy linux-image-amd64
After installing from backports, output highlights the installed backports version with ***:
linux-image-amd64:
Installed: 6.17.8-1~bpo13+1
Candidate: 6.12.57-1
Version table:
*** 6.17.8-1~bpo13+1 100
100 https://deb.debian.org/debian trixie-backports/main amd64 Packages
6.12.57-1 500
500 http://deb.debian.org/debian trixie/main amd64 Packages
The output shows the installed version marked with ***, the candidate version APT would install by default, and all available versions from different repositories with their priority scores. When you install from backports, the *** marker moves to the backports line even though the candidate often remains the stable version due to its higher priority (500 vs 100).
Understanding the Experimental Repository
The Debian experimental repository (codename RC-Buggy) serves as a staging area for packages still in alpha testing, known to have problems, or requiring extensive collaboration before moving to unstable. Unlike stable, testing, and unstable, experimental is not a complete distribution. It functions only as an extension of unstable, meaning experimental packages can depend on unstable packages, but unstable packages cannot depend on experimental ones.
Packages typically reach experimental when developers know they have significant issues, need extensive testing before widespread use, or require breaking changes that would disrupt unstable. Some package maintainers bypass experimental entirely and put new versions directly into unstable. Migration from experimental to unstable happens entirely at the maintainer’s discretion with no automated schedule or consistency requirements.
The Debian Experimental repository explicitly warns: “This directory contains packages and tools which are still being developed, and are still in the alpha testing stage. Users should not be using packages from here, because they can be dangerous and harmful even for the most experienced people.” Experimental packages are intended exclusively for Debian developers, package maintainers, and testers who understand the risks and can handle broken systems. Never use experimental repositories on production servers, critical workstations, or systems where data loss or downtime would cause problems.
Add Experimental Repository (Testing Systems Only)
When configuring the experimental repository, use DEB822 format on modern Debian releases. Create a separate .sources file for experimental to keep it isolated from your backports configuration:
cat <<EOF | sudo tee /etc/apt/sources.list.d/experimental.sources
Types: deb deb-src
URIs: https://deb.debian.org/debian
Suites: experimental
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF
Refresh the package cache to include experimental packages:
sudo apt update
Example output after adding experimental:
Hit:1 http://deb.debian.org/debian trixie InRelease Hit:2 https://deb.debian.org/debian trixie-backports InRelease Get:3 https://deb.debian.org/debian experimental InRelease [91.1 kB] Get:4 https://deb.debian.org/debian experimental/main Sources [352 kB] Get:5 https://deb.debian.org/debian experimental/main amd64 Packages [434 kB] Get:6 https://deb.debian.org/debian experimental/contrib amd64 Packages [6020 B] Fetched 912 kB in 2s (425 kB/s) Reading package lists... Building dependency tree... Reading state information...
Experimental packages have the lowest possible APT priority (1), compared to backports (100) and stable (500). This ensures experimental packages never install automatically during regular updates or upgrades. You must explicitly request experimental packages every time using slash notation or the -t flag.
Verify the priority assignment by checking APT’s policy:
apt-cache policy | grep -A2 'experimental/main'
Expected output confirming priority 1:
1 https://deb.debian.org/debian experimental/main amd64 Packages
release o=Debian,a=experimental,n=rc-buggy,l=Debian,c=main,b=amd64
origin deb.debian.org
The priority value of 1 means experimental packages will never become installation candidates unless you explicitly request them. You may see multiple component entries (main, contrib, non-free, non-free-firmware), and the key detail is the priority value.
Install Packages from Experimental Repository
Installing from experimental follows the same patterns as backports, using either slash notation or the -t flag. However, experimental packages often have complex dependency chains requiring multiple experimental packages simultaneously.
Check if a package has an experimental version available using apt-cache policy:
apt-cache policy package-name
Experimental versions appear with priority 1 and an experimental component source (such as experimental/main) in the version table. Some packages use a ~exp version suffix (for example, 6.18~rc7-1~exp1) to indicate experimental status.
Install using slash notation:
sudo apt install package-name/experimental
Alternatively, install using the target release flag, which pulls dependencies from experimental more aggressively:
sudo apt install -t experimental package-name
List packages installed from experimental. The ~exp suffix is common but not guaranteed, so this command only catches packages that include it:
dpkg-query -W -f='${Package} ${Version}\n' | grep -E '~exp'
No output means none of your installed packages use a
~expversion suffix.
Because dpkg does not record the source repository, there is no single reliable command to list every installed package from experimental. Track what you install from experimental and verify specific packages with apt-cache policy:
apt-cache policy package-name
Example output showing an installed experimental package:
example-package:
Installed: 3.0.1-1~exp1
Candidate: 2.5.0-1
Version table:
*** 3.0.1-1~exp1 1
1 https://deb.debian.org/debian experimental/main amd64 Packages
2.5.0-1 500
500 http://deb.debian.org/debian trixie/main amd64 Packages
The *** marker shows the installed version, and the candidate remains the stable version because experimental has priority 1. The ~exp1 suffix identifies experimental builds.
Experimental packages can break your system, cause data loss, or introduce security vulnerabilities. Use experimental exclusively on disposable test systems, development virtual machines, or isolated containers where complete system reinstallation is acceptable. Keep regular backups and be prepared to troubleshoot broken packages, missing dependencies, and configuration conflicts without official support channels.
Backports Best Practices
Selective backports usage maintains stability while accessing newer software. Install backported packages only when you need specific features or hardware support unavailable in stable releases. Avoid enabling backports system-wide or installing large numbers of backported packages, as this increases the risk of dependency conflicts and reduces the stability benefit of running Debian stable.
Desktop systems and development workstations benefit most from backports since newer applications, updated development tools, and recent kernel drivers improve usability without the complexity of full distribution upgrades. Production servers should use backports sparingly, limiting them to specific packages where newer versions fix critical bugs or provide essential security updates. Test backported packages in staging environments or isolated containers before deploying to production systems.
When Debian releases a new major version, your backported packages automatically become regular stable packages during the upgrade. The ~bpo version numbering ensures clean upgrade paths without manual intervention. However, bookworm-backports-sloppy packages (backports from testing rather than the next stable) break this upgrade guarantee and should be avoided unless you accept manual package management during distribution upgrades. This guide does not enable the sloppy suite, and you should treat it as an expert-only option. The sloppy suite provides packages from testing that cannot enter regular backports due to version constraints, but sacrifices the guaranteed upgrade path.
When NOT to Use Backports
Avoid backports when system stability is critical. Production databases, mail servers, authentication systems, and other infrastructure services should run Debian stable packages unless a specific bug or security vulnerability requires a backported version. Backports receive less extensive testing than stable packages and can introduce unexpected behavior or compatibility issues with other system components.
Skip backports for packages with complex dependency chains unless you verify all dependencies are available from backports. Installing one backported package that pulls in dozens of backported libraries increases system complexity and upgrade risk. Use apt-cache policy package-name to check dependency sources before committing to backports installations, and prefer slash notation over -t to minimize the backported package footprint.
Remove Backports and Experimental Repositories
If you no longer need backports or experimental packages, remove the repository configuration files and revert to stable packages. This cleanup process prevents accidental installation of non-stable packages during future updates.
Remove the backports repository:
sudo rm /etc/apt/sources.list.d/debian-backports.sources
To also remove the experimental repository:
sudo rm /etc/apt/sources.list.d/experimental.sources
After removing the repository files, refresh the package cache:
sudo apt update
Removing the repository files does not automatically downgrade installed packages. Backported and experimental packages remain installed at their current versions and stop receiving updates until you explicitly downgrade them.
To return a package to your stable release, reinstall it using your codename. Add --allow-downgrades if APT warns about version changes:
sudo apt install --allow-downgrades package-name/$(. /etc/os-release && echo "$VERSION_CODENAME")
Use apt-cache policy package-name to review available versions before downgrading.
For a complete list of installed backported packages that may need attention:
dpkg-query -W | grep '~bpo'
Common Backports Issues and Solutions
Dependency conflicts occur when backported packages require newer library versions than stable provides. APT will show detailed error messages listing the conflicting packages. For example, attempting to install a backported application might produce:
The following packages have unmet dependencies: application-name : Depends: libexample5 (>= 2.5) but 2.3 is to be installed E: Unable to correct problems, you have held broken packages.
Check whether the required dependencies are also available from backports using apt-cache policy libexample5, then explicitly install them from backports before retrying the main package installation. Most dependency conflicts resolve by installing the entire dependency chain from backports using the -t flag method.
If a backported package causes problems, downgrade it to the stable version:
sudo apt install --allow-downgrades package-name/$(. /etc/os-release && echo "$VERSION_CODENAME")
Because this is a downgrade, APT may prompt for confirmation. If you need to reset configuration files, run sudo apt purge package-name first, then reinstall the stable package with the codename command.
Package updates may temporarily disappear from backports between stable releases. Backports track testing, so when testing freezes during release preparation, fewer packages receive updates. Additionally, major library transitions can temporarily remove packages from backports until all dependencies rebuild successfully. Check the official backports website for announcements about package availability during these periods.
Repository Does Not Have a Release File
If you encounter the error “The repository does not have a Release file” when running apt update, the backports repository for your Debian version has been discontinued. This applies to Debian 11 (Bullseye) and older releases:
E: The repository 'https://deb.debian.org/debian bullseye-backports Release' does not have a Release file.
To resolve this, remove the outdated backports configuration and upgrade your system to a supported Debian version:
sudo rm /etc/apt/sources.list.d/debian-backports.sources
sudo apt update
After removing the obsolete backports configuration, plan an upgrade to Debian 12 or Debian 13 to regain access to backported packages. Backports for each Debian release are only supported for one year after the next stable version releases.
Rolling Back Multiple Backported Packages
If multiple backported packages cause system instability, you can downgrade them together by reinstalling from stable. First, identify all installed backported packages:
dpkg-query -W | grep '~bpo' | cut -f1 > backports-list.txt
Review the list, remove any packages you want to keep on backports, then downgrade the remaining packages to your stable release:
CODENAME=$(. /etc/os-release && echo "$VERSION_CODENAME")
while read -r pkg; do sudo apt install --allow-downgrades "$pkg/$CODENAME"; done < backports-list.txt
This forces APT to select the stable version for each listed package. If dependencies are also backported, APT may propose additional downgrades, so review the plan before proceeding.
Resolving Experimental Package Issues
Experimental packages frequently break due to incomplete dependency chains or untested interactions with stable system components. When an experimental package causes problems, immediately remove it and any experimental dependencies it pulled in:
sudo apt remove package-name
sudo apt autoremove
If removal fails due to broken dependencies, force the removal:
sudo dpkg --remove --force-remove-reinstreq package-name
sudo apt --fix-broken install
After removing problematic experimental packages, consider removing the experimental repository entirely to prevent accidental reinstallation. Experimental should only remain enabled while actively testing specific packages, not as a persistent configuration.
Reporting Bugs in Backported Packages
Backported packages require special bug reporting procedures since the Debian Bug Tracking System does not track backports versions separately. Report bugs found in backported packages to the debian-backports mailing list instead of the standard Debian Bug Tracking System (BTS). Include the full package version with the ~bpo suffix, your Debian version (Trixie or Bookworm), and steps to reproduce the issue. The backports team can then determine whether the bug exists in testing or originates from the backport recompilation process.
Security updates for backports packages follow a best-effort basis handled by individual package maintainers. When security vulnerabilities are fixed in Debian unstable, backporters can upload directly from unstable without waiting for migration to testing. Subscribe to the debian-backports-announce mailing list to receive notifications about security updates and important changes affecting backported packages.
Conclusion
You now have Debian backports and experimental configured with safe, explicit install methods. Use apt-cache policy to confirm package sources, slash notation for selective installs, and the -t flag when you need full dependency chains. Next, test risky upgrades in Docker on Debian and follow Debian Backports News for security and availability updates.
Sorry, question (2) should read “how do you UNinstall a package?”
Thanks for the clarification, Ernesto. To uninstall a package installed from backports, use the standard removal commands. APT treats backported packages the same as regular packages for uninstallation purposes.
Remove the package while keeping its configuration files:
Completely remove the package including configuration files:
After uninstalling a backported package, you can optionally reinstall the stable version if it exists. APT automatically selects the stable repository version since it has higher priority than backports. The “Rolling Back Multiple Backported Packages” section in the guide covers this scenario when you need to downgrade several packages at once.
Thank you, this is a very clear guide. I have a couple of questions.
(1) you state “Append the appropriate lines to the file based on your Debian version. Use the correct codename for your Debian distribution to avoid issues.”
For the bookworm backport you mention 2 lines:
deb http://deb.debian.org/debian bookworm-backports main contrib non-free-firmware
deb-src http://deb.debian.org/debian bookworm-backports main contrib non-free-firmware
I am on Linux Mint Debian Edition (LMDE) 6 Faye, which is based on Debian 12 Bookworm, so how do I know which of the 2 lines is the appropriate one?
If, as an example the 1st line is the appropriate one, should I add that line to the file as
deb http://deb.debian.org/lmde bookworm-backports main contrib non-free-firmware
(2) how do you install a package?
Thanks for reading the guide, Ernesto. This article has been updated since you last visited, and now uses the modern DEB822
.sourcesformat instead of the legacy.listformat you referenced. The current instructions are much simpler and more maintainable.To answer your questions about LMDE 6 (Faye): LMDE is based on Debian repositories but uses its own package management infrastructure. Do not add Debian backports repositories to LMDE systems. LMDE receives updates through Linux Mint’s own repositories and adding Debian backports can cause package conflicts, dependency issues, and system instability. The Linux Mint team carefully curates packages for LMDE compatibility, and mixing Debian backports bypasses that quality control.
For your second question about installation, the “Install or Upgrade Packages from Backports” section covers the two methods. Use slash notation for minimal backports installation:
Or use the
-tflag when you need an entire dependency chain from backports:However, this applies only to Debian proper, not LMDE. If you need newer software on LMDE 6, check the Linux Mint repositories first or consider Flatpak packages, which provide newer applications without modifying system packages. Stick with LMDE’s native update mechanisms to maintain stability.