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.

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.

Figure 1
No release for
Save image (PNG)
counted by plugins · 41,395 of 70,909
58.4%
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

  1. 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%.

  2. 53,061 of 123,970 plugin slugs ever issued (42.8%) were no longer listed on .

  3. 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

Section 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
MetricValueShareRange (lower to upper bound)PrecisionSource field
slugs ever issued123,970exactSVN directory listing
listed plugins70,909exactquery_plugins
slugs not listed today53,06142.8%exactdifference
no release for more than 365 days41,39558.4%3.7 to 7.8% of installs (17.5 million to 26.0 million)rangelast_updated, active_installs
no release for more than 730 days35,60250.2%2.0 to 4.3% (9.7 million to 14.1 million)rangesame
no release for more than 1,095 days32,92046.4%1.4 to 3.0% (6.6 million to 9.7 million)rangesame
last touched in the year they were added and no release for more than 730 days19,01326.8%exactadded, last_updated
installs in total324.8 million to 482.3 million, top bucket open-endedrangeactive_installs
carry the directory warning “not tested with the last three major releases” (tested up to below 6.9 or no value)44,72063.1%self-reportedtested
tested against WordPress 7.1 (core released a few weeks ago)6,4589.1%self-reportedtested
tested against WordPress 7.012,85818.1%self-reportedtested
no minimum PHP version (the field is false, not empty)31,58444.5%self-reportedrequires_php
state PHP 5.x as their floor8,13111.5%58.0 million to 82.8 million installslower bound / rangerequires_php, active_installs
median days since the last release749exactlast_updated
released within the last 90 days18,87826.6%exactlast_updated
at least one support thread within the plugin page's time window3,5925.1%self-reportedsupport_threads
of their 8,836 support threads, marked as resolved5,41561.3%self-reportedsupport_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
  1. 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.

  2. 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.

  3. 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.

  4. 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.

Section 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.

0 = fewer than 10 101001k10k100k1 M10 M 10,000 means 10,000 to 19,999 from 10M up: no upper bound in the API, 3 plugins, convention 19,999,999 what usually gets quoted 48.5% spread 324.8 million 482.3 million 0500 M
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 boundUpper boundSpreadPlugins in the top bucket
324.8 million482.3 million48.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.

Section 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 issuedlistednot listedshare
123,97070,90953,06142.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.

Section 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%.

SHARE OF PLUGINSSHARE OF INSTALLS (RANGE)SILENTunder 1,000 90.1% 0.7 to 1.5% 61.7%1,000 to 9,999 6.8% 3.0 to 5.7% 33.7%10,000 to 99,999 2.4% 9.9 to 18.5% 17.0%100,000 to 999,999 0.6% 22.6 to 38.4% 5.3%1M and up 0.1% 41.5 to 60.9% 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.
1 year ago2 years ago3 years ago20043200520062007200820092010201120122013201420152016201720182019202020212022202320243,52420257,352202626,326
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 under 1,000 installs, density per time slice
= one plugin, length = range
as a table
Plugins with 1,000 installs and up by installation class and age of the last release
Installsunder 1 year1 to 3 yearsover 3 years
1,000 to 9,9993,191761864
10,000 to 99,9991,438183112
100,000 to 999,999378165
1M and up6610
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.
0%25%50%75%100%200420062008201020122014201620182020202220242026added more recently than the threshold, low by constructionadded more recently than the threshold, low by constructionadded more recently than the threshold, low by constructiononly plugins listed today, vanished slugs are missing (survivors)
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.

