diff --git a/pmb/commands/__init__.py b/pmb/commands/__init__.py
index f6a3ba32fe670f75a3fa3d4cb40765167628848b..25e54edd210878739101a051f577655757f10e9a 100644
--- a/pmb/commands/__init__.py
+++ b/pmb/commands/__init__.py
@@ -16,6 +16,7 @@ from .repo_bootstrap import RepoBootstrap
 from .shutdown import Shutdown
 from .test import Test
 from .pkgrel_bump import PkgrelBump
+from .pkgver_bump import PkgverBump
 from .pull import Pull
 from .kconfig_check import KConfigCheck
 from .kconfig_edit import KConfigEdit
@@ -76,6 +77,8 @@ def run_command(args: PmbArgs):
             command = Test(args.action_test)
         case "pkgrel_bump":
             command = PkgrelBump(args.packages, args.dry, args.auto)
+        case "pkgver_bump":
+            command = PkgverBump(args.packages)
         case "pull":
             command = Pull()
         case "kconfig":
diff --git a/pmb/commands/pkgver_bump.py b/pmb/commands/pkgver_bump.py
new file mode 100644
index 0000000000000000000000000000000000000000..d67ddfba5740307dff0de87ce51d8664fd1eaebd
--- /dev/null
+++ b/pmb/commands/pkgver_bump.py
@@ -0,0 +1,20 @@
+# Copyright 2024 Stefan Hansson
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+from pmb import commands
+import pmb.helpers.pkgrel_bump
+
+
+class PkgverBump(commands.Command):
+    def __init__(self, packages: list[str]) -> None:
+        self.packages = packages
+
+    def run(self) -> None:
+        # Each package must exist
+        for package in self.packages:
+            pmb.helpers.pmaports.find(package)
+
+        for package in self.packages:
+            pmb.helpers.pkgrel_bump.package(
+                package, bump_type=pmb.helpers.pkgrel_bump.BumpType.PKGVER
+            )
diff --git a/pmb/helpers/pkgrel_bump.py b/pmb/helpers/pkgrel_bump.py
index 58fe74007f2ea57b8e6fedca33eb603326f92491..f7702a1d9593cdc9628d404e410511c757988281 100644
--- a/pmb/helpers/pkgrel_bump.py
+++ b/pmb/helpers/pkgrel_bump.py
@@ -1,5 +1,7 @@
 # Copyright 2023 Oliver Smith
 # SPDX-License-Identifier: GPL-3.0-or-later
+from enum import Enum
+
 from pmb.core.arch import Arch
 from pmb.helpers import logging
 
@@ -10,27 +12,35 @@ import pmb.parse
 import pmb.parse.apkindex
 
 
-def package(pkgname: str, reason="", dry: bool = False) -> None:
-    """Increase the pkgrel in the APKBUILD of a specific package.
+class BumpType(Enum):
+    PKGREL = "pkgrel"
+    PKGVER = "pkgver"
+
+
+def package(
+    pkgname: str, reason="", dry: bool = False, bump_type: BumpType = BumpType.PKGREL
+) -> None:
+    """Increase the pkgrel or pkgver in the APKBUILD of a specific package.
 
     :param pkgname: name of the package
     :param reason: string to display as reason why it was increased
     :param dry: don't modify the APKBUILD, just print the message
+    :param bump_type: whether to bump pkgrel or pkgver
     """
-    # Current and new pkgrel
+    # Current and new pkgrel or pkgver
     path = pmb.helpers.pmaports.find(pkgname) / "APKBUILD"
     apkbuild = pmb.parse.apkbuild(path)
-    pkgrel = int(apkbuild["pkgrel"])
-    pkgrel_new = pkgrel + 1
+    version = int(apkbuild[bump_type.value])
+    version_new = version + 1
 
     # Display the message, bail out in dry mode
     logging.info(
         "Increase '"
         + pkgname
-        + "' pkgrel ("
-        + str(pkgrel)
+        + f"' {bump_type.value} ("
+        + str(version)
         + " -> "
-        + str(pkgrel_new)
+        + str(version_new)
         + ")"
         + reason
     )
@@ -38,16 +48,21 @@ def package(pkgname: str, reason="", dry: bool = False) -> None:
         return
 
     # Increase
-    old = "\npkgrel=" + str(pkgrel) + "\n"
-    new = "\npkgrel=" + str(pkgrel_new) + "\n"
+    old = f"\n{bump_type.value}=" + str(version) + "\n"
+    new = f"\n{bump_type.value}=" + str(version_new) + "\n"
     pmb.helpers.file.replace(path, old, new)
 
+    if bump_type == BumpType.PKGVER:
+        pkgrel = int(apkbuild["pkgrel"])
+        # Set pkgrel to 0 if we bump pkgver
+        pmb.helpers.file.replace(path, f"pkgrel={pkgrel}", "pkgrel=0")
+
     # Verify
     pmb.parse.apkbuild.cache_clear()
     apkbuild = pmb.parse.apkbuild(path)
-    if int(apkbuild["pkgrel"]) != pkgrel_new:
+    if int(apkbuild[bump_type.value]) != version_new:
         raise RuntimeError(
-            f"Failed to bump pkgrel for package '{pkgname}'."
+            f"Failed to bump {bump_type.value} for package '{pkgname}'."
             " Make sure that there's a line with exactly the"
             f" string '{old.strip()}' and nothing else in: {path}"
         )
diff --git a/pmb/parse/arguments.py b/pmb/parse/arguments.py
index a0d819081689345915c77502ed130a5654eecbc1..d397fea0072e694a4c6e98c36d6617d9d15c530f 100644
--- a/pmb/parse/arguments.py
+++ b/pmb/parse/arguments.py
@@ -577,6 +577,16 @@ def arguments_pkgrel_bump(subparser):
     return ret
 
 
+def arguments_pkgver_bump(subparser):
+    ret = subparser.add_parser(
+        "pkgver_bump",
+        help="increase the pkgver and reset pkgrel to 0." " useful when dealing with metapackages.",
+    )
+
+    add_packages_arg(ret, nargs="*", default=[])
+    return ret
+
+
 def arguments_aportupgrade(subparser):
     ret = subparser.add_parser(
         "aportupgrade", help="check for outdated" " packages that need upgrading"
@@ -958,6 +968,7 @@ def get_parser():
     arguments_initfs(sub)
     arguments_qemu(sub)
     arguments_pkgrel_bump(sub)
+    arguments_pkgver_bump(sub)
     arguments_aportupgrade(sub)
     arguments_newapkbuild(sub)
     arguments_lint(sub)