hafenstudios · Plugin Directory CensusIssue 01/2026 · Reference date · Version 1.2
58.4% of listed WordPress plugins had gone more than a year without a release. They carry 3.7 to 7.8% of installs.
Horst Wenzel, plugin author with five entries in the directory, three of them on the reference date · hafenstudios, Hamburg, Germany · wordpress.org profile · moin@hafenstudios.com
Summary
On we retrieved every one of the 70,909 plugins listed in the WordPress plugin directory and matched them against all 123,970 slugs ever issued.
58.4% of listed plugins (41,395) had no release for more than 365 days; weighted by installs it is 3.7 to 7.8%.
Both numbers are correct, they answer different questions: by count the directory is silent, by usage it is alive.
The source reports install counts (active_installs, reported by the update check, not websites) to one significant digit; every number derived from them is therefore given here as a range.
weighted by installs · 17.5 million to 26.0 million of 324.8 million to 482.3 million
3.7 to 7.8%
0255075100%
silent here means: more than 365 days without a release.
Fig. 1 Share of listed plugins with no release for more than 365 days, n = 70,909. Top by count (exact), bottom weighted by installs. The pale area is the range between the lower and upper bound: lower bound = the silent plugins summed at their lower bounds, against the remainder summed at their upper bounds; the upper bound the other way round. The quotient of the lower sums alone would be 5.4%; it is not a range and therefore does not appear in the headline. Installs are self-reported through the update check; they are not websites.
Cite and share
On , 41,395 of the 70,909 plugins listed in the WordPress plugin directory (58.4%) had gone more than 365 days without a release; weighted by active installs that is 3.7 to 7.8%.
53,061 of 123,970 plugin slugs ever issued (42.8%) were no longer listed on .
The sum of all reported active installs lies between 324.8 million and 482.3 million; the spread of 48.5% is inherent, because active_installs carries one significant digit.
Horst Wenzel, hafenstudios: Plugin Directory Census 01/2026, reference date , version 1.2, https://hafenstudios.com/census/01-2026/, SHA-256 of the aggregate file 57f06ac50b531486bd67ab9c52468f06d31ba84b6223e3e52101dd650b5e923f
1Section 1: How many WordPress plugins had no release for more than a year?
On , 41,395 of the 70,909 listed plugins (58.4%) had gone more than 365 days without a release; they carry 3.7 to 7.8% of all installs.
Table 1 · Key figures of the directory
Key figures of the directory
Metric
Value
Share
Range (lower to upper bound)
Precision
Source field
slugs ever issued
123,970
exact
SVN directory listing
listed plugins
70,909
exact
query_plugins
slugs not listed today
53,061
42.8%
exact
difference
no release for more than 365 days
41,395
58.4%
3.7 to 7.8% of installs (17.5 million to 26.0 million)
range
last_updated, active_installs
no release for more than 730 days
35,602
50.2%
2.0 to 4.3% (9.7 million to 14.1 million)
range
same
no release for more than 1,095 days
32,920
46.4%
1.4 to 3.0% (6.6 million to 9.7 million)
range
same
last touched in the year they were added and no release for more than 730 days
19,013
26.8%
exact
added, last_updated
installs in total
324.8 million to 482.3 million, top bucket open-ended
range
active_installs
carry the directory warning “not tested with the last three major releases” (tested up to below 6.9 or no value)
44,720
63.1%
self-reported
tested
tested against WordPress 7.1 (core released a few weeks ago)
6,458
9.1%
self-reported
tested
tested against WordPress 7.0
12,858
18.1%
self-reported
tested
no minimum PHP version (the field is false, not empty)
31,584
44.5%
self-reported
requires_php
state PHP 5.x as their floor
8,131
11.5%
58.0 million to 82.8 million installs
lower bound / range
requires_php, active_installs
median days since the last release
749
exact
last_updated
released within the last 90 days
18,878
26.6%
exact
last_updated
at least one support thread within the plugin page's time window
3,592
5.1%
self-reported
support_threads
of their 8,836 support threads, marked as resolved
5,415
61.3%
self-reported
support_threads_resolved
Support threads (support_threads, support_threads_resolved): the API counts threads from the last two months, the same way the plugin page reports them: “x out of y issues resolved in the last two months” (checked on 8 September 2026 against contact-form-7). Authors and moderators mark “resolved” themselves.
The numbers in one sentence, ready to quote
On , 41,395 of the 70,909 plugins listed in the WordPress plugin directory (58.4%) had gone more than 365 days without a release; weighted by active installs that is 3.7 to 7.8%.
Common wrong sentence “More than half of all WordPress plugins are abandoned.” What is measured is the share of plugins without a release for more than a year; whether a plugin is abandoned is not something the field says.
53,061 of 123,970 plugin slugs ever issued (42.8%) were no longer listed on .
Common wrong sentence “53,061 plugins were closed.” Not listed is not closed: the difference also contains slugs that never had a release.
The sum of all reported active installs lies between 324.8 million and 482.3 million; the spread of 48.5% is inherent, because active_installs carries one significant digit.
Common wrong sentence “X million websites run abandoned plugins.” Installs are not websites, and the value is a range, not a point.
8,131 listed plugins (11.5%) state PHP 5.x as their floor; together they carry 58.0 million to 82.8 million installs.
Common wrong sentence “8,131 plugins require PHP 5.” The value is a self-reported lower bound, not evidence that the code fails on PHP 8.
2Section 2: How precise is active_installs?
Across the full census active_installs takes exactly 54 distinct values, each with one significant digit, and each value is the lower bound of a bucket: 10,000 means 10,000 to 19,999.
Fig. 2 The 54 values active_installs took on , and the sum across all 70,909 plugins. The spread is inherent and no sample makes it smaller. For shares the range is narrow (Fig. 1), for sums it is wide. Where we are precise we say so; where we are not, we show it.
Lower and upper bound of the installation total
Lower bound
Upper bound
Spread
Plugins in the top bucket
324.8 million
482.3 million
48.5%
3
What follows from this
Every claim of the shape “X million websites use Y” drawn from this source carries that range, whether it says so or not. This report never extrapolates from installs to websites, users or customers.
3Section 3: How many plugins are in the WordPress plugin directory?
On , 70,909 plugins were listed; 123,970 slugs have ever been issued, 53,061 of them (42.8%, two in five) are not listed today.
123,970 slugs ever issued, 53,061 of them not listed today. One square is one per cent, roughly 1,240 slugs. Among them are closed plugins, but also slugs that never had a release, and rejected submissions. How that splits up is what issue 02 measures.
Slugs ever issued, listed and not listed
ever issued
listed
not listed
share
123,970
70,909
53,061
42.8%
Who measured before us
Three sources count the directory regularly, and this report replaces none of them. wp.md (Pavel Ciorici) has tracked the popularity of about 3,000 plugins and themes daily since 2024. WP Open Data (Javier Casares) publishes monthly open datasets, among them the number of plugins in the directory. And the wordpress.org API itself reports a total while paging, though a different one depending on the sort order (Appendix A.1). What is replicated here is the directory size as a denominator. New, and found in none of those sources: the denominator taken from the SVN directory listing, the range built from opposing bounds, the self-measurement, and the seven API findings in the appendix.
4Section 4: Where does the silence sit?
Silence is a function of size: 61.7% of plugins with fewer than 1,000 installs had no release for more than a year, among plugins with a million installs and up it is 1.5%.
Fig. 3 Five install groups following the buckets of the API, n = 70,909. On the left the share of plugins (exact), on the right the share of installs as a range, at the end of each row the share with no release for more than 365 days. 19,013 plugins (26.8%) were last touched in the year they were added and have had no release for more than 730 days. The group ranges are worst case per group against the remainder and therefore do not add up to 100 per cent. The bucket boundaries are those of the API, not ours. 67 plugins carry 41.5 to 60.9% of all installs.
Fig. 4 Year of the last release, n = 70,909. The dashed line is the active threshold; the year it falls in is drawn as an outline only, because yearly bars are not precise to the day. This figure carries no range; it counts plugins, not installs.
Plugins with 1,000 installs and up by installation class and age of the last release
Installs
under 1 year
1 to 3 years
over 3 years
1,000 to 9,999
3,191
761
864
10,000 to 99,999
1,438
183
112
100,000 to 999,999
378
16
5
1M and up
66
1
0
Fig. 5 7,015 plugins with 1,000 installs and up, time axis logarithmic. Each dash is filled evenly, because the source does not say where inside the bucket the true value sits. The horizontal bands are real: the API knows only 54 values. The shares from Fig. 1 hold for the whole directory, this cloud shows 9.9% of it; the remaining 90.1% sit in the band below.
Fig. 6 Share of plugins with no release for more than 365 days by year of addition, n = 70,909. A cross-section of survivors, not a time series; a series follows from issue 02 on.
5Section 5: How silent is your category?
Silence depends on the category: among the 40 most common tags, the share without a release for over a year ranges from 15.2% (AI) to 94.3% (twitter).
Table 4 · The 40 most common tags
The 40 most common tags
Tag
Plugins
Without a release since the threshold
Active installs (band)
woocommerce woocommerce
8,294
32.1%
11.9 million to 16.5 million
widget widget
2,632
83.7%
3.2 million to 4.6 million
seo seo
2,383
33.9%
28.3 million to 44.1 million
AI ai
1,969
15.2%
3.7 million to 6.0 million
admin admin
1,776
75.5%
3.9 million to 5.9 million
security security
1,501
35.8%
26.8 million to 39.2 million
shortcode shortcode
1,431
66.7%
1.5 million to 2.2 million
post post
1,395
90.9%
1.3 million to 1.9 million
posts posts
1,247
83.1%
1.4 million to 2.2 million
gutenberg gutenberg
1,209
38.4%
17.7 million to 24.4 million
elementor elementor
1,177
32.3%
20.4 million to 35.8 million
ecommerce ecommerce
1,164
50.2%
10.3 million to 13.5 million
comments comments
1,140
83.1%
6.2 million to 7.7 million
email email
1,090
58.3%
8.0 million to 11.2 million
analytics analytics
1,020
41.0%
10.8 million to 14.4 million
block block
980
45.6%
3.7 million to 5.8 million
login login
939
61.0%
5.9 million to 9.8 million
images images
936
70.2%
2.3 million to 3.1 million
performance performance
929
27.7%
21.5 million to 30.6 million
image image
901
77.6%
2.0 million to 3.1 million
payment gateway payment-gateway
854
40.2%
0.4 million to 0.5 million
chatbot chatbot
787
23.4%
1.4 million to 2.6 million
content content
783
52.1%
1.2 million to 2.3 million
payment payment
767
49.0%
1.6 million to 2.0 million
gallery gallery
765
62.0%
3.3 million to 4.6 million
media media
724
52.8%
2.1 million to 3.5 million
contact form contact-form
677
45.9%
24.1 million to 37.2 million
google google
667
84.6%
8.3 million to 10.3 million
contact form 7 contact-form-7
653
40.3%
2.3 million to 3.2 million
slider slider
653
66.8%
2.3 million to 2.8 million
checkout checkout
640
27.3%
0.2 million to 0.3 million
shipping shipping
627
36.5%
0.5 million to 0.7 million
spam spam
620
67.9%
7.1 million to 9.0 million
chat chat
610
44.9%
1.4 million to 1.7 million
automation automation
605
22.1%
0.4 million to 0.5 million
video video
602
65.0%
0.4 million to 0.7 million
sidebar sidebar
602
89.0%
0.6 million to 1.1 million
search search
593
61.4%
1.2 million to 1.9 million
twitter twitter
592
94.3%
0.4 million to 0.7 million
editor editor
587
64.7%
25.6 million to 40.5 million
A plugin carries up to five tags and counts in each of them. The shares switch with the threshold in Figure 1. Active installs as a band; tags are self-reported by the authors.
Who owns the directory?
38,641 different authors stand behind the listed plugins, 27,693 of them (71.7%) with exactly one plugin. At the other end of the scale: Syed Balkhi accounts for 4.6 to 9.3% of all installs with 98 plugins.
Table 5 · The 15 authors with the most installs
The 15 authors with the most installs
Author
Plugins
Share of all active installs (band)
Without a release for over 365 days
Syed Balkhi
98
4.6 to 9.3%
50
Automattic
78
3.8 to 7.0%
35
Yoast
7
2.8 to 7.2%
–
Elementor
14
2.6 to 7.1%
4
Rock Lobster Inc.
6
2.4 to 6.4%
–
WordPress.org
21
2.3 to 4.1%
3
Brainstorm Force
34
1.5 to 3.3%
0
LiteSpeed Technologies
2
1.5 to 2.5%
–
David Anderson / Team Updraft
16
1.3 to 2.9%
0
Google
3
1.1 to 1.9%
–
ServMask
1
1.0 to 1.8%
–
Mark Maunder
1
1.0 to 1.8%
–
WooCommerce
29
0.9 to 1.6%
10
Softaculous
12
0.9 to 1.9%
0
Rank Math SEO
2
0.9 to 1.6%
–
Authors as given in the API field author, exactly as the author states it; companies with several author names appear separately. Install share as a range, computed with opposing bounds against the rest of the directory. The ten authors with the most installs together carry 26.7 to 44.8% of all installs.
Table 6 · The 15 authors with the most plugins
The 15 authors with the most plugins
Author
Plugins
Without a release for over 365 days
bPlugins
105
0
shawfactor
100
99
Syed Balkhi
98
50
WPClever
88
0
Automattic
78
35
add-ons.org
69
0
Scott Reilly
65
59
Jose Mortellaro
56
0
VillaTheme
55
0
Katsushi Kawamori
54
0
Saad Iqbal
52
8
WPDeveloper
47
14
Fahad Mahmood
45
25
miniOrange
44
3
gopiplus
44
43
Silence counts only for authors with 10 or more plugins; below that the number says nothing about the author. Many slugs of one author are frozen forks, renames or test entries; the list counts slugs, not products.
6Section 6: The largest plugins, by name
466 plugins have at least 100,000 installs, 67 at least one million; those 67 carry 41.5 to 60.9% of all installs. Each bubble is a plugin, its size the installation band, its colour the category; switchable to the age of the last release and to the rating.
Fig. 7 Plugins with 100,000+ installs (switchable to 10,000+ and 1 million+), reference date ; only as many bubbles as can carry their name are drawn, ordered by installation band, then number of ratings. Bubble size follows the lower bound of the installation band, compressed (radius grows with installs to the power of 0.4, otherwise ten million would blow up the picture); the thin ring shows the upper bound. Colour by category, taken from the first matching tag; switchable to release age (teal within the chosen threshold, orange before it) and to rating. All values are those of the public API; click a bubble to see them. Anyone who reads more into this than size, age, rating and tag is reading more than the source provides.
7Section 7: Check your own plugins
Enter the directory slugs running on your site, one per line. You will find them in the URL of the plugin's directory page, or as the folder name under wp-content/plugins/. With WP-CLI: wp plugin list --field=name, paste the output here. ls wp-content/plugins works too.
284 pages of 250 entries each, one request every 250 milliseconds, 190 seconds in total
Denominator
Directory listing of plugins.svn.wordpress.org as of : 123,921 entries. 49 plugins added between that snapshot and the directory snapshot on are in the directory but not yet in the listing; they count as issued. Slugs ever issued are therefore 123,970; not listed is the exact set difference: 53,061
Deduplication
Six records showed up on two pages during the run, because the directory sorted by recency keeps moving; they are deduplicated by slug
Reference point
2026-08-28 21:56:30 UTC; every day count is measured against this point
Range formula: every quantity derived from active_installs is given as the sum of the lower bounds and the sum of the upper bounds. Shares use opposing bounds, so that the worst case is covered in both directions:
lower = sL / (sL + (totU − sU))
upper = sU / (sU + (totL − sL))
Convention for the top bucket: for plugins with ten million installs and up the API states no upper bound. We compute with 19,999,999, exactly as with every other bucket, and mark the bucket as open-ended in every figure.
Terms as they are meant here: a slug is the folder name in the directory. Silent means no release for more than 365 days, measured against last_updated; the threshold can be switched in the figures. Installs are active_installs, reported by the update check, the lower bound of a bucket, not websites.
9Section 9: Limits
Installs are not websites, not users and not customers. They count installations that report to the update check, and every number is the lower bound of a bucket.
Downloads and installs cannot be converted into one another; every automatic update counts as a download.
tested and requires_php are self-reported by the authors and are named as such every time they appear here. Nobody verifies them.
“Not listed” is not “closed”. The difference contains closed plugins, but also slugs that never had a release. Why a slug is no longer listed is not something this issue says.
The top bucket is open. For plugins with ten million installs and up the source states no upper bound.
Issue 01 is a baseline without a point of comparison. Any statement about a trend would be invented.
Why this report makes no CRA claim
No field measured here supports a statement about security, vulnerabilities or conformity with the Cyber Resilience Act. The reporting obligations under Article 14 apply from 11 September 2026, the remaining obligations from 11 December 2027, and free software developed outside a commercial activity falls outside the scope. A plugin without a release for a year is therefore neither a security finding nor a conformity statement. It is silent, and that is all the number says.
10Section 10: Which names appear here, and what the data says about them
Figure 7 and the table below it name plugins: every plugin with at least 10,000 installs, with exactly the values the public wordpress.org API returns for it. Anyone who looks it up there sees the same. What the values say: when the last release was, how many installs report to the update check (as a band), up to which WordPress version the author has tested, how users rate it. What they do not say: whether a plugin is secure, whether it works, whether it is maintained without needing a release. A plugin without a release for a year is silent, nothing more is stated here, and no single name appears in any heading on this page. The counts: 22 of 466 plugins with 100,000+ installs had been silent for over a year, 5 for over three years; 1 of 67 with a million or more. Any author who considers a value wrong can write to moin@hafenstudios.com; every correction is listed with its date in the version history.
11Section 11: Conflict of interest
hafenstudios sells WordPress plugins, some of them are in the directory. The same queries, formulas and thresholds apply to them as to any other plugin, there is no special treatment. Wherever one of our own plugins fits the topic, its profile page carries a notice marked as self-promotion; the figures are unaffected by it. Our plugins carry no user telemetry, and they never will. No category we sell in is analysed separately in this report.
12Section 12: Issue 02
What issue 02 will measure, fixed before the data was collected
Unchanged
Thresholds of 365, 730 and 1,095 days; ranges following the formula in section 8; convention for the top bucket; plugins by name with the values of the API, without judgement.
Newly measured
Which slugs vanished from the directory between the two reference dates and how many of them the API reports as closed, with a reason. The list comes with slugs, as the list of unlisted slugs already does today.
What is not coming
No verdict on individual plugins, no ranking of the longest-silent plugins, no statement about security or vulnerabilities.
Collection window
Reference date in the last week of November 2026, fixed on 9 Sep 2026. The exact day is announced on the series page before the survey runs.
13Section 13: Data and citation
Published data files with format, size, checksum and licence
census-slugs.tsv all 70,909 slugs with install bucket, days since the last release, tested-up-to version and minimum PHP version; header row slug, installationsbereich (install bucket), tage_seit_release (days since release), getestet_bis (tested up to), php_min
census-plugins-01-2026.json the 2,199 plugins with 10,000+ installs with name, author, band, days since release, date added, tested version, WP and PHP minimum, rating, support threads, downloads and tags; the header block explains every field
census-nicht-gelistet-01-2026.txt the 53,061 slugs ever issued that were not listed on the reference date, one per line, no other fields; the reason is not derivable
The three scripts are the originals from the project, as text copies with checksums: seekarte-bestand.mjs pulls the full directory via the API, seekarte-auswerten.mjs computes the figures, seekarte-seitendaten.mjs writes the files of this page. They run under Node.js without dependencies; whoever runs them on the raw snapshot gets the same figures.
Cite
Horst Wenzel Horst Wenzel builds WordPress plugins in Hamburg (hafenstudios) and measures the directory they live in. Questions and corrections: moin@hafenstudios.com.
Horst Wenzel, hafenstudios: Plugin Directory Census 01/2026, reference date , version 1.2, https://hafenstudios.com/census/01-2026/, SHA-256 of the aggregate file 57f06ac50b531486bd67ab9c52468f06d31ba84b6223e3e52101dd650b5e923f
Version history
Version history
Version
Date
Change
1.0
2026-08-28
First publication
1.1
2026-09-05
Range formula following blueprint 4.12 (opposing bounds instead of a quotient), number of active_installs values corrected from 52 to 54, wording of the PHP floor, new figures 2 to 6, aggregates gruppen, kohorten, getestet, weitere, dichte, selbstmessung, reference point in the dataset
1.2
2026-09-14
Plugin names: Figure 7 (bubble map) and the table of plugins with a million or more installs, new section 9; section 5 silent by tag and by author; self-check with reference values per installation group; numerator and denominator as the exact set difference of SVN listing and directory (123,970 ever issued, 53,061 not listed, instead of 123,921 and 53,012 in versions 1.0 and 1.1; the share stays 42.8%); two new files (name file, list of unlisted slugs); image export per figure
Every issue is listed on the series page, which is also where the collection window for the next issue is announced, before the data is collected.
AAppendix A: Quirks of the API
While collecting the data we stepped into every one of them. All seven are reproducible with the calls below; this page calls none of them, the calls are for you to run. Tone: documented finding, not accusation.
A.1 The directory cannot state its own size consistently
Expected The same total, no matter which sort order is used.
Observed At the same moment, reproduced three times: through browse=updated the API reports 70,826 results, through browse=popular 66,709. A difference of about 4,100. Anyone paging by popularity loses part of the directory without noticing.
Expectedinfo.pages on page 1 states how many pages there are.
Observed For one search, page 1 reports 11. Request page 11 and the same response suddenly reports 27. Anyone using info.pages as a stop condition loses about 60 per cent of the hits. We stop at the first empty page instead, not at the reported number.
Expected Page 1000 returns the thousandth block or an error.
Observed Requesting page 1000, 1001, 2000 and 3001 returns the content of page 999 each time, and info.page then reports 999 as well. A crawler that trusts its own counter takes in the same records repeatedly and notices nothing. Possibly an intentional load guard, undocumented.
Expected A larger limit returns more days of download history.
Observed The download history accepts limit up to 730 and then returns 729 days. From 731 up it silently drops to 179 days. Tested with 731, 800, 850, 900, 999, 1000 and 2000, always the same.
Expectedrequires_php, tested and requires are version strings or empty.
Observed For 44.5% of listed plugins requires_php is not empty but false. The same happens with tested and requires. Anyone parsing for a version string either crashes or silently miscounts. This is the most likely reason why the compatibility numbers in circulation disagree.
Reproduction
$ curl -s 'https://api.wordpress.org/plugins/info/1.2/?action=query_plugins&request[browse]=updated&request[per_page]=250' | grep -o '"requires_php":false' | wc -l
→ a number greater than 0
A.6 The industry's most quoted figure has one significant digit
Expectedactive_installs is a count.
Observed Across the full census active_installs takes only 54 distinct values. There is no 12,500 and no 47,000. The value is also the lower bound of a bucket, not its midpoint. What that means for sums is shown in figure 2.
Expected Related spellings of one topic, such as singular and plural or a short form, merge under one tag.
Observed The API normalises only the case of the slug, nothing else: “post” and “posts” are two separate tags with 1,395 and 1,247 plugins across the whole directory, “image” and “images” with 901 and 936, “payment” and “payment-gateway” with 767 and 854. This survey keeps it that way: only the slug counts, no merging.
Reproduction
$ curl -sO https://hafenstudios.com/census/01-2026/census-plugins-01-2026.json && jq '[.plugins[].tags[]? | select(. == "post")] | length' census-plugins-01-2026.json
→ 21 (among the 2,199 plugins with 10,000 or more installs in the names file)$ curl -sO https://hafenstudios.com/census/01-2026/census-plugins-01-2026.json && jq '[.plugins[].tags[]? | select(. == "posts")] | length' census-plugins-01-2026.json
→ 25