Appendix A. Release Notes
This section lists the release notes for each stable version of Nixpkgs and the current unstable revision.
Nixpkgs 26.11 (“Zokor”, 2026.11/??)
Highlights
The
nixexprs.tar.xztarball will be discontinued together with Nixpkgs 27.05 after 2027-12-31. Migrate to thenixexprs.tar.zsttarball instead.This affects for example users who pull Nixpkgs as a flake input from https://channels.nixos.org:
-nixpkgs.url = "https://channels.nixos.org/nixos-26.05/nixexprs.tar.xz"; +nixpkgs.url = "https://channels.nixos.org/nixos-26.05/nixexprs.tar.zst";
Backward Incompatibilities
Support for
x86_64-darwinhas been dropped, due to Apple’s deprecation of the platform and limited build infrastructure and developer time. We will no longer build packages for the platform or support building them from source.The Nixpkgs 26.05 stable branch will still maintain platform support and binaries will be built until it goes out of support at the end of 2026. Users of
x86_64-darwinwill receive an error message explaining how to switch to 26.05.By the time of this release, Homebrew will offer only limited Tier 3 support for the platform, but MacPorts will likely continue to support it for a long time. We also recommend users consider installing NixOS, which should continue to run on essentially all Intel Macs, especially after Apple stops security support for macOS 26 in 2028.
bundlerAppnow sets__structuredAttrs = truefor its result package. Out-of-tree packages passingpostBuildtobundlerAppshould examine if theirpostBuildcommands are compatible with structured attributes.databricks-clihas been updated from0.290.2to1.x.x, the first major release. OAuth tokens for interactive logins (auth_type = databricks-cli) are now stored in the OS-native secure store by default (Secret Service on Linux) instead of~/.databricks/token-cache.json; cached tokens from older versions are not migrated, so rundatabricks auth loginonce per profile after upgrading. To keep the previous file-backed storage, setDATABRICKS_AUTH_STORAGE=plaintextor addauth_storage = plaintextunder[__settings__]in~/.databrickscfg. Additionally, thevector_search_endpointsDABs resource renamedmin_qpstotarget_qps(and thevector-search-endpointscommand renamed--min-qpsto--target-qps). See the upstream changelog for details.hurlhas been updated to8.x.xwhich has some breaking changes. See upstream changelog for details.gotosocialhas been updated to 0.22.0. This release contains a very long database migration, which should not be cancelled or interrupted under any circumstances.Postgres users: Following the migration, if you encounter slowdown on Postgres specifically (ie., timing out while loading timelines) you may need to run some manual database maintenance steps. Please check https://docs.gotosocial.org/en/stable/admin/database_maintenance/#postgres.
xsecurelockno longer supports authentication via htaccess files (~/.xsecurelock.pw) or via thepamtesterprogram by default. Only the recommended PAM module is supported unless rebuilt withwithHtaccessorwithPamtester.python3Packages.django-health-checkhas been updated to major version 4. See its migration guide and changelog for breaking changes.jmtpfshas been removed due to lack of maintenance and fuse3 support.libgdatahas been removed, as it was archived upstream and relied on the insecure libsoup 2.4.mcphosthas been removed, as it was archived upstream and declared unmaintained.fflogshas been removed because it was no longer functional. Users should switch toarchon-lite.services.mysqlnow setsroot@localhostauthentication toauth_socketwhen used withmysqlorpercona-server. Existing deployments will also be adjusted if possible. See the security advisory GHSA-6qxx-6rg8-c4p8 for more information.zerofshas been updated from1.xto2.xwhich is a breaking change. Volumes created by earlier releases are refused at open with a clear error. There is no migration tool; older volumes remain readable and writable by the release that created them.keycloak.plugins.keycloak-metrics-spihas been removed. Keycloak exposes Prometheus metrics natively on its management interface; enable them with themetrics-enabledsetting (andevent-metrics-user-enabledfor login and event counters). See Gaining insights with metrics.alpshas been rewritten upstream, see upstream repository for documentation.uhttpmockproviding 0.0 ABI was removed.uhttpmock_1_0providing 1.0 ABI was renamed touhttpmockanduhttpmock_1_0was kept as an alias.nix-serve-ng(andhaskellPackages.nix-serve-ng) is now built against Lix instead of CppNix, following upstream which has switched to Lix as its supported Nix implementation.Linux kernel configuration has been moved out of the
linux-kernelfield of the platform structure into the kernel builders:linux-kernel.namehas been removed.linux-kernel.targetis available as thetargetparameter and passthru attribute on the kernel builders.linux-kernel.installTargethas been removed, as it should not be necessary to customize.linux-kernel.DTBis available as thebuildDTBsparameter and passthru attribute on the kernel builders.linux-kernel.{autoModules,preferBuiltin,extraConfig}were already available as kernel builder parameters.
The
imgargument ofvmToolshas been renamed tokernelImage, as it collided with the top-levelimgpackage. Additionally, the kernel module tree used inside the VM has been split out of thekernelargument into a newkernelModulesargument (defaulting tokernel). Callers that overrodekernelwith a module tree (e.g. frompkgs.aggregateModules) to make extra modules available must now pass it viakernelModulesinstead, keepingkernelpointing at a bootable kernel derivation.The ARMv5 Linux kernel build now uses a standard configuration and generates a standard compressed image instead of the deprecated legacy U‐Boot image format.
lib.systems.{examples,platforms}.{sheevaplug,pogoplug4}have been unified intolib.systems.examples.armv5tel-multiplatform. Note that there is no official support for ARMv5 and it is not possible to build even a simple NixOS configuration out of the box.pdnshas been updated from5.0.xto5.1.x. Please be sure to review the Upgrade Notes before upgrading. Namely LUA record updates are no longer allowed by default, and the embedded webserver no longer includes aaccess-control-allow-origin: *header by default.Support for the legacy U‐Boot image format has been removed from the Linux kernel builders, as it is deprecated upstream and no longer used by any platform in Nixpkgs.
etcd_3_4package was dropped, as it’s gone EOL. Please upgrade to either 3.5 or 3.6. See migration notes for incompatibilities and upgrade procedure.rke2retires ingress-nginx and transitions to Traefik starting inrke2_1_36. Because ingress-nginx was retired upstream as of March 2026, Traefik is now the default for new clusters starting in v1.36 (existing clusters will keep their current ingress upon upgrade to avoid breakage). This transition brings the following structural changes:Airgapped Environments: The rke2-images-core tarball now contains Traefik images instead of ingress-nginx. The standalone rke2-images-traefik tarball has been removed. Users who must continue using ingress-nginx will now need to manually provide the rke2-images-ingress-nginx tarball.
Future Removal: The ingress-nginx chart will not receive any additional updates and will be completely removed in v1.37 for community users.
buildFHSEnvChroothas been removed after deprecation in 23.05.gh-actions-cachehas been removed since its functionality has been integrated directly intogh(gh cache). See upstream readme.requireFilenow setsmeta.license = lib.licenses.unfreeby default. Users ofrequireFile-based derivations that preserve this default will need to explicitly allow their evaluation as described in the section called “Installing unfree packages”.texlive.combineis deprecated and scheduled for removal in 27.05. Please migrate totexliveSmall.withPackages(see the section called “User’s guide”).keycloakwas updated to >= 26.7.0 and includes some breaking internal (API) changes. See the upstream migration guide for more information.librestproviding 0.7 ABI was removed.librest_1_0providing 1.0 ABI was renamed tolibrestandlibrest_1_0was kept as an alias.pnpm_10was upgraded to version 10.34.1+, which introduced stricter integrity checks. If you encounterERR_PNPM_MISSING_TARBALL_INTEGRITY, you can fall back to the olderpnpm_10_34_0.fetchPnpmDeps’fetcherVersion = 1andfetcherVersion = 2have been removed, as announced in the 26.05 release. Packages still using them now throw an evaluation error and must migrate tofetcherVersion = 3(or later) and regenerate their hashes. See the pnpmfetcherVersionsection of the manual for details.rebuilderdhas been updated to 0.27.0 introducing breaking changes. See upstream changelog for details: 0.26.0, 0.27.0Starting with v14,
flameshotwill primarily utilise xdg-desktop-portal calls for screenshotting. This will directly affect users on X11 window managers due to the lack of a compatible portal with Screenshot feature. See upstream changelog or NixOS Flameshot wiki page for workarounds.nim1and respective aliases have been removed due to entering EOL; please migrate tonimornim-unwrapped(nim 2).nim-2_0&nim-2_2and respective aliases have been removed; please migrate tonimornim-unwrapped(nim 2.2.10).domoticzhas been updated from2024.7to2026.x, breaking third party applications and scripts using the old RType calls. Review the release notes for more information.vimacshas been removed, as it has not been maintained in 10 years and was built for an old version of vim (6.0).
Other Notable Changes
super-productivityhas been updated. The binary has been renamed fromsuper-productivitytosuperproductivity. A symlink from the old name is provided for backward compatibility.Package-URL (PURL, https://github.com/package-url/purl-spec) metadata identifier has been added for
fetchgit,fetchpypiandfetchFromGithubfetchers.mkDerivationhas been adjusted to reuse this information. Package-URLs allow reliably identifying and locating software packages. Maintainers of derivations using the adapted fetchers should rely on thedrv.src.meta.identifiers.v1.purldefault identifier and can enhance theirdrv.meta.identifiers.v1.purlslist once they would like to have additional identifiers. Maintainers usingfetchurlfordrv.srcare urged to adapt theirdrv.meta.identifiers.purlPartsfor proper identification.Emacs loads the
early-defaultlibrary afterearly-init.el. Users can addearly-init.elviaemacs.pkgs.withPackagesby packagingearly-init.elinto a library namedearly-default. To prevent loading theearly-defaultlibrary, setinhibit-early-default-initinearly-init.el.services.cephenabled the generation of Ceph log files at/var/log/ceph/. They were missing before because Ceph omitted logs when this directory was missing. Ceph logs can grow large, so you may want to configure rotation of these logs.
Nixpkgs Library
Breaking changes
fittrackee1.0.0 now requires postgres with postgis. The upgrade guide has steps to prepare for this upgrade.
Deprecations
Setting
config.allowBrokenPredicateis deprecated in favor of usingconfig.problems.handlers.PackageName.broken = "warn"(or= "ignore"). For more information see the section called “Installing broken packages”.
Additions and Improvements
Create the first release note entry in this section!
Nixpkgs 26.05 (“Yarara”, 2026.05/30)
Highlights
GCC has been updated from GCC 14 to GCC 15. This introduces some backwards incompatible changes; Refer to the upstream porting guide for details.
glibchas been updated to version 2.42.This version no longer makes the stack executable when a shared library requires this. A symptom is an error like
cannot enable executable stack as shared object requires: Invalid argument
This is usually a bug. Please consider reporting it to the software maintainers.
In a lot of cases, the library requires the execstack by mistake only. The following workarounds exist:
When building the shared library in question from source, use the following linker flags to force turning off the executable flag:
mkDerivation { # … env.NIX_LDFLAGS = "-z,noexecstack"; }If the sources are not available, the execstack-flag can be cleared with
patchelf:patchelf --clear-execstack binary-only.soIf the shared library to be loaded actually requires an executable stack and it isn’t turned on by the application loading it, you may force allowing that behavior by setting the following environment variable:
GLIBC_TUNABLES=glibc.rtld.execstack=2Do not set this globally! This makes your setup inherently less secure.
Node.js default version has been updated from 22 LTS to 24 LTS. This introduces some breaking changes; Refer to the upstream migration article for details.
Ruby default version has been updated from 3.3 to 3.4. Refer to the upstream release announcement for details.
This will be the last release of Nixpkgs to support
x86_64-darwin. Platform support will be maintained and binaries built until Nixpkgs 26.05 goes out of support at the end of 2026. For 26.11, due to Apple’s deprecation of the platform and limited build infrastructure and developer time, we will no longer build packages forx86_64-darwinor support building them from source.By the time of 26.11’s release, Homebrew will offer only limited Tier 3 support for the platform, but MacPorts will likely continue to support it for a long time. We also recommend users consider installing NixOS, which should continue to run on essentially all Intel Macs, especially after Apple stops security support for macOS 26 in 2028.
A warning will be displayed for
x86_64-darwinusers; you can setallowDeprecatedx86_64Darwinin the Nixpkgs configuration to silence it. The~/.config/nixpkgs/config.nixfile will not work for users of flakes, who can instead replacenixpkgs.legacyPackages.x86_64-darwinwithimport nixpkgs { system = "x86_64-darwin"; config.allowDeprecatedx86_64Darwin = true; }nix-darwin users can set
nixpkgs.config.allowDeprecatedx86_64Darwinin their system configurations.The Factor programming language has been updated to Version 0.101 bringing various improvements to UI rendering and HiDPI support as well as support for Unicode 17.0.0. Starting from Version 0.100, the Factor VM is compiled with Clang.
This brings along some backwards compatibility issues in the language further detailed here. Additionally, the FUEL Emacs module is no longer part of the
factor-langpackage. It is part of the MELPA package set for a while already and must be taken from there. This does not affectfactor-langpackages Version 0.99 and 0.100. Using the official MELPA package now puts the burden of providing the path to/lib/factorinfactor-root-diron the user. Make sure to use theextraVocabspackage attribute to compose a special vocabulary tree if necessary. You can refer to the generated tree of vocabulary roots via the newly exposedvocabTreeattribute, as described in the documentation.Nixpkgs configuration, specified for NixOS using
nixpkgs.config, or using theconfigargument when importing nixpkgs, has learned to accept alibargument as well aspkgs, which allows the configuration to be computed without depending on thepkgsfixed point. If you are referencing licenses inlib.licensesby having this configuration be a function taking apkgsarg, you may wish to change to usinglibfor faster computation and to avoid infinite recursion errors if pkgs depends on parts of the computed configuration in future.For example, if you currently have configuration that looks like this:
{ pkgs, ... }: { allowlistedLicenses = [ pkgs.lib.licenses.nasa13 ]; blocklistedLicenses = with pkgs.lib.licenses; [ gpl3Only gpl3Plus ]; }You may wish to update it to something like this:
{ lib, ... }: { allowlistedLicenses = [ lib.licenses.nasa13 ]; blocklistedLicenses = with lib.licenses; [ gpl3Only gpl3Plus ]; }Or, if you need configuration that works with both 26.05 and 25.11:
{ pkgs, lib ? pkgs.lib, ... }: { allowlistedLicenses = [ lib.licenses.nasa13 ]; blocklistedLicenses = with lib.licenses; [ gpl3Only gpl3Plus ]; }
Backward Incompatibilities
mdbook-linkcheckhas been removed as it is unmaintained and incompatible with the latest version ofmdbook. Users can instead migrate tomdbook-linkcheck2.The
nodePackagespackage set has been removed entirely from nixpkgs. This package set was created to ease the maintenance burden of maintaining lots of NodeJS-based packages within nixpkgs, but became a burden itself. Over the past several releases, there has been a focus on removing it in favor of the more modern nixpkgs packaging strategies. After a long time, this package set has been deprecated and removed. If you are using its package set in your own config, please use the top-level packages instead.(i.epkgs.package-nameinstead ofpkgs.nodePackages.package-name).Note that the above
nodePackagesremoval also coincides with the removal ofnode2nixand its tooling, which have been deprecated for a long time.buildEnv-constructed packages now take only structured attributes ({ __structuredAttrs = true; }).xfce.mkXfceDerivationhas been deprecated (i.e. conditioned behindnixpkgs.config.allowAliases) and will be removed in NixOS 26.11, please usestdenv.mkDerivationdirectly. You can migrate by addingpkg-config,xfce4-dev-tools, andwrapGAppsHook3to yournativeBuildInputsand--enable-maintainer-modeto yourconfigureFlags.yarn2nix/yarn2nix-moreteaand its tooling(mkYarnPackage,mkYarnModules, andfixup_yarn_lock) have been removed as they were unmaintainable in nixpkgs. If you want to build with Yarn V1 going forward, use the hooks instead(yarnBuildHook,yarnConfigHook, andyarnInstallHook). See the yarn v1 documentation in the nixpkgs manual for more details.alberthas been updated to version 34.0.5. This release redesigns the query system to support stateful asynchronous handlers and infinite scrolling, and adds internationalized tokenization. This update introduces several breaking changes: the Python plugin interface is now v5.0, thePATHplugin has been renamed toCommandline, and the QStylesheets-based widgets box model frontend has been removed. For more information read the changelog for 34.0.0.asciinema_3is now renamed toasciinemaand the oldasciinemaversion 2.x.x written in python was removed.sing-boxhas been updated to 1.13.0, which has removed some deprecated options. See upstream documentation for details and migration options.cargo-codspeedhas been updated from3.0.5to4.2.0. Version4.0.0includes breaking changes. For more information read the changelog for 4.0.0.commafeedhas been updated to version 7.0.0, which includes changes impacting its security. Please see upstream’s release notes for details.corepack_latesthas been removed, as Corepack is no longer distributed with Node.js.spoofhas been removed, as there are many issues upstream with it working on modern OS versions, and it appears to be unmaintained.duckstationpackage has been removed, as it was requested by upstream and build sources were changed to be incompatible with NixOS.nodePackages.coc-goandnodePackages.coc-tsserver, along with their vim plugins, have been removed from nixpkgs due to being unmaintained.nodePackages.wavedrom-clihas been removed, as it was unmaintained within nixpkgs.MATE packages have been moved to top level (e.g. if you previously added
pkgs.mate.cajatoenvironment.systemPackages, you will need to change it topkgs.caja).kratoshas been updated from 1.3.1 to 25.4.0. Upstream switched to a new versioning scheme (year.major.minor). Notable breaking changes:The
migrate sqlCLI command is nowmigrate sql upOIDC registration validation errors are now placed in the
defaultnode group instead ofoidcFailed OIDC account linking returns HTTP 400 instead of 200
pdnshas been updated to version v5.0.x, which introduces breaking changes. Check out the Upgrade Notes for details.gephpackage’s built-in GUIgeph5-client-guihas been removed by the upstream. All users who wish to continue using the GUI should install thegephgui-wry, which is consistent with the official release version.xfsprogswas updated to version 6.18.0, which enables parent pointers and exchange-range by default. Upstream recommends not to use these features with kernels older than 6.18. GRUB2 is likely unable to boot from filesystems with these features enabled.lunarvimpackage has been removed, as it was abandoned upstream and relied on an old version ofneovimto work properly.requireFilenow treats anymessageorurlargument as a literal string, rather than subjecting it to Bash here-doc expansion. This allows including strings like$PWDin the message without needing to know about and handle the undocumented Bash expansion.nodePackages.browserifyhas been removed, as it was unmaintained within nixpkgs.command-not-foundpackage will be enabled by default if the source of nixpkgs contains the fileprograms.sqlite. This is the case if a nixpkgs tarball from https://channels.nixos.org is used. This usage will also make the database ofcommand-not-foundstateless.nodePackages.sasshas been removed, as it was unmaintained within nixpkgs.All
@tailwindcsspackages in thenodePackagesset have been removed, as they are libraries that should instead be locked by JS projects that utilize them.artihas been updated to major version 2, which removed the long-deprecatedproxy.socks_portandproxy.dns_portand the legacy syntax for specifying directory authorities. For more information, see the changelog for 2.0.0.kanatanow requireskarabiner-dkversion 6.0+ or later. The package has been updated to use the newkarabiner-dkpackage and thedarwinDriveroutput stays at the version defined in the package.Keycloak has been updated to 26.6.X, bringing a lot of new features like federated client authentication, JWT authorization grants, workflows and the ability to do zero-downtime patch releases. Read more about all the exciting new capabilities in keycloak 26.6 here and consult the migration guide to 26.6 to find out whether this is a breaking change for your keycloak instance.
elegant-sddmhas been updated to be Qt6 compatible. Themes for SDDM are slightly different so read the wiki for more.forgejo-ltshas been updated to major version 15. For more information, see the release blog post and full release notespulsarhas finally migrated from electron v12 to v30, backup~/.pulsarbefore upgrading. See Pulsar on Electron 30: what it means for you.mactrackerhas been updated to major version 8, which now requires macOS 11 Big Sur or later. The previous version supported Mac OS X 10.6.8 or later.net-news-wirehas been updated from 6.x to 7.x, which now requires macOS 15 (Sequoia) or newer. The previous version supported macOS 13 and newer.bartenderhas been updated to major version 6. This removes support for MacOS Sonoma (and adds support for Tahoe). For more information, see the release notes or the Bartender 6 support page.limahas been updated from1.xto2.x. This major update includes several breaking changes, such as/tmp/limano longer being mounted by default.Varnish Cache has been updated to major version 8,
varnishnow refers tovarnish80. That release contains breaking changes, see Upgrading to Varnish-Cache 8.0. Note that the Varnish 6 LTS release remains available asvarnish60. The Varnish Cache open-source project renamed itself to Vinyl Cache. Please migrate tovinyl-cache. See thevinyl-cacherelease notes entry for more information. Varnish 8 is not supported for the entire NixOS 26.05 release cycle.Vinyl Cache has been introduced with the major version 9 as the Varnish Cache open source project renamed itself to Vinyl Cache. Please migrate to Vinyl Cache 9 when you still use Varnish Cache. A new module has also been introduced for this migration:
services.vinyl-cache. This release contains breaking changes, see Upgrading to Vinyl Cache 9.0. Thevarnish-modulesproject is currently not packaged for Vinyl Cache, as it is incompatible.eslinthas been updated from version 9 to version 10. Please see https://eslint.org/blog/2026/02/eslint-v10.0.0-released/ for details about the breaking changes included in the update.miniohas been abandoned by upstream and security issues won’t be fixed.minio_legacy_fshas also been removed. Both are scheduled for full removal in 26.11. Users should migrate to alternatives such as Garage, SeaweedFS, or Ceph. S3-compatible clients such as rclone can be used to move data.mercurehas been updated to0.21.4(or later). Version 0.21.0 and 0.21.2 introduce breaking changes to the package.mozcandmozc-utno longer contain the IBus front-end, which is now provided byibus-engines.mozcandibus-engines.mozc-ut.nemorosahas been updated from0.4.3to0.5.0. Version 0.5.0 introduced breaking changes to the package configuration.n8nhas been updated to version 2. You can find the breaking changes here: https://docs.n8n.io/2-0-breaking-changes/.nomadhas been updated to v1.11. Refer to the release note for more details. Once a new Nomad version has started and upgraded its data directory, it generally cannot be downgraded to the previous version.The default NVIDIA drivers no longer support Maxwell (GTX 1xxx) or older GPUs. Pin the nvidia package to
config.boot.kernelPackages.nvidiaPackages.legacy_580for continued support.gurk-rshas been updated from0.6.4to0.8.0. Version0.8.0includes breaking changes. For more information read the release notes for 0.8.0.irohhas been removed and split up intoiroh-dns-serverandiroh-relay.The
xorgpackage set has been deprecated, packages have moved to the top level.python3Packages.buildPythonPackageandpython3Packages.buildPythonApplicationnow throw errors in the presence ofpytestFlagsArray. Please usepytestFlagsand(enabled|disabled)(TestPaths|Tests|TestMarks)instead. If modifying the Nix expression is not feasible, users can remediate the error by overridingpytestFlagsArraywithnullor[ ].python3Packages.pygamehas been renamed topython3Packages.pygame-original, the attributepython3Packages.pygamewill from python 3.14 default to the more actively maintainedpython3Packages.pygame-ce.fastlyhas been updated to major version 14. For more information, you can check the release notes.peertubehas been updated from7.3.0to8.0.2, introducing several breaking changes. Some notable new features include channel collaboration and video player redesign with a new theme. For details on how to upgrade, see theIMPORTANT NOTESsection of the v8.0.0 CHANGELOG entry.python3Packages.gradiohas been updated to version 6. See upstream’s migration guide at https://www.gradio.app/main/guides/gradio-6-migration-guide.python3Packages.pikepdfno longer builds with mupdf support by default, which may be nice in Jupyter and iPython. Build withwithMupdf = trueif this is required.olive-editorhas been dropped as upstream development ceased and no longer builds.python3Packages.django-mdeditorhas been removed, as it was unmaintained upstream and the latest release was vulnerable to a critical security vulnerability.vicinaehas been updated to v0.20. This includes, among several other breaking changes, a complete overhaul of the configuration system. For update instructions, see the upstream configuration documentation.percona-server_8_4has been removed. Please update topercona-server_8_0,mysql84ormariadb.The
man-pagespackage’s outputs have been split. The manual pages are installed into themanoutput, which is installed by default. Binaries (includingdiffman-git,mansect,pdfman, andsortman) are installed into theoutoutput, which is not installed by default.All Log4Shell vulnerability scanners were removed, as they were all unmaintained upstream and are no longer relevant given that the vulnerability has been fixed upstream for several years.
Plugins for the JetBrains IDEs have been removed from Nixpkgs.
spacetimedbhas been updated from 1.12.0 to 2.0.3. Breaking changes and migration notes from 1.0 to 2.0 can be found here.jetbrains.plugins.addPluginsno longer supports plugin names or ID strings. You can still useaddPluginswith plugin derivations, such as plugins packaged outside of Nixpkgs.NetBox was updated to
>= 4.5.5. Have a look at the breaking changes of the 4.5 release, make the required changes to your database, if needed, then upgrade by settingservices.netbox.package = pkgs.netbox_4_5;in your configuration.pocket-idhas been updated to version 2 that contains breaking changes.asio(standalone version ofboost::asio) has been updated from 1.24.0 to 1.36.0. Some breaking changes were introduced between these two versions, and the one affected most was the removal ofasio::io_servicein favor ofasio::io_contextin 1.33.0.asio_1_32_0is retained for packages that have not completed migration.asio_1_10has been removed as no packages depend on it anymore.asioalso no longer propagatesboostas it is used independent fromboostin most cases.docker-color-outputhas been updated from major version 2 to 3. One breaking change is, that they switched to YAML-based configuration files.daselhas been updated from v2.8.1 to v3. There were significant breaking changes:The
putanddeletecommands have been removed. Use the new query syntax with expressions to modify data in-place.The
--versionflag is now a subcommand:dasel versionCLI framework migrated from Cobra to Kong, changing flag parsing behavior
Selector syntax has been revamped, see dasel v3 documentation for migration guide.
Example migration:
Old:
echo '{"my":{"favourites":{"colour":"blue"}}}' | dasel put -t json -r json -t string -v "red" "my.favourites.colour"New:
echo '{"my":{"favourites":{"colour":"blue"}}}' | dasel query -i json -o json --root 'my.favourites.colour = "red"'
stalwart-mailhas been renamed tostalwartEthercalc and its associated module have been removed, as the package is unmaintained and cannot be installed from source with npm now.
corethhas been removed, as upstream has moved it intoavalanchego.nodePackages.prebuild-installwas removed because it appeared to be unmaintained upstream. See upstream’s recommendations for alternatives.davismade changes to theIMAP_AUTH_URLoption. The flags are now standalone parameters that you need to fill:Before:
IMAP_AUTH_URL={imap.gmail.com:993/imap/ssl/novalidate-cert}After:
IMAP_AUTH_URL=imap.mydomain.com:993 IMAP_ENCRYPTION_METHOD=ssl IMAP_CERTIFICATE_VALIDATION=false
python3Packages.pillow-avif-pluginhas been removed as the functionality is included inpython3Packages.pillowdirectly since version 11.3.wasistlos(previously known aswhatsapp-for-linux) has been removed because it was unmaintained and archived upstream. Multiple alternatives exist:karere,whatsieandzapzapamong others.lighthas been removed because it was unmaintained.brightnessctlandacpilightprovide similar functionality.opensmtpd-filter-dkimsignis now installed intolibexec/smtpdinstead oflibexec/opensmtpdso that now it is properly linked into the environment built byservices.opensmtpd.procPackages. If you hardcoded path tofilter-dkimsignplease consider using this option.shishohas been removed because it’s archived.semgrep,opengrep, andast-grepprovide similar functionality.All Xfce packages have been moved to top level (e.g. if you previously added
pkgs.xfce.xfce4-whiskermenu-plugintoenvironment.systemPackages, you will need to change it topkgs.xfce4-whiskermenu-plugin). Thexfcescope will be removed in NixOS 26.11.The Dovecot IMAP server has been updated to version 2.4, with the
dovecotattribute now referring to this backwards-incompatible version. The attributedovecot_2_3refers to the previous version. The Pigeonhole plugin has been similarly updated to 2.4, with the version compatible with Dovecot 2.3 being atdovecot_pigeonhole_0_5. See https://doc.dovecot.org/latest/installation/upgrade/2.3-to-2.4.html for more information on how to upgrade.spacefmwas removed because it appeared to be unmaintained upstream.neofetchhas been removed because it was unmaintained upstream. Consider using the updated forkneowofetchprovided by thehyfetchpackage or the alternativefastfetchinstead.vimPlugins.nvim-treesitterhas been updated tomainbranch, which is a full and incompatible rewrite. If you can’t or don’t want to update, you should usevimPlugins.nvim-treesitter-legacy.Package
jellyseerrhas been renamed toseerrfollowing the upstream rename.The
piehardening flag has been removed and will now error, after being deprecated in 25.11. Compilers are expected to enable PIE by default, as has been common practice since 2016 outside of Nixpkgs. If a package needspiedisabled pass-no-pieinCFLAGS. It is unlikely this will be necessary in many cases; due to the prevalence of default PIE toolchains, most packages incompatible with PIE already pass-no-pie.pqos-wrapperwas removed as it has been unmaintained since 2022 and not widely used.
Other Notable Changes
nvidia-x11proprietary kernel modules are now provided separately asnvidia_x11.mod, whilenvidia_x11.openremains the open-source kernel module package.linuxPackages.nvidiaPackagesnow follows NVIDIA’s official release branches by exposingproduction,new_feature, andbeta. The convenience aliaseslatest(newer ofproductionandnew_feature) andbleeding_edge(newer oflatestandbeta) are provided; note thatbetanow refers strictly to the beta branch.stestrCheckHookwas added: This test hook runsstestr run. You can disable tests withdisabledTestsanddisabledTestsRegex.balatronow supports the Google Play and Xbox PC versions of the game. Pass theapkorAssets.zipasbalatro.override { src = "…" }.uptime-kumahas been updated to v2, which requires an automated migration that can take a few hours. A backup is highly recommended. If your SQLite database is corrupted, the migration might fail and require manual intervention. See the migration guide for more information.incus-ltshas been updated from v6 to v7The
libcxxhardeningextensivehardening flag has been disabled by default. Enabling it by default in 25.11 was unintentional and may have had a negative effect on performance in some cases.libcxxhardeningfastremains enabled by default.Wine has been updated to the 11.0 branch. Please check the upstream announcement for more details.
Cinnamon has been updated to 6.6, please check the upstream announcement for more details.
rspamdhas been updated to 4.0. Please check the upstream migration documentation, especially if you run a sharded Redis deployment.hyphennow supports over 40 language variants throughhyphenDictsand now allows to enable all supported languages throughhyphenDicts.all.budgiehas been updated to 10.10, please check the upstream announcement for more details.The packages
ibtool,actoolandre-plistbuddyhave been added, providing reimplementations of the corresponding proprietary Apple tools. They are more compatible with the originals than the previously existingxcbuildpackage, and should enable more darwin software to be built from source.GNU Taler has been updated to version 1.3. This release focuses on getting everything ready for a deployment of GNU Taler by Magnet bank. For more details, see the upstream release notes.
collabora-desktopThe desktop version of Collabora Office is now available, package version25.05.9.2-2.The
services.geoserverNixOS module has been added to allow running Geoserver as a service.fetchPnpmDepsandpnpmConfigHookwere added as top-level attributes, replacing the now deprecatedpnpm.fetchDepsandpnpm.configHookattributes.fetchPnpmDeps’fetcherVersion = 1andfetcherVersion = 2are deprecated and scheduled for removal in the 26.11 release. A deprecation warning has been added. Packages still onfetcherVersion = 1orfetcherVersion = 2should migrate tofetcherVersion = 3and regenerate their hashes. See the pnpmfetcherVersionsection of the manual for details.buildNpmPackagenow supportsnpmDepsFetcherVersion(andfetchNpmDepsnow supportsfetcherVersion). Set to2to enable packument caching, which fixes builds for projects using npm workspaces.Added
dell-bios-fan-controlpackage and service.Added
lovrpackage, a Lua-based game engine for VR and XR applications.Updated
wsjtxfrom 2.7.0 to 3.0.0 for amateur radio hobbyists who use FT8 and other related digital modes. See the release notes for the changelog.openrgbwas updated to 1.0rc2, which now uses Plugin API version 4. Some existing OpenRGB plugins may be incompatible or require updates.wrapNeovimUnstablenow sets provider-related configuration in its generated config rather than as wrapper arguments. It should not affect configuration unless you setwrapRcto false or are using thelegacyWrapper.Neovim Lua dependencies are now set in the generated init.lua instead of modifying LUA_PATH in the wrapper. Commands run pre-vimrc via
nvim --cmd "require'LUA_MODULE'"may not find their lua dependencies anymore. Usenvim -c "lua require'LUA_MODULE'"instead to run these commands after loadinginit.lua. If you usewrapNeovimwithwrapRcset tofalse, you may lose the lua dependencies if you are not loading the generatedinit.lua.We now use the upstream wrapper script for Gradle, supporting both the
JAVA_HOMEandGRADLE_OPTSenvironment variables.Updated
gonicto 0.21.0. A full (“slow”) scan is recommended after upgrading to v0.21.0 to pick up the newly scanned fields (contributors, ISRCs, record labels, per-track years, ARTIST_CREDIT).Added
haskell.packages.microhs, a set of Haskell packages built with MicroHs.gnuradio: Overriding the.pkgspackage set is now possible with apackageOverridesfunction, like withpython.pkgsand other language-specific package sets. Example:
gnuradioMinimal.override {
packageOverrides = grSelf: grSuper: {
osmosdr = grSuper.osmosdr.override {
airspy = null;
hackrf = null;
libbladeRF = null;
soapysdr-with-plugins = null;
};
};
}
Nixpkgs Library
Breaking changes
The
nodejs_latestalias now points tonodejs_26instead ofnodejs_24.nodejs-slimno longer exposes acorepackexecutable, it has been moved to an ad-hoc output; to restore the previous behavior,nodejs-slim.corepackmust be explicitly included.nodejsis now a simple wrapper fornodejs-slim+nodejs-slim.npm+nodejs-slim.corepack, meaning it is no longer possible to reference or override its attributes or outputs (e.g.nodejs.libv8must be replaced withnodejs-slim.libv8,nodejs.nativeBuildInputswithnodejs-slim.nativeBuildInputs, etc.).navidromehas removed the built-in Spotify integration. See v0.61.0 for details on optional replacements.moldis now wrapped by default.The
neovimpackage and module now disable by default thepython3andrubyproviders, unused by most users and reducing closure size from 365MiB to 240MiB. Host provider executables are not exposed anymore along with the neovim wrapper. You can still refer to those using the neovim provider variables (e.g.,python3_host_prog).canokey-qemusupport forqemuwas restored (although disabled by default), after being marked as broken since nixpkgs 25.11. Please note that the format of canokey files has changed, and that some data created with older canokey-qemu release cannot be read by the current version. See the documentation for details.
Deprecations
mpv-unwrapped.scriptsandmpv-unwrapped.wrapperhave been removed. Please usempvScriptsandmpv.overrideaccordingly.fetchFromSavannahis now deprecated and is expected to be fully removed in a future release. From now on, usefetchgitor a Savannah releases mirror when applicable.Using nested lists in build/runtime inputs in
mkDerivationis now deprecated.
Additions and Improvements
The builder
php.buildComposerProject2for PHP applications has been improved for better reliability and stability.
Nixpkgs 25.11 (“Xantusia”, 2025.11/30)
Highlights
The initial work to support native compilation on LoongArch64 has completed, with further changes currently in preparation. In accordance with the Software Development and Build Convention for LoongArch Architectures, this release sets the default march level to
la64v1.0, covering the desktop and server processors of 3X5000 and newer series. However, embedded chips without LSX (Loongson SIMD eXtension), such as 2K0300 SoC, are not supported.pkgsCross.loongarch64-linux-embeddedcan be used to build software and systems for these platforms.The official Nix formatter
nixfmtis now stable and available aspkgs.nixfmt, deprecating the temporarypkgs.nixfmt-rfc-styleattribute. The classicnixfmtwill stay available for some more time aspkgs.nixfmt-classic.The default GHC version has been updated from 9.8 to 9.10.
haskellPackagescorrespondingly uses Stackage LTS 24 (instead of LTS 23) as a baseline.This release of Nixpkgs requires macOS Sonoma 14.0 or newer, as announced in the 25.05 release notes. The default SDK is now 14.4, but the minimum version is 14.0.
cc-wrapperwill enforce that availability annotations are used or an appropriate deployment target is set. See the Darwin platform notes for details.We expect to drop support for
x86_64-darwinby Nixpkgs 26.11, in light of Apple’s announcement that macOS 26 will be the final version to support Intel Macs. When support is fully removed, we will no longer build packages for the platform or guarantee that it can build at all. This may happen in stages, depending on our available build and maintenance resources and decisions made by projects we rely on.By the time of 26.11’s release, Homebrew will offer only limited Tier 3 support for the platform, but MacPorts will likely continue to support it for a long time. We also recommend users consider installing NixOS, which should continue to run on essentially all Intel Macs, especially after Apple stops security support for macOS 26 in 2028.
Darwin has switched to using the system libc++. This was done for improved compatibility and to avoid ODR violations. If a newer C++ library feature is not available on the default deployment target, you will need to increase the deployment target. See the Darwin platform documentation for more details.
LLVM has been updated from 19 to 21.
Backward Incompatibilities
adminneohas been updated to version 5.1.1. Version 5 breaks compatibility withadminerand changes how plugins and configuration work. See the Upgrade Guide for details. Those changes also led to changes in the arguments of the package.android-udev-ruleshas been removed, as it is effectively superseded by built-in uaccess rules in systemd.ansible-laterhas been removed because it was discontinued by the author.asciidoctor-with-extensionhad itsasciidoctor-mathematicalextension removed, because it fails to build, and it is not maintained properly.base16-buildernode package has been removed due to lack of upstream maintenance.budgie-desktophas been updated to 10.9.4. This changesXDG_CURRENT_DESKTOPfromBudgie:GNOMEtoBudgieand contains ABI bumps for libpeas2 migration.buildGoModuleremoves the compatibility layer ofCGO_ENABLEDnot specified viaenv. SpecifyingCGO_ENABLEDdirectly now results in an error.buildGoModulenow warns if<pkg>.passthru.overrideModAttrsis lost during the overriding of its result packages.cardboardhas been removed due to the package having been broken since at least November 2024.carlano longer supportsgtk2override.chatgpt-retrieval-pluginhas been removed due to the package having been broken since at least November 2024.conduwuitwas removed due to upstream ceasing development and deleting their repository. For existing data, a migration tomatrix-conduit,matrix-continuwuityormatrix-tuwunelmay be possible.conftestsince0.60.0has moved to use regov1as default. To continue usingv0use--rego-version v0. For more information about upgrading to Rego v1 syntax, see the upstream docs.CUDA versions below 12.6 have been removed, as they are unmaintained upstream and depend on end‐of‐life compilers.
cudaPackages.cudatoolkit-legacy-runfilehas been removed.ddccontrolservice now enableshardware.i2cby default, and addsddcci_backlightto the kernel modules, based on experiences reported on discourse.deadbeefno longer supportsgtk2.Derivations setting both
separateDebugInfoand one ofallowedReferences,allowedRequisites,disallowedReferencesordisallowedRequisitesmust now set__structuredAttrstotrue. The effect of reference whitelisting or blacklisting will be disabled on thedebugoutput created byseparateDebugInfo.emacs-macporthas been moved to a fork of Mitsuharu Yamamoto’s patched source code starting with Emacs v30 as the original project seems to be currently dormant. All older versions of this package have been dropped. This introduces some backwards‐incompatible changes; see the NEWS for details. NEWS can be viewed from Emacs by typingC-h n, or by clickingHelp->Emacs Newsfrom the menu bar. It can also be browsed online.Everything related to
bowerwas removed, as it is deprecated and not used by anything in nixpkgs.fetchFromBitBuckethas gained afetchgitbackend when passing in git-related arguments similar tofetchFromGitHub.fetchtorrent, when using the “rqbit” backend, erroneously started fetching files into a subdirectory in Nixpkgs 24.11. The original behaviour – which matches the behaviour using the “transmission” backend – has now been restored. Users reliant on the erroneous behaviour can temporarily maintain it by addingflatten = falseto thefetchtorrentarguments; Nix will produce an evaluation warning for anyone usingbackend = "rqbit"withoutflatten = true.floorphas been replaced with a binary build, available asfloorp-bin. Due to major changes in the upstream project structure and build system, building Floorp from source has become unfeasible. No configuration or state migration is necessary.forgejomain program has been renamed tobin/forgejofrom the previousbin/gitea.GCC 9, 10, 11, and 12 have been removed, as they have reached end‐of‐life upstream and are no longer supported.
gentiumpackage now providesGentium-*.ttffiles, and notGentiumPlus-*.ttffiles like before. The font identifiersGentium Plus*are available in thegentium-pluspackage. If you want to use the more recently updated packagegentiumby SIL, you should update your configuration files to use theGentiumfont identifier.GHCJS 8.10, exposed via
haskell.compiler.ghcjsandhaskell.compiler.ghcjs810, has been removed. Downstream users should migrate their projects to the new JavaScript backend of GHC proper which can be used viapkgsCross.ghcjsfrom Nixpkgs. Haskell packaging code, likehaskellPackages.mkDerivation,ghcWithPackagesandhoogleWithPackages, also no longer supports GHCJS.GHC 8.6, 8.10, 9.0, 9.2, and their package sets have been removed.
gnome-keyringno longer ships with an SSH agent anymore because it has been deprecated upstream. You should usegcr_4instead, which provides the same features. More information on why this was done can be found on the relevant GCR upstream PR.go-mockeryhas been updated to v3. For migration instructions see the upstream documentation. If v2 is still requiredgo-mockery_v2has been added but will be removed on or before 2029-12-31 in-line with its upstream support lifecycle.gradiencehas been removed because it was archived upstream.Greetd and its original greeters (
tuigreet,gtkgreet,qtgreet,regreet,wlgreet) were moved fromgreetdnamespace to top level (greetd.tuigreet->tuigreet,greetd.greetd->greetd, etc). The original attrs are available for compatibility as passthrus ofgreetd, but will emit a warning. They will be removed in future releases.haskellPackagesand the package sets underhaskell.packagesno longer expose anllvmPackagesattribute, though it can still be accessed viaghc.llvmPackages(from the same package set). Haskell packages usually only need to depend on an LLVM version matching GHC if they force the use the LLVM backend even if NCG is available. In this case, it is best to use theforceLlvmCodegenBackendhelper. In all other cases, like linking againstlibLLVM, Haskell packages should use the appropriate version ofllvmPackagesfrompkgs.hiawatahas been removed, due to lack of active development upstream, lack of maintainership downstream and upcoming security issues.hsdhas been upgraded to version 8. See their changelog for important instructions before upgrading.inspircdhas been updated to the v4 release series. Please refer to the upstream documentation for general information and a list of breaking changes.installShellFilesnow allowsinstallManPageto take a piped input, add the--nameflag for renaming the file when installed. You can also append--to opt-out of all subsequent parsing.kbdpackage’soutputsnow include amanandscriptsoutputs. Theunicode_startandunicode_stopBash scripts are now part of thescriptsoutput, allowing most usages of thekbdpackage to not pull inbash.k2pdfopthas been removed, as it’s broken.k3sairgap imagespassthruattributes have changed:imagesListwas removedairgapImageswas renamed toairgap-imagesairgapImagesAmd64was renamed toairgap-images-amd64-tar-zstairgapImagesArm64was renamed toairgap-images-arm64-tar-zstairgapImagesArmwas renamed toairgap-images-arm-tar-zst
LLVM 12, 13, 14, 15, 16, and 17 have been removed, as they have reached end‐of‐life upstream and are no longer supported.
limapackage now only includes the guest agent for the host’s architecture by default. If your guest VM’s architecture differs from your Lima host’s, you’ll need to enable thelima-additional-guestagentspackage by settingwithAdditionalGuestAgents = truewhen overriding lima with this input.libpinyin, which is used for Chinese character input, has migrated from the unmaintained BDB database format to the newer KyotoCabinet database format. If you want to migrate your user input statistics, you can consider using bdbtokyotodb.linuxand all other Linux kernel packages have moved all in-tree kernel modules into a newmodulesoutput.lxdescope has been removed, and its packages have been moved to the top-level.mariadbnow defaults tomariadb_114instead ofmariadb_1011, meaning the default version was upgraded from 10.11.x to 11.4.x. See the upgrade notes for potential issues.mealiehas been updated to 3.0.2: This update introduces breaking changes in some API endpoints (see the release changelog).meilisearch_1_11has been removed, as it is no longer supported.moarhas been updated from1.33.0to2.0.0, and renamed tomoorfollowing an upstream decision. See the release notes for more.mongodb-6_0was removed as it is end of life as of 2025-07-31.mono4andmono5have been removed. Usemono6ormonoinstead.mx-puppet-discordwas removed from Nixpkgs along with its NixOS module as it was unmaintained and was the only user of sha1 hashes in tree.navidrome0.58.0 introduces multi-library support and backwards incompatible database migrations. Ensure backups are valid and run a Full Scan after starting the new version.NetBox was updated to
>= 4.4.0. You should review the breaking changes of the 4.3 release the 4.4 release, make the required changes to your database (if needed), and then upgrade by settingservices.netbox.package = pkgs.netbox_4_4;in your configuration.neovimUtils.makeNeovimConfignow usescustomLuaRCparameter instead of acceptingluaRcContent. The old usage is deprecated but still works with a warning.nixVersions.nix_2_3has been dropped because it was insecure and unmaintained.nodePackages.rimrafhas been removed, as it is a Javascript library, and packages that want to use it should depend directly on it instead.notaryhas been removed because it was archived upstream. Upstream recommendsnotationinstead.nuget-to-nixhas been removed as it was deprecated in favor ofnuget-to-json. Out-of-tree packages that were usingnuget-to-nixshould migrate to usenuget-to-jsoninstead for generating .NET dependency lock files.odoo16has been dropped due to end of support by upstream, consider upgrading supported version.oinkservice no longer acceptssettings.apiKeyandsettings.secretApiKeyoptions as these have been replaced byapiKeyFileandsecretApiKeyFile.opensoldatbinaries and user configuration directory names have been prefixed by ‘open’, becoming opensoldat and opensoldatserver. Configuration will be moved automatically before launch when possible.orjailpackage has been removed as it is broken by the latest firejail release and seems unmaintained.python3Packages.bugwarriorhas been updated to major version 2.0.0 which will likely require manual intervention. See release notes.pcphas been removed because the upstream repo was archived and it hasn’t been updated since 2021.podofohas been updated from0.9.8to1.0.0. These releases are by nature very incompatible due to major API changes. The legacy versions can be found underpodofo_0_10andpodofo_0_9. Changelog: https://github.com/podofo/podofo/blob/1.0.0/CHANGELOG.md, API-Migration-Guide: https://github.com/podofo/podofo/blob/1.0.0/API-MIGRATION.md.privatebinhas been updated to2.0.0. This release changes configuration defaults including switching the template and removing legacy features. See the v2.0.0 changelog entry for details on how to upgrade.private-gpt service has been removed by lack of maintenance upstream.
proton-callerhas been removed due to lack of upstream maintenance.prometheus-script-exporterhas been updated to use a new maintained alternative. This release updates from1.2.0 -> 3.0.1and largely changes configuration options formats from json to yaml, among other changes.pulsemeeterhas been updated to2.0.0. The configuration file from older versions has to be deleted. For more information and instructions see the v2.0.0 changelog entry.purple-matrixhas been removed, since it has been unmaintained since April 2022 and upstream does not recommend using it anymore.python3Fulland its versioned attributes (python3xxFull) have been removed. Bluetooth support is now enabled in the default python3 attributes. The X11 support built the tkinter module, which is available as a dedicated attribute on the package set.python3Packages.bjoernhas been removed, as the upstream is unmaintained and it depends on a 14-year-old version of http-parser with numerous vulnerabilities.python3Packages.duckduckgo-searchhas been updated to v9+ and renamed topython3Packages.ddgs. See release note for v9.0.0.python3Packages.heif-image-pluginhas been dropped due to lack of upstream maintenance and breakage. Usepython3Packages.pillow-heifinstead.python3Packages.tritonno longer takes anenableRocmargument and supports ROCm in all build configurations via runtime binding. In most cases no action will be needed. If triton is unable to find the HIP SDK addrocmPackages.clras a build input or set the environment variableHIP_PATH="${rocmPackages.clr}".python3Packages.pyheifhas been dropped due to lack of upstream maintenance and breakage. Usepython3Packages.pillow-heifinstead.python3Packages.pyocrno longer supportscuneiformon Linux by default. It is still possible to enable it usingwithCuneiformSupportoverride.qt5.fullandqt6.fullaliases have been removed. Their use has always been discouraged, and downstream projects should useqtN.envwith the right set of packages.rabbitmq-serverhas been updated from 4.0.9 to 4.1.4. The 4.1.0 release includes breaking changes. For more information read the changelog of 4.1.0.reactionhas been updated to version 2, which includes some breaking changes. For more information, check the release article.renovatewas updated to v41. See the upstream release notes for v40 and v41 for breaking changes.river0.3.x has been renamed toriver-classicfollowing an upstream decision.rocmPackages.tritonhas been removed in favor ofpython3Packages.triton.rofihas been updated to2.0.0.rofi-waylandandrofi-wayland-unwrappedhave been merged intorofiandrofi-unwrappedrespectively. For more information and instructions see the v2.0.0 changelog entry.rofi-emoji-waylandhas been merged intorofi-emojiasrofihas been updated to2.0.0and supports both X11 & Wayland.sail-riscv0.8 follows upstream and provides only a single binary,sail_riscv_sim.sing-boxhas been updated to 1.12.3, which includes a number of breaking changes, old configurations may need updating or they will cause the tool to fail to run. See the change log for details and migration for how to update old configurations.space-orbitpackage has been removed due to lack of upstream maintenance. Debian upstream stopped tracking it in 2011.spidermonkey_91has been removed, as it has been EOL since September 2022.stalwart-mailsince0.13.0“introduces a significant redesign of the MTA’s delivery and queueing subsystem”. See the upgrading announcement for the0.13.0release.stdenv.mkDerivationand other derivation builders that use it no longer allow the value ofenvto be anything but an attribute set, for the purpose of setting environment variables that are available to the builder process. An environment variable calledenvcan still be provided by means ofmkDerivation { env.env = ...; }, though we recommend to use a more specific name than “env”.steamcontrollerhas been removed due to lack of upstream maintenance. Consider usingsc-controllerinstead.sublime-musichas been removed because upstream has announced it is no longer maintained. Upstream suggests usingsupersonicinstead.Support for bootstrapping native GHC compilers on 32‐bit ARM and little‐endian 64-bit PowerPC has been dropped. The latter was probably broken anyway. If there is interest in restoring support for these architectures, it should be possible to cross‐compile a bootstrap GHC binary.
telegram-desktoppackages now usesTelegramfor its binary. The previous name wastelegram-desktop. This is due to an upstream decision to make the name consistent with other platforms.teleporthas been upgraded from major version 17 to major version 18. Refer to upstream upgrade instructions and release notes for v18.The
asterisk-ltspackage was changed to v22 from v18. The defaultasteriskpackage was changed to v22 from v20. Asterisk version 18 has been dropped due to being EOL. Theasterisk-stable(v20) package was unchanged. You may need to update /var/lib/asterisk to match the template files in${asterisk-...}/var/lib/asterisk.The
archipelago-minecraftpackage was removed, as upstream no longer provides support for the Minecraft APWorld.The default Android NDK version has been raised to 27, and the default SDK version to 35. NDK 21–26 have been removed, as they are end‐of‐life.
The default glibc ELF ABI for the powerpc64-linux platform has been changed from ELFv2 back to ELFv1, due to the latter having less remaining issues when bootstrapping & building Nixpkgs packages on hardware. If glibc ELFv2 is desired, use a fuller target triplet like
powerpc64-unknown-linux-gnuabielfv2or the providedppc64-elfv2platform example.The
ghcInfoandcontrolPhasesfunctions have been removed fromhaskell.lib.composeandhaskell.lib. They were unused and would return incorrect results.Instead of using
controlPhases, thedoCheckattribute of derivations can be accessed which is more accurate.doBenchmarkcan’t be introspected at the moment.To detect cross compilation, the relevant platforms exposed by
stdenvshould be compared instead of usingghcInfo.Nixpkgs no longer packages any
ghcjscompiler.To find a suitable
nativeGhc,buildHaskellPackagesshould be used.ghcInfowould useghc.bootPkgs.ghcif cross compiling, and the givenghcotherwise. This approach is not recommended since it results in mismatched GHC versions.
The
haskellPackages.mkDerivationbuilder now converts packages’ cabal files to Unix line endings beforepatchPhase. This behavior can be disabled usingdontConvertCabalFileToUnix.The default
kopsversion is now 1.33.0 and versions 1.30 and older have been dropped. See Upgrading Kubernetes for instructions on how to update kOps.The license of duckstation has changed from
gpl3Onlytocc-by-nc-nd-40making it unfree in newer releases. Theduckstationpackage has been overhauled to support the new releases andduckstation-binhas been aliased toduckstationto support darwin binary builds.The main binary of
tomlqhas been renamed fromtomlqtotq.The minimum version of Nix required to evaluate Nixpkgs has been raised from 2.3 to 2.18.
The
no-broken-symlinkbuild hook now also fails builds whose output derivation contains links to $TMPDIR (typically /build, which contains the build directory).The non-LTS Forgejo package (
forgejo) has been updated to 12.0.0. This release contains breaking changes, see the release blog post for all the details and how to ensure smooth upgrades.The
offrsspackage was removed due to lack of upstream maintenance since 2012. It’s recommended for users to migrate to another RSS reader.The
piehardening flag has been removed. Compilers are expected to enable PIE by default, as has been common practice since 2016 outside of Nixpkgs. If a package needspiedisabled pass-no-pieinCFLAGS. It is unlikely this will be necessary in many cases; due to the prevalence of default PIE toolchains, most packages incompatible with PIE already pass-no-pie.The
vlockoutput from kbd has been removed. Instead a new packagekbdVlockhas been introduced. Use this package now instead of the output.tooling-language-serverhas been renamed todeputy(both the package and binary), following the rename of the upstream project.victoriametricsno longer contains VictoriaLogs components. These have been separated into the new packagevictorialogs.vmware-horizon-clientwas renamed toomnissa-horizon-client, following VMware’s sale of their end-user business to Omnissa. The binary has been renamed fromvmware-viewtohorizon-client.uw-ttyp0has been updated to version 2.1. The filenames of the OTB and PSF fonts have been changed to match the upstream naming convention. If you were loading a font by path, for example in theconsole.fontNixOS option, remember to update the filename accordingly.wayclipnow uses theext-data-control-v1Wayland protocol instead ofwlr-data-control-unstable-v1.webfontkitgeneratorhas been renamed towebfont-bundler, following the rename of the upstream project. The binary name remainswebfontkitgenerator. Thewebfontkitgeneratorpackage is an alias towebfont-bundler.webkitgtk_4_0has been removed because it depends on an unmaintained version of security-critical libsoup library (libsoup_2) and the support will be dropped upstream soon.yehawnwas removed due to the package being broken and unmaintained upstream.yggdrasil-jumperhas been updated to v0.4, changing traversal protocol. See release notes.zig_0_12has been removed.zigbee2mqttwas updated to version 2.x, which contains breaking changes. See the discussion for further information.
Other Notable Changes
buildEnvnow takes fixed-point arguments (finalAttrs: { }). The custom overrider<env-pkg>.overrideis deprecated but kept in this release. It will be removed in future releases after tree-wide transition. The argumentpathsis passed aspassthru.pathsto avoid bringing in unexpected context.buildEnvnow takesderivationArgsfor additional arguments to pass tostdenv.mkDerivation. A compatibility layer is added for directly-specified argumentsnativeBuildInputsandbuildInputs.Added
rewriteURLattribute to the nixpkgsconfig, to allow for rewriting the URLs downloaded byfetchurl.Added
hashedMirrorsattribute to the nixpkgsconfig, to allow for customization of the hashed mirrors used byfetchurl.Added
gitConfigandgitConfigFileoption to the nixpkgsconfig, to allow for setting a defaultgitConfigFilefor allfetchgitinvocations.Added
npmRegistryOverridesandnpmRegistryOverridesStringoption to the nixpkgsconfig, to allow for setting a defaultnpmRegistryOverridesStringfor allfetchNpmDepsinvocations.buildPythonPackageandbuildPythonApplicationnow default tonix-update-scriptas their defaultupdateScript. This should improve automated updates, since nix-update is better maintained than the in-tree update script and has more robust fetcher support.cloudflare-ddnshas been added.Direct use of
pkgs.formats.systemdhas been deprecated, and should now be instantiated withpkgs.formats.systemd { }similarly to other items inpkgs.formats.dragonflydbhas been updated from version 0.1.0 to version 1.34.2.emacsnow disables the GC mark trace buffer by default. This improves GC performance by 5%, but can make GC issues harder to debug. This is configurable withwithGcMarkTrace.etcdpackage was upgraded to 3.6, see migration notes for incompatibilities and upgrade procedure.fetchgitnow accepts agitConfigFileargument to set a git config (via$GIT_CONFIG_GLOBAL) for the fetcher.fetchgitnow accepts arootDirargument to limit the resulting source to one subdirectory of the whole Git repository. Corresponding--root-diroption added tonix-prefetch-git.fetchNpmDepsnow accepts anpmRegistryOverridesStringargument to pass npm registry overrides to the fetcher.ffmpeg_8,ffmpeg_8-headless, andffmpeg_8-fullhave been added. The default version of FFmpeg is nowffmpeg_8. You can install previous versions from package attributes such asffmpeg_7.forgejo-runnerhas been upgraded to version 11, which brings a license change from MIT to GPLv3-or-later.GIMP now defaults to version 3. Use
gimp2for the old version.gitversionwas updated to 6.3.0, which includes a number of breaking changes, old configurations may need updating or they will cause the tool to fail to run. See the 6.0.0 release notes for GitVersion for details on the breaking changes, the documentation on the configuration format for the new configuration specification, and the documentation on version variables for what is now supported.grampshas been updated to 6.0.0 Upstream recommends backing up your Family Trees before upgrading.homebox0.20.0 changed how assets are stored and hashed. It is recommended to back up your database before this update. In particular,--storage-datawas replaced with--storage-conn-stringand--storage-prefix-path. If your configuration setHBOX_STORAGE_DATAmanually, you must migrate it toHBOX_STORAGE_CONN_STRINGandHBOX_STORAGE_PREFIX_PATH.HTTP3 support has been enabled in in
nginx,openresty,angieandtengine. ThenginxQuicandangieQuicpackage flavors have been removed.idris2supports being instantiated with a package environment withidris.withPackages (p: [ ]).installShellCompletionnow supports Nushell completion files.jellyfinwas updated to10.11.x, which includes heavy backend changes. Make sure to backup your data and configuration directories and read the Jellyfin 10.11.0 release announcement. Important: make sure you’re running Jellyfin version10.10.7before upgrading, and beware that the migration may take several hours depending on your library size and state. The process must not be interrupted.lisp-moduleswere brought in sync with the June 2025 Quicklisp release.meta.mainProgramis now used to determine theNIX_MAIN_PROGRAMenvironment variable. This means that changing it can now lead to a package rebuild.neovimnow has support for thevim.o.exrcoption, theVIMINITenvironment variable, and sourcing ofsysinit.vim. See the neovim help page:help startupfor more information, as well as the nixpkgs neovim wrapper documentation.New hardening flags
strictflexarrays1,strictflexarrays3,glibcxxassertions,libcxxhardeningfastandlibcxxhardeningextensivewere made available.nix-prefetch-gitnow has a--no-add-pathargument to disable adding the path to the store. This is useful when working with a read-only store.Passing
stdenvtobuildPythonPackageorbuildPythonApplicationhas been deprecated and will trigger an error in a future release. Instead, you should override the python build helper, e.g.,(buildPythonPackage.override { stdenv = customStdenv; }). See the section called “Overriding build helpers”.php81was removed.plasma6: Fixed theksycocacache not being re-built when$XDG_CACHE_HOMEis set to something that isn’t$HOME/.cache.prl-toolshas been moved out oflinuxPackagesbecause Parallels Guest Tools become driverless since 26.1.0.sftpmanhas been updated to version 2, a rewrite in Rust which is mostly backward compatible but does include some changes to the CLI. For more information, check the project’s README.slurmno longer supports gtk2.sparklesharehas been removed as it no longer builds and has been abandoned upstream.strongSwanhas been updated to 6.0. See strongSwan 6.0.0 release notes for a complete list of changes.simplesamlphphas been removed since the package was severely outdated, unmaintained in Nixpkgs and having known vulnerabilities.The
clickhousepackage now track the stable upstream version per upstream’s recommendation. Users can continue to use theclickhouse-ltspackage if desired.The debug outputs produced by
separateDebugInfo = true;now contain symlinks mapping build-ids to the original source and ELF file. Specifically, if$out/bin/ninjahas build-id483bd7f7229bdb06462222e1e353e4f37e15c293, then$debug/lib/debug/.build-id/48/3bd7f7229bdb06462222e1e353e4f37e15c293.executableis a symlink to$out/bin/ninja$debug/lib/debug/.build-id/48/3bd7f7229bdb06462222e1e353e4f37e15c293.sourceis a symlink to the value of$srcduring build$debug/lib/debug/.build-id/48/3bd7f7229bdb06462222e1e353e4f37e15c293.sourceoverlayis a symlink to a directory with the same structure as the expanded$sourceRootbut containing only a copy of files which were patched during the build$debug/lib/debug/.build-id/48/3bd7f7229bdb06462222e1e353e4f37e15c293.debugis the file containing debug symbols (like before).
The
dockerTools.streamLayeredImagebuilder now uses a better algorithm for generating layered docker images, such that much more sharing is possible when the number of store paths exceeds the layer limit. It gives each of the largest store paths its own layer and adds dependencies to those layers when they aren’t used elsewhere.The
open-webuipackage’s postgres support has been moved to optional dependencies to comply with upstream changes in 0.6.26.The systemd initrd will now respect
x-systemd.wantsandx-systemd.requiresfor reliably unlocking multi-disk bcachefs volumes.The third-party
ant-contribis no longer included in theantpackage.Packages using
versionCheckHookthat previously relied solely onpnameto locate the program used to version check, but have a differingmeta.mainProgramentry, might now fail.waydroid-nftablesis a new variant ofwaydroidthat supports nftables instead of iptables.searxwas updated to useenvsubstinstead ofsedfor parsing secrets from environment variables. If your previous configuration included a secret reference likeserver.secret_key = "@SEARX_SECRET_KEY@", you must migrate to the new envsubst syntax:server.secret_key = "$SEARX_SECRET_KEY".
Nixpkgs Library
Breaking changes
haskell.lib.addOptparseApplicativeCompletionScriptshas been removed, usehaskellPackages.generateOptparseApplicativeCompletionsinstead.lib.attrsets.cartesianProductOfSetshas been removed, following its deprecation in NixOS 24.11. Uselib.attrsets.cartesianProductinstead.lib.attrsets.zipWithNameshas been removed, following its deprecation in 2009. Uselib.attrsets.zipAttrsWithNamesinstead.lib.attrsets.ziphas been removed, following its deprecation in 2013. Uselib.attrsets.zipAttrsWithinstead.lib.literalExamplehas been removed, uselib.literalExpressioninstead, or uselib.literalMDfor a non-Nix description.lib.mapAttrsFlattenhas been removed, following its deprecation in NixOS 24.11. Uselib.attrsets.mapAttrsToListinstead.lib.modules.defaultPriorityhas been removed, please uselib.modules.defaultOverridePriorityinstead.lib.options.mkPackageOptionMDhas been removed, following its deprecation in NixOS 24.11. Uselib.options.mkPackageOptioninstead.lib.readPathsFromFilehas been removed, use a list instead.lib.replaceCharshas been removed, it was a deprecated alias oflib.replaceStrings.lib.sources.pathType,lib.sources.pathIsDirectoryandlib.sources.pathIsRegularFilehave been replaced bylib.filesystem.pathType,lib.filesystem.pathIsDirectoryandlib.filesystem.pathIsRegularFilerespectively.lib.strings.isCoercibleToStringhas been replaced in favor of eitherlib.strings.isStringLikeorlib.strings.isConvertibleWithToString. Only use the latter if it needs to return true for null, numbers, booleans, or a list of those.lib.types.stringhas been removed. See this pull request for better alternative types likelib.types.str.The
buildPythonPackageandbuildPythonApplicationfunctions now require an explicitformatattribute. Previously the default format used setuptools and calledsetup.pyfrom the source tree, which is deprecated. The modern alternative is to configurepyproject = truewithbuild-system = [ setuptools ].
Deprecations
lib.cli.toGNUCommandLineandlib.cli.toGNUCommandLineShellhave been deprecated in favor oflib.cli.toCommandLine,lib.cli.toCommandLineShell,lib.cli.toCommandLineGNUandlib.cli.toCommandLineShellGNU.lib.options.mkAliasOptionModuleMDis now obsolete; use the identical [lib.options.mkAliasOptionModule] instead.types.eithersilently accepted mismatching types when used infreeformType. Module maintainers should fix the used type In most cases wrappingeitherwithattrsOfshould be sufficient.Since types.either was used to bootstrap other types. This also affects the following types:
oneOfnumbernumbers.*
Additions and Improvements
lib.cli.toCommandLine,lib.cli.toCommandLineShell,lib.cli.toCommandLineGNUandlib.cli.toCommandLineShellGNUhave been added to address multiple issues inlib.cli.toGNUCommandLineandlib.cli.toGNUCommandLineShell.ugrepnow has two new override options:wrapWithFilterUtilsfor optionally wrappingugrep+andug+with filter utilities for grepping other file types.createGrepReplacementLinksfor optionally creating drop-in replacement symlinks forgnugrep.
Nixpkgs 25.05 (2025.05/23)
Highlights
This release of Nixpkgs requires macOS Big Sur 11.3 or newer, as announced in the 24.11 release notes. We cannot guarantee that packages will continue to work on older versions of macOS. Future Nixpkgs releases will only support macOS versions supported by Apple; this means that Nixpkgs 25.11 will require macOS Sonoma 14 or newer. Users on old macOS versions should consider upgrading to a supported version (potentially using OpenCore Legacy Patcher for old hardware) or installing NixOS. If neither of those options are viable and you require new versions of software, MacPorts supports versions back to Mac OS X Snow Leopard 10.6.
The default kernel package has been updated from 6.6 to 6.12. All supported kernels remain available.
GCC has been updated from GCC 13 to GCC 14. This introduces some backwards‐incompatible changes; see the upstream porting guide for details.
The default GHC version has been updated from 9.6 to 9.8.
haskellPackagesalso uses Stackage LTS 23 (instead of LTS 22) as a baseline. We aim to remove the old GHC versions 8.10, 9.0 and 9.2 in the next release in accordance with the new GHC deprecation policy.LLVM has been updated from LLVM 16 (on Darwin) and LLVM 18 (on other platforms) to LLVM 19. This introduces some backwards‐incompatible changes; see the upstream release notes for details.
The Factor programming language packages were reworked.
factor-lang-scopeis now namedfactorPackagesand provides abuildFactorApplicationfunction to deploy Factor programs as binaries. It has also received proper documentation in the Nixpkgs manual.The packaging of Mesa graphics drivers has been significantly reworked, in particular:
Applications linked against different Mesa versions than installed on the system should now work correctly going forward (however, applications against older Mesa, e.g. from Nixpkgs releases before 25.05, remain broken)
Packages that used to depend on Mesa for libgbm or libdri should use
libgbmordri-pkgconfig-stubas inputs, respectively
GNU Taler has been updated to version 1.0. This marks a significant milestone as the GNU Taler payment system is now available in Swiss Francs for individuals and businesses in Switzerland. For more details, see the upstream release notes.
OpenSSH has been updated from 9.9p2 to 10.0p2, dropping support for DSA keys and adding a new
ssh-authbinary to handle user authentication in a different address space from unauthenticated sessions. See the full changelog for more details.Emacs has been updated to 30.1. This introduces some backwards‐incompatible changes; see the NEWS for details. NEWS can be viewed from Emacs by typing
C-h n, or by clickingHelp->Emacs Newsfrom the menu bar. It can also be browsed online.The
intelvideo driver for X.org (from the xf86-video-intel package, which was previously removed because it was non-functional) has been fixed and the driver has been re-introduced.The default openexr version has been updated to 3.2.4.
The default PHP version has been updated to 8.4.
The default Erlang OTP version has been updated to 27.
The default Elixir version has been updated to 1.18.
Backward Incompatibilities
apptainerandsingularitydeprecate the workaround of overridingvendorHashand related attributes via<pkg>.override, in favour of the unified overriding of the same group of attributes via<pkg>.overrideAttrs. The compatibility layer will be removed in future releases.squidhas been updated to version 7, this release includes multiple breaking changes, like ESI removal. For more information, check the release notes.postgresqlandlibpqdon’t providepg_configby default anymore. Instead,pg_configis available viapostgresql.pg_configorlibpq.pg_config. This allowed implementing it as a shell script, which can be built for both the build and host systems when cross-compiling. If your build fails to findpg_config, addpostgresql.pg_configorlibpq.pg_configtonativeBuildInputs.postgresql_13has been removed since it reached its end of life.The
no-broken-symlinkshook was added to catch builds containing dangling or reflexive symlinks, as these are indicative of problems with packaging. The hook can be disabled by providingdontCheckForBrokenSymlinks = true;as an argument tomkDerivation. For more information, check the docs or see this PR.gkrakenhas been removed. The recommended alternative iscoolercontrol.opensmtpd-extrashas been deprecated by upstream and is not compatible with OpenSMTPD 7.6.0 or later. The package has been removed in favor of a set of newopensmtpd-table-*packages.postsrsdupgraded to>= 2.0.0, with some different behaviors and configuration settings. Notably, it now defaults to listening on a socket rather than a port. See Migrating from version 1.x and Postfix Setup for details.renovatewas updated to v39. See the upstream release notes for breaking changes. Like upstream’s Docker images, renovate now runs on NodeJS 22.The handwritten
perlPackages.SearchXapianbindings have been dropped in favor of the (mostly compatible)perlPackages.Xapian.varnishwas updated from 7.5.0 to 7.7.0, see Varnish 7.6.0 upgrade guide and Varnish 7.7.0 upgrade guide.The
configtriple foraarch64-darwinhas been changed fromaarch64-apple-darwintoarm64-apple-darwinto match the Apple toolchain and LLVM’s expectations.The
electronpackages will now provide their headers (available viaelectron.headers) in extracted form instead of in a tarball.The udev rules of the
libjaylinkpackage require users to be in thejlinkinstead ofplugdevgroup now, since theplugdevgroup is very uncommon for NixOS. Alternatively, access is granted to seat sessions.The
ephemeralpackage was removed due to upstream archival in early 2022.The
gotenbergpackage has been updated to 8.16.0, which brings breaking changes to the configuration from version 8.13.0. See the upstream release notes for that release to get all the details.zammadhas had its support for MySQL removed, since it was never working correctly and is now deprecated upstream. Check the migration guide for how to convert your database to PostgreSQL.The
vocalpackage was removed due to upstream archival. The upstream developer suggests usinggnome-podcastsorkastsinstead.timescaledbrequires manual upgrade steps. After you run ALTER EXTENSION, you must run this SQL script. For more details, see the following pull requests #6797. PostgreSQL 13 is no longer supported in TimescaleDB v2.16.paperless-ngxhas been updated to minor version 2.15 which switched the web server from Gunicorn to Granian. If you set Gunicorn specific envs (usually contain GUNICORN) they must be updated.testers.shellcheck now warns when
nameis not provided. Thenameargument will become mandatory in a future release.tauon7.9.0+ when launched for the first time, migrates its database to a new schema that is not backwards compatible. Older versions will refuse to start at all with that database afterwards. If you need to still use older tauon versions, make sure to back up~/.local/share/TauonMusicBox.aws-workspaceshas dropped support for PCoiP networking.GIMP 3.0 available as
gimp3.grafana-agentandservices.grafana-agenthave been removed in favor of Grafana Alloy (grafana-alloyandservices.alloy), as they depend on an EOL compiler version and will become EOL during the 25.05 lifecycle. Grafana recommends migrating tografana-alloy(services.alloy). See https://grafana.com/docs/alloy/latest/set-up/migrate/ for details.slskdhas been updated to v0.22.3, which includes breaking changes toscriptintegrations. Please review the changelog and the accompanying pull request.forgejoandforgejo-ltshave been updated to v11. See upstreams release blog post for more information.unifihas been updated to v9.1. This version should be backward compatible with v8.x, however as a result,unifi8package has been removed.xdragonpackage has been renamed todragon-drop.xdragonis an alias todragon-dropand the package still providesbin/xdragon.bin/dragonis no longer supplied.python3Packages.bpycvhas been removed due to being incompatible with Blender 4 and unmaintained.python3Packages.jaeger-clientwas removed because it was deprecated upstream. OpenTelemetry is the recommended replacement.rocmPackages_6has been updated to ROCm 6.3.rocmPackages_5has been removed.rocmPackages.rocm-thunkhas been removed and its functionality has been integrated with the ROCm CLR. UserocmPackages.clrinstead.rocmPackages.clang-oclhas been removed. It was deprecated by AMD in 2023.nodePackages.meshcommanderhas been removed, as the package was deprecated by Intel.The default version of
z3has been updated from 4.8 to 4.13. There are still a few packages that need specific older versions; those will continue to be maintained as long as other packages depend on them but may be removed in the future.The
nixLog*family of functions made available through the standard environment have been rewritten to prefix messages with both the debug level and the function name of the caller. ThenixLogfunction, which logs unconditionally, was also re-introduced and modified to prefix messages with the function name of the caller. For more information, see this PR.postgresql’spythonSupportargument has been changed. It is now enabled by default, but to use PL/Python the extension needs to be added explicitly withpostgresql.withPackages. If you were usingpostgresql.override { pythonSupport = true; }before, change it topostgresql.withPackages (ps: [ ps.plpython3 ]). The same applies toperlSupport/plperlandtclSupport/pltclrespectively.Rust packages will need to regenerate their
cargoHash. Cargo 1.84.0 changed the format ofcargo vendoroutput, which invalidated all existingrustPlatform.fetchCargoTarballhashes. To preserve Nix’s invariants, it has been replaced withrustPlatform.fetchCargoVendor, an independent implementation prioritizing format stability.rustPlatform.buildRustPackagenow usesrustPlatform.fetchCargoVendorby default; a hash mismatch error is expected in third‐party Rust packages when updating to Nixpkgs 25.05. Packages wishing to maintain compatibility with Nixpkgs 24.11 must explicitly setuseFetchCargoVendortotrue.rustPlatform.importCargoLockmay also be appropriate in some circumstances.cassandra_3_0andcassandra_3_11have been removed as they have reached end-of-life. Please update tocassandra_4. See the changelog for more information about the upgrade process.mariadb_105has been removed as it has reached end-of-life in 2025-06. Please update tomariadb_106.NetBox was updated to
>= 4.2.0. Have a look at the breaking changes of the 4.1 release and the 4.2 release, make the required changes to your database, if needed, then upgrade by settingservices.netbox.package = pkgs.netbox_4_2;in your configuration.nodePackages.expo-clihas been removed, as it was deprecated by upstream. The suggested replacement is thenpx expocommand.The
conduwuitmatrix server implementation has officially been discontinued by upstream and the package has thus been marked as vulnerable, as it is a security-sensitive package that has reached EOL.NetBox version 4.0.X available as
netbox_4_0was removed. Please upgrade to4.2.golangci-linthas reachedv2. Please read the changes and view the migration guide here.i3status-rust-package no longer enablesnotmuchby default. It can be enabled viawithNotmuch.ocis-binhas been renamed toocis_5-bin. Future versions will have the major version suffix.All support for 32‐bit Darwin systems has been dropped.
substituteAllandsubstituteAllFileshave been deprecated in favor ofreplaceVarsand will be removed in the next release.Default ICU version updated from 74 to 76
The packages
signald,signaldctlandpurple-signaldhave been dropped as they are unmaintained upstream and have been incompatible with the official Signal servers for a long while.Apache Kafka was updated to
>= 4.0.0. Please note that this is the first release which operates entirely without Apache ZooKeeper support, and all clusters need to be migrated to KRaft mode. See the release announcement for more details.ast-grepremoves thesgcommand to prevent conflict with thesgcommand from shadow-utils. If you need legacy sg command compatibility with old code, you can useast-grep.override { enableLegacySg = true; }rename package
wtftowtfutil.python3Packages.beancountwas updated to 3.1.0. Previous major version remains available aspython3Packages.beancount_2.wastebinhas been updated to 3.0.0. See the Changelog for breaking changes to the configuration.binwalkwas updated to 3.1.0, which has been rewritten in Rust. The Python module is no longer available. See the release notes of 3.1.0 for more information.pkgs.nextcloud28andpkgs.nextcloud29have been removed since they are out of support upstream.centrifugowas updated to v6, which uses a new config format. See upstream documentation for migration.teleporthas been upgraded from major version 16 to major version 17. Refer to upstream upgrade instructions and release notes for v17.Emacs lisp build helpers, such as
emacs.pkgs.melpaBuild, now enables__structuredAttrsby default. Environment variables have to be passed via theenvattribute.buildGoModulenow passes environment variables via theenvattribute.CGO_ENABLEDshould now be specified withenv.CGO_ENABLEDwhen passing to buildGoModule. Direct specification ofCGO_ENABLEDis now redirected by a compatibility layer with a warning, but will become an error in future releases.Go-related environment variables previously shadowed by
buildGoModulenow results in errors when specified directly. Such variables includeGOOSandGOARCH.Third-party projects supporting both stable and unstable channels could detect this change through the absence of the
CGO_ENABLEDfunction argument inbuildGoModule(!((lib.functionArgs buildGoModule) ? CGO_ENABLED)).buildGoPackagehas been removed. UsebuildGoModuleinstead. See the Go section in the nixpkgs manual for details.buildGoModulenow supports agoSumattribute (nullby default) to optionally provide a path togo.sumand correctly enabling rebuilds when the file changes.The newly added aliases
go_latestandbuildGoLatestModuleare now available and can be used to prevent packages likegoplsfrom breaking whenever the default toolchain minor version is lagging behind. It can also be used outside of Nixpkgs to get fast access to new Go minor versions without having to wait for a staging cycle that will update the default builder/toolchain.A policy documenting the details of Go toolchain and builder upgrades in Nixpkgs, as well as rules related to using non-default builders like
buildGo1xxModuleandbuildGoLatestModulehas been added in-tree.top-level
playwrightnow refers to the github Microsoft/playwright package instead of the python tester launcher. You can still refer to the python launcher viapython3Packages.toPythonApplication python3Packages.playwrightThe representation of the flags attributes as shell/environment variables for most Python building setup hooks are now the same as
stdenv.mkDerivationand other build helpers – they are space-separated environment variables when__structuredAttrs = falseand Bash arrays when__structuredAttrs = true, and are concatenated to the command without Bash-evaluation. The following behaviour changes are introduced during the conversion:The following flags are no longer Bash-expanded before concatenated to the command:
disabledTestsanddisabledTestPathsforpytestCheckHook. (disabledTestPathsused to be expanded twice before concatenation.)setupPyBuildFlagsandsetupPyGlobalFlagsforsetuptoolsBuildHook.
pytestFlagsandunittestFlagsreplacepytestFlagsArrayandunittestFlagsArrayand become the new and conforming interface.pytestFlagsArrayandunittestFlagsArrayare kept for compatibility purposes. They continue to be Bash-expanded before concatenated. This compatibility layer will be removed in future releases.
The
hakapackage and module has been removed because the package was broken and unmaintained for 9 years.The
gsignondpackage, plugins and module have been removed because they were unmaintained for 6 years.strawberryhas been updated to 1.2, which drops support for the VLC backend and Qt 5. Thestrawberry-qt5package andwithGstreamer/withVlcoverride options have been removed due to this.nexusmods-apphas been upgraded from version 0.6.3. If you were running a version older than 0.7.0, then before upgrading, you must reset all app state (mods, games, settings, etc). Otherwise, NexusMods.App will crash due to app state files incompatibility.Typically, you can reset to a clean state by running
NexusMods.App uninstall-app. See Nexus Mod’s how to uninstall the app documentation for more detail and alternative methods.This should not be necessary going forward, because loading app state from 0.7.0 or newer is now supported. This is documented in the 0.7.1 changelog.
nezhaand its agentnezha-agenthave been updated to v1, which contains breaking changes. See the official wiki for more details.ps3-disc-dumperwas updated to 4.2.5, which removed the CLI project and now exclusively offers the GUIkmonadis now hardened by default using commonsystemdsettings. If KMonad is used to execute shell commands, hardening may make some of them fail. In that case, you can disable hardening using theservices.kmonad.keyboards.<name>.enableHardeningoption.isdwas updated from 0.2.0 to 0.5.1, the new version may crash with a previously generated config, try moving or deleting~/.config/isd/schema.json.uwsgino longer supports Python 2 plugins.Support for CUDA 10 has been dropped, as announced in the 24.11 release notes.
mepowas updated to version 1.3.3. The manual page was removed, a new JSON API was introduced to replace Mepolang for configuration, and a few default key bindings were changed. See the 1.3.0 changelog for more details.mkBinaryCachenow defaults to usingzstdcompression for the binary caches it creates. The previousxzcompression method can be used by passingcompression = "xz";.nodejs_latestwas updated from 23.x to 24.x.nodejs_23has been removed in favor ofnodejs_24.nodejs_18package was removed due to upstream End-of-Life in April 2025.nodePackages."@commitlint/config-conventional"has been removed, as it is a library, and projects should depend on it instead.zigbee2mqtt is now available in version 2.x as
zigbee2mqtt_2. In NixOS 25.11 we’ll removezigbee2mqtt_1and default tozigbee2mqtt_2. See the breaking changes announcement for 2.0.0.nodePackages.vlshas been deprecated, as the upstream consumer of it, vetur, has been deprecated by upstream. Upstream suggests migrating to Volar for Vue LSP tooling instead.nodePackages.create-react-native-apphas been removed, as it is deprecated. Upstream suggests using a framework for React Native apps instead.nodePackages.insecthas been removed, as it’s deprecated by upstream. The suggested replacement isnumbat.nodePackages.webpack-dev-serverhas been removed, as it should be installed in projects that use it instead.nodePackages.copy-webpack-pluginhas been removed, as it should be installed in projects that use it instead.himalayahas been updated fromv1.0.0-beta.4tov1.1.0, which introduces breaking changes. Check out the release notes for details.linuxPackages.nvidiaPackages.dc_520has been removed since it is marked broken and there are better newer alternatives.pnpmwas updated to version 10. If your project is incompatible, you can install the previous version from the package attributepnpm_9.dwarf-fortress-packagesnow only contains one minor version for each major version since version 0.44. Saves should still be compatible, but you may have to change which minor version you were using if it was one other than the newest.tpm2-pkcs11now is compiled withoutabrmd(Access Broker and Resource Manager Daemon) support by default, preferring the kernel resource manager. Usetpm2-pkcs11.abrmdif you would like a version withabrmdsupport. Note that the NixOS module picks the correct one automatically based onsecurity.tpm2.abrmd.zig_0_9andzig_0_10have been removed, you should upgrade tozig_0_13(also available as justzig),zig_0_12orzig_0_11instead.webpack-cliwas updated to major version 6, which has breaking changes from the previous version 5.1.4. See the upstream release notes for details on these changes.minetesthas been renamed toluantito match the upstream name change but aliases have been added. The new name hasn’t resulted in many changes as of yet but older references to minetest should be sunset. See the new name announcement for more details.poachas been renamed tocabinpkgto match the upstream name change but an alias has been added. See the new name announcement for more details.serious-sanshas been removed because upstream changed its name to Serious Shanns, which is not currently packaged.racket_7_9has been removed, as it is insecure. It is recommended to use Racket 8 instead.rofihas been updated from 1.7.5 to 1.7.6 which introduces some breaking changes to binary plugins, and also contains a lot of new features and bug fixes. This is highlighted because the patch version bump does not indicate the volume of changes by itself. See the upstream release notes for the full list of changes.ente-authnow uses the nameenteauthfor its binary. The previous name wasente_auth.foundationdbwas upgraded to 7.3.fluxushas been removed, as it depends onracket_7_9and had no updates in 9 years.meilisearchhas been upgraded from 1.11.3 to 1.14.0, which requires manually dumping and importing the data. See Meilisearch’s upgrade guide for more information.sm64ex-coophas been removed as it was archived upstream. Consider migrating tosm64coopdx.tldrnow usestldr-python-clientinstead oftldr-c-clientwhich is unmaintained.The behavior of the
networking.nat.externalIPandnetworking.nat.externalIPv6options has been changed.networking.nat.forwardPortsnow only forwards packets destined for the specified IP addresses.python3Packages.bpycvhas been removed due to being incompatible with Blender 4 and unmaintained.python3Packages.jaeger-clientwas removed because it was deprecated upstream. OpenTelemetry is the recommended replacement.nodePackages.meshcommanderhas been removed, as the package was deprecated by Intel.The default version of
z3has been updated from 4.8 to 4.15, and all old versions have been dropped. Note thatfstarstill depends on specific versions, and maintains them as overrides.prometheushas been updated from 2.55.0 to 3.1.0. Read the release blog post and migration guide.kanatawas updated to v1.8.0, which introduces several breaking changes. See the release notes of v1.7.0 and v1.8.0 for more information.autheliaversion 4.39.0 has made changes on the default claims for ID Tokens, to mirror the standard claims from the specification. This change may affect some clients in unexpected ways, so manual intervention may be required. Read the release notes, along with the guide to work around issues that may be encountered.agswas updated to v2, which is just a CLI for Astal now. Components are available as a different package setastal.*. If you want to use v1, it is available asags_1package.See the release notes of v2.0.0 for more information.
nodePackages.expo-clihas been removed, as it was deprecated by upstream. The suggested replacement is thenpx expocommand.open-policy-agenthas been updated to 1.0.0+. This major release makes therego.v1syntax the default. This is a breaking change for those using v0 Rego. See the upgrade documentation for more details. For those unable to upgrade yet, there is a v0 compatibility mode available too.helmfilewas updated to v1.0.0, which introduces several breaking changes. See the release notes of v1.0.0 for more information.vscode-utils.buildVscodeExtensionnow requires pname as an argumentnerdfontshas been separated into individual font packages under the namespacenerd-fonts. The directories for font files have changed from$out/share/fonts/{opentype,truetype}/NerdFontsto$out/share/fonts/{opentype,truetype}/NerdFonts/<fontDirName>, where<fontDirName>can be found in the official website as the titles in preview images, with the “Nerd Font” suffix and any whitespaces trimmed. Configuration changes are required, see build output.retroarchhas been refactored and the olderretroarch.override { cores = [ ... ]; }to create a RetroArch derivation with custom cores doesn’t work anymore, useretroarch.withCores (cores: [ ... ])instead. If you need more customization (e.g.: custom settings), usewrapRetroArchinstead.borgmatichas been updated from 1.8.14 to 1.9.5, please check the upstream changelog for more details, especially for a few possibly breaking changes noted in the 1.9.0 changelog.nodePackages.ganachehas been removed, as the package has been deprecated by upstream.matomonow defaults to version 5 (previously available asmatomo_5). Version 4 has been removed as it reached EOL on December 19, 2024.matomo-betahas been removed as the version of thematomopackage can now be easily overridden throughoverrideAttrs(see PR #374022)docker_24has been removed, as it was EOL with vulnerabilities since June 08, 2024.Emacs 28 and 29 have been removed.
Emacs 28 Macport has been removed, while CVEs of Emacs 29 Macport are patched.
containerdhas been updated to v2, which contains breaking changes. See the containerd 2.0 documentation for more details.The
tinyccpackage now has thedev,docandliboutputs, thus,tinycc.outmay now only provide the tcc and cross compilers binaries.The
testTargetargument ofhaskellPackages.mkDerivationhas been deprecated in favour oftestTargets.testTargettook a space separated string of targets, whereas the newtestTargetsargument takes a list of targets. For instance,testTarget = "foo bar baz"should becometestTargets = [ "foo" "bar" "baz" ].rustPlatform.buildRustPackagestops handling the deprecated argumentcargoSha256. Out-of-tree packages that haven’t migrated fromcargoSha256tocargoHashnow receive errors.nodePackages.stackdriver-statsd-backendhas been removed, as the StackDriver service has been discontinued by Google, and therefore the package no longer works.python3Packages.opentracinghas been removed due to being unmaintained upstream. OpenTelemetry is the recommended replacement.the notmuch vim plugin now lives in a separate output of the
notmuchpackage. Installingnotmuchwill not bring the notmuch vim package anymore, addvimPlugins.notmuch-vimto your (Neo)vim configuration if you want the vim plugin.The fileSystems (e.g.,
fileSystems."/") are now set by NixOS-implemented modules usinglib.mkDefault, allowing wholesale overrides, but this means that overriding individual attributes (likefsTypeoroptions) without explicitly specifyingdevicemay result in missing required fields and errors such asNo device specified for mount point '/'(https://github.com/NixOS/nixpkgs/pull/377406).prismaandprisma-engineshave been updated to version 6.7.0, which introduces several breaking changes. See the Prisma ORM upgrade guide for more information.dependency-trackno longer bundles the UI inside the jar. This bundling functionality is deprecated by upstream and causes UI assets not being served after weeks of runtime.nqwas updated to 1.0, which renames thefqandtqutilities tonqtailandnqtermrespectively.zfwas updated to 0.10.2, which includes breaking changes from the 0.10.0 release.zfno longer does Unicode normalization of the input and no longer supports terminal escape sequences in theZF_PROMPTenvironment variable.confluent-cliwas updated from 3.60.0 to 4.16.0, which includes several breaking changes as detailed in Confluent’s release notes.siduck76-sthas been renamed tost-snazzy, like the project’s flake. An alias for the old name has been added.python3Packages.jaxnow directly depends onpython3Packages.jaxlib. As a result, packages that depend on jax no longer need to include jaxlib to their dependencies. There is also a breaking change in the handling of CUDA. Instead of using a CUDA-compatible jaxlib as before, you can use plugins likepython3Packages.jax-cuda12-plugin.Added
allowVariantsto gate availability of package sets likepkgsLLVM,pkgsMusl,pkgsZig, etc. This was done in an effort to decrease evaluation times by limiting the number of instances of nixpkgs to evaluate. The option will be removed in the future as a new mechanism is in the works for handling cross compilation.
Other Notable Changes
i18nmodule improvements:i18n.extraLocalesshould now be the preferred way to install additional locales.i18n.supportedLocalesis now considered an implementation detail and will be hidden from the documentation. But the option will still continue to work.i18n.supportedLocaleswill now trigger a warning when it omits any locale set ini18n.defaultLocale,i18n.extraLocalesori18n.extraLocaleSettings.The options
i18n.defaultCharset&i18n.localeCharsetswere added, and they complementi18n.defaultLocale&i18n.extraLocaleSettingsrespectively - allowing to control the character set used per locale setting.
Plasma 5 and Qt 5 based versions of associated software are deprecated in NixOS 25.05, and will be removed in NixOS 25.11. Users are encouraged to upgrade to Plasma 6.
titaniumenv,titanium, andtitanium-alloyhave been removed due to lack of maintenance in Nixpkgs .Cursor — a vscode-based editor that uses AI to help you write code faster — has been packaged as
cursor.octave(andoctaveFull) was updated to version10.x. The update broke a fewoctavePackages, andlibrsb. See the PR’s commits for more details.androidenv has been improved:
All versions specified in composeAndroidPackages now track the latest. Android packages are automatically updated on unstable, and run the androidenv test suite on every update.
Many androidenv packages are now searchable on search.nixos.org.
We now use the latest Google repositories, which should improve aarch64-darwin compatibility. The SDK now additionally evaluates on aarch64-linux, though not all packages are functional.
dwarf-fortressaudio now works again. Additionally, thedfhackanddwarf-fortress-fullpackages are now exposed at toplevel, making it easier to install and play Dwarf Fortress. Note thatdwarf-fortress-fullis the Nixpkgs equivalent of the Dwarf Fortress Lazy Pack.gerberanow has wavpack support.buildPythonPackage,buildPythonApplicationand the Python building setup hooks now support both__structuredAttrs = trueand__structuredAttrs = false.buildGoModulenow supports a self-referencingfinalAttrs:parameter containing the final arguments including overrides. This allows packaging configuration to be overridden in a consistent manner by providing an alternative torec {}syntax.Caddy can now be built with plugins by using
caddy.withPlugins, apassthrufunction that accepts an attribute set as a parameter. Thepluginsargument represents a list of Caddy plugins, with each Caddy plugin being a versioned module. Thehashargument represents thevendorHashof the resulting Caddy source code with the plugins added.Example:
let pkgs = import <nixpkgs> { }; in pkgs.caddy.withPlugins { plugins = [ # tagged upstream "github.com/caddy-dns/powerdns@v1.0.1" # pseudo-version number generated by Go "github.com/caddy-dns/cloudflare@v0.0.0-20240703190432-89f16b99c18e" "github.com/mholt/caddy-webdav@v0.0.0-20241008162340-42168ba04c9d" ]; hash = "sha256-wqXSd1Ep9TVpQi570TTb96LwzNYvWL5EBJXMJfYWCAk="; }To get the necessary hash of the vendored dependencies, omit
hash. The build will fail and tell you the correct value.Note that all provided plugins must have versions/tags (string after
@), even if upstream repo does not tag each release. For untagged plugins, you can either create an empty Go project and rungo get <plugin>and see changes ingo.modto get the pseudo-version number, or provide a commit hash in place of version/tag for the first run, and update the plugin string based on the error output.The
godot-export-templatespackage now has its content atshare/godot/export_templates/$versioninstead of the output root. This makes it more convenient for symlinking into~/.local, but scripts expecting the old layout will need to be changed.GOverlay has been updated to 1.2, please check the upstream changelog for more details.
tpm2-pkcs11now has the varianttpm2-pkcs11-fapi, which has been patched to default to the Feature API backend. It has also been split intotpm2-pkcs11-esapi, which only supports the older Enhanced System API backend. Note the differences, and thattpm2-pkcs11itself still needsTPM2_PKCS11_BACKEND=fapiexported in order to use the Feature API, whereastpm2-pkcs11-fapidoes not, andtpm2-pkcs11-esapijust does not support fapi entirely.For matrix homeserver Synapse we are now following the upstream recommendation to enable jemalloc as the memory allocator by default.
Mattermost, a self-hosted chat collaboration platform supporting calls, playbooks, and boards, has been updated. It now has multiple versions, disabled telemetry, and a native frontend build in nixpkgs, removing all upstream prebuilt blobs.
A new
pkgs.mattermost.buildPluginfunction has been added, which allows plugins to be built from source, including webapp frontends with a supported package-lock.json. See the Mattermost NixOS test and manual for an example.The Mattermost frontend is now built from source and can be overridden. Note that the Mattermost derivation containing both the webapp and server is now wrapped to allow them to be built independently, so overrides to both webapp and server look like
mattermost.overrideAttrs (prev: { webapp = prev.webapp.override { ... }; server = prev.server.override { ... }; })now.pkgs.mattermosthas been updated from 9.11 to 10.5 to track the latest extended support release, since 9.11 will become end-of-life during the lifetime of NixOS 25.05.pkgs.mattermostLatestis now an option to track the latest (non-prerelease) Mattermost release. We test upgrade migrations from ESR releases (pkgs.mattermost) topkgs.mattermostLatest.
A new hardening flag,
nostrictaliasingwas made available, corresponding to the gcc/clang option-fno-strict-aliasing.The
stackclashprotectionhardening flag has been enabled by default on compilers that support it.In
dovecotpackage, the hardcoded path to the module directory has been removed.autheliaversion 4.39.0 has made some changes which deprecate older configurations. They are still expected to be working until future version 5.0.0, but will generate warnings in logs. Read the release notes for human readable summaries of the changes.hddfancontrolhas been updated to major release 2. See the migration guide, as there are breaking changes.nextcloud-news-updateris unmaintained and was removed from Nixpkgs.KDE Partition Manager
partitionmanager’s support for ReiserFS is removed. ReiserFS has not been actively maintained for many years. It has been marked as obsolete since Linux 6.6, and is removed in Linux 6.13.gerberanow has wavpack support.signal-desktophas been migrated to a from source build. No state migration is necessary. In case there’s no working source build available (like on Darwin), the binary build is still available atsignal-desktop-bin.ddclientwas updated from 3.11.2 to 4.0.0 Release notes
Nixpkgs Library
Breaking changes
Structure of the
functorof some types has changed.functoris an implementation detail and should not be relied upon. If you did rely on it let us know in this PR.lib.types.enum: Previously thefunctor.payloadwas the list of enum values directly. Now it is an attribute set containing the values in thevaluesattribute.lib.types.separatedString: Previously thefunctor.payloadwas the separator directly. Now it is an attribute set containing the separator in thesepattribute.
lib.packagesFromDirectoryRecursivenow rejects unknown arguments.
Deprecations
functoris an implementation detail and should not be relied upon, but since its status wasn’t clear and it has had some use cases without alternatives, changes are being handled as gracefully as possible. Deprecations within functor:functor.wrappedis now deprecated for some types and using it will give a warning with migration instructions. It is deprecated for these types:lib.types.attrsWithlib.types.listOflib.types.uniqueandlib.types.uniqlib.types.nullOrlib.types.functionTolib.types.coercedTolib.types.either
Additions and Improvements
lib.packagesFromDirectoryRecursivecan now construct nested scopes matching the directory tree passed as input.