I am updating my Debian system to a new major release and as Debian is famous for having one of the largest software repositories among Linux distros, I am interested to see what packages have been added since the last release. Currently I am updating from Debian 10 "Buster" to Debian 11 "Bullseye".

Is such a list maintained by the Debian project people or else how is it possible to build it, probably using an APT query?

Obviously packages that have only seen version updates should not be counted. It would also be interesting to see what packages have been removed.

3 Answers 3


I don’t think apt can tell you on its own, but aptitude can. Install it if you don’t have it already, then run it before your update. You’ll see a screen like this:

 Actions  Undo  Package  Resolver  Search  Options  Views  Help
C-T: Menu  ?: Help  q: Quit  u: Update  g: Preview/Download/Install/Remove Pkgs
aptitude 0.8.11 @ XXX
--- Upgradable Packages (62)                                                                                                        
--- New Packages (2778)
--- Installed Packages (6452)
--- Not Installed Packages (202276)
--- Obsolete and Locally Created Packages (51)
--- Virtual Packages (84017)
--- Tasks (217)

The two sections will be interesting for you here are “New Packages” (which lists all packages new to aptitude) and “Obsolete and Locally Created Packages” (which lists any installed packages which are no longer available from the repositories). Press f and Enter to clear the list of new packages; the “New Packages” section will disappear.

Now update your repositories to the new major release, and run aptitude again: it will show the new packages and, if you’ve entirely removed the old release’s repositories from your configuration, the obsolete packages. To see the contents of a section, scroll to it with the arrow keys and press Enter; you can also use [ to expand all the subsections at once.

If you’ve already updated, and even upgraded, you can still get this information: edit your sources to point to the previous release, run apt update, then aptitude forget-new, edit your sources again to point to the new release, and run apt update again.

You can track packages entering the distribution (but not necessarily a given release) by following the RSS feed for packages leaving the NEW queue. Package removals are also tracked (for the whole distribution, again not a specific release).


There are lists with all packages ....

All Debian Packages in "buster" https://packages.debian.org/buster/https://packages.debian.org/buster/allpackages?format=txt.gz → 89,969 lines (packages)

All Debian Packages in "bullseye" https://packages.debian.org/bullseye/https://packages.debian.org/bullseye/allpackages?format=txt.gz → 96,201 lines (packages)

Looks like 6,332 packages were added to Debian 11, but some old packages were removed so the count isn't quite right.

Save the text lists. To make comparison easier, remove the package versions shown in parentheses:

sed -e 's/([^()]*)//g' 10-buster > all-10
sed -e 's/([^()]*)//g' 11-bullseye > all-11

             ## run diff, and "grep the news" = +lines
diff -u all-10 all-11 | grep -E "^\+" > news-in-11.txt

             ## remove patterns "....modules-5.10.0-7 ..."
sed -i.bak '/modules-5.10.0-7/d' ./copy.of_news-in-11.txt

The problem sorting out new packages is that also the describing text was changed for many packages.


My goal was to get a sneak peak of what is to come (and to go) in a new Debian release before making any changes to my system. I also wanted to keep the list to a possible minimum, since the changes in Debian releases are incredibly huge.

While other posted answers are great, by borrowing from them I came up with the following command. It fetches package name lists belonging to different releases from the Debian website, removes unnecessary info such as version numbers and whitespace as much as possible and compares the two lists of package names using diff. Therefore all package names that are present in one release and not in the other are marked and colorized and vice versa.

This is what I came up with:

diff --color=auto --side-by-side --width=$COLUMNS \
    --suppress-common-lines --ignore-case --ignore-all-space \
    <(curl https://packages.debian.org/buster/allpackages?format=txt.gz | zcat | sed -E 's/\([^)]+\)/-/') \
    <(curl https://packages.debian.org/bullseye/allpackages?format=txt.gz | zcat | sed -E 's/\([^)]+\)/-/')

For a nicer GUI experience, the diff command could be replaced with meld.

Some packages have version numbers inside their names that makes it hard to remove using a regex, e.g. linux-image-4.19.0-12-amd64. So please share any modifications that might result in an easier to read output.

  • 1
    Please see the updated answer. That how far I got today. Jul 17, 2021 at 16:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.