Joined March 2011
125 Photos and videos
Pinned Tweet
✨ We built WP Composer β€” an independent, open source Composer repository for WordPress plugins and themes, with 17x faster cold resolves than WPackagist wp-composer.com/
7
52
203
50,779
roots.io retweeted
Composer 2.10 is out. Native malware filtering via @AikidoSecurity, enabled by default on @Packagist. Plus a unified config.policy framework, deprecated source fallback, and wildcards in --with. #php #phpc #composerphp
9
85
334
25,161
WordPress 7.0 RC4 just dropped: πšŒπš˜πš–πš™πš˜πšœπšŽπš› πš›πšŽπššπšžπš’πš›πšŽ πš›πš˜πš˜πšπšœ/πš πš˜πš›πšπš™πš›πšŽπšœπšœ-πšπšžπš•πš•:𝟽.𝟢-πšπ™²πŸΊ wordpress.org/news/2026/05/w…

For folks using the πš›πš˜πš˜πšπšœ/πš πš˜πš›πšπš™πš›πšŽπšœπšœ package, you can swap to πš›πš˜πš˜πšπšœ/πš πš˜πš›πšπš™πš›πšŽπšœπšœ-πšπšžπš•πš• to test the latest 7.0 RC:
1
4
1,051
roots.io retweeted
🚨 Security advisory: Composer 2.9.8 and 2.2.28 are out and fix a vulnerability leaking GitHub Actions new format GITHUB_TOKENs into job logs via error messages. Update now (composer self-update) or disable affected Actions workflows. #composerphp #phpc #php
5
94
213
91,943
roots.io retweeted
Spin up a @rootswp Bedrock site in your browser 🌐 Powered by php-wasm, ghostty-web, Astro on Cloudflare Workers (Extremely alpha phase & still in a private repo. Got a decent roadmap but time is tight atm - it'll eventually support Acorn and Sage) playground.roots.io
2
3
25
1,326
An early warning system for WordPress plugin security issues: WP Packages now tracks vendor mass closures publicly RSS feed and APIs also available for mass closures πŸ”” wp-packages.org/closures
2
4
25
1,402
For folks using the πš›πš˜πš˜πšπšœ/πš πš˜πš›πšπš™πš›πšŽπšœπšœ package, you can swap to πš›πš˜πš˜πšπšœ/πš πš˜πš›πšπš™πš›πšŽπšœπšœ-πšπšžπš•πš• to test the latest 7.0 RC:
WordPress 7.0 Release Candidate 3 is available for testing. The final release is scheduled for May 20, 2026. Test it now and report any issues before launch. wp.me/pZhYe-5lg
1
16
2,380
roots.io retweeted
PSA for Acorn users: skip transients, reach for Laravel Cache β€” roots.io/acorn/docs/laravel-… Just caught Claude Code reaching for a transient & updated Radicle's PHP style guide to be more explicit about this. Official πš‚π™Ίπ™Έπ™»π™»πš‚.πš–πš files for our major projects coming soon!
1
1
12
1,190
Automatic self-signed trusted certs for Lima VMs have landed in the latest version of Trellis CLI ✨ πšπš›πšŽπš•πš•πš’πšœ πšŸπš– πšπš›πšžπšœπš Exports the cert and key out of the VM, trusts the cert in the macOS keychain and Firefox profiles πš‹πš›πšŽπš  πšžπš™πšπš›πšŠπšπšŽ πšπš›πšŽπš•πš•πš’πšœ-πšŒπš•πš’
1
5
451
πŸ™ˆ @WooCommerce assumes your wp-content directory is "wp-content" and uses site_url() instead of home_url() in some areas PR submitted for one the bugs: github.com/woocommerce/wooco… Reported the other issues: github.com/woocommerce/wooco…
3 ways WordPress plugins break non-standard installs: - Hardcoded wp-content paths - Direct wp-load.php includes - Assuming WP lives at the root roots.io/wordpress-plugins-t…
2
23
3,319
roots.io retweeted
Using ACF made sense in 2019 but it doesn't mesh with modern WordPress development. I just inherited a site that heavily uses ACF and it's a complete mess. - Use πš πš˜πš›πšπš™πš›πšŽπšœπšœβ /β πš‹πšžπš’πš•πš with πš πš˜πš›πšπš™πš›πšŽπšœπšœβ /β πšŒπš˜πš–πš™πš˜πš—πšŽπš—πšπšœ for modern WordPress settings (πš‹πšžπš’πš•πš is the successor to πšœπšŒπš›πš’πš™πšπšœ, been using it all week and it's great β€” no more webpack) - Native blocks are more powerful with a better, modern UX. You can use dynamic server rendered blocks where it makes sense, and WordPress 7.0's PHP block registration can replace most ACF blocks - Use the Block Locking API so clients can't break the layouts you build - Use extended-cpts for CPT/taxonomy management ACF repeaters and flexible layouts aren't the way. InnerBlocks nested native blocks do this with a better UX. Build some boilerplates using πš πš˜πš›πšπš™πš›πšŽπšœπšœβ /β πšŒπš˜πš–πš™πš˜πš—πšŽπš—πšπšœ for settings pages (ACF settings pages look out of place compared to this), native blocks, etc. and let agents use them to produce better interfaces quickly I've been doing this for years on hybrid themes and haven't looked back (not using FSE, it's not the right setup for the designs I work on) "But ACF is faster" β€” not anymore. Agents close the gap, and reviewing their diffs helps you see what modern WP actually looks like.
22
7
114
9,595
New utility package from @TomBroucke that provides a fluent interface for adding WordPress action and filter hooks 😍 github.com/tombroucke/wp-flu…
2
1
22
1,069
roots.io retweeted
What's actually in the WooCommerce telemetry payload and four ways to turn it off β€” your store's revenue numbers are in there, sent weekly to a third party: roots.io/disable-woocommerce…
Fun fact: WooCommerce collects your sensitive information without asking for consent. Luckily, it merely consists of about 1000 data points. Let's dive into it... 🧡 Disclosure: I'm a WooCommerce Marketplace partner.
2
9
30
8,470
🚨 WooCommerce Subscriptions has been silently breaking renewals since 2017. This is a must-read if you use the plugin. @SybreWaaijer found $43k in lost revenue @adampreiser estimates $100k lost on one of his smallest stores Check the thread for queries to run on your own site
100,000 stores run this WooCommerce plugin. I doubt any of them know their payments are broken. Any store with $1M ARR could be missing $700k in revenue. If you run WooCommerce Subscriptions, check your store. Yesterday, I reported a bug to WooCommerce that silently broke subscription payments after a product switch. Then I got worried: if they missed something this obvious, what else did they get wrong? So I started auditing. Within hours, I had found three more bugs. There were 121 affected subscriptions, and $43,274 in lost revenue. Here's what I found. WooCommerce Subscriptions has an internal flag that controls whether a subscription charges the customer automatically or waits for them to pay manually. When a customer checks out with (for example) Stripe or PayPal, this flag should be set to "automatic." If it isn't, subscription renewals silently stop working: no charge is attempted, no failure email is sent, and the subscription goes on hold until the customer notices and pays manually, or doesn't and churns. Bug 1 (stale cache): After saving subscription dates, the order cache was never cleared. Subsequent saves could serve a stale object with the flag still set to its default: manual. Fixed in subscriptions-core 6.9.0. Bug 2 (broken HPOS backfill): Missing getter/setter methods prevented subscription metadata from being properly synced to postmeta in HPOS when data sync is enabled. Fixed in subscriptions-core 6.5.0. Bug 3 (unnecessary re-fetch): wcs_create_subscription() returned a freshly fetched instance from cache/DB instead of the already-configured object. Any unsaved state, including the corrected flag, was silently discarded. Fixed in subscriptions-core 7.1.0. These three combined accounted for roughly 7% of all subscriptions created at checkout that were silently born broken, despite the customer paying successfully. For 7 years (we have data from 2017–2024). Automatic payments NEVER fired for these subscriptions. Users never got renewal emails, either. The only way to know they were broken was if the customer noticed they lost access and contacted support, or if the merchant audited their database manually. Bug 4 (switch): When a customer upgrades or downgrades their subscription, the switcher flags the subscription as manual renewal; it only corrects the flag if the payment gateway changes. A customer switching plans while keeping the same gateway (e.g. Stripe to Stripe) cements the flag stuck on manual. I discovered this two days ago, when I found a happy customer in the store overview that I had just helped upgrade, with multiple valid cards on file, put "On Hold" because of a missed payment. For years, I've offered to help WooCommerce improve its code quality and performance. I dry-run code: I find bugs by reading. All four of these bugs are clearly visible in the source without needing to use the software. They could have been caught early. They weren't. The incompetence is immeasurable (well, actually, with the diagnostic queries in my next post, it might be measurable). Our store is small. WooCommerce Subscriptions powers hundreds of thousands of stores. If 7% of subscriptions were silently broken across even a fraction of them, we're looking at potentially millions of dollars in spoiled revenue industry-wide that could have been prevented. Perhaps even billions. None of this was disclosed well or at all. No admin notice. No email. No advisory. The fixes shipped under vague changelog lines like "Make sure we always clear the subscription object from cache after updating dates" and "Ensure proper backfilling of subscription metadata." One fix was labeled "Dev" instead of "Fix." Two don't appear in the GitHub release notes at all. No remediation tool or diagnostic query was provided. Store owners have NO way to know they're affected unless they manually audit their database. The woocommerce-subscriptions-core repo was archived in May 2025 after the code was absorbed into WooCommerce core β€” making the fix history harder to trace. If you run WooCommerce Subscriptions and used HPOS before mid-2024, check your store. Queries are linked in the tweet below.
1
5
34
6,381
The new @Cloudflare site is a great baseline β€” it checks whether you return Markdown ✨ acceptmarkdown.com checks whether you return it correctly (Vary, q-values, 406, Link rel=alternate), tracks which AI agents actually adopt the standard, and includes integration guides
2
13
3,843
Some WordPress SEO plugins claim to serve Markdown to AI agents β€” but they ignore the Accept header that agents are already sending. Here's the curl to prove it. WP​.org got it right, @aioseopack didn't. roots.io/some-seo-plugins-cl…
4
8
46
4,168
Push updates to staging, run your e2e test suite, then merge to production. Never ship blind to production or auto-update plugins. If your WordPress site handles anything business-critical, adopt a professional workflow.
I've seen WordPress contact forms break after updates while clients burn thousands on Google Ads sending traffic to a dead form. Test your forms monthly. Set a calendar reminder. Submit a test lead yourself. @wpremote is rolling out an automated form tester! Is anyone else working on this as well?
2
24
2,559
MilliCache is a Redis-backed page caching for WordPress with surgical flag-based invalidation roots.io/millicache-redis-ba…
1
8
58
3,628
✨ @​roots/vite-plugin v2.1.0 adds support for theme.json partials You can now split your block styles into `.theme.js` files and co-locate them next to your block templates instead of maintaining one giant theme.json roots.io/roots-vite-plugin-n…
3
12
736