Using modules in Fedora
**Modules** are special package groups usually representing an application, a language runtime, or a set of tools. They are available in one or **multiple streams** which usually represent a major version of a piece of software, giving you an option to choose what versions of packages you want to consume.
To simplify installation, modules usually define one or more **installation profiles** that represent a specific use case. For example a `server` or a `client` profile in a database module.
This is a quick overview how to use modules and module streams with the package manager DNF.
Module stream installation and discovery
Listing packages
Packages available to the system can be discovered by the usual commands such as `dnf search NAME`, `dnf list NAME`, or by using the `dnf repoquery QUERY` command for more complex queries. However, it is important to note that those commands will, apart from traditional packages, only list modular packages coming from already _enabled_ module stream.
Listing modules
To list modules available to your system, and to see what streams are _default_ or have been _enabled_, use the following command:
$ dnf module list
Installing packages
Packages can be installed the usual way by running the `dnf install NAME` command. Any traditional package, or a modular package coming from an _enabled_ module can be installed this way.
Packages from other module streams can be consumed by either _enabling a module_ stream and then installing individual packages, or by _installing a module_ directly.
Enabling modules
To **enable a module stream** and make its packages available for installation, run the following command:
$ dnf module enable NAME:STREAM
For example, to make Node.js 8 packages available for installation, run:
$ dnf module enable nodejs:8
Packages from enabled module streams can be then installed by the `dnf install NAME` command.
Installing modules