A linting library for elisp package metadata
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Melpa Status Melpa Stable Status Build Status Support me


This library provides a linter for the metadata in Emacs Lisp files which are intended to be packages. You can integrate it into your build process.

See flycheck-package, which uses this code to conveniently display packaging errors while writing elisp packages. This code was extracted from flycheck-package.el. We eventually want to use it for MELPA -- it will need to learn how to check multi-file packages, which was always going to be out of scope for flycheck-package.


The recommended way to get package-lint is as a package from the MELPA repository. The version of package-lint there will always be up-to-date. There are also packages in MELPA Stable, which track the latest numbered tag.


Use the command package-lint-current-buffer interactively, or use package-lint-buffer if linting programmatically.

If you're a package author, you can include package-lint in your build process by ensuring that the package is installed, and then using the function package-lint-batch-and-exit to lint your files -- see run-tests.sh in this repo for an example.


Additional checks for future versions:

  • WARN: header line formatting / capitalisation
  • trailing line presence / formatting
  • WARN: library is called *-mode but doesn't provide a major mode
  • non-use of standard keywords
  • checkdoc failures for interactive functions / defcustoms
  • trailing whitespace?
  • themes which aren't in a matching *-theme.el file
  • use of unsafe local variables
  • use of emacs version dependencies
  • local variable set in header line
  • using commentary to talk about load[- ]path and installation
  • lack of autoloads
  • references to README files which won't be bundled in a package
  • use of CamelCase identifiers
  • Defining a -mode function directly instead of using define-derived-mode or define-minor-mode
  • Referring to display-graphic-p or window-system in -theme.el files


This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

See COPYING for details.


package-lint was written by Steve Purcell with significant contributions from Fanael Linithien.

Author links:

Steve Purcell's blog // @sanityinc on Twitter