PKGINFOV1(5)
πΈ PKGINFO(5) β the File Formats Manual girlies' edition πΈ
okay so this is the tea on PKGINFO β the info file for ALPM-based packages, version 1 specifically. Pull up a chair, bestie, we're reading a man page together π
β¨ NAME β¨
PKGINFO β literally all the information about your ALPM based packages (version 1, the legacy one, keep reading, iykyk).
π DESCRIPTION π
So the PKGINFO format is a textual format, and its whole job is describing package metadata. These files live at the root of ALPM packages and are named .PKGINFO β yes, with the dot, she's a hidden file, main character energy π«Ά
Package managers use them to, like, evaluate and present the context for a package within its ecosystem. Use-cases include representing common metadata and describing a package's relation to other packages. Very "who am I and who are my friends" of it.
Important lore: the PKGINFO format exists in multiple versions. This document describes version 1, which is a legacy version (π she's a grandma) and was introduced with the release of pacman 5.1.0 on 2018-05-28. For the latest specification, go read PKGINFO. Don't be out here using the old spec thinking it's the new spec, ngl.
π¦ General Format π¦
So a PKGINFO file is just a series of lines, and each line gives you info on one aspect of a package. Simple. Iconic.
- Lines starting with a
#sign are comments and are always ignored β she said "not my business" π - Leading whitespace is always ignored. Leading whitespace found dead in a ditch.
Unless noted otherwise, the information contained in a PKGINFO file is considered to be covered by the set of the 95 printable ASCII characters[1]. That's the vibe check for your characters.
π Keywords π
Each line encodes information that represents one keyword assignment. All keyword assignments consist of a key from the following list immediately followed by a whitespace, an = sign, another whitespace and a value. So like:
key = value
By default, exactly one keyword assignment must be present per keyword in a PKGINFO. But β exception alert π¨ β the keywords license, replaces, group, conflict, provides, backup, depend, optdepend, makedepend and checkdepend may be provided zero or more times. Those ones are the social butterflies, they can show up as many times as they want π
π pkgname π
The name of the package. The value is an alpm-package-name (e.g. example).
π pkgbase π
The alpm-package-base of the package. The value is an alpm-package-base (e.g. example).
π pkgver π
The full version of the package. Note, that this is not to be confused with alpm-pkgver, which only represents a subset of this keyword! π€ Don't do that. The value is an alpm-package-version, either in full or in full with epoch form (e.g. 1.0.0-1 or 1:1.0.0-1, respectively).
π pkgdesc π
The description of the package. The value is a UTF-8 string, zero or more characters long (e.g. A project used for something).
Package descriptions must have no leading or trailing whitespaces, must contain no whitespace characters except space β β and no successive spaces. It is also suggested to be βshortβ and to not contain the package name (see pkgname). Like, diva, keep it cute and brief please β¨
π url π
The URL for the project of the package. The value is a valid URL or an empty string (e.g. https://example.org).
π builddate π
The date at which the build of the package started. The value must be numeric and must represent the seconds since the Epoch, aka. βUnix timeβ (e.g. 1729181726).
π packager π
The User ID of the entity that built the package. The value is meant to be used for identity lookups and represents an OpenPGP User ID[2]. As such, the value is a UTF-8-encoded string, that is conventionally composed of a name and an e-mail address, which aligns with the format described in RFC 28223.
π size π
The size of the (uncompressed and unpacked) package contents in bytes. The value is a non-negative integer representing the absolute size of the contents of the package, with multiple hardlinked files counted only once (e.g. 181849963). Yes, only once. We're not double counting, that's not slay behaviour.
π arch π
The architecture of the package (see alpm-architecture for further information). The value must be covered by the set of alphanumeric characters and _ (e.g. x86_64 or any).
π license π
A license that applies for the package. This keyword may be assigned zero or more times. The value represents a license identifier, which is a string of non-zero length (e.g. GPL).
Although no specific restrictions are enforced for the value aside from its length, it is highly recommended to rely on SPDX license expressions (e.g. GPL-3.0-or-later or Apache-2.0 OR MIT). See SPDX License List[4] for further information. Do it for me, please π₯Ί
π replaces π
Another virtual component or package, that the package replaces upon installation. This keyword may be assigned zero or more times. The value is an alpm-package-relation of type replacement (e.g. example or example=1.0.0).
π group π
An arbitrary string, that denotes a distribution-wide group the package is in. Groups are made use of e.g. by package managers to group packages and allow to bulk install them, or by other software to display information on these related packages. This keyword may be assigned zero or more times. The value is represented by a UTF-8 string.
Although it is possible to use a UTF-8 string, it is highly recommended to rely on the pkgname format for the value instead, as package managers may use group to install an entire group of packages. Bulk install go brrr πββοΈπ¨
π conflict π
Another virtual component or package, that the package conflicts with. This keyword may be assigned zero or more times. The value is an alpm-package-relation of type conflict (e.g. example or example=1.0.0). Enemies to lovers arc, except there's no lovers part π
π provides π
Another virtual component or package, that the package provides. This keyword may be assigned zero or more times. The value is an alpm-package-relation of type provision (e.g. example or example=1.0.0).
π backup π
A relative file path of a file in the package, that denotes a file for the package manager to keep backups for in case it changes or is deleted during a package update action (see pacman .pacnew and .pacsave files). This keyword may be assigned zero or more times. The value must be a valid relative Unix file path (e.g. etc/package.conf).
π«Ά Shoutout to backup, keeping your configs safe so you don't have to cry about it later.
π depend π
A run-time dependency of the package (virtual component or package). This keyword may be assigned zero or more times. The value is an alpm-package-relation of type run-time dependency (e.g. example or example=1.0.0).
π optdepend π
An optional dependency of the package (virtual component or package). This keyword may be assigned zero or more times. The value is an alpm-package-relation of type optional dependency (e.g. example or example: this is a description).
π makedepend π
A build time dependency of the package (virtual component or package). This keyword may be assigned zero or more times. The value is an alpm-package-relation of type build dependency (e.g. example or example=1.0.0).
π checkdepend π
A dependency for running tests of the package's upstream project. This keyword may be assigned zero or more times. The value is an alpm-package-relation of type test dependency (e.g. example or example=1.0.0).
π EXAMPLES π
here's a whole entire file, bestie β copy-paste ready, no notes:
pkgname = example
pkgbase = example
pkgver = 1:1.0.0-1
pkgdesc = A project that does something
url = https://example.org
builddate = 1729181726
packager = John Doe <john@example.org>
size = 181849963
arch = any
license = GPL-3.0-or-later
license = LGPL-3.0-or-later
replaces = other-package>0.9.0-3
group = package-group
group = other-package-group
conflict = conflicting-package<1.0.0
conflict = other-conflicting-package<1.0.0
provides = some-component
provides = some-other-component=1:1.0.0-1
backup = etc/example/config.toml
backup = etc/example/other-config.txt
depend = glibc
depend = gcc-libs
optdepend = python: for special-python-script.py
optdepend = ruby: for special-ruby-script.rb
makedepend = cmake
makedepend = python-sphinx
checkdepend = extra-test-tool
checkdepend = other-extra-test-tool
look at her. absolute queen. π
π₯ SEE ALSO π₯
go read these next, they're all connected, it's giving extended universe:
alpm-pkginfo(1)PKGBUILD(5)makepkg.conf(5)alpm-architecture(7)alpm-comparison(7)alpm-package-name(7)alpm-package-relation(7)alpm-package-version(7)alpm-pkgver(7)makepkg(8)pacman(8)
π NOTES π
- printable ASCII characters
https://en.wikipedia.org/wiki/ASCII#Printable_characters
- OpenPGP User ID
https://openpgp.dev/book/certificates.html#user-ids
https://www.rfc-editor.org/rfc/rfc2822
- SPDX License List
and that's the whole page, bestie!! π this one came to you straight from the File Formats Manual, section (5) β she's a manual page, she's legacy, she's iconic, and she literally ate. mwah πβ¨
π¦ where this page comes from
- arch rolling: alpm-pkginfo 0.7.0-1 Β· Apache-2.0 OR MIT AND CC-BY-SA-4.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms