GNU ELPA - repology


Repology API access via Elisp
repology-1.2.4.tar (.sig), 2024-Mar-31, 90.0 KiB
Nicolas Goaziou <>
Atom feed
Browse repository
CGit or Gitweb

To install this package from Emacs, use package-install or list-packages.

Full description

This package provides tools to query Repology API
(<>), process results, and display them.

The results of a query revolve around three types of objects:
projects, packages and problems.  Using this library, you can find
projects matching certain criteria, packages in a given project,
and possible problems in some repository.  See `repology-search-projects',
`repology-lookup-project', and `repology-report-problems'.
Projects-related requests are limited to `repology-projects-limit'.
All requests are cached during `repology-cache-duration' seconds.

By default, only projects recognized as free are included in the search
results.  You can control this behavior with the variable
`repology-free-projects-only'.  The function `repology-check-freedom'
is responsible for guessing if a project, or a package, is free.

You can then access data from those various objects using dedicated
accessors.  See, for example, `repology-project-name',
`repology-project-packages', `repology-package-field', or

You can also decide to display (a subset of) results in a tabulated
list.  See `repology-display-package', `repology-display-packages',
`repology-display-projects' and `repology-display-problems'.  You
can control various aspects of the display, like the faces used
or the columns shown (see `repology-display-packages-columns',
`repology-display-projects-columns' and `repology-display-problems-columns').
When projects or packages are displayed, pressing <RET> gives you more
information about the item at point, whereas pressing <F> reports their
freedom status.

For example, the following expression displays all outdated projects
named after "emacs" and containing a package in GNU Guix repository
that I do not ignore:

    (seq-filter (lambda (project)
                  (not (member (repology-project-name project)
                 :search "emacs" :inrepo "gnuguix" :outdated "on")))

By default, the package trusts Repology's status values to report
outdated packages.  However, this can introduce false positives.
You can then set `repology-outdated-project-definition' and call
`repology-filter-outdated-projects' to ignore those.

For example, with the following set-up, I can look for every
outdated Emacs packages and Asymptote package in GNU Guix, ignoring
bogus versions for "emacs:circe", and "emacs:erlang" package
altogether.  I also sort projects alphabetically.

   (setq repology-outdated-project-definition
         '(("emacs:circe" "<=2.11" nil)
           ("emacs:erlang" nil nil))
         repology-display-projects-sort-key "Project")

   (let ((repo "gnuguix"))
          (append (repology-search-projects :search "emacs:" :outdated "on"
                                            :inrepo repo)

Eventually, this library provides an interactive function with
a spartan interface wrapping this up: `repology'.  Since it builds
and displays incrementally search filters, you may use it as
a template to create your own queries.

Known issues:

- The library has no notion of distribution "family", since this
  doesn't appear in the API.  As a consequence, display functions
  cannot compute the "spread" of a project.  It falls back to the
  number of packages in the project instead.
- It does not handle "maintainers" queries.
- It is synchronous.  Don't go wild with `repology-projects-limit'!

Old versions

repology-1.2.3.tar.lz2022-Mar-2018.3 KiB
repology-1.2.2.tar.lz2022-Feb-2318.1 KiB
repology-1.2.1.tar.lz2022-Feb-2318.1 KiB
repology-1.1.0.tar.lz2021-Jan-2815.9 KiB
repology-1.0.1.tar.lz2021-Jan-2415.8 KiB
repology-1.0.0.tar.lz2021-Jan-2415.8 KiB