You just switched from a Debian-based distro and type apt install neovim
The terminal replies with Command 'apt' not found. You find a .rpm file on a developer's GitHub releases page, run rpm -ivh package.rpm, and watch it abort with a wall of missing dependency errors. You are not doing anything wrong. You are just meeting Fedora's package management philosophy for the first time. Fedora separates system stability from desktop application flexibility. The tools look different, but they follow a strict hierarchy. Once you know which tool handles which layer, installing software becomes predictable.
What's actually happening
Fedora uses DNF as its primary package manager. DNF sits on top of RPM, the low-level package format that handles file placement and database tracking. DNF resolves dependencies, checks for conflicts, and pulls packages from configured repositories. When you install a system tool or a library, DNF ensures it fits into the existing system state without breaking package signatures or overwriting protected files.
Think of DNF like a project manager coordinating a construction site. It checks the blueprints, verifies that the materials match the specifications, and ensures the new structure does not collapse the existing foundation. The dependency resolver calculates every required library, kernel module, and configuration file before touching the disk. If a single piece is missing or incompatible, the entire transaction rolls back. This prevents partial installations that leave the system in an unbootable state.
Desktop applications follow a different path. Fedora Workstation ships with Flatpak enabled by default. Flatpak runs applications in isolated sandboxes with their own runtimes and dependencies. This prevents a desktop app from pulling in outdated libraries that could destabilize the system. The two systems coexist. DNF manages the foundation. Flatpak manages the user-facing applications. You will use both, but rarely at the same time.
The fix or how-to
Start with DNF for system tools, development libraries, and services. DNF caches repository metadata locally. If you just enabled a new repository or it has been more than a few days since your last update, refresh the cache before searching. The --refresh flag forces a fresh pull from the mirrors. Make sudo dnf upgrade --refresh your weekly maintenance habit. It prevents stale cache issues and ensures you are working with the current package state.
Here is how to search for a package and install it safely.
# Refresh metadata to ensure you see the latest package versions
sudo dnf upgrade --refresh
# Search returns package names and short descriptions
dnf search neovim
# Install the exact package name returned by the search
sudo dnf install neovim
DNF handles local .rpm files the same way it handles remote packages. Point it at the file path and it will resolve any missing dependencies from your configured repositories. This avoids the manual dependency chasing that happens with the raw rpm command. The ./ prefix is mandatory. Without it, DNF assumes you are querying the repository database instead of reading a local file.
Here is how to install a downloaded RPM while letting DNF handle dependencies.
# The ./ prefix tells DNF to look in the current directory
# DNF will fetch missing dependencies from enabled repos
sudo dnf install ./custom-tool-1.2.3-1.fc40.x86_64.rpm
# Verify the installation succeeded without transaction errors
sudo dnf list installed custom-tool
Desktop applications belong in Flatpak. Fedora Workstation includes the Flatpak runtime, but you still need to add the Flathub repository to access the community catalog. Flathub is the standard source for sandboxed apps on Fedora. Flatpak applications use the Portal system to access host resources like file pickers, network access, and printing. This keeps the sandbox secure while still providing a native desktop experience.
Here is how to add Flathub and install a desktop application.
# Add the Flathub remote if it is not already configured
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
# Install the app from Flathub with automatic dependency resolution
flatpak install flathub org.videolan.VLC
# Launch the application to verify the sandbox initializes correctly
flatpak run org.videolan.VLC
Some software falls outside Fedora's licensing guidelines. Proprietary codecs, hardware drivers, and certain multimedia tools live in third-party repositories. RPM Fusion is the community-maintained repository that bridges this gap. It splits into free and nonfree sections to match Fedora's licensing boundaries. Configuration files in /etc/ are meant for user modifications. Repository files installed by RPM Fusion land in /etc/yum.repos.d/. Never edit files in /usr/lib/ unless you are patching a package upstream. Package managers will overwrite /usr/lib/ on the next upgrade.
Here is how to enable RPM Fusion for your current Fedora release.
# rpm -E %fedora expands to your current release number
# This installs the repo configuration files into /etc/yum.repos.d
sudo dnf install \
https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm \
https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
# Reload DNF configuration to recognize the new repository paths
sudo dnf makecache
After enabling a new repository, DNF needs to download the package lists. Run a metadata refresh and check for available updates. Always check the service status before restarting or reloading configurations. Run systemctl status dnf-makecache.timer if you want to verify background metadata updates are scheduled.
Here is how to verify the new repository is active and see what it provides.
# List all enabled repositories and their package counts
dnf repolist
# Check for newly available packages from the fresh metadata
sudo dnf check-update
# Filter the output to see only packages from the new repo
sudo dnf check-update | grep rpmfusion
Keeping the system current requires a single command. DNF upgrades all installed packages to their latest versions in one transaction. It handles kernel updates, library bumps, and security patches simultaneously. Fedora's release cadence is six months. The N-2 release goes end-of-life when N+1 ships. Plan upgrades on that cycle. Use dnf system-upgrade for crossing major releases, not dnf upgrade. They are different commands with different safety guarantees.
Here is how to apply system updates safely.
# --refresh forces a metadata pull even if the cache is fresh
# This ensures you get the latest security fixes immediately
sudo dnf upgrade --refresh
# Reboot to load the new kernel and updated system libraries
sudo reboot
For unattended systems or laptops that stay closed, automatic updates prevent drift. The dnf-automatic package provides a systemd timer that checks for updates and installs security patches without user intervention. The timer runs daily and respects the apply_updates setting in /etc/dnf/automatic.conf.
Here is how to enable automatic security updates.
# Install the automatic update service and timer
sudo dnf install dnf-automatic
# Enable the timer to run daily and start it immediately
sudo systemctl enable --now dnf-automatic-install.timer
# Verify the timer is active and scheduled
systemctl status dnf-automatic-install.timer
Verify it worked
Confirm installations by checking the package database and verifying the command paths. DNF tracks every package it installs. Flatpak maintains its own registry. Cross-checking both ensures you know which tool manages which software. Run journalctl -xe if a service fails to start after installation. The x flag adds explanatory text and the e flag jumps to the end. Most sysadmins type journalctl -xeu <unit> muscle-memory style.
Here is how to verify a DNF package and a Flatpak app are correctly installed.
# List installed packages matching the query
dnf list installed neovim
# Check the executable path and version
which neovim && neovim --version
# List installed Flatpak applications
flatpak list
# Verify Flatpak permissions and portal access
flatpak info --show-permissions org.videolan.VLC
Reboot before you debug. Half the time the symptom is gone.
Common pitfalls and what the error looks like
Dependency conflicts are the most common roadblock. DNF will refuse to proceed if two packages claim ownership of the same file or if a package requires a library version that conflicts with your current system state. The transaction test runs in a staging area before modifying the live system. If the test fails, DNF aborts cleanly.
Error: Transaction test error:
package python3-3.12.7-1.fc40.x86_64 conflicts with python3 provided by python3-3.13.1-1.fc40.x86_64
The conflict is intentional. Read the next paragraph before forcing. When you see a transaction test error, check which repository is providing the conflicting package. Third-party repositories sometimes package software against newer or older library versions than Fedora's official repos. Disable the offending repository temporarily with sudo dnf config-manager --set-disabled <repo-id> and retry. If the system package is outdated, run sudo dnf upgrade --refresh to pull the latest official versions before installing new software.
Another frequent issue is repository metadata expiration. DNF caches repository data for a set period. If you enable a new repo and immediately try to install a package, DNF might complain about missing packages or outdated metadata. The --refresh flag forces a fresh pull. SELinux denials also surface during custom installations. If you compile software from source or place binaries in non-standard directories, SELinux will block execution until you assign the correct context. Check the audit logs before disabling the security module.
Here is how to check for SELinux denials related to a new application.
# Filter journal for SELinux denial messages
journalctl -t setroubleshoot | tail -n 20
# Restore default contexts for files in the current directory
sudo restorecon -Rv .
# Verify the context matches the expected policy
ls -Z /usr/local/bin/custom-tool
Trust the package manager. Manual file edits drift, snapshots stay.
When to use this vs alternatives
Use DNF when you need system tools, development libraries, or services that integrate with systemd. Use Flatpak when you are installing desktop applications that require isolation from the host system. Use RPM Fusion when you need proprietary codecs, hardware drivers, or multimedia tools excluded from Fedora's official repositories. Use the raw rpm command only when you are packaging software or performing offline installations on air-gapped systems. Compile from source when the package manager lacks the specific version or patch you require and you are prepared to maintain the binary manually.