diff --git a/pmb/commands/__init__.py b/pmb/commands/__init__.py
index 25e54edd210878739101a051f577655757f10e9a..78f37d47ce29625bebd3bbaa6890f28a62ba821b 100644
--- a/pmb/commands/__init__.py
+++ b/pmb/commands/__init__.py
@@ -10,6 +10,7 @@ from pmb.types import PmbArgs
 from pmb.helpers import frontend
 
 from .base import Command
+from .aportgen import Aportgen
 from .log import Log
 from .index import Index
 from .repo_bootstrap import RepoBootstrap
@@ -46,7 +47,6 @@ unmigrated_commands = [
     "chroot",
     "install",
     "checksum",
-    "aportgen",
     "build",
     "deviceinfo_parse",
     "apkbuild_parse",
@@ -64,6 +64,8 @@ def run_command(args: PmbArgs):
 
     command: Command
     match args.action:
+        case "aportgen":
+            command = Aportgen(args.packages, args.fork_alpine)
         case "log":
             command = Log(args.clear_log, args.lines)
         case "index":
diff --git a/pmb/commands/aportgen.py b/pmb/commands/aportgen.py
new file mode 100644
index 0000000000000000000000000000000000000000..4bfe1373733473a53576cd383f53354674f1bc3d
--- /dev/null
+++ b/pmb/commands/aportgen.py
@@ -0,0 +1,18 @@
+# Copyright 2024 Stefan Hansson
+# SPDX-License-Identifier: GPL-3.0-or-later
+from __future__ import annotations
+
+import pmb.aportgen
+from pmb import commands
+from pmb.helpers import logging
+
+
+class Aportgen(commands.Command):
+    def __init__(self, package_list: list[str], fork_alpine: bool) -> None:
+        self.package_list = package_list
+        self.fork_alpine = fork_alpine
+
+    def run(self) -> None:
+        for package in self.package_list:
+            logging.info(f"Generate aport: {package}")
+            pmb.aportgen.generate(package, self.fork_alpine)
diff --git a/pmb/helpers/frontend.py b/pmb/helpers/frontend.py
index 5ea1201d53c3e797e4e936d4fbb0f638d01a8d9d..4d6f7d79eeb1eda5ee6718c33ba6d7c2803dc7bd 100644
--- a/pmb/helpers/frontend.py
+++ b/pmb/helpers/frontend.py
@@ -102,12 +102,6 @@ def _install_ondev_verify_no_rootfs(device: str, ondev_cp: list[tuple[str, str]]
     )
 
 
-def aportgen(args: PmbArgs) -> None:
-    for package in args.packages:
-        logging.info("Generate aport: " + package)
-        pmb.aportgen.generate(package, args.fork_alpine)
-
-
 def build(args: PmbArgs) -> None:
     # Strict mode: zap everything
     if args.strict: