Flatpak: Remotes, Installation Scope & Application Lifecycle
- Distinguish RPM packages from Flatpak applications and runtimes
- Configure a trusted remote in the intended installation scope
- Repair, disable or delete an existing remote, and audit disabled remotes with --show-disabled
- Install and inspect an application using its application ID
- Remove an application deliberately, distinguishing its data from unused runtimes
Two package systems, two different jobs
Choose the package manager that owns the software you intend to manage.
A workstation can have dnf and Flatpak installed at the same time. They manage different inventories. dnf manages RPM packages in the operating system: a service, a command-line utility, or a library supplied by your distribution. Flatpak manages applications together with the runtimes those applications depend on. A runtime provides a defined set of libraries, and multiple applications can share it. Flatpak does not mean that every application carries a private copy of every library.
Think of two stockrooms with separate ledgers. An item recorded in the RPM ledger does not automatically appear in Flatpak's ledger. Successfully installing an RPM proves that you can manage that RPM; it says nothing about whether you can configure a Flatpak remote or remove a Flatpak application. When troubleshooting, start by finding which inventory owns the application. Running dnf against the name of a Flatpak application will not manage that Flatpak installation.
Check yourself
You removed an RPM with dnf. Does this prove that the similarly named Flatpak application has also been removed?
Choose the installation before changing it
Distinguish system-wide state from the current user's Flatpak state.
Scope is part of the task, not a cosmetic flag. A system-wide installation is available to users of the machine. A per-user installation belongs to the user running the command. The normal system location is
/var/lib/flatpak; the normal per-user location is$HOME/.local/share/flatpak. The latter follows the user's data directory configuration, so do not hard-code another person's home directory. Applications, runtimes, and remote configuration belong to the selected installation.Use explicit
--systemor--userflags while learning. If the request says to configure software for everyone, adding a remote only for your own user leaves the task unfinished. Equally, using sudo with--usercan change whose user installation you are managing: root is also a user with a home directory. For a per-user exercise, run as the intended ordinary user. Additional named system installations exist, but these exercises use only the default system installation and your own user installation.Run on your own VM — not on your lab box
flatpak remotes --user --columns=name,url- --user
- Inspect the current user's installation.
- --columns=name,url
- Show remote identifiers and their repository locations.
On a fresh user installation with no configured remotes, this produces no rows. On an existing installation, it lists its remote names and locations. This is an inspection command: no rows means no remotes in this scope, not that Flatpak is broken. Check yourself
A task asks for a remote available to all users. Which scope should you inspect to verify it?
Add a trusted remote, then inspect its identity
Configure a software source without confusing a remote name with proof of trust.
A Flatpak software source is called a remote. Its short name is a local identifier that you choose; its location determines which repository it actually uses. Calling a remote
approveddoes not make it trustworthy. Obtain the repository location and signing information from a source you trust. A.flatpakrepofile describes a repository and can supply its verification key. Treat it as configuration you are choosing to trust, just as you would inspect an RPM repository's origin.The optional VM example below uses Flathub's published repository description. It configures your own user installation and does not install an application. Read the operation's result and then inspect the state. The
--if-not-existsflag makes repeated setup convenient, but it does not repair a remote that already has the same name and a wrong location. That is why verification must compare both name and URL, not merely search for a familiar name.Run on your own VM — not on your lab box
flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo- --user
- Configure the current user's remote.
- --if-not-exists
- Leave an existing remote with this name in place; still inspect it.
Successful setup is normally silent. This downloads a repository description, so it belongs on your network-enabled VM. Afterwards rerun the previous remotes inspection and verify the resulting repository location against the provider's configuration. An existing remote with this name may be left unchanged. Check yourself
An existing remote has the correct name but the wrong URL. Does rerunning remote-add with --if-not-exists prove it is repaired?
Repair, disable or retire an existing remote
Change a remote that already exists, and tell a disabled remote from a deleted one.
Adding remotes is only half of the job. Handovers and mirror moves leave remotes that already exist with the wrong location, or that should no longer be used. Three commands change an existing remote in the installation you name.
remote-modify --url=points an existing name at a new location without deleting it.remote-modify --disableand--enableswitch a remote off and on while keeping its configuration.remote-deleteremoves the configuration entirely. Deleting and re-adding a remote is also a valid repair, provided you add it back in the same scope with the right URL.A disabled remote is easy to miss. Plain
flatpak remoteshides it, so it looks gone even though it is still configured. Add--show-disabledwhen you audit, and read the Options column: a disabled remote showsdisabledthere. "Remove the retired remote" means it is absent even with--show-disabled; disabling it does not meet that requirement.Run on your own VM — not on your lab box
flatpak remote-modify --user --url=file:///srv/mirror-b demo flatpak remote-modify --user --disable demo flatpak remotes --user flatpak remotes --user --show-disabled --columns=name,url,optionsName URL Options demo file:///srv/mirror-b disabled,no-gpg-verify
- --url=
- Point the existing remote at a new repository location.
- --disable / --enable
- Switch the remote off or back on without removing its configuration.
- --show-disabled
- Include disabled remotes in the listing.
- --columns=name,url,options
- Show the name, location and state flags together.
This assumes a user remote named demoalready exists (for example, an unsigned local OSTree mirror added with--no-gpg-verify). The first command repairs its URL in place. After--disable, the plainflatpak remotes --userprints no row fordemo(the output shown is the last command's); only--show-disabledreveals it, withdisabledin Options. Checked against Flatpak 1.12 on a RHEL 9-family box. Column spacing varies.Run on your own VM — not on your lab box
flatpak remote-delete --user demo flatpak remotes --user --show-disabled --columns=name- remote-delete
- Remove the remote's configuration from the named installation.
remote-deleteremoves the configuration, so the remote is absent even with--show-disabled. Name the scope explicitly: deleting from--systemdoes not touch a same-named remote in your user installation, and the reverse is also true. If applications installed from the remote remain, Flatpak refuses unless you add--force; decide that deliberately.Check yourself
A retired remote no longer appears in
flatpak remotes --system. Does that prove it was removed?Install an application and verify its scope
Use an application ID and inspect the installed inventory.
Flatpak application IDs commonly look like reversed domain names followed by an application name. Use the ID published by the application or repository rather than guessing from a desktop label. A reference can also identify architecture and branch. When more than one match exists, read the choices before confirming; the branch you select is part of what will be installed.
The example installs GNOME Calculator from the user remote configured above. The installer may also need a runtime. Review the application, runtime, permissions, and download size shown in the plan before accepting it. A first installation can require a substantial download even when the application itself is small. Avoid
-ywhile learning so you can see those decisions. After installation, use the same scope to inspect the application inventory. A successful download alone is weaker evidence than seeing the expected application installed in the required location.Run on your own VM — not on your lab box
flatpak install --user flathub org.gnome.Calculator- --user
- Install into your user installation, using its remotes.
This interactive operation displays a plan and asks for confirmation; exact versions, sizes, and prompts vary with the remote. Read that output on your VM. Keep --user consistent with the remote you configured. Run on your own VM — not on your lab box
flatpak list --user --app --columns=applicationorg.gnome.Calculator
- --user
- Read this user's inventory.
- --app
- List applications only.
- --columns=application
- Print application IDs for an unambiguous comparison.
After the example installation, the application ID should appear among the rows. Other installed applications may also appear. --app selects applications rather than runtimes, and a missing ID calls for checking scope and the install result before proceeding. Check yourself
You installed Calculator with --user, but inspected only --system and found nothing. What should you check next?
Remove the app, decide what data should survive
Separate application removal, personal data deletion, and runtime cleanup.
Uninstalling an application and deleting its personal data are different decisions. Removing the app normally preserves its data under
~/.var/app, allowing a later reinstall to recover settings. If the requirement is to remove an app while preserving user work, ordinary uninstall is appropriate. If the requirement explicitly includes erasing application data, understand that deletion before choosing--delete-data; it is not a harmless cleanup flag.Runtimes are a third inventory. Removing one application does not mean every runtime it used is now unnecessary: another application may depend on the same runtime.
flatpak uninstall --user --unusedasks Flatpak to identify unused references in that installation. Read its proposal instead of deleting runtime directories manually. Removing a remote is different again: it changes a software source, not the application's ordinary uninstall lifecycle. Decide which state the task asks you to change, then inspect that state.Run on your own VM — not on your lab box
flatpak uninstall --user org.gnome.Calculator- --user
- Remove the application from the same user installation you used earlier.
On your disposable VM, read and confirm the removal plan. Exact progress output varies. Then rerun the application listing from the previous step and check that the ID is absent. This command deliberately omits --delete-data, so you are not requesting removal of personal application data. Check yourself
You must remove an application but preserve the user's settings. Should you add --delete-data?
Try it on your own disposable VM
Verify a complete lifecycle without confusing reading with graded practice.
Work as an ordinary user on a disposable VM that has Flatpak and internet access. First record both the system and user remote lists. Configure the example remote in your user installation, inspect its URL, install the example application after reviewing its plan, and confirm its ID in the user application list. Check the system list separately: your per-user operation should not have installed a second copy there. Finally uninstall the user copy and verify that it disappears from that list.
For a second pass, explain each verification before you run it. Which installation are you inspecting? Are you checking a repository, an application, a runtime, or personal data? What result would prove the requested state, and what result would only look similar? If an operation fails, stop at that step and investigate its message; do not treat later commands as proof that an earlier operation succeeded. This exercise is self-directed practice, not a Signal9 machine-graded completion or an exam-readiness score.
For further study, consult the Flatpak user guide and command reference, comparing their options with your installed version's help. Red Hat's EX200 objectives separately list Flatpak repository configuration and package installation/removal. This lesson teaches both, while their hands-on coverage remains separate from RPM/dnf labs.
For graded remote practice, open [Repair an Offline Mirror Handover](/lab?id=rhcsa-flatpak-remote) and read its handover brief. It deliberately gives the system remote the wrong URL. Compare both scopes before making changes; then repair the system URL, configure the personal mirror for the current user, and remove only the retired system remote. Inspect the final name, URL and enabled state in each scope before grading. These mirrors contain no applications, so an empty remote-ls result is expected. Remote configuration completion does not count as application installation/removal proficiency.
- RPM/dnf and Flatpak manage separate inventories; success with one does not demonstrate the other.
- Choose --system or --user deliberately, and verify in the same installation you changed.
- A remote name is not proof of its origin: inspect the location and trust configuration.
- Install by application ID, review the plan, and inspect the final application inventory.
- Application removal, personal data deletion, and unused-runtime cleanup are separate decisions.
| Task | Flatpak operation | Evidence |
|---|---|---|
| Configure source | remote-add | Name and URL in the intended installation |
| Repair or retire source | remote-modify --url / remote-delete | Final name, URL and options with --show-disabled |
| Install application | install | Application ID in list --app |
| Remove application | uninstall | Application ID absent in the same scope |
| Clean unused references | uninstall --unused | Reviewed list of references nothing needs |
