CLICK(1)
β¨ CLICK(1) β¨
okay bestie, buckle up, we're doing the click manual page π this is Click Packages, section 1 of the manual, and it's literally the package management tool for Ubuntu Touch, no cap π«Ά
πΈ NAME πΈ
click β package management tool for Ubuntu Touch π
π SYNOPSIS π
click command [options] [arguments]
like, that's the whole vibe. you give it a command, you give it some options, you give it some arguments, and it does the thing β¨
π DESCRIPTION π
okay so. Click is a packaging format for Ubuntu Touch applications, and the important part is that it's independent of the packaging format used to deliver the underlying system. so the system underneath can be doing whatever it wants and click is just over here doing its own thing, iconic, we love a self-sufficient queen π
and then the click program itself? it's the basic tool you use to build, install, remove, and otherwise manipulate these packages. all of the above. it's giving multitasking main character energy π
click's various functions are available via a number of commands, and bestie, they are described in detail below. we're getting to all of them, don't worry, I would never gatekeep π
now here's the part where you actually have to pay attention, fr fr. While click supports per-user installation, packages are normally unpacked as a special clickpkg user, to ensure that applications cannot modify their own code. and honestly? that's the whole point. it is a design goal to ensure that click can be used to install untrusted code which is then confined using AppArmor π‘οΈ so like, the sketchy app is in the group chat but it's on mute, yk?
As such, click should normally be run as root (e.g. using sudo) when installing packages β and it will drop privileges as needed. it knows when to step back and let someone else have the aux, we stan a considerate icon π«Ά
π COMMAND OVERVIEW π
here's the whole lineup, the full roster, the main characters β:
click build DIRECTORY
click buildsource DIRECTORY
click chroot
click contents PATH
click framework list
click hook install HOOK
click hook remove HOOK
click hook run-system
click hook run-user
click info PATH
click install PACKAGE-FILE
click list
click pkgdir {PACKAGE-NAME|PATH}
click register PACKAGE-NAME VERSION
click unregister PACKAGE-NAME [VERSION]
click verify PACKAGE-FILE
that's the vibe check passed β every single one of these gets its own moment in the spotlight, so likeβ¦ keep reading, bestie, we're not done π
π οΈ COMMANDS π οΈ
Ok bestie, this is the big one. Every command, every flag, no skipping. Grab a snack. π
π¦ click build DIRECTORY
Build a Click package out of whatever's chillin' in DIRECTORY. The build directory has to contain a JSON-formatted manifest β Click's file-format documentation explains it properly, but by default it lives at manifest.json right at the top level of the build directory.
The resulting .click file gets written to the current directory, so to avoid a whole confused situation you should generally make sure your working directory is not inside the build directory when you run this. For real, it's giving chaos otherwise.
So like, yes, technically you can build a new version of a Click package by unpacking and repacking an existing one β but this is not normally recommended, because it takes actual care to put the manifest file back in the right place. Best practice: keep your application's code in separate revision control rather than relying on recovering it from packages. Don't do crimes against your own repo. π
Options:
-m PATH,--manifest=PATHβ Read package manifest fromPATH(default:manifest.json).-I file-pattern,--ignore=file-patternβ Ignore the given shell-pattern when building the package. You can repeat this option as many times as you want to list multiple patterns to exclude. Go off. β¨--no-validateβ Don't run checks fromclick-reviewers-toolson the resulting.clickfile.
π§ click buildsource DIRECTORY
Build a source package in .tar.gz format from the contents of DIRECTORY. This is the move when you wanna distribute source code in the case where your package contains compiled code (and so the Click package doesn't constitute its own source). Like, the binary isn't the source, bestie. π¦
The resulting .tar.gz file is written to the current directory, so β same energy as build β you should generally ensure that your working directory is not inside the build directory when running this command.
Options:
-m PATH,--manifest=PATHβ Read package manifest fromPATH(default:manifest.json).-I file-pattern,--ignore=file-patternβ Ignore the given shell-pattern when building the package. Repeatable, multiple times, multiple patterns to exclude. Periodt.
π° click chroot
Manage chroot environments for cross-building Click packages. Main character infrastructure behavior, honestly.
Options:
-a ARCH,--architecture ARCHβ Set the target architecture.-f FRAMEWORK,--framework FRAMEWORKβ Set the target framework (default:ubuntu-sdk-13.10).-s SERIES,--series SERIESβ Set the target series for newly-created chroots (default: a series appropriate for the framework). This option is mainly for debugging; use-finstead. π«Ά
Subcommands:
begin-session SESSIONβ Begin a persistent chroot session.createβ Create a chroot.destroyβ Destroy a chroot.end-session SESSIONβ End a persistent chroot session.install [-n SESSION] PACKAGESβ Install packages in the chroot.maint [-n SESSION] COMMAND ARGUMENTSβ Run a maintenance command in the chroot. Unlikerun, this runs its command as root inside the chroot, and its effects on the chroot will persist afterclick chroot maintexits. π
If a session name is given, run the command in that session. The session must previously have been created by click chroot begin-session.
run [-n SESSION] COMMAND ARGUMENTSβ Run a program in the chroot.
If a session name is given, run the command in that session. The session must previously have been created by click chroot begin-session.
upgrade [-n SESSION]β Upgrade the chroot.
π click contents PATH
Display the contents of the Click package in PATH as a file listing. Peek inside. No cap. π
π click framework list
Display a list of available frameworks as one framework per line. Clean, simple, iconic.
πͺ click hook install HOOK
Install files associated with HOOK for any Click packages that attach to it.
This is normally only called by maintainer scripts of system packages, by way of dh_click(1). So like, iykyk β you probably shouldn't be typing this by hand.
Options:
--root=PATHβ Look for additional packages inPATH.
πͺ click hook remove HOOK
Remove files associated with HOOK for any Click packages that attach to it.
This is normally only called by maintainer scripts of system packages, by way of dh_click(1).
Options:
--root=PATHβ Look for additional packages inPATH.
πͺ click hook run-system
Run all system-level hooks for all installed Click packages. This is useful when starting up from images with preinstalled packages which may not have had their system-level hooks run properly when building the image. Catching up on the drama that happened while nobody was looking. π
Options:
--root=PATHβ Look for additional packages inPATH.
πͺ click hook run-user
Run all user-level hooks for all Click packages registered for a given user. This is useful at session startup to catch up with packages that may have been preinstalled and registered for all users.
Options:
--root=PATHβ Look for additional packages inPATH.--user=USERβ Run user-level hooks forUSER(default: current user).
π«§ click info {PACKAGE-NAME|PACKAGE-FILE}
When given a package name (that is, a string containing no / characters), display the manifest for that package, if it is registered for the current user.
When given a path (that is, a string containing at least one / character, or a string containing no / characters that is not a registered package name), attempt to treat that as a path to a file containing a Click package and display the manifest for that package.
Options:
--root=PATHβ Look for additional packages inPATH.--user=USERβ List packages registered byUSER(if you have permission).
π click install PACKAGE-FILE
Install the Click package in PACKAGE-FILE.
This is a low-level tool; to install a package as an ordinary user you should generally use pkcon install-local PACKAGE-FILE or some higher-level user interface instead, which take care to use the correct set of options. (Do not use sudo when invoking pkcon, as it needs to know the calling user.) Not me watching you sudo the wrong thing β don't. π
click install may be used to preinstall a package in an image such that it will be available to all users by default. When doing this, you should normally install it to one of the databases defined in /etc/click/databases/ other than the default of /var/lib/clickpkg. For example:
sudo click install βroot=/custom/click βall-users foo.click
The --force-missing-framework option is necessary while working with development versions of SDKs which have not yet put a framework declaration in place.
You should always register installed packages either for a specific user or for all users; if you do not do this then the packages may be garbage-collected later. You can do this using the --user or --all-users options to this command, or using the click register command.
β οΈ Register your packages, bestie. Unregistered packages can get garbage-collected and just vanish. It's giving gone girl. π
Options:
--root=PATHβ Install packages underneathPATH.--force-missing-frameworkβ Install despite missing system framework.--user=USERβ Register package forUSER.--all-usersβ Register package for all users.
π click list
Display a list of installed packages, either as one package per line with each line containing a package name and version separated by a tab (the default), or as a JSON array of manifests.
By default, click list shows only packages registered for the current user. The --all option causes it to show all installed packages, regardless of user registrations.
Options:
--root=PATHβ Look for additional packages inPATH.--allβ List all installed packages.--user=USERβ List packages registered byUSER(if you have permission).--manifestβ Format output as a JSON array of manifests.
π click pkgdir {PACKAGE-NAME|PATH}
When given a package name (that is, a string containing no / characters), display the directory where that package is installed, if it is registered for the current user.
When given a path (that is, a string containing at least one / character), attempt to treat that as a path to a file within a Click package and print the top-level directory where that package is installed, if one exists. This is particularly useful in hooks that need to find the top-level package directory based on a symbolic link to a single file within it. Lowkey genius. π§
Exits zero if and only if a directory for the given package name or path was found.
Options:
--root=PATHβ Look for additional packages inPATH.--user=USERβ List packages registered byUSER(if you have permission).
βοΈ click register PACKAGE-NAME VERSION
Register an installed Click package for a user. This will normally cause user-level hooks to be run for that user, which are needed for things such as making the application's .desktop file available to the user interface. Slay, your app shows up now. β¨
Options:
--root=PATHβ Look for additional packages inPATH.--user=USERβ Register package forUSER(default: current user).--all-usersβ Register package for all users.
πͺ click unregister PACKAGE-NAME [VERSION]
Unregister an installed Click package for a user, and remove it entirely if no other users still have it registered and if it does not appear to be running. This will normally cause user-level hooks to be run for that user, which are needed for things such as removing the application's .desktop file from the user interface.
If a version is specified, then the registered version must match it in order to be removed. No partial matches, no guessing. π
Options:
--root=PATHβ Look for additional packages inPATH.--user=USERβ Unregister package forUSER(default:$SUDO_USER, if known).--all-usersβ Unregister package that was previously registered for all users.
β
click verify PACKAGE-FILE
Verify the Click package in PACKAGE-FILE.
The --force-missing-framework option is necessary while working with development versions of SDKs which have not yet put a framework declaration in place.
Options:
--root=PATHβ Install packages underneathPATH.--force-missing-frameworkβ Install despite missing system framework.
π AUTHOR π
Colin Watson
Β©οΈ COPYRIGHT Β©οΈ
2013, Canonical Ltd.
And that's the whole page, bestie β you made it to the end and you ate. πβ¨ The source here is version 0.5, dated 2025-05-05, and the page goes by CLICK(1). Go build something iconic. ππ¦π
π¦ where this page comes from
- debian trixie: click 0.5.2-8 Β· GPL-3.0-only
- ubuntu questing: click 0.5.2-8
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms