pgext catalogs the PostgreSQL extension universe: 2,230 extensions, including 575 packaged extensions, with metadata, dependencies, categories, and exact package availability across PostgreSQL versions, operating systems, and repositories (PGDG / Pigsty, APT / YUM).
It is a single static binary that does two things:
- Build the catalog: fetch repository metadata, parse APT/RPM packages, and maintain the curated extension knowledge base — all stored in PostgreSQL.
- Serve the catalog: a self-contained web app + JSON API, the same software that powers pgext.cloud.
All you need is a PostgreSQL database to hold the catalog:
export PGURL="postgres:///data" # where the catalog lives (default: postgres:///data)
pgext init # one-time setup: create the pgext schema and load catalog data
pgext serve # web UI + JSON API at http://localhost:8432That's it. Point your browser at http://localhost:8432.
pgext serve --db meta --listen :8080 # database name shorthand, custom port
curl 'localhost:8432/api/v1/ext?q=vector' # query the JSON APIDownload a single-binary release for Linux / macOS (amd64 / arm64) from the
release page, or deb / rpm packages
if you prefer a package manager.
Build from source (Go 1.27+, no CGO required):
git clone https://github.com/pgsty/pgext.git
cd pgext && go build -o pgext .pgext init # setup everything (schema + reload)
pgext serve # serve web UI + JSON API (:8432)
pgext status # show metadata status
pgext reload # reload data: fetch + complete parse
pgext fetch # get repo metadata from upstream
pgext scan # scan local Pigsty repo metadata
pgext parse # atomically populate apt, dnf, bin, pkg
pgext recap # rebuild pkg from current catalog data
pgext ext <name> # show extension information
pgext pkg <name> # show package availability matrix
pgext bin <name> -p 17 -o el9 # show binary packages with URLs
pgext gen all # run every content generator
pgext pgxn # crawl PGXN dist metadata
pgext purge # drop the pgext schema
Run pgext help <command> for details on any command.
RPM repositories must publish a primary XML entry in repodata/repomd.xml.
Both upstream fetching and local scanning read the file named by that entry,
with support for uncompressed XML, gzip, bzip2, xz, and zstd. PGEXT validates
the declared checksums, sizes, and package count before replacing a cache.
It does not read primary_db and does not require a SQLite driver.
pgext.repo_data.data stores uncompressed primary XML for RPM repositories
and uncompressed Packages text for APT repositories. RPM cache descriptors
in extra record the source URL, compression, manifest checksums, content hash,
and package count. Every RPM fetch reads the current manifest; an unchanged
primary checksum can reuse a validated cache from the same source URL.
After upgrading from a release that cached RPM databases, run pgext fetch
(or pgext scan for local Pigsty repositories), then pgext parse.
Old RPM caches refresh automatically without reusing their HTTP validators.
pgext reload performs the upstream refresh and parse together. Parsing an
unrefreshed legacy cache fails with instructions to refresh it.
XML is parsed directly, so the former --keep-temp, --keep, and -k
options have been removed. Parsed package tables and the availability matrix
continue to update atomically after the selected failure policy passes.
- Catalog website: ext.pgsty.com
- Live catalog app (
pgext serve): pgext.cloud - Documentation: doc.pgext.cloud
- Pigsty — battery-included PostgreSQL distribution: pigsty.io
pig— the PostgreSQL extension package manager: pig.pgsty.com