You need software that Fedora doesn't ship
You upgraded to Fedora 41 and the version of neovim in the official repositories is three weeks behind the commit you need. Or you found a specialized tool for hardware monitoring that only exists as a source tarball on GitHub. You discovered a COPR project that builds the package you want, but you are hesitant. Third-party repositories can introduce dependency conflicts, security risks, or break your system during a major upgrade. You need to enable the repository safely, install the package, and know exactly how to revert if things go wrong.
What COPR actually is
COPR stands for Community Project Repository. It is a build service hosted by Fedora Infrastructure. Developers upload source code and spec files to COPR. The service compiles the source into RPM packages on Fedora's build machines and stores them in a repository. You enable the repository, and dnf treats it like any other package source.
The trust model differs from official repositories. Official packages are reviewed by the Fedora Packaging Committee and audited by the Security Team. COPR packages are maintained by volunteers. The build process is transparent and runs on trusted infrastructure, but the content is not vetted by Fedora staff. You are trusting the maintainer of the COPR project.
Think of official repositories as a curated grocery store with quality control. COPR is the farmers market next door. The produce is fresh and sometimes experimental, but you check the vendor yourself.
Fedora ships the dnf-plugins-core package by default, which includes the copr plugin. This plugin provides the dnf copr subcommands that handle repository management safely. You do not need to install extra tools to use COPR.
Enable and install a COPR repository
Start by searching for the project. The dnf copr search command queries the COPR metadata index. This avoids guessing the owner and project path and shows active repositories.
dnf copr search neovim
# WHY: Queries the COPR index for projects matching the keyword.
# Returns project names, descriptions, and the owner/project path.
# This helps you verify the maintainer before enabling anything.
Once you identify the correct project, enable the repository. The dnf copr enable command downloads the repository definition and writes it to /etc/yum.repos.d/. This makes the packages available to dnf without installing them yet.
sudo dnf copr enable agriffis/neovim-nightly
# WHY: Adds the COPR repository to your system configuration.
# Downloads the .repo file and GPG key.
# Packages are now available for installation but not installed yet.
The command creates a file in /etc/yum.repos.d/. Config files in /etc/ are user-modified and persist across upgrades. Files in /usr/lib/ ship with packages and should never be edited manually. COPR writes to /etc/yum.repos.d/, which is the correct location.
Install the package using the standard dnf install command. dnf resolves dependencies against both official and COPR sources.
sudo dnf install neovim
# WHY: Installs the package from the newly enabled COPR repository.
# dnf prefers the COPR version if it provides a higher release number.
# Dependencies are pulled from official repos unless COPR provides them.
Verify the installation
Confirm that the package came from the expected source. The dnf repoquery command lets you inspect package origins without installing anything.
dnf repoquery --installed --repo copr:agriffis_neovim-nightly
# WHY: Lists packages currently installed from the specific COPR repo.
# Confirms the package source matches your expectation.
# Useful for auditing third-party software on the system.
If the output lists neovim, the installation succeeded and the package is tracked correctly. You can also check the package details to see the build date and version.
rpm -qi neovim
# WHY: Displays metadata for the installed RPM package.
# Shows the build time, version, and release string.
# Helps you verify you are running the nightly build, not the stable one.
Manage repositories over time
COPR repositories update automatically when you run dnf upgrade. If you enable a nightly repository, your system will pull nightly updates during routine maintenance. This is often desirable for development tools but risky for production services.
Disable a repository to stop updates while keeping the packages installed. The dnf copr disable command modifies the repository file without deleting it.
sudo dnf copr disable agriffis/neovim-nightly
# WHY: Sets enabled=0 in the repository configuration file.
# Packages remain installed but will not update.
# Re-enable later with 'dnf copr enable' to resume updates.
Remove a repository when you no longer need it. The dnf copr remove command deletes the repository file entirely. This does not uninstall packages that were installed from the repository. You must remove those packages manually if desired.
sudo dnf copr remove agriffis/neovim-nightly
# WHY: Deletes the .repo file from /etc/yum.repos.d/.
# The repository is gone from your system configuration.
# Installed packages remain and will no longer receive updates.
Audit your repositories monthly. A forgotten COPR repository is a silent source of breakage.
Common pitfalls and error messages
GPG key errors are the most common issue. dnf usually imports the GPG key automatically when you enable a COPR repository. If the key is missing or corrupted, you will see an error during installation.
Error: GPG check FAILED
Public key for package.rpm is not installed
Run dnf copr enable again. The command re-imports the key. If the error persists, check the COPR project page for a link to the public key and import it manually.
Dependency conflicts occur when a COPR package provides a library that conflicts with an official package. dnf will refuse to proceed and print a transaction error.
Error: Transaction test error: package python3-libs-3.12.x conflicts with python3-libs provided by python3-3.13.y from copr:owner_project
Read the error carefully. The conflict is usually intentional. The COPR package may require a newer version of a dependency that replaces the official one. Do not force the installation with --skip-broken. Instead, check if the COPR project provides the conflicting package as well. If it does, enable the COPR repository for that dependency too. If the conflict is unresolved, the COPR project may be incompatible with your Fedora release.
Module conflicts are another trap. Fedora uses module streams for some packages like postgresql or nodejs. If you enable a module stream, dnf locks the package versions. A COPR package may conflict with the module package.
Error: module postgresql conflicts with package postgresql-server from copr:owner_project
Check your enabled modules with dnf module list. If a module is enabled, you must disable it before installing a COPR package that provides the same functionality. Use dnf module disable <module> to revert to the default stream.
System upgrades require special attention. dnf system-upgrade downloads packages for the next Fedora release but does not install them. COPR repositories usually only provide builds for the current release. If you have a COPR repository enabled, dnf system-upgrade may fail because it cannot find packages for the new release.
Disable all COPR repositories before running dnf system-upgrade. Re-enable them after the upgrade completes and the COPR maintainer has built packages for the new release.
Disable COPR repos before a major release upgrade. The new release won't have builds for them yet.
When to use COPR versus other options
Choose the packaging method based on your needs for integration, stability, and isolation.
Use COPR when you need a specific RPM package that integrates with system libraries or requires root privileges.
Use Flatpak when you want sandboxed applications that update independently of the OS release cycle.
Use the official repositories when stability and security review are your top priorities.
Stay on the official stack if the default version meets your needs.
Use source compilation when the package is too niche for a repository and you need full control over build flags.