What's "Kwalitee"?

"Kwalitee" is something that looks like quality, sounds like quality, but is not quite quality.

Kwalitee indicators

We have 35 Kwalitee indicators, and 12 optional indicators as well.

NameDescriptionRemedyFail
(Latest)
Fail
(CPAN)
Fail
(BackPAN)
extractable This distribution doesn't extract well due to several reasons such as unsupported archive type (CPANTS only supports tar.gz, tgz and zip archives), file permissions, broken links, invalid filenames, and so on. Most of other kwalitee metrics should be ignored.
(defined in Module::CPANTS::SiteKwalitee::Extraction)
Pack the distribution with a proper command such as "make dist" and "./Build dist", or use a distribution builder such as Dist::Zilla, Dist::Milla, Minilla. You might also need to set some options or environmental variables to ensure your archiver work portably. 57
(0.18 %)
191
(0.18 %)
686
(0.28 %)
extracts nicely This distribution doesn't create a directory and extracts its content into this directory. Instead, it creates more than one directories (some of which are probably system-specific hidden files/directories), or it spews its content into the current directory, making it really hard/annoying to remove the unpacked package.
(defined in Module::CPANTS::SiteKwalitee::Extraction)
Pack the distribution with a proper command such as "make dist" and "./Build dist", or use a distribution builder such as Dist::Zilla, Dist::Milla, Minilla. 1007
(3.24 %)
2517
(2.39 %)
7015
(2.91 %)
no pax headers This distribution is archived with PAX extended headers, which may be useful under some environments, but may also make extraction fail under other environments (Archive::Tar ignores PAX information as well).
(defined in Module::CPANTS::SiteKwalitee::Extraction)
If you use Mac OS X >= 10.6, use gnu tar (/usr/bin/gnutar) to avoid PAX headers. It's also important to rename (shorten) long file names (>= 100 characters) in the distribution. 132
(0.42 %)
439
(0.42 %)
757
(0.31 %)
meta yml is parsable The META.yml file of this distribution could not be parsed by the version of CPAN::Meta::YAML.pm CPANTS is using.
(defined in Module::CPANTS::Kwalitee::MetaYML)
Upgrade your YAML generator so it produces valid YAML. 176
(0.57 %)
697
(0.66 %)
1790
(0.74 %)
meta json is parsable The META.json file of this distribution could not be parsed by the version of JSON parser CPANTS is using.
(defined in Module::CPANTS::Kwalitee::MetaYML)
Upgrade your META.json generator so it produces valid JSON. 24
(0.08 %)
54
(0.05 %)
103
(0.04 %)
meta yml conforms to known spec META.yml does not conform to any recognised META.yml Spec.
(defined in Module::CPANTS::Kwalitee::MetaYML)
Take a look at the META.yml Spec at http://module-build.sourceforge.net/META-spec-v1.4.html (for version 1.4) or http://search.cpan.org/perldoc?CPAN::Meta::Spec (for version 2), and change your META.yml accordingly. 3483
(11.20 %)
12210
(11.59 %)
29959
(12.43 %)
meta json conforms to known spec META.json does not conform to any recognised META Spec.
(defined in Module::CPANTS::Kwalitee::MetaYML)
Take a look at the META.json Spec at http://module-build.sourceforge.net/META-spec-v1.4.html (for version 1.4) or http://search.cpan.org/perldoc?CPAN::Meta::Spec (for version 2), and change your META.json accordingly. 251
(0.81 %)
1086
(1.03 %)
2349
(0.97 %)
has readme The file "README" is missing from this distribution. The README provides some basic information to users prior to downloading and unpacking the distribution.
(defined in Module::CPANTS::Kwalitee::Files)
Add a README to the distribution. It should contain a quick description of your module and how to install it. 2319
(7.46 %)
8018
(7.61 %)
18043
(7.49 %)
has manifest The file "MANIFEST" is missing from this distribution. The MANIFEST lists all files included in the distribution.
(defined in Module::CPANTS::Kwalitee::Files)
Add a MANIFEST to the distribution. Your buildtool should be able to autogenerate it (eg "make manifest" or "./Build manifest") 746
(2.40 %)
1948
(1.85 %)
5017
(2.08 %)
has meta yml The file "META.yml" is missing from this distribution. META.yml is needed by people maintaining module collections (like CPAN), for people writing installation tools, or just people who want to know some stuff about a distribution before downloading it.
(defined in Module::CPANTS::Kwalitee::Files)
Add a META.yml to the distribution. Your buildtool should be able to autogenerate it. 5121
(16.47 %)
15885
(15.08 %)
44386
(18.42 %)
has buildtool Makefile.PL and/or Build.PL are missing. This makes installing this distribution hard for humans and impossible for automated tools like CPAN/CPANPLUS/cpanminus.
(defined in Module::CPANTS::Kwalitee::Files)
Add a Makefile.PL (for ExtUtils::MakeMaker/Module::Install) or a Build.PL (for Module::Build and its friends), or use a distribution builder such as Dist::Zilla, Dist::Milla, Minilla. 218
(0.70 %)
482
(0.46 %)
1615
(0.67 %)
has changelog The distribution hasn't got a Changelog (named something like m/^chang(es?|log)|history$/i. A Changelog helps people decide if they want to upgrade to a new version.
(defined in Module::CPANTS::Kwalitee::Files)
Add a Changelog (best named 'Changes') to the distribution. It should list at least major changes implemented in newer versions. 3210
(10.32 %)
9113
(8.65 %)
20188
(8.38 %)
no symlinks This distribution includes symbolic links (symlinks). This is bad, because there are operating systems that do not handle symlinks.
(defined in Module::CPANTS::Kwalitee::Files)
Remove the symlinks from the distribution. 32
(0.10 %)
101
(0.10 %)
223
(0.09 %)
has tests This distribution doesn't contain either a file called 'test.pl' or a directory called 't'. This indicates that it doesn't contain even the most basic test-suite. This is really BAD!
(defined in Module::CPANTS::Kwalitee::Files)
Add tests! 1587
(5.10 %)
4183
(3.97 %)
9646
(4.00 %)
has version The distribution filename (eg. Foo-Bar-1.42.tar.gz) does not include a version number (or something that looks like a reasonable version number to CPAN::DistnameInfo)
(defined in Module::CPANTS::SiteKwalitee::DistVersion)
Add a version number to the packed distribution. Or use a buildtool ('make dist' or 'Build dist') 96
(0.31 %)
135
(0.13 %)
510
(0.21 %)
has proper version The version number isn't a number. It probably contains letter besides a leading 'v', which it shouldn't
(defined in Module::CPANTS::SiteKwalitee::DistVersion)
Remove all letters from the version number. If you want to mark a release as a developer release, use the scheme 'Module-1.00_01' 294
(0.95 %)
787
(0.75 %)
2559
(1.06 %)
distname matches name in meta The distribution name (eg. 'Foo-Bar' of Foo-Bar-1.42.tar.gz) does not match the 'name' field in META files.
(defined in Module::CPANTS::SiteKwalitee::Distname)
Use a proper tool to make a distribution. You might also need to fix META files if you keep them in the repository. 153
(0.49 %)
447
(0.42 %)
2353
(0.98 %)
buildtool not executable The build tool (Build.PL/Makefile.PL) is executable. This is bad because you should specify which perl you want to use while installing.
(defined in Module::CPANTS::SiteKwalitee::Files)
Change the permissions of Build.PL/Makefile.PL to not-executable. 1695
(5.45 %)
6003
(5.70 %)
17267
(7.17 %)
no generated files This distribution has files/directories that should be generated at build time, not distributed by the author.
(defined in Module::CPANTS::SiteKwalitee::Files)
Remove the offending files/directories! 267
(0.86 %)
889
(0.84 %)
2239
(0.93 %)
portable filenames This distribution has at least one file with non-portable characters in its filename, which may cause problems under some environments.
(defined in Module::CPANTS::SiteKwalitee::Files)
Rename those files with alphanumerical characters, or maybe remove them because in many cases they are automatically generated for local installation. 66
(0.21 %)
283
(0.27 %)
993
(0.41 %)
no dot underscore files This distribution has dot underscore files which may cause various problems.
(defined in Module::CPANTS::SiteKwalitee::Files)
If you use Mac OS X, set COPYFILE_DISABLE (for OS 10.5 and better) or COPY_EXTENDED_ATTRIBUTES_DISABLE (for OS 10.4) environmental variable to true to exclude dot underscore files from a distribution. 88
(0.28 %)
290
(0.28 %)
811
(0.34 %)
no dot dirs This distribution has a dot directory, which most probably derives from a version control system.
(defined in Module::CPANTS::SiteKwalitee::Files)
Fix MANIFEST (or MANIFEST.SKIP) to exclude dot directories from a distribution. Use an appropriate tool and avoid archiving your working directory by hand. If you switch your version control system, remove old VCS directories after you migrate. 58
(0.19 %)
172
(0.16 %)
425
(0.18 %)
no mymeta files This distribution contains MYMETA.* files which should be used only locally. This metric should be integrated into 'no_generated_files' eventually, but as MYMETA.* files are recent inventions, you might need to take special care if MANIFEST.SKIP exists in your distribution. Hence this metric.
(defined in Module::CPANTS::SiteKwalitee::MyMeta)
Update MANIFEST.SKIP to exclude MYMETA files. If you are lazy, add "#!install_default" in your MANIFEST.SKIP and update your ExtUtils::Manifest if necessary, then some of the most common files will be excluded. 417
(1.34 %)
1562
(1.48 %)
3435
(1.43 %)
no broken module install This distribution uses an obsolete version of Module::Install. Versions of Module::Install prior to 0.61 might not work on some systems at all. Additionally if your Makefile.PL uses the 'auto_install()' feature, you need at least version 0.64. Also, 1.04 is known to be broken.
(defined in Module::CPANTS::Kwalitee::BrokenInstaller)
Upgrade the bundled version of Module::Install to the most current release. Alternatively, you can switch to another build system / installer that does not suffer from this problem. (ExtUtils::MakeMaker, Module::Build both of which have their own set of problems.) 383
(1.23 %)
1544
(1.47 %)
4021
(1.67 %)
no broken auto install This distribution uses an old version of Module::Install. Versions of Module::Install prior to 0.89 do not detect correcty that CPAN/CPANPLUS shell is used.
(defined in Module::CPANTS::Kwalitee::BrokenInstaller)
Upgrade the bundled version of Module::Install to at least 0.89, but preferably to the most current release. Alternatively, you can switch to another build system / installer that does not suffer from this problem. (ExtUtils::MakeMaker, Module::Build both of which have their own set of problems.) 484
(1.56 %)
2062
(1.96 %)
5937
(2.46 %)
has human readable license This distribution does not have a license defined in the documentation or in a file called LICENSE
(defined in Module::CPANTS::Kwalitee::License)
Add a section called "LICENSE" to the documentation, or add a file named LICENSE to the distribution. 3927
(12.63 %)
12427
(11.80 %)
30357
(12.60 %)
has license in source file Does not have license information in any of its source files
(defined in Module::CPANTS::Kwalitee::License)
Add =head1 LICENSE and the text of the license to the main module in your code. 5094
(16.38 %)
16145
(15.32 %)
39736
(16.49 %)
manifest matches dist MANIFEST does not match the contents of this distribution.
(defined in Module::CPANTS::Kwalitee::Manifest)
Run a proper command ("make manifest" or "./Build manifest", maybe with a force option), or use a distribution builder to generate the MANIFEST. Or update MANIFEST manually. 2751
(8.85 %)
8772
(8.33 %)
20706
(8.59 %)
has abstract in pod No abstract (short description of a module) is found in pod from this distribution.
(defined in Module::CPANTS::Kwalitee::Pod)
Provide a short description in the NAME section of the pod (after the module name followed by a hyphen) at least for the main module of this distribution. 1494
(4.80 %)
4197
(3.98 %)
10475
(4.35 %)
use strict This distribution does not 'use strict;' (or its equivalents) in all of its modules. Note that this is not about the actual strictness of the modules. It's bad if nobody can tell whether the modules are strictly written or not, without reading the source code of your favorite clever module that actually enforces strictness. In other words, it's bad if someone feels the need to add 'use strict' to your modules.
(defined in Module::CPANTS::Kwalitee::Uses)
Add 'use strict' (or its equivalents) to all modules, or convince us that your favorite module is well-known enough and people can easily see the modules are strictly written. 3335
(10.73 %)
15009
(14.25 %)
38693
(16.06 %)
no pod errors The documentation for this distribution contains syntactic errors in its POD. Note that this metric tests all .pl, .pm and .pod files, even if they are in t/. See 'pod_message' in the dist error view for more info.
(defined in Module::CPANTS::SiteKwalitee::Pod)
Remove the POD errors. You can check for POD errors automatically by including Test::Pod to your test suite. 3292
(10.59 %)
14862
(14.11 %)
40662
(16.88 %)
prereq matches use This distribution uses a module or a dist that's not listed as a prerequisite.
(defined in Module::CPANTS::SiteKwalitee::Prereq)
List all used modules in META.yml requires 5120
(16.47 %)
22417
(21.28 %)
57696
(23.94 %)
valid signature This dist failed its Module::Signature verification and does not to install automatically through the CPAN client if Module::Signature is installed. Note: unsigned dists will automatically pass this kwalitee check.
(defined in Module::CPANTS::SiteKwalitee::Signature)
Sign the dist as the last step before creating the archive. Take care not to modify/regenerate dist meta files or the manifest. 111
(0.36 %)
560
(0.53 %)
1142
(0.47 %)
consistent version This distribution has .pm files with inconsistent versions.
(defined in Module::CPANTS::SiteKwalitee::Version)
Split the distribution, or fix the version numbers to make them consistent (use the highest version number to avoid version downgrade). 2342
(7.53 %)
11878
(11.27 %)
35132
(14.58 %)
package version matches dist version None of the package versions in this distribution matches the distribution version.
(defined in Module::CPANTS::SiteKwalitee::Version)
Fix the version(s). 2039
(6.56 %)
5937
(5.64 %)
15681
(6.51 %)
NameDescriptionRemedyFail
(Latest)
Fail
(CPAN)
Fail
(BackPAN)
meta yml declares perl version This distribution does not declare the minimum perl version in META.yml.
(defined in Module::CPANTS::Kwalitee::MetaYML)
If you are using Build.PL define the {requires}{perl} = VERSION field. If you are using MakeMaker (Makefile.PL) you should upgrade ExtUtils::MakeMaker to 6.48 and use MIN_PERL_VERSION parameter. Perl::MinimumVersion can help you determine which version of Perl your module needs. 17025
(54.75 %)
58330
(55.37 %)
128747
(53.43 %)
has tests in t dir This distribution contains either a file called 'test.pl' (the old test file) or is missing a directory called 't'. This indicates that it uses the old test mechanism or it has no test-suite.
(defined in Module::CPANTS::Kwalitee::Files)
Add tests or move tests.pl to the t/ directory! 3822
(12.29 %)
10907
(10.35 %)
27110
(11.25 %)
no stdin for prompting This distribution is using direct call from STDIN instead of prompt(). Make sure STDIN is not used in Makefile.PL or Build.PL. See http://www.perlfoundation.org/perl5/index.cgi?cpan_packaging
(defined in Module::CPANTS::Kwalitee::Files)
Use the prompt() method from ExtUtils::MakeMaker/Module::Build. 136
(0.44 %)
633
(0.60 %)
2079
(0.86 %)
no local dirs This distribution contains a well-known directory for local use (i.e. not suitable for a public distribution).
(defined in Module::CPANTS::SiteKwalitee::Files)
Fix MANIFEST (or MANIFEST.SKIP) to exclude local directories from a distribution. 1
(0.00 %)
4
(0.00 %)
22
(0.01 %)
proper libs There is more than one .pm file in the base dir, or the .pm files are not in lib/ directory.
(defined in Module::CPANTS::Kwalitee::FindModules)
Move your *.pm files in a directory named 'lib'. The directory structure should look like 'lib/Your/Module.pm' for a module named 'Your::Module'. 927
(2.98 %)
4061
(3.85 %)
11908
(4.94 %)
meta yml has license This distribution does not have a license defined in META.yml.
(defined in Module::CPANTS::Kwalitee::License)
Define the license if you are using in Build.PL. If you are using MakeMaker (Makefile.PL) you should upgrade to ExtUtils::MakeMaker version 6.31. 12328
(39.65 %)
38836
(36.86 %)
97505
(40.47 %)
has known license in source file Does not have license information in any of its source files, or the information is not recognized by Software::License
(defined in Module::CPANTS::Kwalitee::License)
Add =head1 LICENSE and/or the proper text of the well-known license to the main module in your code. 5986
(19.25 %)
19006
(18.04 %)
46065
(19.12 %)
no abstract stub in pod A well-known abstract stub (typically generated by an authoring tool) is found in this distribution.
(defined in Module::CPANTS::Kwalitee::Pod)
Modify the stub. You might need to modify other stubs (for name, synopsis, license, etc) as well. 72
(0.23 %)
226
(0.21 %)
593
(0.25 %)
use warnings This distribution does not 'use warnings;' (or its equivalents) in all of its modules. Note that this is not about that your modules actually warn when something bad happens. It's bad if nobody can tell if a module warns or not, without reading the source code of your favorite module that actually enforces warnings. In other words, it's bad if someone feels the need to add 'use warnings' to your modules.
(defined in Module::CPANTS::Kwalitee::Uses)
Add 'use warnings' (or its equivalents) to all modules (this will require perl > 5.6), or convince us that your favorite module is well-known enough and people can easily see the modules warn when something bad happens. 10378
(33.38 %)
40036
(38.00 %)
100943
(41.89 %)
no unauthorized packages Apparently this distribution has unauthorized packages now.
(defined in Module::CPANTS::SiteKwalitee::Permissions)
Ask the owner of the distribution (the one who released it first, or the one who is designated in x_authority) to give you a (co-)maintainer's permission. 408
(1.31 %)
2126
(2.02 %)
8222
(3.41 %)
is prereq This distribution is not required by another distribution by another author.
(defined in Module::CPANTS::SiteKwalitee::Prereq)
Convince / force / bribe another CPAN author to use this distribution. 22999
(73.97 %)
62625
(59.44 %)
134678
(55.89 %)
no invalid versions This distribution has .pm files with an invalid version.
(defined in Module::CPANTS::SiteKwalitee::Version)
Fix the version numbers so that version::is_lax($version) returns true. 247
(0.79 %)
1113
(1.06 %)
3715
(1.54 %)
NameDescriptionRemedyFail
(Latest)
Fail
(CPAN)
Fail
(BackPAN)
meta yml has provides This distribution does not have a list of provided modules defined in META.yml.
(defined in Module::CPANTS::Kwalitee::MetaYML)
Add all modules contained in this distribution to the META.yml field 'provides'. Module::Build or Dist::Zilla::Plugin::MetaProvides do this automatically for you. 19569
(62.93 %)
68919
(65.42 %)
147700
(61.30 %)
meta yml has repository resource This distribution does not have a link to a repository in META.yml.
(defined in Module::CPANTS::Kwalitee::MetaYML)
Add a 'repository' resource to the META.yml via 'meta_add' accessor (for Module::Build) or META_ADD parameter (for ExtUtils::MakeMaker). 15667
(50.39 %)
53948
(51.21 %)
128214
(53.21 %)
has separate license file This distribution does not have a LICENSE or LICENCE file in its root directory.
(defined in Module::CPANTS::Kwalitee::License)
This is not a critical issue. Currently mainly informative for the CPANTS authors. It might be removed later. 19916
(64.05 %)
68648
(65.16 %)
159761
(66.30 %)
build prereq matches use This distribution uses a module or a dist in its test suite that's not listed as a build prerequisite.
(defined in Module::CPANTS::SiteKwalitee::Prereq)
List all modules used in the test suite in META.yml build_requires 3039
(9.77 %)
12835
(12.18 %)
28222
(11.71 %)