Section 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
TagPluginsWithout a release since the thresholdActive installs (band)
woocommerce woocommerce8,29432.1%11.9 million to 16.5 million
widget widget2,63283.7%3.2 million to 4.6 million
seo seo2,38333.9%28.3 million to 44.1 million
AI ai1,96915.2%3.7 million to 6.0 million
admin admin1,77675.5%3.9 million to 5.9 million
security security1,50135.8%26.8 million to 39.2 million
shortcode shortcode1,43166.7%1.5 million to 2.2 million
post post1,39590.9%1.3 million to 1.9 million
posts posts1,24783.1%1.4 million to 2.2 million
gutenberg gutenberg1,20938.4%17.7 million to 24.4 million
elementor elementor1,17732.3%20.4 million to 35.8 million
ecommerce ecommerce1,16450.2%10.3 million to 13.5 million
comments comments1,14083.1%6.2 million to 7.7 million
email email1,09058.3%8.0 million to 11.2 million
analytics analytics1,02041.0%10.8 million to 14.4 million
block block98045.6%3.7 million to 5.8 million
login login93961.0%5.9 million to 9.8 million
images images93670.2%2.3 million to 3.1 million
performance performance92927.7%21.5 million to 30.6 million
image image90177.6%2.0 million to 3.1 million
payment gateway payment-gateway85440.2%0.4 million to 0.5 million
chatbot chatbot78723.4%1.4 million to 2.6 million
content content78352.1%1.2 million to 2.3 million
payment payment76749.0%1.6 million to 2.0 million
gallery gallery76562.0%3.3 million to 4.6 million
media media72452.8%2.1 million to 3.5 million
contact form contact-form67745.9%24.1 million to 37.2 million
google google66784.6%8.3 million to 10.3 million
contact form 7 contact-form-765340.3%2.3 million to 3.2 million
slider slider65366.8%2.3 million to 2.8 million
checkout checkout64027.3%0.2 million to 0.3 million
shipping shipping62736.5%0.5 million to 0.7 million
spam spam62067.9%7.1 million to 9.0 million
chat chat61044.9%1.4 million to 1.7 million
automation automation60522.1%0.4 million to 0.5 million
video video60265.0%0.4 million to 0.7 million
sidebar sidebar60289.0%0.6 million to 1.1 million
search search59361.4%1.2 million to 1.9 million
twitter twitter59294.3%0.4 million to 0.7 million
editor editor58764.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
AuthorPluginsShare of all active installs (band)Without a release for over 365 days
Syed Balkhi984.6 to 9.3%50
Automattic783.8 to 7.0%35
Yoast72.8 to 7.2%–
Elementor142.6 to 7.1%4
Rock Lobster Inc.62.4 to 6.4%–
WordPress.org212.3 to 4.1%3
Brainstorm Force341.5 to 3.3%0
LiteSpeed Technologies21.5 to 2.5%–
David Anderson / Team Updraft161.3 to 2.9%0
Google31.1 to 1.9%–
ServMask11.0 to 1.8%–
Mark Maunder11.0 to 1.8%–
WooCommerce290.9 to 1.6%10
Softaculous120.9 to 1.9%0
Rank Math SEO20.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
AuthorPluginsWithout a release for over 365 days
bPlugins1050
shawfactor10099
Syed Balkhi9850
WPClever880
Automattic7835
add-ons.org690
Scott Reilly6559
Jose Mortellaro560
VillaTheme550
Katsushi Kawamori540
Saad Iqbal528
WPDeveloper4714
Fahad Mahmood4525
miniOrange443
gopiplus4443

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.

Section 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.

Figure 7
Still image of the bubble map: plugins with 100,000+ installs on a dark background, size by installation band, colour by category

To the interactive map: all 466 plugins with 100,000+ installs (switchable to 10,000+), filterable by tag, with values and a link per plugin.

