Hyprland hyprpm¶
- ID
hyprpm- Home page
- Version requirement
>= 0.56
- Platforms
🐧 Linux
- Operations
installed·install·upgrade_all·remove- purl types
pkg:hyprpm- CLI name
hyprpm- Issues and PRs
- Source
hyprpm is the plugin manager shipped inside Hyprland (https://github.com/hyprwm/Hyprland), the Wayland compositor.
A package is a plugin repository, not a plugin. hyprpm nests the two: one
git repository is added, built and removed as a unit, and the plugins it
carries are enabled and disabled inside it. add, remove and update all
take the repository, which is the object mpm’s package model describes, while
enable and disable configure something already installed rather than
installing it. Mapping those two onto install and remove would be faking
operations, so mpm reports the repositories and leaves the plugins to
hyprpm’s own verbs. The cost is real and worth stating: the per-plugin
enabled/failed state the listing prints is not carried into mpm.
Parsing notes, verified against hyprpm 0.56.2 on Arch Linux:
The listing is a two-level tree. Each repository heads a block, and its plugins follow indented beneath it, so only the
Repositorylines are packages and every other line falls through the pattern unmatched.The pattern is unanchored on purpose. hyprpm writes SGR escapes whether or not it holds a terminal, and honors neither
NO_COLORnorTERM=dumbnorCLICOLOR, all three verified, so the line opens with escapes rather than with its text. Matching mid-line steps over them instead of fighting levers that do nothing, which is the readingbobsettled.The id is the bare repository name, not
author/name. Both are accepted byremove, and the author is printed right beside the name, but a regex parser maps one named group to one package field and cannot join two captures into a single id. Two repositories sharing a name would collide, which is an ambiguity hyprpm has itself and resolves the same way.No
installed_versionis captured: the listing carries none. The state file records a commit hash, but reading it would mean parsing hyprpm’s private files rather than driving its CLI.
Important
hyprpm has no version flag of its own: hyprpm --version answers
Unrecognized option --version. It ships with the compositor and is
versioned with it, so the probe runs Hyprland --version through
version_cli, the same escape hatch the base-system suites use. That makes a
host with no Hyprland report no version and leaves the manager unavailable,
which is the right answer: hyprpm without its compositor cannot build a
plugin. hyprctl version was rejected for the probe because it talks to a
running instance and fails with HYPRLAND_INSTANCE_SIGNATURE not set! on a
host that merely has Hyprland installed.
Caution
add and remove both stop on an Are you sure? [Y/n] confirmation that no
flag disables. mpm clears it without answering: click-extra runs every child
with stdin on subprocess.DEVNULL, hyprpm reads an empty line, and
its check only aborts on an explicit n, so the default applies. Both halves
are deliberate rather than lucky, but the pair is what makes this manager
drivable unattended: read a hang here as one of them having changed.
Note
install takes a git URL, where the listing reports a name, so an id read
back from installed cannot be handed to install. That is hyprpm’s own
asymmetry: add accepts a URL alone while remove accepts a URL, a name or
author/name. Removal and upgrade therefore round-trip on a listed id and
installation does not, the same shape bob documents for its catalog.
No outdated: nothing reports staleness without acting, update computing
what is behind and building it in one pass. No search: hyprpm has no
catalog, a repository being whatever URL the user hands it. No cleanup:
purge-cache removes every built plugin, the headers and hyprpm’s own
settings, which is a mass removal rather than reclamation, the same reading
that left bob erase and luarocks purge unmapped.
What mpm adds to hyprpm¶
mpm reaches across every manager at once, not hyprpm alone: mpm installed and mpm outdated cover hyprpm alongside every other manager you run in one table, mpm upgrade --all updates them together, and mpm sbom exports the whole machine as one bill of materials.
Every mpm command also gains --dry-run and --plan previews, cross-scheme version comparison and purl identifiers. See manager augmentations for how each one is built.
Your hyprpm commands, in mpm¶
You already know hyprpm: each operation maps one-to-one onto mpm, in an interface shared by every manager.
To… |
With |
With |
|---|---|---|
List what’s installed |
|
|
Install a package |
|
|
Upgrade everything |
|
|
Remove a package |
|
|
Prefix any command above with --dry-run to simulate the underlying manager calls without touching the system: the safe way to watch what mpm would do before trusting it.
Operations¶
Operation |
Supported |
|---|---|
|
✓ |
|
|
|
|
|
|
|
✓ |
|
|
|
✓ |
|
✓ |
|
|
|
|
|
Selecting and configuring hyprpm¶
Deselect hyprpm for a single run with --no-hyprpm, or persist the choice in your configuration:
[mpm]
hyprpm = false
Keep it enabled but tune how mpm drives it with a per-manager override:
[mpm.managers.hyprpm]
timeout = 900
mpm config-template hyprpm prints every overridable attribute as a ready-to-paste block.
Recipes¶
A few jobs you would otherwise script around hyprpm, one mpm command each:
Snapshot and clone a machine:
mpm --hyprpm dump hyprpm.toml, thenmpm restore hyprpm.tomlon the next one.Export a compliance SBOM:
mpm --hyprpm sbom(CycloneDX by default,--spdxfor SPDX).
Privilege escalation¶
mpm runs this manager as the current user and never prepends sudo by default. Flip the policy for its privileged operations with --sudo or the per-manager sudo override.
None of its operations needs root.
See privilege escalation for the full policy.
Cooldown¶
State of Hyprland hyprpm’s release-age gating, from the cooldown support table:
Status: ❌ None (a plugin repository is a git clone, which carries no publication date)
A cooldown only pays off where a compromised release can be withdrawn while the clock runs, and can only be emulated where the registry dates its releases. From the retraction table:
Registry: Upstream Git clones
Retraction: None: a plugin is cloned straight from its upstream repository, so withdrawing a bad revision is its author force-pushing, retagging or deleting it themselves. No index sits in between
Publish date: ❌ a commit or tag date is set by the author and freely rewritable
With --cooldown set, mpm skips this manager’s install and upgrade operations rather than run them unguarded (fail-closed); --cooldown best-effort opts back in.
Version probe¶
The version is probed by running:
$ Hyprland --version
Hyprland 0.56.2 built from branch v0.56.2 at commit efb50993780079460b0cbed1363e2166a2de1d9f clean ([gha] Nix: update inputs).
Date: Wed Aug 5 14:13:21 2026
Tag: v0.56.2, commits: 7661
Libraries:
Hyprgraphics: built against 0.5.1, system has 0.5.1
Hyprutils: built against 0.14.0, system has 0.14.1
Hyprcursor: built against 0.1.13, system has 0.1.13
Hyprlang: built against 0.6.8, system has 0.6.8
Aquamarine: built against 0.14.0, system has 0.14.0
Version ABI string: efb50993780079460b0cbed1363e2166a2de1d9f_aq_0.14_hu_0.14_hg_0.5_hc_0.1_hlg_0.6
no flags were set
and extracted with:
r"^Hyprland (?P<version>\S+)"
Reference traces¶
Raw native outputs captured in the bundled definition: the reference mpm’s parsers were written against. If you know Hyprland hyprpm well and a transcript below looks wrong, or a newer release changed its output format, report it.
$ hyprpm list
[0m→[0m Repository hyprsplit (by shezdy):
│ Plugin hyprsplit
└─ enabled: [32mtrue
[0m
[0m→[0m Repository hyprland-plugins (by hyprwm):
│ Plugin csgo-vulkan-fix
└─ enabled: [31mPlugin failed to build
[0m
│ Plugin hyprbars
└─ enabled: [32mtrue
[0m
Feed any of these through mpm and the raw output becomes one uniform table, the same shape for every manager: filter it, project columns, or export it (mpm --hyprpm installed --output json, or csv, toml, yaml), each package carrying a purl and a version comparable across managers.
Changelog¶
8.0.0.dev0(unreleased)Add hyprpm Hyprland plugin manager, listing, installing, removing and upgrading plugin repositories.