The 67 plugins with a million or more installs as a table
The 67 plugins with a million or more installs as a table
PluginActive installsDays since releaseTested up toRating
Contact Form 710,000,000 to 19,999,999117.14.0 (2,178)
Elementor Website Builder – more than just a page builder10,000,000 to 19,999,99917.14.5 (7,297)
Yoast SEO – Advanced SEO with real-time guidance and built-in AI10,000,000 to 19,999,999107.14.8 (27,819)
Classic Editor8,000,000 to 8,999,999927.04.9 (1,246)
LiteSpeed Cache7,000,000 to 7,999,999237.04.8 (2,764)
WooCommerce7,000,000 to 7,999,999187.04.5 (4,820)
Akismet Anti-spam: Spam Protection5,000,000 to 5,999,99997.14.7 (1,186)
All-in-One WP Migration and Backup5,000,000 to 5,999,99987.14.5 (7,664)
Site Kit by Google – Analytics, Search Console, AdSense, Speed5,000,000 to 5,999,99947.14.2 (1,009)
Wordfence Security – Firewall, Malware Scan, and Login Security5,000,000 to 5,999,999187.14.7 (4,983)
WPForms – AI Form Builder for WordPress – Contact Forms, Payment Forms, Survey Form, Quiz & More5,000,000 to 5,999,99917.04.8 (14,369)
Rank Math SEO – AI SEO Tools to Dominate SEO Rankings4,000,000 to 4,999,99917.14.8 (7,496)
WP Mail SMTP by WPForms – The Most Popular SMTP and Email Log Plugin4,000,000 to 4,999,999647.04.8 (5,185)
Duplicate Page3,000,000 to 3,999,9991126.94.8 (465)
Hostinger Tools3,000,000 to 3,999,99937.13.5 (40)
Jetpack – WP Security, Backup, Speed, & Growth3,000,000 to 3,999,99987.03.7 (2,406)
Really Simple Security – Simple and Performant Security (formerly Really Simple SSL)3,000,000 to 3,999,99947.14.9 (8,862)
UpdraftPlus: WP Backup & Migration Plugin3,000,000 to 3,999,99977.14.8 (8,631)
WPCode – Insert Headers and Footers + Custom Code Snippets – WordPress Code Manager3,000,000 to 3,999,99917.14.9 (1,872)
Yoast Duplicate Post3,000,000 to 3,999,999107.14.7 (538)
Advanced Custom Fields (ACF®)2,000,000 to 2,999,99917.14.5 (1,438)
All in One SEO – AI SEO Plugin to Boost SEO Rankings & Traffic (Schema, Local SEO, Sitemap & SEO Insights)2,000,000 to 2,999,99907.14.7 (5,201)
Classic Widgets2,000,000 to 2,999,9992636.94.9 (272)
MonsterInsights – Google Analytics Dashboard for WordPress (Website Stats Made Easy)2,000,000 to 2,999,99997.14.5 (3,148)
Redirection2,000,000 to 2,999,999487.04.4 (703)
Ultimate Addons for Elementor – Widgets, Templates, WooCommerce & Header Footer Builder2,000,000 to 2,999,99927.14.9 (2,525)
WordPress Importer2,000,000 to 2,999,99916.83.1 (327)
WPS Hide Login2,000,000 to 2,999,999157.14.8 (2,111)
Advanced Editor Tools1,000,000 to 1,999,99927.14.5 (354)
AI Agent by SiteGround1,000,000 to 1,999,99987.11.6 (93)
All-In-One Security (AIOS) – Security and Firewall1,000,000 to 1,999,999157.14.7 (1,715)
Better Search Replace1,000,000 to 1,999,99937.14.3 (544)
Code Snippets1,000,000 to 1,999,99907.04.7 (509)
Complianz GDPR/CCPA Cookie Consent Banner1,000,000 to 1,999,999107.04.7 (1,655)
CookieYes – Cookie Banner for Cookie Consent (Easy to setup GDPR/CCPA Compliant Cookie Notice)1,000,000 to 1,999,99987.14.8 (3,228)
Custom Post Type UI1,000,000 to 1,999,999457.04.6 (276)
Disable Comments – Remove Comments & Stop Spam [Multi-Site Support]1,000,000 to 1,999,999297.04.7 (280)
Duplicator – Backups & Migration Plugin – Cloud Backups, Scheduled Backups, & More1,000,000 to 1,999,99917.14.9 (4,929)
ElementsKit Elementor Addons – Advanced Widgets & Templates Addons for Elementor1,000,000 to 1,999,99947.14.9 (2,036)
Essential Addons for Elementor – Popular Elementor Templates & Widgets1,000,000 to 1,999,99917.14.9 (4,111)
EWWW Image Optimizer1,000,000 to 1,999,99987.14.8 (1,838)
File Manager1,000,000 to 1,999,9991296.94.6 (1,488)
Hostinger Reach – AI-Powered Email Marketing for WordPress1,000,000 to 1,999,99987.15.0 (6)
Image Optimization – Compress Images and Convert to WebP or AVIF1,000,000 to 1,999,999527.01.7 (77)
Imagify Image Optimization: Optimize Images | Compress & Convert to WebP/AVIF1,000,000 to 1,999,99997.14.3 (1,653)
Limit Login Attempts Security – Login Security, 2FA, Firewall, Brute Force Prevention1,000,000 to 1,999,999167.04.8 (1,477)
Loco Translate1,000,000 to 1,999,999277.04.8 (452)
Loginizer1,000,000 to 1,999,99997.14.8 (1,030)
Maintenance1,000,000 to 1,999,999127.14.4 (860)
ManageWP Worker1,000,000 to 1,999,99977.14.6 (678)
MC4WP: Mailchimp for WordPress1,000,000 to 1,999,99987.14.8 (1,497)
One Click Demo Import1,000,000 to 1,999,9991286.94.3 (79)
Popup Builder & Popup Maker for WordPress – OptinMonster Email Marketing and Lead Generation1,000,000 to 1,999,999147.04.3 (815)
Regenerate Thumbnails1,000,000 to 1,999,9993736.84.6 (395)
Safe SVG1,000,000 to 1,999,99987.14.9 (79)
Security Optimizer – The All-In-One Protection Plugin1,000,000 to 1,999,99907.14.5 (157)
Smash Balloon Social Photo Feed – Easy Social Feeds Plugin1,000,000 to 1,999,99937.14.9 (4,350)
Smush – Image Optimization, Compression, Lazy Load, WebP & CDN1,000,000 to 1,999,99947.14.8 (6,051)
Spectra Legacy – Gutenberg Blocks1,000,000 to 1,999,99927.14.7 (1,870)
Speed Optimizer – The All-In-One Performance-Boosting Plugin1,000,000 to 1,999,99937.14.2 (639)
Starter Templates – AI-Powered Templates for Elementor & Gutenberg1,000,000 to 1,999,99987.14.9 (4,745)
SVG Support1,000,000 to 1,999,999337.04.8 (355)
WP Fastest Cache – WordPress Cache Plugin1,000,000 to 1,999,99997.14.9 (4,224)
WP Multibyte Patch1,000,000 to 1,999,999127.15.0 (25)
WP Super Cache1,000,000 to 1,999,99927.14.3 (1,345)
WP-Optimize – Cache, Compress images, Minify & Clean database to boost page speed & performance1,000,000 to 1,999,999157.14.8 (2,606)
XML Sitemap Generator for Google1,000,000 to 1,999,999897.04.8 (2,233)
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.

Section 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.

The lookup runs in your browser; nothing reaches us. Check the network tab if you like.

Section 8: Method

Source
api.wordpress.org/plugins/info/1.2, action=query_plugins, browse=updated
Retrieval
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.

Section 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.

Section 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.

Section 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.

Section 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.

Section 13: Data and citation

Published data files with format, size, checksum and licence
FileFormatSizeSHA-256Licence
census-01-2026.json
aggregates and scatter cloud
JSON108 KB57f06ac50b531486bd67ab9c52468f06d31ba84b6223e3e52101dd650b5e923fCC BY 4.0
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
TSV2.4 MB63f30cdaa41f292120746cf1d3f6e9bf34b082d0a7d75a12c75954fffa58fe79CC BY 4.0
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
JSON717 KBf5ca619dab4a3afffc2f8c0645a8088a7fc38e80afcdcd4388d46ae7e20dff11CC BY 4.0
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
TXT1,056 KB42580dde0016c135a9ab3e22ffc8ccff52954935cdc59a949768a006f4bdf316CC BY 4.0
curl -O https://hafenstudios.com/census/01-2026/census-01-2026.json
curl -O https://hafenstudios.com/census/01-2026/census-slugs.tsv
Reproducible scripts with format, size, checksum and licence
FileFormatSizeSHA-256Licence
seekarte-bestand.mjs.txtJS4 KB641c6b8c22df529f81610fa1c7d984b9ee65e05c4c6254ddc9dae07960e43fa4CC BY 4.0
seekarte-auswerten.mjs.txtJS7 KB51cae8c8e690208e58b8502d173f697b2eb509f6ec9fb50f6461fe3ec779a235CC BY 4.0
seekarte-seitendaten.mjs.txtJS25 KBf83b8ba8833320921e05407f7b01378ffb2c2b291903307e9988c89c6a1d562fCC BY 4.0

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
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
VersionDateChange
1.02026-08-28First publication
1.12026-09-05Range 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.22026-09-14Plugin 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.

Reproduction
$ curl -s 'https://api.wordpress.org/plugins/info/1.2/?action=query_plugins&request[browse]=updated&request[per_page]=250' | grep -o '"results":[0-9]*'
→ "results":70826
$ curl -s 'https://api.wordpress.org/plugins/info/1.2/?action=query_plugins&request[browse]=popular&request[per_page]=250' | grep -o '"results":[0-9]*'
→ "results":66709

A.2 The reported page count is wrong

Expected info.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.

Reproduction
$ curl -s 'https://api.wordpress.org/plugins/info/1.2/?action=query_plugins&request[search]=gallery&request[page]=1' | grep -o '"pages":[0-9]*'
→ "pages":11
$ curl -s 'https://api.wordpress.org/plugins/info/1.2/?action=query_plugins&request[search]=gallery&request[page]=11' | grep -o '"pages":[0-9]*'
→ "pages":27

A.3 The page number is silently clamped at 999

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.

Reproduction
$ curl -s 'https://api.wordpress.org/plugins/info/1.2/?action=query_plugins&request[browse]=updated&request[page]=1000' | grep -o '"page":[0-9]*'
→ "page":999

A.4 “Give me everything” returns the least

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.

Reproduction
$ curl -s 'https://api.wordpress.org/stats/plugin/1.0/downloads.php?slug=akismet&limit=730' | tr ',' '\n' | wc -l
→ 729
$ curl -s 'https://api.wordpress.org/stats/plugin/1.0/downloads.php?slug=akismet&limit=731' | tr ',' '\n' | wc -l
→ 179

A.5 Version fields are sometimes a boolean

Expected requires_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

Expected active_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.

Reproduction
$ curl -sO https://hafenstudios.com/census/01-2026/census-slugs.tsv && cut -f2 census-slugs.tsv | tail -n +2 | sort -n | uniq | wc -l
→ 54

A.7 Tags are slugs, display names are free text

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
Contents