WordPress Planet

October 28, 2026

WordPress.org blog: WordPress 7.1.4

This security release features fixes for multiple issues.

Because this is a security release, it is recommended that you update your sites immediately.

You can download WordPress 7.1.4 from WordPress.org, or visit your WordPress Dashboard, click “Updates”, and then click “Update Now”. If you have sites that support automatic background updates, the update process will begin automatically.
WordPress 7.1.4 is a short-cycle release. The next major release will be version 7.2, currently planned for December 8th.

For more information, please visit the WordPress 7.1.4 HelpHub site.

Security updates included in this release

The security team would like to thank the following people and organizations for responsibly reporting vulnerabilities, and allowing them to be fixed in this release:

  • A weakness in the WordPress upgrade process which can lead to remote code execution during the upgrade window, reported by Umut Bayram.
  • A stored XSS with specially crafted block markup, reported by Rafie Muhammad (Awesome Motive, Inc.).
  • Privacy Data Removal Requests can be created in a way that leads to stored XSS, reported by Anthropic.
  • Multiple stored XSS issues in the Interactivity API independently discovered by AnC and DatNLQ from VietSunshine Cyber Security, rekter0 and Anas cherni, Marcel Karlsson (whoismarcel), and Weston Ruter, Jon Surrell, Alex Concha, and Luis Herranz of the WordPress Security Team.
  • A stored denial of service issue in the Interactivity API, reported by Jon Surrell of the WordPress Security Team.
  • A stored XSS in Customizer selective refresh, reported by Rafie Muhammad (Awesome Motive, Inc.).
  • A Stored XSS in the Categories block reported by Ben Bidner of the WordPress Security Team.
  • Specially crafted User Logins can lead to a stored XSS reported by Anthropic.
  • Unpublished customizer changesets can be discovered by unauthenticated users, reported by Antonio Lorensius Silaban.
  • A Stored XSS in Playlist and image blocks, reported by Ben Bidner of the WordPress Security Team.
  • Stored XSS in core/comments-pagination-next and core/comments-pagination-previous blocks, reported by Alex Concha of the WordPress Security Team.
  • Notes can be read by privileged users that lack access to edit the post the note is attached to, reported by Ramon of the WordPress Security Team.
  • An update to the bundled root certificates due to the eMudhra revocation.

Thank you to these WordPress contributors

This release was led by Aaron Jorbin and Nik Tsekouras. WordPress 7.1.4 would not have been possible without the contributions of the following people:

Aaron Jorbin, Adam Silverstein, Alex Concha, Andrew Duthie, Andrew Serong, David Arenas, Dennis Snell, Ella Van Durpe, George Mamadashvili, Isabel Brison, Jake Spurlock, Jb Audras, Jeremy Felt, John Blackbourn, Jon Surrell, Jonathan Desrosiers, Kira Song,Lance Willett, luisherranz, Marco Ciampini, marcs0h, Marin Atanasov, Mario Santos, Miguel Fonseca, Nik Tsekouras, Peter Wilson, ramonopoly, Rudy Faile, umut3806, Weston Ruter

Backports

As a courtesy, the security fixes were backported to all branches eligible to receive security fixes (currently through 4.7). As a reminder, only the most recent version of WordPress is actively supported. The backports are in progress and will ship as they become ready.

WordPress 7.2 Beta 3 has also been released, containing all applicable fixes.

by Aaron Jorbin at October 28, 2026 05:13 PM

WPTavern: #239 – Remkus De Vries on How Scanfully 2.0 Is Making WordPress Security and Performance Monitoring Simpler

Transcript

[00:00:19] Nathan Wrigley: Welcome to the Jukebox podcast from WP Tavern. My name is Nathan Wrigley.

Jukebox is a podcast which is dedicated to all things WordPress. The people, the events, the plugins, the blocks, the themes, and in this case how Scanfully 2.0 is making WordPress security and performance monitoring simpler.

If you’d like to subscribe to the podcast, you can do that by searching for WP Tavern in your podcast player of choice, or by going to wptavern.com/feed/podcast, and you can copy that URL into most podcast players.

If you have a topic that you’d like us to feature on the podcast, I’m keen to hear from you and hopefully get you, or your idea, featured on the show. Head to wptavern.com/contact/jukebox, and use the form there.

So on the podcast today we have Remkus de Vries. Remkus has been active in the WordPress space for over 20 years, starting out with his own agency focused on high performance, scalable WordPress websites. Over time he has diversified into education and community building with projects like WithinWP, and a new initiative, The Guild, which is a paid community aimed at helping people build smarter, more performance, sites through a first principles approach.

Our conversation centres on Scanfully, a site health and monitoring SaaS Remkus co-founded, which recently hit version 2.0. Scanfully’s focus is giving users meaningful, actionable, insights into WordPress site, health, security performance, email, deliverability, DNS, and more. Packing all this data into an easy to understand dashboard.

We talk about Remkus’ motivation for diving deep into the complexities of WordPress monitoring, and why many users struggle to keep on top of the technical side of their websites. Remkus argues that too many site owners are stuck in a reactive mode, only investigating issues once something breaks. And Scanfully aims to change that mindset by making ongoing health checks accessible and easy to parse, even for the spreadsheet averse.

Remkus walks us through the products evolution, including the 2.0 update that aimed to reimagine their dashboard experience, added public APIs, and introduced tools like MCP AI integration, empowering users to query their sites health conversationally.

We also get into recent and upcoming features such as WooCommerce checkout monitoring, activity logs, and future add-ons designed to cover forms and other business critical flows.

If you manage multiple WordPress sites, run an agency or are simply interested in building more robust futureproof WordPress projects, this episode is for you.

If you’re interested in finding out more, you can find all of the links in the show notes by heading to wptavern.com/podcast, where you can find all the other episodes as well.

And so without further delay, I bring you Remkus de Vries.

I’m joined on the podcast by Remkus de Vries. Hello, Remkus.

[00:03:29] Remkus: Hello, Nathan.

[00:03:30] Nathan Wrigley: It’s been a while. Remkus and I have been on many calls in the last few days and weeks. We’re going to have today about a project that Remkus has been actively involved in for a number of years. It’s called Scanfully. We’ve reached version, I’m going to say 2.0, let’s go with that.

[00:03:46] Remkus: Yeah. Yeah. Yeah.

[00:03:47] Nathan Wrigley: But over the last few days it’s actually advanced a little beyond that. So that’s going to be the main focus.

I would probably urge listeners to this podcast. If you want to understand what the product is and how it works, maybe press pause. Go to Scanfully.com, so scanfully.com, and then come back and you’ll understand fully what the product is.

Before we get stuck into updates and product and what it all does. Very briefly, Remkus, do you want to just tell us a little bit about you, your backstory, WordPress space, that kind of thing?

[00:04:17] Remkus: Yeah, sure. Been in the WordPress space, active, 20 plus years now. Started with an agency, very quickly moved into complex performance scaling, more complicated type of sites.

Ran a niche agency like that for a very long time. In the last couple of years I’ve been doing some diversification. I have withinwp, which is a WordPress, how do I explain this? Because this is also in transit, but it’s a podcast, it’s a newsletter. One that’s being cited by This Week in WordPress a lot, I should say.

And part of it is the educational side, which is the part that I’m building out currently. And what I mean with educational side, that I’m preparing a community, a paid community, that has the sole goal to help you better understand WordPress and build better sites, smarter sites, more performance sites, that sort of stuff. Basic first principles type approach.

And that is roughly how I look at WordPress. And Scanfully is something I started with my co-founder Barry, let’s call it three years ago. And from a similar angle, we want to solve, essentially site health and performance monitoring tool of your WordPress site in the broadest sense of the word. Meaning the word Scanfully is literal. We scan fully and what we’re not scanning fully currently, we will be.

[00:05:32] Nathan Wrigley: Okay. Thank you. Can I ask a question? May touch on your personality, I guess. All those years ago, 20 plus years when you came into WordPress. How can you explain why you delved into this bit? Because there were so many ways that you could have gone, but you’ve really made scanning, and site health, and monitoring and performance, that is your thing. Is there a bit of that which, speaks to you on some level? Do you find yourself drawn in that direction, no matter where you look on the internet?

[00:05:58] Remkus: Yeah.

[00:05:59] Nathan Wrigley: Do you enjoy data analytics, spreadsheets, numbers, all of that?

[00:06:03] Remkus: I wouldn’t call it enjoy, but, I’ve always been good at it. I always found it fun to some degree. But in general, I get bored quite easily. If I’m to stick with a topic, it needs to be the complicated version of a topic. To me, in web development, that quickly revolves around all the things that make a WordPress site more tricky to scale, or more tricky to make fast, or more tricky to fill in the blank. There’s tonnes of different subtopics to that.

[00:06:25] Nathan Wrigley: Yeah.

[00:06:26] Remkus: And that then gives you a different view of what is important. And Scanfully is one of the answers to that. we. See that there’s, I think the whole industry is levelling up in a way. I don’t think it’s happening fast enough, but part of it forces you to start thinking about things in a more professional way, like more preemptively understanding what is something that’s going on. What is a trend on your site? What do you see happening? And I think we’re still too much on the reactive side of things. So if my side is down, or if somebody complains it’s slow, then I’ll have a look. And we want to change that awareness and make it one of your first thoughts instead of an afterthought.

[00:07:02] Nathan Wrigley: It’s a curious thing then that the complexity which you enjoy, in a sense, you require other people to not enjoy it as much as you, in order for you to have a product. And I am one of those people. If you present me with a, I don’t know, a Google Analytics dashboard, or a spreadsheet which goes beyond about four rows, then I quickly lose interest. I genuinely can’t maintain my effort over there. I glaze over and don’t enjoy it.

And so part of the problem with dealing with WordPress is getting over that hump. Maintaining the interest in an area that I feel ill-equipped, not just ill-equipped, completely out of my depth.

And so having tooling, the likes of which you’ve built with Scanfully enables people like me to actually stand back and go, okay, that complicated thing is made more easy. I can actually start to understand it in real terms, with data and charts that are less overwhelming. And I guess that’s the point.

[00:07:53] Remkus: That is the point, and that is essentially also the driver, why we went from dashboard version 1.x to now, 2.x. Because it’s very easy when you’re on the more technical side of things and you kind of understand what the signal is and what it’s implying to forget what the person who doesn’t understand the extra layers and the assumptions that go underneath. Like what does that actually mean?

The 2.0 rebrand. Because it’s not a rebrand in terms of what we do, but it’s a rebrand and how we interpret every single version of the monitoring metrics that we collect, how we present it, and what we allow you to do with it. Everything has been rethought. It’s been a, I think in total, we’ve had about four or five months of just working with a redesign. And we call it a redesign because it is, because it visually looks different.

We’ve got all this feedback of how people are using it. And a common theme was, we’re missing this, we’re missing that. Could you make that easier? So we were like, okay, that’s a lot of stuff pointing in the same direction. Why don’t we start rethinking how we’re going about helping you figure this out?

And I’ll give you a very concrete example. So if a site goes down, because we have an uptime monitoring, you get a notification. But if it’s the server that goes down and you have 25 sites on that server, it doesn’t make a lot of sense for you to receive 25 emails.

[00:09:05] Nathan Wrigley: No.

[00:09:06] Remkus: So gathering information per monitoring alert is something we’re doing now. And, the same goes for if there’s, I don’t know, if the latest plugin you’re using on all of your sites has something that needs to be fixed, or something that is already fixed. So let’s assume there’s a security release for it. You don’t need to know that 25 emails. You need to know there’s one email, and these are the sites that are affected. But you also want to know, is this a high risk? Is this a medium risk? Is this a low risk?

Because there’s plenty of security stuff that is so close to impossible to replicate that, do I need to act right now? Maybe, but we give you the insight that you can act upon it. Like it’s not, we’re not forcing you to pay all the attention all the time.

And it’s things like that. So we had the data already, but the question then becomes, how do we make this digestible? How does this become a signal, versus the noise that it’s also is? So that’s a lot of rethinking. That’s a lot of rethinking in what is valuable to share, and how is it valuable to share and what are the things you would like to do with certain things?

So, an example, related to that is what if there is an update available for a plugin that you’re using in a few places? But there’s no fix yet. Do we need to send you every single day that there is a security update? Or there’s a security issue? Probably not. So why don’t we allow you to snooze a particular alert? It’s simple things like that. And I say simple. It’s not simple to implement, but.

[00:10:27] Nathan Wrigley: Simple on the front end.

[00:10:28] Remkus: Yeah. Simple for you as an end user. So that was a lot of thinking and figuring out how do we make this more pleasurable, for as pleasurable as the topic itself is.

[00:10:39] Nathan Wrigley: I’m going to circle back to the product in a moment, but I’m going to ask you a curious question.

[00:10:43] Remkus: Yep.

[00:10:43] Nathan Wrigley: You may balk at this question and think, okay, that’s unusual and a bit weird. Is the WordPress space for you quite an exasperating thing. And what I mean by that is, you are obviously steeped in this knowledge, about how things can go wrong, and how a poor implementation of something over here can have catastrophic effects over there. Given enough time, and the stars aligning in a certain way.

I don’t know how to describe this. Does that mean that everywhere you look, you just see catastrophe and problems. And you open up a WordPress website, you’ve got a new client or somebody’s onboarded you with the plugin. You look inside and you sort of face plant, head slap. Okay. All the stuff that I know, which is second nature to me. Why don’t they all know this? There’s no question there, but can you see what I’m trying to.

[00:11:27] Remkus: Yeah. Yeah, I can. You’re not recording the video. The people listening didn’t see me nod along the way of what you were saying, but yes. If you understand things. So there’s a principle called first principles. Which means everything we approach, we should approach from the first principles. Like what is the base layer of where to solve problems. And, this is not even just WordPress, this is life, I guess.

But there’s a big tendency for people to look at a problem and then have the idea of how they want to fix the problem, but they don’t actually look at the layer, it should be fixed. They just want to fix the outing. That’s not really a fix, right. You fix things at the bottom layer. You can identify where the problem lives.

And when that is your view on life slash work. Yeah, there’s moments where you go, how do you, not look into this? This is your work, this is your job, this is your, competency. Why do you not dive into this? But I also understand that’s not for everybody to be in that layer of how I look at things. And it’s not me wanting to force other people, my model of the world, but it is something where I go, you don’t need to do my model of the world, but there’s some stuff that you actually should be quite skilled on because it’s part of your job. Because it touches your job. It touches the clients you serve and all of that sort of stuff. Long-winded answer, but yes, I have those moments.

[00:12:39] Nathan Wrigley: Yeah, I guess it must be the same no matter which bit of WordPress you’re in. So for example, I don’t know if you’re a front end designer and you see catastrophic use of fonts and spacing and typography, and it would make the head plant moment occur. But also accessibility. And there’s these tendrils isn’t there? And we can’t become expert at all of them, but many of the things are inconveniences. Where if something goes wrong, it’s annoying, but that’s probably where it ends.

Whereas the stuff that you are dealing with, there’s a potential for catastrophe to occur. The website gets defaced or taken down, or the server gets compromised and is used in some crazy way that we can’t imagine. That makes your part I suppose a little bit more essential. But then, as as you said, we can’t all be experts, and relying on the expertise that you have and the tools that you’ve built. I suppose that’s why you occupy the space that you do.

[00:13:33] Remkus: Yeah.

[00:13:33] Nathan Wrigley: Because not everybody can spend the time becoming as knowledgeable as, as you have become.

[00:13:37] Remkus: And I, for the record, I don’t acclaim to have all the knowledge. I just happen to specialise on a few things I find highly interesting.

[00:13:44] Nathan Wrigley: Yeah.

[00:13:44] Remkus: My goal for the Within WordPress community that I want to build, which is called The Guild, is exactly to behave like a guild. We’re all there to elevate each other up. That is what a guild is supposed to do. And, back in the day, you had guilds that were that you went there, you were part of it, and all that had as a goal was to help you elevate your craft.

And we need to start thinking about what we do as a craft. And how do you do your craft? Well there’s tonnes of different ways to do the craft that’s putting bread on the table. But if you’re not actively developing yourself to become better at your craft, then what are you doing? You’re, essentially behind in the first week you start working. And you’re only playing catch up. And most people have forgotten that they’re just in the game of playing catch up. Which I think is a shame.

[00:14:26] Nathan Wrigley: You’ve alluded from various bits and pieces that you said. You’ve suggested what Scanfully does. So we have an idea that there’s charts, and graphs, and information about things that could be going wrong with your website in the background. But we haven’t really explained what the tool does at its core.

So putting the update to one side, if we just examine why you built the tool in the first place, what does it broadly do? And then we can get into what it most recently does and how it’s been adapted for the 2.x version.

[00:14:55] Remkus: So Scanfully is about giving you the information so you know what broke on your site, and what changed and what things you need to pay attention to. Anywhere from critical stuff. So vulnerabilities, downtime, to also adjacent critically, are my emails being sent from the site? Does that still work? So we do email monitoring. We do DNS checking.

We do all kinds of site health, like actual site health menu inside of WordPress. We pull in that data so you can see and you can filter for which of my sites are in PHP seven point, whatever still? You can figure that out.

If you need to do all kinds of filtering on data that is living in all of your WordPress sites. That’s a pain in the ass to have to click through every single site to figure out what’s what. And maybe your control panel on your server tells you something, but Scanfully will tell you everything.

We will tell you how large the uploads folder is. We will tell you, is your certificate about to be renewed, yes or no? Did anything go wrong when that happened? Things like that.

So anything and everything that goes into the bucket of what is site health, what is a healthy site mean? We are monitoring, or we will be monitoring. We still have a very long list of stuff we’re going to add. But yeah, the goal for Scanfully is to have you be in control of what’s going on with your site.

[00:16:19] Nathan Wrigley: Ok thank you. I have some follow up questions just to that, so the first one is. Who has been, or who potentially is your ideal customer? So I’m going to broadly bucket that as, I don’t know the person who’s got just one WordPress, or a handful of WordPress websites and they manage that themselves. Are they the kind of people that you are trying to get? And then I’m going to go into different buckets of enterprise perhaps. Agency level customers. I’m imagining there’s some perfect fit there.

[00:16:42] Remkus: Yep.

[00:16:43] Nathan Wrigley: And then also I’m wondering if hosting companies also might be a customer of yours in terms of adding this in, to a deployed website on their platform.

[00:16:53] Remkus: They are now. One of the features we added, we kind of already had it, but we added publicly now, with Scanfully 2.0 is a public API. Which means if there’s a public API, anybody can hook into whatever data we have, and display that in their dashboard or website, or wherever they would choose to do so.

So yes, we cast a broad net, But the goal is for any client that needs to be in control of what’s going on with their site. But the reality is this is from freelancers to agencies and indeed, hosting type of adjacent companies. Yeah.

[00:17:25] Nathan Wrigley: Right. So there’s a fit across all of those three things that I just mentioned?

[00:17:29] Remkus: Yeah.

[00:17:29] Nathan Wrigley: And do you have pricing that reflects that? So in other words, can you buy a single licence, and a multiple licence and a, I don’t know, an unlimited licence?

[00:17:37] Remkus: It’s a flat structure. It’s 299 a month per site. Simple.

[00:17:41] Nathan Wrigley: And, in terms of the level of depth of technical understanding that you have to have in order to get the tool working, is this more a case of upload the plugin, activate the plugin, and then there are some sensible defaults? Or do we have to do a tonne of background research to understand what’s going on? And maybe that’ll lead us into the 2.0 stuff in a minute.

[00:17:59] Remkus: There’s nothing more than installing and activating.

[00:18:03] Nathan Wrigley: Okay.

[00:18:03] Remkus: And even the activating we have made as frictionless as possible. The only thing you need to do is once the plugin is activated, you click that button that says connect to your Scanfully dashboard, and assuming you’re already logged in there, clicking that button is all you need to do. There’s no copying pasting of keys and other weird stuff.

[00:18:18] Nathan Wrigley: So I presume from what you said earlier, the 2.x, the article that I’m going to link to in the show notes on the WP Tavern website is about 2.0, but I understand time has passed and probably by the time this episode will be on two point something.

[00:18:32] Remkus: 2.3.

[00:18:33] Nathan Wrigley: It would appear that you obviously took a stab at what you thought people would like to see in their dashboards. That’s one of the things that’s been updated. How did you adapt that over time then? Because, like we said earlier, getting complicated data to be easy to understand, that is a proper art form. I don’t think you’ll probably ever end this journey.

[00:18:52] Remkus: No. No.

[00:18:54] Nathan Wrigley: You’ll just be iterating forever.

[00:18:54] Remkus: Yeah.

[00:18:54] Nathan Wrigley: But is that one of the things that you got feedback on? Okay, it’s good, but we’re still confused. Make it simpler to understand. Just describe that side of things.

[00:19:02] Remkus: Yeah. So that’s the part where you go, how do I go from showing noise? Because there’s a tonne of data that you actually need to be in control of. But how do I make that, easy, digestible?

So one of the solutions we came up with, and that seems to have gone down really well, people like it, is essentially every view on top has the most important things. So we’ll tell you if there’s stuff that you need to be updating. We’ll tell you if email is not being delivered. We’ll tell you if the percentage of up and down times you’re having is odd, or requires more investigation. Essentially we’re helping you figure out the important things per monitor, per view. And then from there, you can deep dive into the data that we collect and figure out things.

[00:19:46] Nathan Wrigley: You’re moving away from graphs and data first, into more of a human readable summation in a couple of sentences?

[00:19:53] Remkus: Yep.

[00:19:53] Nathan Wrigley: Okay. So you can finally parse what’s going on. Okay. That’s good to know. And you said that’s been well received?

[00:19:59] Remkus: Yeah, people like it.

[00:20:00] Nathan Wrigley: Okay.

[00:20:00] Remkus: It’s more straightforward in terms of quickly understanding what’s going on. That was a big part, and we also wanted to make that information available more easily as well. And what I mean with that is that inside the API you can query this now.

But more conveniently, we have an MCP server available as well. So you can connect us to your favourite LLM, your favourite AI and just ask the questions. Like let’s say you have a bunch of sites for different clients in there, but one client has a specific question. You’ve labelled them accordingly inside of Scanfully. You can do that now. And then your LLM, you can ask, either ask it to label it, you say these are the domains, labelled them with this client. And then tell me do I have any vulnerabilities? Is email being sent out correctly? Are there any weird DNS changes? What does my uptime look like? And we’ll tell you.

[00:20:46] Nathan Wrigley: So the API enables you to, I don’t know, if you’re an agency owner, you could build a dashboard, for example, for your clients or something like that. So you could put charts and information in a place where your client can go and see it in a way that makes sense for them.

[00:20:58] Remkus: Correct.

[00:20:59] Nathan Wrigley: But the MCP enables you to kind of have a conversation with the security and the current state of your WordPress website. That’s so intriguing.

[00:21:07] Remkus: Yep.

[00:21:08] Nathan Wrigley: Have you discovered some interesting, quirky things in there? You know, you you ask it a particular thing and a surprising thing came back?

[00:21:13] Remkus: I got for one of the sites that I have in my account, I got some intermittent email is not being delivered. And I go, why does it turn on and off all the time? What’s going on here? So I ask it to investigate, look at any commonalities. Look at anything that stands out. And it sure enough came up with something that goes along the lines of there’s conflicting DNS records. So if there’s multiple validation records, I was using a transactional email service for that. But their validation system allows you to have old validation DNS records in there as well. And apparently their system picked up both intermittently. How do you figure that out?

[00:21:48] Nathan Wrigley: With an MCP, it turns out. Yeah. That’s really interesting.

[00:21:50] Remkus: Yeah. So it told me, double check the DNS records here, because it looks like, and then I go, okay, let me check that. And I go in, I dive deeper into the dashboard for my transactional email provider. And I go, hold on. This is, okay. I get it now. So let me delete those. I deleted them, and the problem solved.

[00:22:07] Nathan Wrigley: Does your MCP enable bi-directional things to happen? Or is it basically read only?

[00:22:12] Remkus: It is read only on the data. It’s write on, like I said, if you want to create labels and other things like that.

[00:22:18] Nathan Wrigley: Unharmful stuff is right.

[00:22:20] Remkus: Correct.

[00:22:21] Nathan Wrigley: Because you are dealing with quite a lot of powerful stuff here, and writing in the wrong direction in a silly way, which let’s be honest, MCPs enable us to be very silly very quickly.

[00:22:30] Remkus: Yeah. Yeah. Yeah.

[00:22:31] Nathan Wrigley: Okay, that’s good to know. It’s basically read only.

Okay. We’ve got the dashboard updates with more human readable data. We’ve got the API. We’ve got the MCP. Anything else in Scanfully 2.x?

[00:22:43] Remkus: If we include 2.x, the release we did yesterday is 2.3. And in that we have much smarter user activity tracking. Content changes. Not only who did the change, but what is the change, that sort of stuff.

We pull everything out of WordPress into our dashboard. So for instance, we have a full WordPress activity log and in that log, we collect all the things. Whatever happens on your WordPress site, so that’s a plugin installed, updated, all those things. So now user activity is in there as well.

And it’s also the things happening to your user. So elevated admin rights given to a user. Was that supposed to happen? An email address change to a administrator is something you would want to know. On a multi-site, if a user gets to have super admin, you’ll want to have that logged. So things like that.

So the 2.0 essentially, which is a week and a half ago, it allowed us to have a whole bunch of other refinements we had essentially lined up. We have a much better foundation to build these things on top of what we now have. So we can move forward much faster.

[00:23:42] Nathan Wrigley: We’ve already agreed pre hitting the record button that there’s a whole load of stuff which you know is going to occur, but we are not quite ready for public disclosure at the moment.

One thing that we didn’t touch on, which I suspect people will be listening to this thinking, okay, hang on a minute. How does it all work in terms of, is there a scanfully.com/whatever login? In other words, do you have a SaaS sort of admin section?

[00:24:06] Remkus: Yes.

[00:24:06] Nathan Wrigley: So the plugin kind of binds to that, because I miss that at the beginning.

[00:24:11] Remkus: Yeah, correct.

[00:24:11] Nathan Wrigley: We probably should have explained that. So the plugin binds to the SaaS. The SaaS holds the data. And in that way, for example, an agency could have an overview of all the sites that they’re managing and that kind of thing?

[00:24:23] Remkus: And everything that happens on that site that is worthy of tracking and monitoring for. So again, the activity log is a good example. A WordPress activity log should not live inside the WordPress site, period. From a performance standpoint, it makes no sense. Most databases for most hosting companies have issues when you track and sort a, let’s call it a busy website.

So what we do is we asynchronously pull all of that into our dashboard. So if your site goes down for whatever reason, we have a track record of what the last things that were happening on your site.

[00:24:53] Nathan Wrigley: Oh yeah, of course.

[00:24:55] Remkus: There’s just an easier way of being in check.

[00:24:58] Nathan Wrigley: So you’d log into the SaaS, everything’s there. So if your site does have some catastrophic failure, then at least you can begin to understand what’s going on.

[00:25:06] Remkus: Yep.

[00:25:07] Nathan Wrigley: And work backwards from there?

[00:25:08] Remkus: Yep.

[00:25:08] Nathan Wrigley: I think that’s probably all the questions that I’ve got. Is there anything that we didn’t touch on that you wanted to mention?

[00:25:14] Remkus: I think what’s fun to mention is that this whole rewrite allowed us to start building add-ons as well.

So the base monitor service as we have it currently is what Scanfully is. So that’s Scanfully monitor. But we’re, and probably by the time this podcast is being aired, I think we will have, the beta available for WooCommerce checkout monitoring.

This is essentially an add-on to the base service. And what it does, we fully check everything that goes into, from is the product available in your WooCommerce, website? Can I add it to cart? Can I then go to cart? Can I then start the checkout? Can I fill out the checkout? Can I start the processing of the actual payment. So we don’t go into the payment itself? So they’re test orders, so to say.

[00:25:59] Nathan Wrigley: But the moment right before?

[00:26:01] Remkus: Yep to the moment, right before. So we’ll tell you if we can’t reach the payments provider. We’ll tell you that, but we can’t, at this moment in time, do the step beyond that.

[00:26:09] Nathan Wrigley: So how does that work then? Does it literally do that as if it’s a human being, you know?

[00:26:13] Remkus: It does.

[00:26:14] Nathan Wrigley: Is some part of your SaaS kind of opening up a browser somewhere in effect and doing that journey. Finding a product, putting it in the cart, checking the cart, and so on.

[00:26:21] Remkus: And the fun thing is you get to define what that journey looks like. So if you have a custom WooCommerce checkout, or any of the other solutions. We account for that. And you can tell us if it’s any different from what their default is, or the WooCommerce default.

And from there you get to essentially define the journey. And then the journey is stored as the thing we’re checking. And we’re doing this from the external, obviously. So it doesn’t touch any monetary things. Nothing gets charged, nothing gets booked. And the plugin that is providing the connection to our dashboard, that plugin cleans up whatever test orders were made in that process.

[00:26:56] Nathan Wrigley: Right, okay. So it’s not 3000 carts.

[00:26:58] Remkus: Yeah, we don’t, want to do that.

[00:27:00] Nathan Wrigley: Do you enable that in other ways as well? for example, I’m thinking maybe a contact form is incredibly important to somebody’s business.

[00:27:07] Remkus: Yep, that’ll be next.

[00:27:08] Nathan Wrigley: Is it possible to, outside of WordPress, visit a contact page, fill out the form fields, and then even, I don’t know, maybe even check on the other side to see if an email landed or something like that?

[00:27:17] Remkus: A part of it we’ve already solved with the email monitoring, or I should say email deliverability monitoring.

[00:27:23] Nathan Wrigley: Of course you’re on the inside there, so you can see whether that got sent.

[00:27:27] Remkus: Yes. But once we’re fully done with releasing the WooCommerce checkout monitoring, we are going to move to forms next. Because you’re right, if you have a landing pages, or a critical contact form or whatever, you need to know that that still is working as intended.

[00:27:41] Nathan Wrigley: So that’s a roadmap item. To be able to build these custom journeys, starting with WooCommerce, but more or less anything at some point. We want to see if people are going from A to B to C as we’d hoped.

[00:27:52] Remkus: Yeah, it’ll be a separate thing in the sense that WooCommerce will do a lot more than just checking the validity of the form, because that’s essentially on the WooCommerce side of things, that’s the checkout form. You fill out the form. And that’s the most similar to a general form. But yeah, we will build a separate feature inside of Scanfully that allows you to do all the types of monitoring you could possibly imagine you would need to make sure your forms are working the way you design them.

[00:28:16] Nathan Wrigley: Random question just before we end. How exciting do you find this? When you embark on the journey of building a product like this, you know, oh we’re going to do this thing, me and my friend. We’re going to do this thing, it’s going to be brilliant. And then the reality sets in, you know, it’s difficult, you’ve got to manage customers and all that kind of stuff. Do you still wake up excited by this?

[00:28:32] Remkus: Oh yeah.

[00:28:33] Nathan Wrigley: Obviously you’re not going to say the opposite. I’m just wondering if that curiosity still remains and whether or not.

[00:28:38] Remkus: It does, because there’s just so much more we can still do. And the feedback that we’re getting is very positive. And especially with this new imagination of how this should be solved with the 2.x reboot I guess is probably the best word. It just excites me on the potentials that we have.

The WooCommerce checkout monitoring is a good example, but there’s tonnes of other add-ons we have in mind where it just makes sense for you to have the Scanfully monitor as base. But there’s stuff that we can do more. We’re already gathering it in one way or another, and just to be super complete with what we’re presenting. Yeah, that excites me, yeah.

[00:29:11] Nathan Wrigley: Okay, thank you for chatting to me today. Scanfully.com. Go and check it out. Remkus, where are you apart from there? If people want to contact you, are you available on a particular platform, I don’t know, social media or email or what?

[00:29:26] Remkus: remk.us

[00:29:28] Nathan Wrigley: Nice. Of course you have that domain. Yeah. That’s lovely. In which case Remkus I will speak to you soon and thank you for chatting to us about Scanfully.

[00:29:38] Remkus: Thank you for having me.

On the podcast today we have Remkus De Vries.

Remkus has been active in the WordPress space for over twenty years, starting out with his own agency focused on high-performance, scalable WordPress websites. Over time, he has diversified into education and community-building with projects like WithinWP and a new initiative, The Guild, which is a paid community aimed at helping people build smarter, more performant sites through a first principles approach.

Our conversation centers on Scanfully, a site health and monitoring SaaS Remkus co-founded, which recently hit version 2.0. Scanfully’s focus is giving users meaningful, actionable insights into WordPress site health, security, performance, email deliverability, DNS, and more, packing all this data into an easy to understand dashboard.

We talk about Remkus’ motivation for diving deep into the complexities of WordPress monitoring, and why many users struggle to keep on top of the technical side of their websites. Remkus argues that too many site owners are stuck in reactive mode, only investigating issues once something breaks, and Scanfully aims to change that mindset by making ongoing health checks accessible and easy to parse, even for the spreadsheet-averse.

Remkus walks us through the product’s evolution, including the 2.0 update that aimed to reimagine their dashboard experience, added public APIs, and introduced tools like MCP AI integration, empowering users to query their site’s health conversationally.

We also get into recent and upcoming features such as WooCommerce checkout monitoring, activity logs, and future add-ons designed to cover forms and other business-critical flows.

If you manage multiple WordPress sites, run an agency, or are simply interested in building more robust, future-proof WordPress projects, this episode is for you.

Useful links

Scanfully

Scanfully 2.0 release post

Within WordPress

The Guild

Remkus’ personal website

Remkus on X

by Nathan Wrigley at October 28, 2026 02:00 PM

Open Channels FM: Linux Foundation on AI, Denmark’s Open Source Test, and Ben Thompson’s Take on the Internet

AI quickens open source coding, Denmark tests Collabora beyond Microsoft Office, and Ben Thompson reflects on the changing internet

by Bob Dunn at October 28, 2026 01:55 PM

Open Channels FM: When AI Mistakes Have Real-World Costs: Rethinking Delegated Control

Advances in AI have opened an entirely new chapter in how we interact with technology. We are moving rapidly from asking questions of digital assistants to handing them the authority to take actions in the real world. This shift brings efficiency and convenience but also introduces a new kind of risk: errors that cost more […]

by Open Channels FM at October 28, 2026 09:44 AM

October 27, 2026

bbPress: bbPress 2.6.21 is out!

bbPress 2.6.21 is a security and maintenance release. Everyone running bbPress should update. 🔒

This release strengthens access control across forum feeds, search results, BuddyPress activity, group forums, attachment requests, topic moves, and old topic and reply redirects. Inherited forum passwords now apply consistently when WordPress renders topic and reply content, and Akismet moderation requests now require HTTPS.

Maintenance fixes improve forum freshness and child-count queries, preserve metadata when database lookups fail, tighten route and user-profile handling, retain original dates and revision content during moderation and editing, and correct the administration reply destination controls. This release also repairs straightforward orphaned list items on WordPress 6.9 and newer, keeps generated bbPress excerpts available without duplicating content, adds the ugc relationship to topic and reply links, and refreshes administration icons for WordPress 7.2 and newer.

bbPress 2.6.21 still requires WordPress 6.0 or newer and PHP 7.2 or newer, and is tested through WordPress 7.1. The database version remains 264, so no database upgrade is required. The 2.6.21 upgrade notes cover compatibility details.

These changes are also in the 2.7 development branch, which remains 2.7.0-alpha-4. Thank you to antaloaalonso, arielmeadow, bor0, Clorith, dd32, deborah86, diddledani, lmstearn, netweb, noruzzaman, Otto42, Pebbleontheshore, r-a-y, rollybueno, sbask, shadow043, SirLouen, softglaze, terresquall, tharsheblows, and ton-ha for reports, patches, testing, and review.

Download bbPress 2.6.21 from WordPress.org, or update from your WordPress dashboard.

by John James Jacoby at October 27, 2026 10:33 PM

WordPress.org blog: WordPress 7.2 Beta 2

WordPress 7.2 Beta 2 is ready for download and testing! 

This beta release is intended for testing and development only. Please do not install, run, or test this version of WordPress on production or mission-critical websites. Instead, use a test environment or local site to explore the new features.

How to Test WordPress 7.2 Beta 2

You can test WordPress 7.2 Beta 2 in any of the following ways:

WordPress Beta Tester PluginInstall and activate the WordPress Beta Tester plugin on a WordPress install. Select the “Bleeding edge” channel and “Beta/RC Only” stream.
Direct DownloadDownload the Beta 2 version (zip) and install it on a WordPress website.
Command Line (WP-CLI)Use this WP-CLI command:
wp core update --version=7.2-beta2
WordPress PlaygroundUse a 7.2 Beta 2 WordPress Playground instance to test the software directly in your browser. No setup required-just click and go!

The scheduled final release date for WordPress 7.2 is December 8, 2026. The full release schedule can be found here. Your help testing Beta and RC versions is vital to making this release as stable and powerful as possible. Thank you to everyone who contributes by testing!

What’s in WordPress 7.2 Beta 2?

For technical details on the issues addressed since Beta 1, see the following links:

Continued Improvements to WordPress 7.2

WordPress 7.2 Beta 2 builds on the first beta with additional enhancements, bug fixes, and refinements across the administration experience and developer APIs.

Development continues on the Abilities API, including content querying, capability requirements, and improvements to schema handling and permissions. New server-side registration capabilities for DataViews and DataForm also provide developers with more ways to extend WordPress interfaces.

Additional work includes improvements to REST API flexibility, admin asset loading, and the transition to modern SVG icons throughout WordPress administration.

Learn more: Trac #66268, Trac #66325, Trac #66229, Trac #66343, Trac #57548, Trac #65089

How important is your testing?

Testing for issues is a critical part of developing any software, and it’s a meaningful way for anyone to contribute – whether or not you have experience. Details on what to test in WordPress 7.2 are available here.

If you encounter an issue, please share it in the Alpha/Beta area of the support forums. If you are comfortable submitting a reproducible bug report, you can do so via WordPress Trac. You can also check your issue against this list of known bugs.

Curious about testing releases in general and how to get started? Follow along with the testing initiatives in Make Core and join the #core-test channel on Making WordPress Slack.

A Beta 2 haiku

Second beta takes shape
New abilities take root
WordPress grows stronger

Props to @mamaduka for pre-publish review.

by David Baumwald at October 27, 2026 03:49 PM

Open Channels FM: Open Source Debates AI, GridCraft Challenges Excel, Tesco Eyes Proxmox

Reddit’s open source rules, a new Excel alternative, and Tesco considers open virtualization for retail edge infrastructure.

by Bob Dunn at October 27, 2026 03:15 PM

Open Channels FM: Adapting to Local Client Needs in a Remote Work World

A look at building business trust and reputation by combining local presence with digital communication.

by Bob Dunn at October 27, 2026 12:58 PM

October 26, 2026

Akismet: Akismet turns 21. Spam isn’t invited.

On October 25, Akismet turns 21. We’re celebrating with a few new guests: an official Drupal module, a PHP SDK, and another year of improvements to our WordPress plugin. Spam still isn’t on the list.

Akismet launched in October 2005 to help people spend less time dealing with comment spam and more time enjoying their blogs. The web has changed a lot since then. People build communities, collect inquiries, accept donations, and create applications on all kinds of platforms. Each of those places gives people a way to contribute. It also gives spammers somewhere to try their luck.

Since then, Akismet has blocked over 570 billion pieces of spam. Every one is something a site owner didn’t have to spend time sorting through. Our birthday wish is to keep making more room for the real people.

Welcome, Drupal

This year, we released the official Akismet Drupal module, built by the team behind Akismet. It brings our spam protection to Drupal comments, contact forms, webforms, and user registrations, with tools for moderators to review submissions and send corrections back to Akismet.

We’ve continued building on that welcome. The latest release supports Drupal 12 and passes richer bot-detection signals into spam scoring. On Drupal 12, comments and registrations are supported now; contact forms, webforms, and the Key module will follow as those modules become ready for Drupal 12.

For people using the older community module, we also built an upgrade path to the official module that carries their API key and protection settings across. The migration guide explains the requirements and which settings need attention.

Welcome, PHP developers

Akismet’s API has long made it possible to protect sites beyond WordPress. This year’s official PHP SDK gives developers a first-party client for bringing that protection into their own PHP applications, including projects built with Laravel or Symfony.

The SDK handles the Akismet API integration so developers can focus on their application. It supports checking submissions, reporting spam and legitimate content, and retrieving usage and account information. The official Drupal module uses it too.

If you’re building a place where people can post, sign up, or send a message, there’s a new tool to help you keep the spam out.

A familiar guest, with a few improvements

WordPress has been with us from the beginning. This year, we kept improving that experience: clearer setup and error messages, accessibility improvements, better detection of automated submissions, and compatibility fixes. You can find the details in the WordPress plugin release log.

Version 5.7 also added support for Abilities and Connectors, helping Akismet fit into WordPress’s evolving tools for integrating external services.

More room for real people

A comment worth replying to. A message from a future customer. A donation to a cause someone cares about. Those are the things we want coming through.

Thank you to everyone who uses Akismet, builds an integration, reports a problem, or helps us improve. You’ve been part of these 21 years, and you’re very much invited to the celebration.

Whether your site runs on WordPress, Drupal, or something you’re building yourself with the PHP SDK, there’s room at the table.

Just no room for spam.

Try out the Drupal module today!

by Peter Westwood at October 26, 2026 03:16 PM

Open Channels FM: AI in Cybersecurity: Balancing Speed and Human Oversight

As AI revolutionizes cybersecurity, organizations struggle with rapid vulnerability detection versus slow human remediation. Balancing efficiency and accountability is crucial, as maintaining human oversight prevents potentially catastrophic errors.

by Open Channels FM at October 26, 2026 11:35 AM

October 24, 2026

Gutenberg Times: A critical PHP fix, WordPress 7.2 Beta 1, Notes in the margin, and more—Weekend Edition 378

Howdy,

Before anything else: check which version of PHP your sites run. On October 21, the PHP project released fixes for two critical vulnerabilities, and they affect any server running a PHP application, not only WordPress. You’ll find your version under Tools → Site Health → Info → Server in your WordPress admin. If you manage your own server and are still on a version older than 8.2, I highly recommend updating. While many hosts have patched older PHP versions that are end of life, it’s best to stay on versions that PHP officially supports.

On a happier note, I’m back. I was sick for a stretch earlier this month, which is why there was no edition on October 10. Rather than try to cram four weeks into one post, this edition sticks to the last two. Much of what happened in the gap is covered in my October roundup for developers, linked below.

With that, let’s get down to the latest news.

Your friendly neighborhood developer advocate, 🎃
Justin Tadlock


Developing Gutenberg and WordPress

The final major release of the year has entered testing. David Baumwald announced that WordPress 7.2 Beta 1 is ready for download and testing, with the final release set for December 8. Notes move into a margin beside the canvas and pick up emoji reactions. Text shadows and form element styling arrive in the design tools, a new Secrets API gives plugins a standard place to store API keys, and client-side media processing extends to the Media Library. There’s even an On This Day dashboard widget. Not everything made it, though: The Repository reports that Notes suggestion mode was punted to 7.3.

The quickest way to try it is the 7.2 Beta 1 Playground instance, or wp core update --version=7.2-beta1 on a test site. Not on production.


Not sure where to start? Noruzzaman’s Help Test WordPress 7.2 breaks the release down by area: security, collaboration, admin, blocks and APIs, design, media. It also walks through the different ways to run a beta, from Playground to a staging site on your host, and points you to where feedback goes. The Beta 1 post is clear that testing counts as contributing, whether or not you’ve done it before.


Your first contribution to WordPress shouldn’t start with installing Git, Node.js, npm, and Docker. That’s the friction the WordPress Contributor Toolkit removes, and Ryan Welcher announced Contributor Toolkit 2.0, a redesigned app in your language. It’s rebuilt on the WordPress Design System, ships in ten languages, and adds a settings dialog. After you apply a patch, you can revert a single file without losing the patch itself. It’s also about 350 MB smaller, which helps when a whole Contributor Day room downloads it at once.


Jorge Costa shared what’s new in Gutenberg 24.2, and the Notes feature is the big headline. Notes now float in a margin the editor reserves next to the canvas, so you no longer have to choose between reading feedback and keeping the Settings sidebar open.

Screenshot of the WordPress post editor with notes shown in the margin to the right.

The Navigation block’s link search now looks through pages, posts, categories, and tags at once. Gallery can sort hand-picked images and tint all of them with a single duotone. And the design tools push continues with about 80 more PRs. Minimum width and height controls, for example, went from five blocks to 40.

For developers, React 19 is now on by default. Test your plugins and themes, and if something breaks, you can switch it off under Gutenberg → Experiments. Gutenberg 24.3 RC1 is already out, too, with rich text formatting across blocks, so expect that next week.


On the Developer Blog, I put together What’s new for developers? (October 2026), and I tried something different this month. Instead of walking through every aspect of the project, it focuses on the changes I think matter most if you build on WordPress: custom blocks building their own responsive controls, wp_kses() being rebuilt on the HTML API, stroke-based Core icons, and the automated security review for plugin releases. Everything else is linked at the end.


Readers may remember Chris Zarate’s post on moving collaboration to the server from the last edition. Alec Geatches follows it up with a guide to the sync engines for real-time collaboration, comparing yjs-server, DE-RTC, and intent-log on their strengths and weaknesses. In every engine, each change goes through WordPress, which confirms who sent it, checks their permissions, and validates it before merging. You can try all three in the experimental Gutenberg Sync Engines plugin. It needs WordPress 7.0+ and the Presence API plugin, and it bundles its own copy of Gutenberg, so deactivate the Gutenberg plugin first.


Feature Notifications has been quiet since version 0.2.0 shipped in April 2023. Jonathan Bossenger is reviving it with a status update and plan for 0.3.0, aiming to ship it with WordPress. That would be the project’s first working MVP: a notifications system that creates, stores, displays, and dismisses notifications. His honest assessment is that the foundations are solid but nothing is wired up end to end yet. He’s posting weekly updates if you want to follow along or help.


Benjamin Zekavica published the recap of the WordPress 7.1 “Mary Lou” retrospective, summarizing what contributors would keep, add, and change for future release squads. If you answered the survey, this is where your feedback landed.

Plugins, Themes, and Tools for #nocode site builders and owners

Sticky headers are one of those things you end up fixing on nearly every block theme site. Jamie Marsland turned his fix into a free plugin, Jamie’s Header Effects.

The standout is Chameleon mode: as visitors scroll, the header picks up the background color of the section beneath it and flips its text between light and dark to stay readable. There are also frosted-glass, solid, hide-on-scroll, and transparent overlay styles. It finds your header template part on its own, respects prefers-reduced-motion, and lives under Appearance → Header Effects.


Meta Box’s custom models no longer have to sit in isolation. A few weeks after moving model creation into the builder, Lua Nguyen announced the new Custom Model field, which lets you pick one or more items from a custom model the same way the Post field picks posts. MB Relationships also gains a Model object type, so you can connect models to posts, terms, users, or other models in either direction. Think hotel rooms as a post type with bookings attached from a custom model—no IDs stored by hand.


On WordPress.com, Ronnie Burt covers what’s new with WordPress Agent: it now designs a custom theme from your answers, hands you off to a simplified AI Editor with Preview and Edit tabs, and can install and manage plugins when you ask. The latest WordPress.com changelog also opens premium themes to every paid plan, starting with Personal.


WooCommerce 11.2.1 fixes two regressions: classic checkout on stores that remove address fields with filters, and postcode validation in the Checkout block for Argentina and a few other countries.

Theme Development for Full Site Editing and Blocks

If you’ve ever had to explain to a client why they should move to a block theme, Simon Cooke has done the work for you. His Human Made guide on how a WordPress block theme is built, and why it matters for enterprise sites walks through each part of a block theme and who owns it, with a side-by-side comparison to classic themes. He’s clear that moving is a project, not a theme swap. The point he lands on: when design rules live in the theme, a page built by someone who joined last week follows the same rules as one the designer built.


What if you could point a tool at any static HTML and CSS site and get an editable block theme back, headers and footers included? That’s the Static Site Importer, and Chris Huber of Automattic talks it through with Nathan Wrigley on WP Tavern in episode #238 on making migration to WordPress easier than ever. You’ll hear how it crawls a site, maps HTML elements to blocks, and handles trickier features like WooCommerce, plus how it fits into the broader Data Liberation effort.


WooCommerce’s Purple theme has a new home. Luigi Teschio announced that Purple development moves to the WooCommerce monorepo, as the first theme in its new themes/ directory, so contributions and bug reports go there now. One of the stated reasons is that keeping themes next to the blocks they use makes it easier for contributors, and AI coding tools, to see how templates and patterns use WooCommerce blocks. Nothing changes for existing installs, and Purple still releases on its own schedule. For more background, Bob Dunn’s Do the Woo episode on WooCommerce themes in 2026 covers Purple and theme performance.


 “Keeping up with Gutenberg – Index 2026” 
A chronological list of the WordPress Make Blog posts from various teams involved in Gutenberg development: Design, Theme Review Team, Core Editor, Core JS, Core CSS, Test, and Meta team from Jan. 2024 on. Updated by yours truly. 

The previous years are also available:
2020 | 2021 | 2022 | 2023 | 2024 | 2025

Building Blocks and Tools for the Block editor.

The new @wordpress/ui package will gradually replace @wordpress/components, so how much of an existing plugin can you move over today? Ryan Welcher found out live by migrating Advanced Query Loop to @wordpress/ui with the Design System MCP.


Once your page registers WebMCP tools, those tool definitions are an API, and the consumer is a language model. Pascal Birchler built playwright-webmcp for testing WebMCP tool surfaces, with linting, Playwright matchers, agent evals, and a site audit CLI. He lists the failure modes that make this tricky: vague descriptions the model ignores, schemas the browser quietly rejects, and two tools on the same page with nearly identical names.


Extension developers no longer need to duplicate a WooCommerce ability just to expose a few extra fields. Luis Felipe Zaguini opened a call for testing extensible abilities for extension fields, an experimental API in WooCommerce 11.3. Extensions can add fields to product, order, and order item reads and writes, register query filters, and refuse a change with a validator before it saves. It’s off by default, so turn on Extensible abilities under WooCommerce → Settings → Advanced → Features to try it. The gift wrap example in the post is a good place to start.

What’s new in Playground?

The best way to find out what’s hard about site editing is to watch someone try it. Jamie Marsland built a user testing app for WordPress on Playground and Spacefast to do exactly that. You send a tester a link, and Playground spins up a fresh site in their browser from your existing demo blueprint, with a card of five to seven tasks in the corner. The results page shows how long each task took, who needed the hint, and whether the site actually changed. It’s also an MCP server, and it’ll flag a task that gives away the button name.

AI in WordPress

Two weeks after the MCP Adapter arrived on WordPress.org as a canonical plugin, the AI team got approval to make MCP a default part of WordPress. Rae Morey reports on the move to make MCP a default part of WordPress, with 7.3 floated as a target. That doesn’t necessarily mean merging the adapter into Core: bundling it, enabling it through existing interfaces, and building specific capabilities into Core are all on the table. It’s also a reversal of the reasoning behind the canonical plugin, and maintainers are asking what changed. The AI contributor summary for October 21 has the meeting’s side of the discussion.


Andy Peatling launched WordPress Agent Benchmarks to measure how AI agents handle WordPress, and Rae Morey walks through the first results. Across 193 sites built for requests that suited WordPress, agents chose it zero times, even though they named it as an option about half the time. Using the MCP Adapter alone, they completed no tasks on existing sites, largely because it doesn’t yet bundle the abilities for common operations. Brian Coords asks what WordPress would have to change in helping agents choose WordPress, drawing on a WP Minute panel with Andy.


Is the MCP Adapter safe? Brad Williams of WebDevStudios calls it a door: “You decide which rooms it opens into.” He explains why production use of the MCP Adapter is a governance decision, not a plugin decision. An agent gets whatever abilities are exposed, using the permissions of the user it connects as, and every plugin you install can add more. His advice is to write the agent’s job description before you hand over the keys.


If you connect an AI client to WooCommerce, this one needs action before you upgrade. Darren Ethier explains that WooCommerce 11.3 removes its deprecated MCP endpoint. Requests to /wp-json/woocommerce/mcp will return a 410. Install the MCP Adapter, create an application password for a user with only the capabilities the client needs, and point the client at the adapter’s default server. Extensions that hooked into the old endpoint’s filters should check the post’s full list of what’s been removed.


WPShout’s guide on how to connect Claude to WordPress opens with the question most guides skip: where your site is hosted decides which route you take. WordPress.com, Jetpack, and other self-hosted sites each get their own path, and the walkthrough uses a free MCP plugin with a least-privilege grant. It’s also candid about a gap: the WordPress MCP Adapter has no OAuth server of its own, so claude.ai’s sign-in can’t connect to it directly yet.


Post revisions spent years bloating databases. Human Made thinks they’re about to become valuable. In WordPress revisions: agentic gold?, Noel argues that every revision records what changed, who changed it, and when, which makes them a log of how your team really works. Mine them for repeated changes and you’ve found the workflows an agent could take over. The post includes a prompt you can run, on a copy of your database and never on production.


Need a plugin .zip from Gutenberg’s master branch?
Gutenberg Times provides daily build for testing and review.

Now also available via WordPress Playground. There is no need for a test site locally or on a server. Have you been using it? Email me with your experience.


Questions? Suggestions? Ideas?
Don’t hesitate to send them via email or
send me a message on WordPress Slack or Twitter @bph.


For questions to be answered on the Gutenberg Changelog,
send them to changelog@gutenbergtimes.com



by Justin Tadlock at October 24, 2026 04:18 PM

October 23, 2026

Open Channels FM: Navigating the Value of Friction in a Fast-Paced World

As technology advances, prioritizing speed and convenience can undermine critical engagement and reflection. While automating tasks may enhance efficiency, it risks diminishing the unique value individuals bring to understanding and decision-making.

by Open Channels FM at October 23, 2026 04:17 PM

Open Channels FM: Faster Security with Anthropic AI, But Open Source Needs Real Human and Corporate Support

Faster security scans reveal new software issues yet patching and project upkeep require committed maintainers and company contributions.

by Bob Dunn at October 23, 2026 02:05 PM

October 22, 2026

Open Channels FM: Game Porting and Software Creation Accelerate with AI and OpenAI Concerns

Shifting barriers in tech reveal new questions about trust, safety, and sustainability in software.

by Open Channels FM at October 22, 2026 02:08 PM

Open Channels FM: Balancing Digital Life While Making the Internet Weird Again

Bowe Frankema shares how digital creation affects daily life and what bringing weirdness back to the internet means.

by Open Channels FM at October 22, 2026 12:08 PM

October 21, 2026

Open Channels FM: Munich Bets on Open Source as Meta Apple and NVIDIA Drive Local AI and Hardware Choices

Munich’s shift to practical open source, Meta and Apple’s AI partnership, and NVIDIA’s hardware-driven open AI models

by Open Channels FM at October 21, 2026 03:00 PM

WordPress.org blog: Critical PHP Security Release

The PHP project has announced a security release that fixes two critical security vulnerabilities discovered in PHP.

Due to the critical severity of the issues, site owners are encouraged to immediately update their installations of PHP. Your web host may already be working to update PHP and put web application firewall (WAF) rules in place to mitigate the vulnerabilities, but you should still check for updates from your web host and, if necessary, update PHP as soon as possible.

Within WordPress, you can see which version of PHP your site runs under Tools > Site Health > Info > Server. Many web hosts provide this information in your web hosting administration panel too.

These vulnerabilities are not specific to WordPress and affect any server that hosts a PHP application. No WordPress update is required or planned for these issues.

Versions of PHP prior to 8.2 no longer receive security updates from the PHP project.

If your site runs a version prior to this and you manage your own web hosting, you should consider taking your server offline while you prepare to update to a newer version of PHP. This advice is being published by several national cyber security agencies. To quote the UK National Cyber Security Centre:

Where immediate remediation is not feasible, organisations should consider taking the system offline until it can be fully mitigated.

Further information on wordpress.org:

by John Blackbourn at October 21, 2026 01:44 PM

WPTavern: #238 – Chris Huber on How Static Site Importer Makes Migrating Any Website to WordPress Easier Than Ever

Transcript

[00:00:19] Nathan Wrigley: Welcome to the Jukebox Podcast from WP Tavern. My name is Nathan Wrigley.

Jukebox is a podcast which is dedicated to all things WordPress. The people, the events, the plugins, the blocks, the themes, and in this case, how the Static Site Importer makes migrating any website to WordPress easier than ever.

If you’d like to subscribe to the podcast, you can do that by searching for WP Tavern in your podcast player of choice, or by going to wptavern.com/feed/podcast, and you can copy that URL into most podcast players.

If you have a topic that you’d like us to feature on the podcast, I’m keen to hear from you and hopefully get you, or your idea, featured on the show. Head to wptavern.com/contact/jukebox, and use the form there.

So on the podcast today we have Chris Huber. Chris’s journey with WordPress began in his college days, first as a writer and blogger, and eventually progressing to software engineering after moving his personal site, extrachill.com to WordPress in 2018, Chris went deeply into WordPress, developing custom plugins and exploring all the corners of the platform. His passion for experimentation and creative tech led him to Automattic where he now helps shape the WordPress experience as a software engineer.

Our discussion centres around two main topics, Data Liberation and the Static Site Importer tool.

We focus upon the evolving landscape of website migration and ownership. Chris explains how Data Liberation aims to make it easier for users to take control of their sites, whether they’re moving to WordPress from platforms like Wix, Squarespace, or Drupal, or just want portability for their data.

We also get into the Static Site Importer, which takes this a step further by converting any static HTML / CSS website into a fully editable WordPress block theme, headers, footers, and all.

Chris walks us through how these tools work in tandem, highlighting the mechanics behind website crawling, mapping HTML elements to Gutenberg blocks, and handling complex features like WooCommerce and calendars.

We talk about the continuous improvement of these tools, how each migration helps raise the bar for future imports, and how this project could fundamentally change the way people move websites between platforms.

If you’re curious about the future of website migration, and how WordPress is removing the hurdles for users who want to truly own and manage their content, this episode is for you.

If you’re interested in finding out more, you can find all of the links in the show notes by heading to wptavern.com/podcast, where you’ll find all the other episodes as well.

And so without further delay, I bring you Chris Huber.

I am joined on the podcast by Chris Huber. Hello, Chris.

[00:03:21] Chris Huber: Hey Nathan. Thanks for having me.

[00:03:22] Nathan Wrigley: Yeah, very welcome. Chris and I have never spoken before, but we’re going to be talking today about two things, data liberation, but also a tool that I’ve never used, but sounds really interesting. It’s called the Static Site Importer.

As is always the case, if you go to wptavern.com and search for the episode with Chris in it, you’ll be able to find all of the necessary links. In this case, it’ll be, GitHub pages and things like that.

But before we get stuck into it, Chris, would you mind just telling us a little bit about yourself, your background with WordPress, who you work for, that kind of thing?

[00:03:54] Chris Huber: So I’m Chris. I live in South Carolina. My background with WordPress is I started my own blog back when I was in college, that was 2011. But I wasn’t on WordPress at the time. I switched to WordPress around 2018, and I started getting more and more into it over the years. Now I work for Automattic as of about six months ago. And I’m a software engineer.

[00:04:14] Nathan Wrigley: Thank you. So before those six months, a lot of people in the WordPress space have this, I think, desire to end up at a place like Automattic where they can fully work just on WordPress. That’s my estimation anyway sometimes.

[00:04:26] Chris Huber: Definitely a dream job. I really love working on WordPress, and it’s super cool to be able to work at Automattic but I got into software engineering a little bit later in my WordPress career. I was more of a writer and a blogger at first, and over time my website started getting more advanced and I wanted to build more things on it.

And I got, I was an early adopter to AI, and I started learning a lot. Like as soon as I picked up AI, I started asking a lot of questions and turned my website, my personal WordPress site is called extrachill.com, and it’s kind of a WordPress multi-site like application with 60 custom plugins on it.

And I just, I just went crazy. That’s how I ended up at Automattic is because my website, some things I built on my website were like, attention on Twitter from some people who have been around WordPress for a good bit of time.

[00:05:15] Nathan Wrigley: Yeah, I’ve noticed this trend. I think there’s a trend in upper management. Let’s go for that phrase, for the more curious bits. The unusual, the interesting, the weird and the wonderful. I think there’s a bit of a movement right now to see that again.

Back in the day, I have grey hair, I am considerably older than you, I think Chris. And, when the internet began, I was old enough to be able to use a computer. The internet was a truly strange place. Nobody had the faintest idea what to do with it. And so everybody launched their crazy, unusual thing, and it was normal. And then everything became a bit of a homogenised version of the internet.

These social media platforms came along and normalised everything. And UIs settled down and UXs settled down, and got stuck in a rut. But now there does feel, especially in the WordPress space, as if there’s a desire create the unusual, and the weird and the wonderful, and that’s brilliant. That sounds like you’ve been hired to do just that.

What we’re going to talk about today is not that weird. It’s fairly useful though, I would say. And, there’s two parts to it. As I mentioned at the top of the show, there’s the data liberation part, and then there’s the static sighting importer.

I think we’ll go through them in turn, if that’s all right? Starting with the Data liberation. This was a phrase that I used to trot out a couple of years ago when the Data Liberation project began.

Do you want to just run and tell us what the Data Liberation Project is, what its goals are?

[00:06:42] Chris Huber: So the Daily Liberation Project has been ongoing since way before I started working on it. And it is basically, a lot of proprietary website building platforms make it really hard to get off of these platforms. Especially if you want to keep your website design. And that’s their business model is, they’re not open source.

So for a long time we have assumed that Data Liberation meant using WordPress. But recently we have changed that definition a little bit, and it just means turning any website into a portable copy that you can download, and do whatever you would like with.

So the data Liberation Agent that we have created actually can convert any URL into a portable copy. So you just give it a URL and it loads the site in a browser, and downloads every single page as a perfect copy with all the animations and everything. The only thing it doesn’t get is anything that’s inside the database, inside the site. Because it’s all happening on the outside of the site.

So that’s step one to our process.

[00:07:42] Nathan Wrigley: I think that’s great. I remember it being couched in terms of trying to onboard people from going to use the word rival, although that’s the wrong word, rival CMSs. So for example, Drupal and Joomla and things like that. The idea being that its really hard work.

It can be a lot of work getting a site from over there, Drupal, let’s say, and bringing it over to WordPress. And so there was an endeavour to make it point and clickable. And in, in the way that you’ve described it, all that you have to do really to get a fairly functional version of your website is to know the URL.

So you go to the original domain, you paste in the URL, some magical voodoo goes on in the background. And within a few moments, that site has been replicated, and hopefully it can then be migrated over to WordPress. But I suppose it goes a little bit further than that because it’s a two-way promise, isn’t it?

It’s not just that you can bring things into WordPress. The promise is that should you become fed up of WordPress, you could go in the other direction. You could go WordPress to Drupal. Or indeed you could go WordPress, WordPress. So you could use it as a migration tool or something like that.

So it isn’t just this importing mechanism, it really is liberation in the strictest sense of the word. It’s your data. Pick it up from wherever it is now. Take it to wherever the heck you want it to go, and we’ll enable you to do that.

[00:09:01] Chris Huber: Yeah, basically. Not even just Drupal, but places like Wix and Squarespace and Weebly and other website building platforms that might be proprietary and open source. Yeah, that’s step one to the process that we’re using.

[00:09:13] Nathan Wrigley: Okay, is there anything technical that we need to know about how that process works before we move on to the Static Site Importer? Or are the two things bound so that if we move on, it’ll all make sense in due course.

[00:09:24] Chris Huber: It will all make sense I think.

[00:09:25] Nathan Wrigley: Yeah. I’ll interrupt as I see fit.

So the next part of this jigsaw puzzle, now that we’ve got the data liberation piece under control is the Static Site Importer.

Now, this to me at least is new. I had not seen it. I caught a post by a colleague of yours, on maybe it was X or something like that. And I saw it and I thought, okay, that’s interesting. Static Site Importer, what does that mean? And I dug a little bit deeper, and that’s why you are on the podcast to explain it.

Okay, 10,000 mile view looking down, what’s the goal of the project? And then I suppose we can get into how it does it and all of that magical stuff.

[00:09:59] Chris Huber: So the goal of the project is to create WordPress Block Themes from a static HTML website. So any basic HTML, CSS, JavaScript website, converting it into a WordPress site, with the click of a button. So that’s the basic goal.

[00:10:15] Nathan Wrigley: Okay, so the idea here is that you see a website somewhere online, hopefully it’s yours. And then you take the URL, but rather than the sort of more generic approach that we just described with Data Liberation, this is then binding it into, you said theme. I’m going to go with blocks in my definition here.

For example, where there’s a paragraph. Inside the block editor, we would see a paragraph block. And if it was an image, we’d see an image block. And I guess if there was something on the left and something on the right, we’d see a, I don’t know, a group block or something like that. And the design would trickle down from there.

The tool itself would make assumptions based upon what it, I’m doing air quotes, sees. And then it would build it inside the block editor. But curiously, you said theme, so is it also building a theme in the background to take care of all the other, I don’t know, the headers and the footers and all of that kind of stuff as well?

[00:11:10] Chris Huber: Yeah, it is materialising an entire WordPress site from scratch. So the importer does take a URL, but how we’re using it in our tools is we are combining it with data liberation first.

So data liberation gives us that clean copy of the website. So the URL actually goes through data liberation, and then we take the portable copy created by data liberation, and import the whole entire website into WordPress. And it turns this static website into a WordPress site.

So it’s not just about URLs. It’s also about like AI generated websites that you might have on your computer that you might have generated with Claude or Codex. And you want to use it on WordPress. It’s traditionally been pretty hard to get a high quality block theme from an AI agent without a lot of iteration.

So this kind of sidesteps that need to iterate on the block theme, and pull your hair out with the AI who doesn’t understand so much about how to create a good block theme. And you just don’t bother with that, and you just convert it into a block theme on its own.

The point of it really is removing the responsibility from the AI to create the block theme.

[00:12:14] Nathan Wrigley: Okay. So the way that you described it, it sounded like, forgive forgive me if I’ve misunderstood this. It sounded like you use the tool, and we’ll get into how that works properly in a minute. You use the tool. You paste in a URL, that could be a locally hosted website, or it could be something out in the wild on the internet.

And then the data liberation part of it spins up. And then it sounds like there’s a blob of data somewhere, which the data liberation tool finally exports. So it does its bits. This blob of data is then consumed, and we can discuss what that is. Is that a plugin? How does that even work?

And then once it’s parsed that blob of data, then it can figure out, okay, this part belongs in the header, this part belongs in the footer.

This part is the main content area, this is the homepage. And so on. How does it do that? How does it shatter out particular URLs? Like this is the about us page. Or do you have to do it page by page? About, home, archive? How does it do all that? Is it literally one URL and it goes around and spiders the whole thing?

[00:13:13] Chris Huber: It crawls every page on the website, the data liberation part does. But I think of the importer almost like a giant funnel and like a sorting mechanism. And it’s very much mapped to Core, WordPress Core. So I built the whole thing’s built with AI and just basically like over time mapping different elements on the page to Gutenberg, while having the AI read Gutenberg Core directly, and read the source and make its own mappings.

And the whole thing is just a series of import, a website, see what breaks. I pull it up on my screen, side by side. And I’ll be like, all right, this looks wrong, like this and this. And then you just run it again. And I wrote a prompt basically, an AI orchestration prompt that teaches the AI how to run this loop, like for a long period of time.

So how I’ve built it is I’ve basically just given the AI a URL, and had multiple sessions going side by side, working on different types of URLs. And they just run, and open pull requests.

The assumption that a lot of people would make about something like this is you take the HTML site and you tell the AI how to build the block theme from it. We’re not using the AI to do that. We’re using the AI to improve on the importer. So that every time we run an import, it raises the floor just a little bit. So the more sites that you run through it and loop on it like this, the better quality overall you’re going to get for just a random, arbitrary website that you might feed it.

So it’s really just about data annotation, and taking as much as you can in finding ways to parse it without having to look at it.

[00:14:41] Nathan Wrigley: Does the tool phone home. So the way you described it there was, it sounds like there was an opportunity to improve the tool for yourself on your install. But I was wondering if it phoned home so it also at the same time, improved the tool for everybody else so that the next version of the tool is better for everybody?

But I’m going to guess that it is just working locally. It’s improving your version each time. But I could be wrong.

[00:15:05] Chris Huber: So the prompt I share with my coworkers, and we all use it to work on the tool, so it’s more of a development thing is how I’ve built the tool is just by importing a tonne of different websites, over and over again. But the way I have it set up on GitHub is every merge to main automatically releases a new version and updates all the pins.

So the latest release is always the latest work that I’ve done. So, I get to benefit from the changes right away. As soon as I merge the PR, it’s in a new release and I can just keep going. It’s just not on wordpress.org yet, or anything like that.

[00:15:37] Nathan Wrigley: So how do we actually get hold of the tool? I’m going to link to a, a GitHub page, but just reading it into the record, it’s actually a fairly straightforward url. It’s github.com/automattic. You know the one with the two T’s, and then static-site-importer. You can go over there.

How does it work? You download it. You run it locally on your machine? And then once that’s up and running, what do you see? Is there like a GUI that you have to run through? Is there a WordPress plugin component to it? Just describe the workflow.

[00:16:07] Chris Huber: Okay. Yeah, so the Static Site importer is a WordPress plugin. And anyone can instal it on a WordPress site to turn a website into a WordPress site for sure. Using the command line locally. It works in the browser too, but there’s no UI. It’s like API based, so you’d have to call the API to do it or the CLI.

Another place to use it and the easiest, probably the easiest place for anyone listening, to try it other than Riad’s website, is WordPress Studio. I added a tool to the CLI in WordPress Studio. That is, studiocreate-from. And then you can enter a URL. So it’s just one CLI command, and that orchestrates the whole thing in the background. Loads the Data Liberation agent, and then installs Static Site Importer on the site.

You run it once you wait 10 or 15 minutes, and it spits out a WordPress Studio site that’s built using this tool. And that is the same way we run it on wordpress.com. Riad’s tool, the liberate.sh is a, it uses the wordpress.com API, which works the exact same way as WordPress Studio, where it loads Data Liberation Agent.

And Riad’s website gives you a copy of the website that you can download and take with you, anywhere you want. A WordPress website, anywhere. You can host it anywhere. but it’s all using the same wordpress.com API on the backend. Except in WordPress Studio uses the actual tools, does that make sense?

[00:17:21] Nathan Wrigley: Thank you. That’s great. And so how successful is it? If you point it at google.com, it’s probably going to a fairly easy time with it because there’s not a lot going on. But, i’m imagining on a, let’s imagine that you went to some high-end sports website or something where they’ve got animations of people and videos, and all sorts of stuff going on.

How does it hold up? For paragraphs and images and all of that kind of stuff? I’m guessing it’s pretty good. Are there any areas where you’d need to be a little bit more mindful? Because, I don’t know, just experience shows it doesn’t work out so well.

[00:17:53] Chris Huber: Yeah, definitely. So if you’re watching it today, there might be some failures on things like stores. Things that have a lot of products and like really image heavy websites might have problems as well. And just like really large websites. But it gets better every single day. What I say right now might become outdated very fast on what we can and can’t handle, but it definitely is not like perfect yet, for sure.

A small website, like a one page brochure website, or five pages or so. Most of the time you’ll get a pretty good copy of it. If you start to scale up to a really big, large, for example, wix.com, like the actual Wix.

[00:18:30] Nathan Wrigley: Good luck.

[00:18:31] Chris Huber: I sometimes will run that through there as a way to see how far I can get. Yeah, I’m trying to reach for the stars. So eventually I would love to be able to import this 50,000 page heavy duty, old school website, but right now it fails miserably, and it would take. The timing that was given to me last night when I was working on this was like two weeks. You’ll have a copy of wix.com, if you just let it run. And then you’d get the copy and it would just be like 10,000 pages of nonsense. We have a lot of work to do.

[00:18:59] Nathan Wrigley: Okay, but for a normal, typical, run of the mill, let’s go with brochure site, 12 pages, fairly ordinary stuff. Imagery, maybe a video here and there, but mostly text, CSS, maybe a tiny smattering of JavaScript sprinkled around. Forms, that kind of thing. It would do a pretty good job with that out of the box?

[00:19:17] Chris Huber: I would say like more than half the time you would get a good editable WordPress website. Not always perfect. And sometimes you would get a perfect site. But a lot of times you might have a few things that are wrong, like maybe a couple form fields, or like buttons or like menus.

One thing that happens a lot is like the header and the footer are like duplicated across every page, instead of being properly extracted into a template part. If there’s like SVG images, WordPress has a kind of a hard time handling those. So we have dealt with it. But it’s not always perfect.

One of the coolest things about it that I like is that blocks, so it’s static site importer is the WordPress plugin that creates the WordPress site. And then there’s a PHP package inside of it called Block Engine. Which is what handles the actual, like, mechanics of converting and creating the blocks.

And inside of that tool I have added some like carried blocks that are in the holster ready to go, like for common elements that might appear on websites in the wild.

So like a marquee or something like that. Like a ticker that you see running across a page that Gutenberg cannot represent on its own, out of, the box. And so this tool, it knows how to build this block as if it was part of Gutenberg, so that you’ll see a real block in there. That’s my WordPress nerd favourite thing about the tool. It feels like I’m pushing on Gutenberg, finding places where Gutenberg is like maybe falling short, or just doesn’t supply the things that people need to build websites. With the right amount of attention, this might help be like, oh, we need to add some of this stuff.

[00:20:48] Nathan Wrigley: A curious question, because we all know how AI never gives you the same thing twice. I was wondering if you fed it the same URL, do you predictably get something similar out? Or do you suffer each time a different set of, and I’m doing air quotes again, failures. So for example, you described, the SVG images, or the form fields, or the footers being duplicated or whatever it was.

Is it sometimes better just to begin again, and cross your fingers and hope that the AI has a better go the second time around? Or is it always a case of go with the first version and iterate from there?

[00:21:22] Chris Huber: So it works the same exact way every time. The actual process does not use any AI at all. I used the AI to build it from the outside. But the actual, It’s literally like a machine. The process doesn’t use any AI to convert the website. We have some stuff in place, like when we’re using it on wordpress.com. We’re doing migrations from non WordPress to WordPress sites, we do it for assisted migrations currently.

But the people running these migrations will use the tool first and see how far it gets them. And then they take Claude Code or whatever and they work on the site that came out. And they hand it over to the customer. So it gets them closer to the finish line than they would have gotten if they just had to start building the site from scratch on their own.

And then over time we’re getting closer to the finish line, and hopefully get to the point where we can just hand people the website coming from another source and be like, here’s your exact copy of your website WordPress version. And eventually we will make that like a publicly available thing. But that’s how we’re working on it internally, so.

[00:22:21] Nathan Wrigley: So I think I’d misunderstood there, so the AI portion is in the creation of the tool, but the tool itself is deterministic. The tool will give predictably the exact same thing out. If you give it the URL, it’s going to parse it with a mechanised approach? It’s not relying on AI at that point. And so do it once.

And then it sounded to me from the way you described it, you were holding your hands up at this point. It sounded like your had two screens open. You’ve got the output and then maybe the original. And you’re trying to iterate and just spot the errors. Okay, let’s scroll them both and see. Ah look, that’s gone a bit astray there.

And then presumably at this point you’re logging into WordPress. If it can be done inside the block editor, you’re doing it there. But it also sounded like you are now at .com. You are removing that part even and just doing a second run with AI at that point. Rather than logging into WordPress and using the block editor, it’s more CLI. Let’s just see if the AI can spot those mistakes, because I spotted them, prompt it and fix it in that way. That’s interesting.

[00:23:21] Chris Huber: So I’m the one just building the tool. There’s other people working on delivering websites to customers and stuff internally. But, I started looking at the websites originally, but now I have a, I just have a prompt that I copy and paste to the AI every time and it walks through the process.

And what it does is it loads both sites in a headless browser called Playwright. Basically, I have the AI look at the site as if it was the site owner. I say you’re a non-technical site owner. Open this site and look at the Gutenberg editor and see how you would feel if you came over from Wix and this was what you got.

It’ll go through and click things around in the editor and be like, okay, here’s my feedback. And then I say, okay, fix everything all at once and open pull requests. And it will fan out subagents, 10 or so at a time sometimes, and open pull requests in three repos, and then I just merge them and run it again. Because the automated releases that I mentioned.

So it’s very much trusting the machine and letting them. The machine in this case is, more able to parse this than, than a human is because it’s so much at once. And just letting them do it is what I’ve found. Describing to them what I want them to do.

[00:24:26] Nathan Wrigley: I’m guessing the onboarding team over on .com, presumably, if you roll the clock back a couple of years, this was all a very manual process. Find a client, get them to sign on the dotted line. Okay, they’ve got a.com account, now they want to move over. And then it would’ve been a process of, okay, let’s inspect the site, let’s get a bunch of technical people on it, and figure out what we need to migrate and when, and try to map it. Get a designer in and recreate graphics, and colour palettes, and brands and all of this kind of stuff. But it sounds like these people no longer have a, place because you just use the tool and in most cases it’s going to work.

Has that in fact been the case? It sounded like over on the .com side of things, there’s like this, I don’t know, 90, 95, 99%, trust in the tool now. That must be incredible. Presumably you can onboard people much more rapidly.

[00:25:14] Chris Huber: Yeah, it’s not quite that much of trust in the tool yet. It’s more one in 10 sites are getting close enough to the finish line to just be handed off. So like the original process that you mentioned is a good process for like a big site, like manual migrations and stuff. But for small sites it’s not really a good business model. It’s not economically viable to spend a lot of resources rebuilding a small website because you’re putting a lot of manual effort into one website.

So what we would do mostly in the past would be, if the customer is willing to do the do it for me route, where they have our team build it for them, we would do that. But otherwise we would offer them a content import. So they can just import all their blog posts or whatever, and then rebuild the site their own.

This kind of gives us an option for people that were historically told no, that we can now start saying yes to them. And letting them migrate over. It’s not necessarily about reducing the labour that was going into it because it was a dead end before, and now it’s not.

[00:26:10] Nathan Wrigley: And how has it been received over on the .com side of things? I’m presuming that you are in touch with these people. And even if it’s a one in 10 at the moment, we have expectations that it’ll be two in 10, and then three in 10, and by the end of next year, maybe nine in 10 or what have you.

That gives them the opportunity to talk about other things with the clients that they’re onboarding, I suspect. Instead of just, okay, let’s figure out how to make the exact same website that we had over there, over here. That doesn’t feel like necessarily interesting work anyway.

[00:26:36] Chris Huber: Yeah, exactly. But it was always really hard to make the exact copy. And yeah, the tool has a lot of internal support and a lot of internal attention. People are rallying behind it. It’s basically what I’ve been working on full time since WordCamp US. Three months ago now.

So I’ve been putting full-time effort into this tool for three months now. And now it’s starting. We have a lot of momentum behind it internally now that it’s starting to get to a point where it’s actually good. It’s very cool to see this for myself. I’m very proud of the work that we’ve done. And it’s exciting. It’s just exciting.

[00:27:06] Nathan Wrigley: We mentioned that there were some things that it didn’t do particularly well. Presumably it would be nice to be able to hoover up some of that in the future. What would be the roadmap items that you’ve got for the next, I don’t know, short period of time, month, two months, six months, whatever it may be. What are the bits that it can’t currently do, or the bits that there’s wrinkles in, that you could tell us about that hopefully, given the passage of time, will go away?

[00:27:30] Chris Huber: The more complicated stuff is like, installing another plugin when you’re materialising the website. So the the most obvious example is WooCommerce. If we’re detecting products in the source, we actually pre-install WooCommerce, and convert to WooCommerce blocks, and import actual products into the catalogue, and like wire up everything that we possibly can.

[00:27:50] Nathan Wrigley: That’s amazing.

[00:27:51] Chris Huber: It’s crazy, but it doesn’t work very well yet, because it’s very complicated. But, another thing is like is like events. Like an events calendar on a website, the tool kind of chokes on that, but it’s the same process. You install The Events Calendar plugin. You find the most widely supported and used WordPress equivalent of whatever feature you need, and you find a way to deterministically wire it up on the back end.

There is a WordPress equivalent for like most things. It’s just a one at a time process to pick the one that, at least for .com. The tool itself is composable. So any developer. For forms, we use Jetpack Forms. But any developer can hook in and do whatever form provider they want, if they provide their own mappings to the tool. That’s the kind of stuff that doesn’t work quite as well right now.

And, of course JavaScript animations and other things. WordPress has the Interactivity, API, so we do use that. More and more core blocks are coming in. Like we have the tabs now in the accordions and things like that, that we can actually represent in Gutenberg more effectively now.

The real solution is just keep importing sites, you find that the tool used to choke on, it doesn’t choke on anymore, and you get further. And you just keep getting further and closer to success. The only thing it chokes on, this site is the products. Okay, so we’ll just work on improving the WooCommerce integration.

Yeah. So it’s like almost as far as you can get and then just keep. I like to think of it as raising the floor, like raising the bar is like. This is as bad as it could possibly be, and then the next time it’s a little bit better.

[00:29:18] Nathan Wrigley: And it sounds like it’s going through those iterations fairly rapidly in terms of time, what three or four years ago would’ve been years into the future now increasingly feels like months, and then weeks, and then finally in a few years time, maybe days. A lot of this stuff will be taken on in short measure, things like an events system, or a WooCommerce system or an LMS kind of system. Maybe that stuff will be in scope in the near future.

The project, obviously being on GitHub, and being a WordPressy thing is open source and I’m, just curious whether or not you are doing this hand in hand with any other people? Or is it just a project within Automattic? Or are you getting kind of intuitions from WordPress agencies out there who are obviously having to do this kind of work?

They’re bringing in clients from all over the place and trying to convert them over to WordPress. I just wondered if there was any collaboration going on, or do you wish there to be collaboration?

[00:30:12] Chris Huber: I think something like this should be part of WordPress Core. I don’t know that necessarily this exact tool or this approach. There’s a lot of work in the ecosystem around this area, like Human Made has a tool like this. And then Pascal from WordPress Core, is working on this in Gutenberg, not the exact same thing, but some way to convert HTML to blocks.

And I just think it’s a big challenge for the WordPress ecosystem that if it gets solved can help move the whole project forward and help make us more future proof. Just because AI is so good at generating HTML, and that’s what kind of becoming the native format of the internet now. Maybe always has been, but just making that translatable into WordPress is something important I think.

[00:30:53] Nathan Wrigley: Yeah, I think so. And obviously in an era where market share in the WordPress space is no longer seemingly guaranteed to just keep climbing. People face with that decision of, okay, I’ve got a website, it’s now starting to look a bit stale, but rather than throw the baby out with a bath water, we’ll, okay, we want an alternative CMS. We want to upgrade, see where we can go. It feels like a tool like this makes WordPress a bit of a forerunner, actually.

If you’re going to pick a CMS, have a CMS where there’s a pretty good chance that by clicking a button you can bring most of your existing stuff across. I don’t know what the other CMSs do in that regard. Maybe they do nothing, but this does feel like a tool in WordPress’s arsenal, which is pretty compelling. I would hope that it would bring a lot of people in our direction.

[00:31:42] Chris Huber: I hope so too, and I agree. I think the fact that it can exist. It takes one of the points of WordPress that has been difficult for people to embrace, which is the block editor. And it almost turns it into an advantage. Because then you get a WYSIWYG version of every website. Whereas if you were to generate a static site with AI and go and host it on a static host, you don’t have the CMS. If you want to add another blog post, you have to generate the page, upload it to the site. And of course there are solutions to this.

What if you just want to change one word? You just want to go into the block editor and change the one word. Then you can do that and like without having to build the whole page from scratch in the editor. You have to be good at it and know what you’re doing to build a custom website using the block editor, I think.

[00:32:26] Nathan Wrigley: This is going to be a discussion which will go on, I think in the days, weeks, and months to come. Obviously everybody at the minute is very beguiled by the interface of building a website through some kind of chat mechanism. It’s so fascinating that’s possible.

But then the reality of maintaining that, and understanding how that page even got there. And where do the assets, on that page even live? And how do I modify the title of the hero section over here? All of that has yet to land with ordinary people. Again, doing air quotes.

[00:33:04] Chris Huber: Yeah.

[00:33:05] Nathan Wrigley: If you’re very technical, you can probably figure all that stuff out, because you were probably the person that created that AI based site anyway. But if you’re not technical and your job is just to occasionally modify content, or inspect somebody else’s content, and click publish when it met the guidelines that you’d got as an organisation. You’re not going to care about some sort of CLI interface or getting an AI to do that for you.

You just want to be in, out, and then move on, because WordPress is not what makes up the majority of your day. I think all of that stuff is going to hit us in 2027, and it’ll be interesting to see where we land and where the landscape moves.

[00:33:41] Chris Huber: Yeah, I hope that we can continue to grow WordPress definitely.

[00:33:45] Nathan Wrigley: Okay, that’s really interesting. I’ll read into the record one more time the tool itself. So github.com/auttomatic, two ts, /static-site-importer. You can go over there and make comments. It’s a GitHub page so you can do all of that normal stuff.

If people wanted to find you, Chris, do you hang out online anywhere? If people wanted to contact you and had intuitions on where this should perhaps go in the future?

[00:34:11] Chris Huber: Yeah, they can reach out to me on x x.com/chubes4, C-H-U-B-E-S four. They can also find my GitHub, which is the same tag. I have my personal WordPress site at extrachill.com, is like my main site. Then I have my other one, chubes.net. Or, just leave a pull request or a GitHub issue, me or my AI agent will reply.

[00:34:33] Nathan Wrigley: This is how it is in the year 2026.

[00:34:35] Chris Huber: Yeah.

[00:34:37] Nathan Wrigley: Okay Chris, absolutely fascinating. Let’s hope that the tool manages to do a lot more than you’ve described. It sounds like you’ve got a very extensive, and interesting, roadmap going on, but thank you for bringing that to us and, thank for explaining it all to us today. Appreciate it.

[00:34:49] Chris Huber: Yeah. Thanks for your time. Thanks for having me.

On the podcast today we have Chris Huber.

Chris’s journey with WordPress began back in his college days, first as a writer and blogger and eventually progressing to software engineering. After moving his personal site, extrachill.com, to WordPress in 2018, Chris went deeply into WordPress, developing custom plugins and exploring all the corners of the platform. His passion for experimentation and creative tech led him to Automattic, where he now helps shape the WordPress experience as a software engineer.

Our discussion centers around two main topics: Data Liberation and the Static Site Importer tool. We focused upon the evolving landscape of website migration and ownership. Chris explains how Data Liberation aims to make it easier for users to take control of their site, whether they’re moving to WordPress from platforms like Wix, Squarespace, or Drupal, or just want portability for their data.

We also get into the Static Site Importer, which takes this a step further by converting any static HTML / CSS website into a fully editable WordPress block theme, headers, footers, and all.

Chris walks us through how these tools work in tandem, highlighting the mechanics behind website crawling, mapping HTML elements to Gutenberg blocks, and handling complex features like WooCommerce and calendars.

We talk about the continuous improvement of these tools, how each migration helps raise the bar for future imports, and how this project could fundamentally change the way people move websites between platforms.

If you’re curious about the future of website migration and how WordPress is removing the hurdles for users who want to truly own and manage their content, this episode is for you.

Useful links

Chris’ extrachill.com website

Chris’ chubes.net website

Static Site Importer on GitHub

WordPress Studio

Data Liberation Project

liberate.sh website

Chris on X

by Nathan Wrigley at October 21, 2026 01:00 PM

Donncha: Switching off PHP until upgraded

There’s going to be an emergency PHP release made in just over 2 hours. It’s to address a critical security bug.

I’m not sure how long it’ll be before Ubuntu updates, but I will preload a bunch of posts here and on inphotos.org using WP Super Cache and turn off PHP until it’s updated. The files will be served by Apache’s mod_rewrite, so no PHP involved at all. Uncached pages won’t be so lucky, but at least some pages will still be live.

#PHP #WordPress

by Donncha at October 21, 2026 11:46 AM

October 20, 2026

WordPress.org blog: WordPress 7.2 Beta 1 is Ready for Download and Testing

This beta release is intended for testing and development only. Please do not install, run, or test this version of WordPress on production or mission-critical websites. Instead, use a test environment or local site to explore the new features.

How to Test WordPress 7.2 Beta 1

You can test WordPress 7.2 Beta 1 in any of the following ways:

WordPress Beta Tester PluginInstall and activate the WordPress Beta Tester plugin on a WordPress install. Select the “Bleeding edge” channel and “Beta/RC Only” stream.
Direct DownloadDownload the Beta 1 version (zip) and install it on a WordPress website.
Command Line (WP-CLI)Use this WP-CLI command:
wp core update --version=7.2-beta1
WordPress PlaygroundUse a 7.2 Beta 1 WordPress Playground instance to test the software directly in your browser. No setup required-just click and go!

The scheduled final release date for WordPress 7.2 is December 8, 2026. The full release schedule can be found here. Your help testing Beta and RC versions is vital to making this release as stable and powerful as possible. Thank you to everyone who contributes by testing!

Editing Experience

Responsive Design Controls

Building on the responsive design improvements introduced in WordPress 7.1, WordPress 7.2 expands viewport-specific styling to additional design tools and blocks. Creators gain more granular control over how layouts and visual settings adapt across screen sizes, including responsive Gallery settings for columns, image cropping, and aspect ratios.

Learn more: GitHub #80388, #82003

Improved Global Styles and Design Tools

WordPress 7.2 makes site-wide styling easier to manage with a new Customized filter for finding blocks with modified styles and inherited Global Styles values displayed directly in block inspector controls. Expanded design tools and support for styling form elements provide additional flexibility when creating a consistent visual identity across a site.

Learn more: GitHub #82520, #76525, #34198, #84657

Text Shadow Support

WordPress 7.2 introduces new text shadow controls, giving creators more ways to add depth and emphasis to their content. Text shadows can be customized through block settings and defined as presets in theme.json, making it easier to maintain consistent typography across a site.

Learn more: GitHub #73320, GitHub #79584, Trac #65869

Easier Navigation Management

Improvements to the Site Editor make managing navigation links more intuitive. Creators can add, organize, and edit navigation items directly from the editor sidebar, making it easier to maintain site menus without interrupting their editing workflow.

Learn more: GitHub #77069

Better Collaboration with Notes

WordPress 7.2 introduces Emoji reactions on notes and a new toolbar icon that makes Notes easier to access and manage. Notes move to the editor canvas, bringing conversations directly into the margin. Users can now keep Notes and the block settings sidebar open simultaneously, making it easier to review feedback while editing content.

A new minimized Notes mode reduces visual clutter, while improvements to positioning and display create a smoother, more consistent collaboration experience.

Learn more: GitHub #79970, GitHub #83786, GitHub #80015, Trac #64638

Faster, More Efficient Media Uploads

WordPress 7.2 expands client-side media processing to the Media Library, allowing images to be resized, compressed, and converted directly in the browser before being uploaded. This can improve upload performance, reduce server resource usage, and provide better support for modern image formats, particularly on hosting environments with limited image-processing capabilities.

Learn more: Trac #65661, GitHub #12585

New “On This Day” Dashboard Widget

WordPress 7.2 introduces a new On This Day dashboard widget that helps users rediscover content published on the same date in previous years. By highlighting posts from the site’s history, the widget makes it easier to revisit past content, celebrate milestones, and find opportunities to refresh or reshare older posts.

Learn more: Trac #65116

Block Editor Usability Improvements

WordPress 7.2 includes a collection of smaller improvements aimed at reducing friction in everyday editing. These changes include clearer error messages, more helpful feedback when something goes wrong, and refinements to common editor interactions, making the editing experience more predictable and approachable.

Learn more: GitHub #81453, #82496, #84656, #84649

A More Consistent WordPress Admin

WordPress 7.2 continues modernizing the administration experience by replacing legacy Dashicons in the admin bar and sidebar with icons from the WordPress icon library. The updated icons bring greater visual consistency between the traditional WordPress dashboard and newer editing interfaces.

Learn more: GitHub #12270

An Updated Block Settings Experience

A new DataForm-powered inspector introduces a refreshed approach to managing block settings in the editor. Built on the DataForm component system, this work aims to provide more consistent controls and a more extensible foundation for future block editing improvements.

Learn more: GitHub Gutenberg · Call for Testing

Faster WordPress Administration

WordPress 7.2 improves admin performance by modernizing how scripts and stylesheets are loaded. Instead of combining assets into large files, WordPress now loads them individually for better browser caching. A new prefetching mechanism also anticipates which admin screen users are likely to visit next, loading its resources in advance to make navigation between the dashboard, post lists, and editor faster.

Learn more: Trac #57548

For Developers

New Secrets API

WordPress 7.2 introduces a Secrets API, providing developers with a standardized, secure way to store sensitive credentials such as API keys and authentication tokens. The API supports encryption at rest, credential rotation, and customizable storage providers, helping plugins and integrations manage sensitive information more securely.

Learn more (Trac #66187)

Random Content Redirects

WordPress 7.2 adds support for random content redirects, allowing visitors to discover a randomly selected post through a dedicated URL. This provides a simple way to encourage content exploration and help readers rediscover older posts.

Learn more: Trac #64498

More Powerful APIs for Developers

WordPress 7.2 expands the Abilities API with new capabilities for accessing and querying WordPress data, providing a more consistent foundation for integrations, automation, and AI-powered tools. (Trac #66268, #64605, #64657)

Enhancements to the Interactivity API introduce new ways to render trusted HTML and manage reactive navigation, giving developers more flexibility when building dynamic, interactive blocks. (Trac #66246, Gutenberg PR #83092)

Additional improvements to the HTML API, block supports, and responsive design tools provide more reliable markup processing and greater control over how custom blocks are styled and displayed across devices. (Trac #65824, #66150, #65869)

How important is your testing?

Testing for issues is a critical part of developing any software, and it’s a meaningful way for anyone to contribute – whether or not you have experience. Details on what to test in WordPress 7.2 are available here.

If you encounter an issue, please share it in the Alpha/Beta area of the support forums. If you are comfortable submitting a reproducible bug report, you can do so via WordPress Trac. You can also check your issue against this list of known bugs.

Curious about testing releases in general and how to get started? Follow along with the testing initiatives in Make Core and join the #core-test channel on Making WordPress Slack.

WordPress 7.2 will include new features that were previously only available in the Gutenberg plugin. Learn more about Gutenberg updates since WordPress 7.1 in the What’s New in Gutenberg posts for versions 23.7, 23.8, 23.9, 24.0, 24.1, 24.2, and 24.3.

What’s new in WordPress 7.2?

With so much in progress for WordPress 7.2 Beta 1, this is still only the beginning; expect continued refinement with each Beta and RC release ahead of the final release on December 8, 2026

Just for you: a Beta 1 haiku:

Ipsum takes the stage
Secrets bloom, designs take shape
New blocks come alive

Props to @audrasjb, @annezazu, @adamsilverstein, @westonruter, @markoserb, @im3dabasia1, @jorbin, and @noruzzaman for proofreading and review.

by David Baumwald at October 20, 2026 04:02 PM

Open Channels FM: Community Without the Noise, Revisited

A commentary on building meaningful online communities that prioritize value and listening over constant activity.

by Bob Dunn at October 20, 2026 01:46 PM

OpenStation Blog: OpenStation: turn wp-admin into a desktop, and try it in 30 seconds

OpenStation is a free WordPress plugin that turns wp-admin into a desktop. Every admin screen opens in its own window that you can move, resize and keep open next to the others. You can try it in your browser right now, with nothing to install.

Can’t see the video? Watch it on YouTube.

Why we built it

Most of us spend the day jumping between screens in wp-admin. You open a post, go back to the list, check the media library, then go back again. With OpenStation, those screens stay open side by side, so you don’t lose your place.

What you get

  • A window for every admin page: posts, media, settings, plugins
  • A dock with your whole admin menu, including your other plugins
  • Several desktops, for example one for writing and one for site settings
  • Wallpapers, widgets and accent colors
  • Cmd+K to jump anywhere fast
  • Your windows are still open when you come back

Try it in your browser

Go to the OpenStation page on WordPress.org and click Live Preview. It runs a full WordPress site with OpenStation in your browser tab, so you can’t break anything.

Install it on your site

  1. In your admin, go to Plugins → Add New and search for “OpenStation”
  2. Click Install Now, then Activate
  3. Click the desktop icon in the top-right corner of the admin bar

It’s safe to try

OpenStation is opt-in for each user, so the rest of your team keeps the normal admin. Click the same icon to go back to the classic view. If you deactivate the plugin, wp-admin goes back to exactly how it was. It doesn’t change WordPress core.

Tell us what you think

Have a question? Ask in the support forum. Found a bug or have an idea? Open an issue on GitHub.

by Daniel López at October 20, 2026 01:44 PM

Open Channels FM: More Code, More Problems? What AI-Generated Software Means for Us

AI tools have simplified app creation, enabling rapid prototyping. However, the challenge now lies in discerning which ideas are genuinely valuable to users. As anyone can create apps quickly, the focus should shift from mere production to understanding user needs and ensuring the apps solve real problems to avoid mediocrity.

by Open Channels FM at October 20, 2026 10:01 AM

October 19, 2026

Donncha: Travel Steps is a travel journal

I made a WordPress plugin for my holidays. It’s called Travel Steps, and it turns a trip into a page with a map down one side and the story of each day down the other.

Every photo I take ends up in Immich, on my own server. My phone sends where I’ve been to Dawarich, on the same server. So after a trip I have all the photos and the whole route, sitting in two apps on my private server. The travel apps that make nice trip pages want your photos and your location on their servers. I’d rather keep them on mine.

How it works

You make a trip, give it a first and last day, and press Sync. Travel Steps asks Dawarich for your location over those days, and Immich for the photos you took. You can pick one Immich album instead. If you don’t use Immich at all, upload the photos to the trip. It will detect the start and end dates from the uploaded photos, or an Immich album too.

One sync, and a step for each day.

Sync makes a draft post for every day that has favourite photos. Each one is a “step”. It splits the day into places too. A new place starts when a favourite is more than 2 km from the last one and in a different town. Each place gets a heading and a block of photos, so all that’s left is the writing.

Each day is a post you write in the block editor. The photos under each heading come straight from Immich.

Place names come from GeoNames data that ships with the plugin, so naming a town doesn’t send your location anywhere. Immich only names a place from a photo’s own GPS. A photo from a camera without GPS gets placed from your Dawarich history instead, and named the same way.

Publish the days you want people to see. Drafts stay private, and so do their photos.

The map follows you as you scroll. Get to day 3 and day 3’s markers light up.

The distance at the top follows the whole route, flights included. GPS glitches that put you in the Atlantic for a second are dropped. Anything you’d have needed to travel faster than 1,080 km/h to reach counts as a glitch. Sorry, Concorde.

Your photos stay at home

Visitors never talk to Immich. WordPress fetches each photo, caches it and serves it itself, so Immich and the original files stay private. It caches a trip’s photos in the background after a sync. The trip keeps working when Immich is down. A daily sweep deletes cached photos older than a number of days you choose, whether a trip still uses them or not, and they’re fetched again the next time someone looks.

Photos you upload to a trip keep their GPS in the original, but it’s stripped from every copy WordPress makes, and only those copies are ever sent. A trip can have a password, and you can let some logged-in people skip it.

Pin, hide, cover

Hover over a photo to pin it (always show it), hide it, or make it the trip’s cover. The rest of the day’s photos sit behind a “Show more photos” link.

On phones, those buttons show up after you press Edit photos as illustrated by the images below.

Tap a photo and it opens full screen. On a phone you swipe from one photo to the next, edge to edge. On a desktop there are arrows, and the arrow keys work too.

Try it

Here’s a demo in WordPress Playground. It’s a week in the west of Ireland, running in your browser that installs nothing. Stand-in Immich and Dawarich servers feed the real sync code with photos from Unsplash. You’re logged in as an admin, so press Sync, pin and hide photos, and edit the days in the block editor. It all disappears when you close the tab.

The code is on GitHub. To install it, download travel-steps.zip from the latest release and upload it under Plugins → Add New. It needs WordPress 6.7 and PHP 8.0. Immich and Dawarich are both optional. It has been submitted to WordPress.org but if you read this blog, you’ll know how to install a plugin from a zip file!

WpApp

Travel Steps is built on WpApp, Alex Kirk’s framework for building apps on top of WordPress.

A plugin usually adds screens to wp-admin, or puts its pages inside your theme and hopes the CSS gets along. A WpApp app gets its own URLs instead (/travel-steps/ here), and its pages are plain HTML with no theme in the way. WordPress still does the boring work: users and logins, roles, the block editor, the REST API, cron and the database. WpApp adds the bits in between:

  • URL routing, using WordPress rewrite rules,
  • pages that don’t load your theme,
  • the admin bar on every page, with the app’s own icon (the green map at the top of my screenshots),
  • access control using WordPress capabilities.

You can start one with composer create-project akirk/create-wp-app my-app. Alex has a showcase of apps built with it, including a cookbook and a family wiki.

Built with Claude Code

I wrote Travel Steps with Claude Code. The first commit was on 11 October, and there are many more now. Most of the work went round the same loop. I file an issue, Claude fixes it test-first on a branch and opens a pull request, and other agents review it. I deploy it to my own server and try it. The tests run in WordPress Playground too, the same as the demo.

If you run Immich, give it a whirl. Bug reports welcome on GitHub 🙂

Demo photos from Unsplash: Cliffs of Moher by Jarek Skowron, Temple Bar by Sarah, Galway by Daniel Zbroja and Anna Hunko, Kilronan by Jonathan Borba. Map © OpenStreetMap contributors.

#TravelSteps #WordPress #WordPressplugin

by Donncha at October 19, 2026 02:15 PM

WordCamp Central: WordPress Campus Connect Ahmad Education, Dhaka 2026

by ATIKUR RAHMAN at October 19, 2026 11:04 AM

Open Channels FM: Why Fast AI Inference Is a Game Changer for Developers

In tech, speed can make all the difference. One topic that doesn’t get enough attention is just how much faster AI inference is changing the way developers work. Training AI models still grabs the headlines with all the talk about big clusters and huge data sets, but the real impact for most developers happens when […]

by Open Channels FM at October 19, 2026 09:48 AM

Dennis Snell: Radical explorations in agentic development

In mid-April 2026 my employer started a project called “Radical Speed Month” to step away from our existing structures and processes, make space for people to dive more deeply into AI tooling, and try to build new or sleeping ideas. My participation in this experiment ran until late September and I stacked up a lot of explorations without having written about them or about the process. In this post I’d like to highlight some of the results of this time and share some learnings.

Selected lessons

  • Massive agentic deployment demands heavy storage and generic compute capacity — inference is not the only bottleneck. This is necessary to support massively parallel checkouts of code, benchmarking, analysis of other software and data, running hierarchies of thousands of test workers and headless browsers, generating and analyzing image and video artifacts, creating indexes, and more.
  • Instructing an agent to “find the five hidden defects” is more effective at finding real issues than asking if there are any hidden defects. They may return false claims, but they try to answer the questions they are prompted — it’s not that different than the comparison between asking someone what in their day brought them a smile, or what was difficult for them, rather than asking “how was your day?”
  • Agents with web searching capabilities are powerful knowledge-retrieval and aggregation tools. Reports they generate to aid in developing code can be more effective than asking the agents to generate the code directly.
  • Models today are incredibly powerful, but guiding human insight is also powerful. Autonomous agentic activity demonstrated a tendency to produce more evidence of accomplished work than actual accomplished work. In a strange way this might reflect the training dataset: corporations must also guard against the dangers of overly-burdensome paperwork.

Projects

All of the projects here were almost entirely built by AI agents, but with my guidance and supervision. Therefore, credit for each of them does not rest entirely with me. However, for the sake of brevity I will omit mentioning in each one that AI tooling was the actual producer.

Each project below is assigned a truly unscientific evaluation:

  • ✅ The project succeeded with clear value.
  • 🤷‍♂️ The project completed its goals, but the value is unclear.
  • ⏳ The hard work has completed, but I need to close the loop and deploy it.
  • 🔄 The idea is sound but not ready; it needs more development.
  • ❌ The project failed to bear fruit for any reason.

My personal favorites:

Tools

Because I expected a short availability for the enhanced AI access, I prioritized building, early on, tools whose value would outlast the project. Generally I prefer working in offline or local environments, so I built archivers for several services which are only available when connected to the Internet.

While MCP servers were very popular at this time, I have always been unhappy with the load centralization and amplification they create. The same is true for any online resource against which agents perform searches. My intuition is that it’s more considerate to those services to make one batched update, to download all new data since the last sync, than it is to make repeated queries which might overwhelm their servers and fetch the same resources over and over.

Being offline and local, the archivers are extremely fast and operate in the terminal where I prefer to interact.

✅ GitHub archive

Finding GitHub’s search functionality lacking, and wishing for a chronological stream of my activity, I built github-archiver so I could have the tools and performance I wanted. This initially supported searching through PRs, issues, and comments, as well as rendering my own activity in a reverse-chronological view. I eventually added two additional views for replies: people I replied to, and people who had replied to me. This gives me great awareness of my recent conversations and has helped me to avoid losing conversations. Sometimes I struggle to find a PR that I meant to follow-up on, but it disappears from my GitHub notifications and I can’t remember the exact wording that will turn it up in a search result. I even tend to forget in which code repository it was left, so my tool aggregates activity across all archived repositories.

The basic design is a compressed HTTP cache of the GitHub API. When fetching or updating, it respects rate limits and leans on HTTP headers to avoid wasted transfers. After some work with banking APIs several years ago, I found that storing raw HTTP responses proved more flexible than parsing into a custom internal data type, as it lets me rewrite logic in the app later without having to re-download the entire archive. This came in handy several times as I expanded the search index and added more functionality.

The tool renders GitHub content as richly-formatted and highlighted text in a console unless running outside of an interactive TTY. It renders Markdown and HTML content into this rich text format and lays out meta elements in a meaningful way. Its speed, zero-network dependence, and minimized output make it a good fit for agents that would otherwise be hammering GitHub’s API, waiting, and wasting tokens on irrelevant content.

github-archiver renders PRs, Issues, comments, and line-level comments into the terminal with parsed markup, syntax highlighting, code snippets, and links created via ANSI terminal codes. It provides an alternative to the slower browser-based interface.

✅ Trac archive

Just like the github-archiver, I built a trac-archive for WordPress’ Trac system. It is feature-similar to the GitHub archiver, but provides an additional perk: because bots relay messages from GitHub back into Trac, issues often have two markup formats in use simultaneously. My trac-archive first parses its content according to Trac’s own system, but then it additionally parses Markdown where it finds it. It shares much of the rendering logic with the github-archiver and provides a clearer experience than the web view due to the additional parsing, syntax highlighting, and ability to exclude bot traffic from the results.

Like the github-archiver, the trac-archive renders tickets into the terminal with parsed markup, syntax highlighting, code snippets, and links created via ANSI terminal codes. It provides an alternative to the slower browser-based interface and in many ways a more usable one due to the way Trac aggregates content from GitHub.

✅ Review the evolution of a series of commits over time

git-sequence-patch was used to help me understand the full scope of the WordPress collaborative editor project. Since many large features or projects span many commits and possibly even months or years of work, this tool reads a number of git commit SHAs and will build a fictitious patch that more or less represents how the entire project would be proposed were it to be proposed against the latest branch head. Another way to look at this is to generate one massive revert commit for the original feature and all descendant changes to it since its inception.

This is a project I had been wanting to build for a long time; for each of the given commits, it tracks which lines were changed by the commits, and then steps forward through the branch history, noting when other commits also modify or remove those lines. Once it completes at the branch head, it prepares a patch to replace all of those lines with the code that was there before the original patch, and reverse the patch. This means that it doesn’t produce a patch that would actually merge, but it produces a patch that’s useful for understanding the full scope of how a change evolves over time.

It’s line-oriented and so would miss some obvious scope. For example, if tracing the sequence for a new function, it will miss a later change which calls into that function. This would actually be possible to add to the tool as an enhancement, but it wasn’t necessary for my purposes at the time and I think it would remain ideally an option rather than a default behavior.

I spend a lot of time trying to quickly understand entire systems that I didn’t write or have any experience with, and this tool is a delight for answering the question: “how has this change evolved through time?”

✅ Analyze real-world HTML from Common Crawl

To better test the HTML API against real HTML documents, I built cc-analyzer, which feeds data from the Common Crawl index into a user-supplied PHP script. This operates in two modes: streaming and batched. In streaming mode it continuously sends HTML documents from the archive into the analysis script. In batched mode, it saves documents from the archive into a subdirectory and then may be invoked again to re-run those documents through specific analysis scripts.

This project has greatly benefited the testing and verification of the HTML API, and informed decisions about what actual HTML syntax patterns exist on the web and what concerns are practical and which are esoteric. Throughout this grand experiment I have examined hundreds of thousands of HTML documents to test the HTML API code, to understand reported and actual text encodings of websites at large, to benchmark changes and optimizations for the HTML API, and to understand parsing needs of real HTML documents.

✅ Instantly search code from the WordPress ecosystem

Veloria.dev (formerly WPDirectory.net) provides fast code search across all of the plugins and themes listed on the WordPress directory. It was experiencing elevated outage rates and I decided at the start of September to recreate it locally as a single binary with a simple compressed offline archive. Previous efforts to slurp the directory left efficiency gains on the table and output around 120 GB of data on the filesystem. By taking advantage of available concurrency, streaming computation as resources are downloaded, pruning the stored files to those which were being indexed, and saving into a custom compressed binary object, my wp-code-search tool was able to archive the directory in five hours storing only 5 GB among three data files: a compressed archive of the source files, a search index, and a metadata archive.

This idea originally came from Dan Luu, who commented that “if we’re repeatedly searching for text on a computer, the obvious thing to do to speed that up isn’t to write a native code compiler for regex matching, it’s to create an index.” Code searches across the entire directory typically return within 10 ms, output syntax-highlighted snippets from the files in which they are found, and the tool can extract those files or entire plugins from the compressed archive. The index is sorted by active installs so the most-deployed results appear first.

When performing searches on the WordPress directory, the results print out with the name of the file the result was found in, how many active installs the plugin reports, and a syntax-highlighted snippet of the code with the search matching underlined.
Basic regex searches execute in milliseconds.

This tool has become an invaluable daily driver for me as I refactor Core WordPress internals and want to avoid needlessly breaking existing code.

Towards the end of September I had another long-shot idea: could the ideas making the text search so fast be mixed with structural queries so that I could perform data-flow and control-flow analysis on the code? Turns out that yes, with another 5 GB sidecar index, and a custom WordPress-specific query syntax this was not only possible, but practical with many complicated queries executing in anywhere from a few seconds to a few tens of seconds.

There’s a lot of power in this query syntax to identify complicated code structures and I still have to learn how to generate the kinds of queries I want to. I built the structural code search to aid in discovery of risky code patterns to harden as part of my work improving WordPress’ security stance.

🤷‍♂️ Text-mode access to the modern web

My zs tool performs web searches and downloads rendered HTML pages in the terminal. Fascinatingly enough, when I attempted to start this project I tried explaining very clearly that I wanted to adhere to the terms of use for all services, that I wanted to respect the remote servers providing the content, and that this was a user-agent acting on my behalf to perform queries in the terminal instead of a browser. Unfortunately, it seems like the instructions to follow the rules were misinterpreted as attempted bypasses and overly-refused.

Regardless, I was able to create this non-GUI browser and build up enough of the Web Platform to render the pages I wanted to view. When Captchas and other verification interstitials appear, they render inline into the terminal via terminal raster commands. I’m able to indicate which boxes contain the bus, or motorcycle, or a bridge, which Google seems really intent on learning, and continue with text flows and shell pipelines.

My motivation for building this was to perform web searches from the CLI, but once I had the mechanisms in place to interact with the search engines, I realized I could also use this to grab dynamically-rendered pages. For any given URL, a page loads, executes scripts, and renders until the JavaScript event queue empties or a timeout trips, and then the final DOM serializes into the HTML output.

This makes the tool more valuable than my typical curl flow, which too-often downloads an empty HTML page reminding me that I should be using JavaScript. Because it implemented so much of a browser’s internals, I added a feature to extract the visible text content of the rendered page, something which is surprisingly difficult to download without a full browser and CSS engine, and something which is really valuable when trying to pipe documentation pages into coding agents.

All in all it’s a bit buggy and I would like to start over based on what I learned along the way. It still works sometimes and it’s valuable to me when web pages return otherwise-empty mountains of script contents.

WordPress.com

⏳ Clarify wording in notification messages

WordPress.com sends notifications about comments, likes, follows, etc., and sometimes the wording is awkward or inconsistent. I generated a report classifying emotional content of the wording and suggested improvements to better inform the reader of what they could or needed to do. It was effective at joining snippets of strings that are concatenated together throughout the code and provided useful insights. It also provided good suggestions for updates that focused on removing anxiety and clarifying possible actions to take in response to the alerts (e.g. replace “Renewal Failed” with “Payment did not go through; update by May 18 to keep your plan active”). Unfortunately those updates are still on my backlog to deploy.

⏳ Migrate confused legacy data to simplify runtime code

There are old notification records in the database with conflated and truncated values, and these require complicated code when rendering them to make sense of the confused properties. I was hoping that it would be possible to have the AI examine these broken records and the generating code and provide clear guidance on how to update them. Among 3,000 old records in the database, it proposed seventeen cases for recovery and fixing. Unfortunately this also sits in my backlog to assess and apply.

✅ Fix translation issues and typos

Developers frequently concatenate separately-translated strings which lead to confusing translations. I ran an analysis for this kind of translation issue inside the notifications source code and also for typos and other mistakes. This produced a list of around fifty bug-fixes, including for a missing namespace specifier that was broken for more than a decade and which hadn’t been noticed in error logs, malformed HTML tags which had been hard-coded in string literals, plenty of concatenated translated strings, broken interpolation placeholders, missing calls to the translation function, and missing null checks. This was deployed in May to the production system.

WordPress, the open-source project

🔄 Generate automatic previews for dev-docs changes

WordPress Playground runs a copy of PHP and WordPress entirely in the browser via compilation into a WASM environment. It provides testable previews for WordPress and Gutenberg PRs. Missing has been a way to preview changes to the generated developer documentation, which is notoriously difficult to get running at all, let alone dynamically in a browser. I proposed a demonstrator in #29 that does just that through a GitHub Actions workflow on PRs. It has inspired follow-up, but due to the need to ensure a maintainable solution, is still pending deployment.

🔄 Harmonize the ignore ruleset across git and Subversion

The official WordPress source code lives in Subversion with a git mirror. The .gitignore and Subversion ignore rulesets are fundamentally distinct from each other, notably in that git ignore patterns apply recursively through a file tree. I attempted to use AI to harmonize the rulesets. Some adjustments were made, but the entire set still needs careful review.

✅ Visualize per-package activity within Gutenberg

To better understand per-package activity within the Gutenberg editor project, I produced a visualization showing commit activity.

✅ Provide deep insight into PHP script execution

Inspired by my childhood Gameshark, I built a PHP extension to improve my ability to debug and analyze PHP script runs. This started as a way to compare two runs of a given script, but expanded into a set of related but distinct modes.

Differential mode compares which functions were called and how many times across two different script runs; this could be useful for performance optimizations or comparing what runs for two different code paths and was built initially while working on page renders vs API call responses.

Trace value records every function or method call whose arguments contain a requested value. It tracks user space as well as builtin functions and was built to help identify code paths which send untransformed data where it shouldn’t reach. A follow transformations option tracks not only the given value, but also common escaped, encoded, serialized, quoted, slashed, and other variations of it. This is a clever security tool for finding out where and how unwanted data is passed around.

Invariant mode takes a PHP file with “hooks” that attach to functions and methods, either during entry into those contexts or when returning from them. They are supplied the values to the arguments, the $this value if a method, and the return value if a post hook. This enables a novel approach to applying software contracts on code with neither the production runtime overhead nor the noise from the contract-enforcement. This was loosely inspired by Clojure’s core.spec. Because the hooks file is user-space PHP code with access to global state, this provides mechanisms for enhanced testing and analysis code, and when registering a shutdown handler in PHP, can print reports at the end of script execution. Hooks may also raise exceptions to halt execution when any desired invariant is violated, such as when preg_match() receives a pattern that might be attempting to parse HTML.

Unused runtime coverage mode generates a report of all loaded identifiers which were never read or executed during a script execution. A sampling option can be used in production to assemble such a report, probabilistically, over time. This mode was designed to find effectively dead-code that might be lurking behind runtime conditions which can never actually run due to real data distributions. For example, a function which is only ever called before a given date, when the given date is several years in the past. Static analysis will miss this while a month of production sampling with no calls will provide evidence that it’s safe to remove the function, that no other strange or unexpected call-paths are still calling it.

Trace allocations mode traces heap allocations made by PHP during a script execution. It immediately surfaced unnecessary allocation in wp_is_numeric_array(), which was promptly eliminated in [#12100].

This extension has provided incredible insight into how WordPress and other PHP scripts run, and I’ve only scratched the surface of how I can take advantage of it.

🔄 Introduce dynamic security policies into PHP with eBPF to isolate plugin code and extensions

Like the php-gameshark extension, I built a modified php binary which coordinates with eBPF in the Linux kernel to apply dynamic security policies and create isolated security domains within executing PHP code. There is no logical separation between executing the Core WordPress code and the code from plugins running on a site. This is a security challenge because the two kinds of code warrant different trust, and a site operator may want to assign unique trust and capabilities to different plugins.

This extension provides a wp_runtime_security_apply_policies() function which registers sandboxing rules against files whose source code matches the provided glob. It allows disabling network access, shell execution, sending of emails, reading uploaded files, and writing uploaded files demonstrating a path towards securing WordPress sites from errant or malicious plugins, as well as an explicit opt-in capability model for plugins as they have need. It doesn’t just protect user-space PHP code either; thanks to the fact that policy enforcement occurs within eBPF, it can also apply the same policies against compiled PHP extensions running on the host, assuming that the extensions are not actively attempting to exploit the guards (the protection is aimed at security vulnerabilities within the commonly-deployed PHP extensions, not against potentially-malicious extensions).

I built this extension after a discussion with Lynn Griffith at WordCamp US in late August. It seems promising but is under-developed and needs production testing. As it relies on eBPF, it only supports Linux environments, ruling out Windows, BSD, and macOS-based hosts.

User-space PHP code can change the current policies by passing a descriptor object to the extension showing which file globs are to have which privileges.
Policy rules stack: code deeper in the call stack may further restrict the permissions, but cannot expand them.

✅ Benchmark HTML parsing optimizations against realistic data from the Internet

With the aid of cc-analyzer, I automated the benchmarking of numerous optimizations that we have explored over the years with the HTML API, mostly changes to the internal data structures and how attributes are represented during the parse. The AI tooling provided the run-scripts for cc-analyzer, invoked it, and gathered the results. It also collected PRs that I had proposed (using the github-archiver) since May 2023 so that I didn’t have to find them.

✅ Fuzz-test the HTML API

I fuzz-tested the HTML API, finding several unreported bugs, including easy-to-overlook defects in the code. Fuzzing in this way also prevented a number of defects with the rewrite of wp_kses(). This complements the existing spec-compliance tests against the html5lib test suite, practical tests against real HTML from the web, and a unit-test suite covering intentional behaviors.

❌ Scaffold fuzz-testing in Gutenberg

I attempted to build a generalizable fuzz-testing infrastructure for the Gutenberg editor. This was an extended autonomy agentic session that ultimately produced a good-looking dashboard with nothing but false-alarms. I tried to establish a framework in which other developers could easily add new generative categories and the system would run new fuzzers for them, compare outputs, and triage failures. AI parallelism made for impressive work, but in this early project I was unable to accomplish my goal and gave up on the idea.

✅ Port data sync libraries into PHP

As an experiment in goal-oriented design, ten distributed data structure libraries were ported into PHP userspace code to aid in building a demonstrator for the DE-RTC prototype [#12334, #79602]. With minor caveats, this built working copies of yjs, automerge, loro, diamond-types, diff-match-patch, json-patch, json-joy, sharedb-json0, prosemirror-collab, and collabs which passed their upstream test suites when they were converted to call the PHP code. Eight of the libraries were completed within a few days, but loro (the library I was primarily interested in) and json-joy held out the longest, taking weeks to complete. They appeared stagnant for the bulk of that time and rapidly finished passing the remaining tests in a burst at the end. While I had originally built a prototype collaborative editor with yjs (which is what the existing project team had chosen to use in JavaScript), once automerge completed I was able to swap out the synchronization primitive and later do that again with loro, adding the capability to make more semantically granular changes and merges. This work was almost entirely hands-off and ran in the background until it was completed; every ten minutes it updated an HTML dashboard showing status and operating notes.

✅ Fuzz-test the proposed collaborative editor for WordPress

From the end of April until October, I paired with Dan Luu to fuzz-test the collaborative editor proposal, and we uncovered an array of issues which ultimately led to changes in the timeline for the project, as a number of the defects were nontrivial to solve. Most of the fuzz infrastructure was built by Dan, while I attempted to coordinate the reproducible bug reports with the rest of the team and to propose fixes. The fuzzing machinery produced effectively no false positives due to the triage and reproduction steps built in. It also provided the visuals for theoretical bugs which are hard to diagnose manually with a keyboard and mouse, but which actually occur frequently in concurrent systems.

This was a high-reward project for the investment because, while AI was dominant in the early code generation, once the testing suite was established, it was able to continue to operate without much additional AI input, and it’s possible to run without any AI inputs.

It highlighted two aspects of fuzz-testing: the more robust the code being tested already is, the more valuable the fuzz-testing will be; and the more frequently a bug is likely to materialize, the more quickly fuzz-testing will find it. There is a good match here between the needs and the operating characteristics.

Actually, Dan and I were originally looking at working on other projects for this Radical experiment. I had suggested that we use the nascent collaborative editing project to organize our notes and work within a WordPress site — to “dogfood” the editor. We pivoted to this testing and design support role only because of problems which immediately appeared as we tried to use it.

✅ Prototype a comprehensive collaborative editing environment for WordPress

To demonstrate another approach to collaborative editing, I instructed an agent to follow my core principles and requirements for the task and build a prototype. At first I wanted the agent to mimic forming its own company, planning, dividing labor, and harmonizing productivity, but as this ran for weeks it kept descending into a cycle of producing more and more meaningless paperwork with less and less actual work. Around the end of May I rebooted the project with far more direction and guidance, replacing the goal-oriented and hands-off approach with a human-driving-the-loop method. This proved more effective and in two weeks I had a working prototype that demonstrated every aspect that I considered important and lacking in some of the other public proposals. At some point I will share a version of an internal post I wrote summarizing this work. It proved influential on the project and I believe that the continued development of collaborative editing is heading in a stronger direction as a result.

For years I have struggled to adequately convey why specific principles and requirements are important, but having a visual prototype made it feel real in a way that persuasion had failed me. The amount of up-front work to produce this prototype had been obstructive for years, and without the agent I would not have been able to communicate the tradeoffs involved in its approach.

✅ Restore developer documentation generation by updating deprecated legacy code

At the end of February I had restored WordPress developer documentation which had been stale for two years due to failing build scripts and deploy scripts. While this work resolved most issues and unlocked updated docs for WordPress 6.9, there remained a few unresolved issues which led to specific submodules being excluded from those docs. In mid-May, fixes for the remaining issues were applied to the dependent projects which removed all remaining barriers. All documentation was updatable again and the scripts could run in the latest PHP versions without crashing.

✅ Prevent mistakes in commit messages and automate the repetitive parts of writing them

After seeing my colleague Jon Surrell’s neovim linter for writing WordPress commit messages, I ported his linter into a single-binary/stdout LSP usable in any LSP-supporting editor. This expanded the work Jon did and built upon work from my other tools to show inline previews of Trac tickets and GitHub PRs. It included new auto-fixers for formatting and line ordering and I use this today to prepare my commit messages, avoiding mistakes I have overlooked in the past.

✅ Gather empirical evidence to guide parsing decisions in the HTML API

I used an instrumented custom build of PHP and lexbor in September to answer a perplexing question: “how many tokens of lookahead would be required for the HTML Processor to fully-parse a given percentage of all HTML documents?” This stems from the tricky re-parenting issues in HTML tree building, where a syntax form at the end of the document could appear towards the start of parsed tree structure. The instrumented code examined when lexbor ran its “adoption-agency algorithm” and tracked how much further into the document the current token appeared after the token associated with its actual parent node.

An hour-long run of cc-analyzer showed that among 70,000 documents, approximately 1,000 require at least 1-token lookahead, only about 250 could parse with 5-token lookahead, and 13 would have required more than 10,000-token lookahead! In one case, a document contained an un-closed <b> tag near the start of the document, and then 400 kB and 35,000 syntax tokens later, triggered re-parenting — no default behavior will offer 35,000-token lookahead.

The outcome of this run was disappointing, but the data was invaluable and prevented wasting time implementing a lookahead mechanism that wouldn’t meaningfully benefit consumers of the API.

✅ Review and scrutinize code change proposals

Throughout the entire experiment AI was providing valuable code review and patch preparation. WordPress security fixes are typically backported to WordPress 4.7, which covers 25 released versions and trunk. Many of these support older versions of PHP missing standard-library features that newer code depends on, and lack WordPress functionality that newer code depends on. When preparing a backported patch, I created reports detailing which features and functions had to change at each WordPress release, and what was driving that need. I found these to be more useful than having agents automate the backporting as fewer mistakes were overlooked when I was performing the changes with the assistance of the reports.

AI code review was invaluable though during the refactor of wp_kses() within WordPress. For weeks I instructed it to find the remaining overlooked defects that need resolving before merge, and it kept finding places to harden or fix the code. I never asked an agent to perform “code review” or indicate if a patch was ready to go. Instead, I instructed them to find hidden defects that I wasn’t sure existed, but when told to return three items, they would do it! I consider these kinds of situations among LLMs’ greatest strengths, when false negatives are more costly than false positives, and when validating claims is trivial. Every issue the agent claimed became a test that proved or disproved it and now guards against regression.

Simplenote and Simperium

✅ Implement well-defined feature requests in unfamiliar code

To explore autonomous feature development, I had an agent resolve a concrete bug report describing difficulty copying content from historic revisions of a note [#3358]. This kind of enhancement/fix was frustrating previously because it touches numerous parts of the codebase I was unfamiliar with. The models picked up a number of places I would have overlooked when working on the problem.

✅ Document confusing data flows in unfamiliar projects

The data service powering Simplenote was written with untyped Python code, and partial duck-typed data structures are passed around which can make code comprehension dizzying. While I wanted to avoid AI-generated code changes, given how critical the backend is, in late May I produced comment-only changes annotating data types and providing explanatory comments where certain code constructs were unclear. This was a low-effort way to pass along some insight about the code in hopes that it makes someone else’s job clearer in the future, as I have not maintained this codebase for years.

Random

🤷‍♂️ Monitor Codex usage

codex-usage-report.py scans the ~/.codex directory and summarizes token counts, the models which were used with them, and approximates the dollar cost of that usage based on current API pricing.

✅ Export Codex usage into a searchable format

As the radical experiment was drawing to a close, I created a Codex exporter which dumps the session data into a giant single-file HTML archive where I can search interactively through the sessions and view the chat history, including tool calls, in a rendered view. I’ve referenced this several times as it’s quick and easy compared to logging into a server, finding the right session, and searching through its history.

✅ Run inference on unsupported legacy hardware

My old MacBook Pro came with a dedicated Radeon GPU and sits idle or off most of the time. llama.cpp doesn’t support the older GPU and so I wanted to see if I could get it running. It did produce a working copy that runs local inference on the Radeon GPU, but in practice it underperformed the CPU-based inference for the same models. With only 4 GB of VRAM, it couldn’t load enough weights at one time to operate without constantly transferring data, and the transfer overhead was too high. I explored different means of sharing work between the CPU and GPU, but they were fighting for memory bandwidth.

While this didn’t provide me with a low-and-slow inference engine, it demonstrated the ideas and ran the experiments which is something I had little patience for, given that I expected poor usefulness in the best of cases.

✅ Fix bugs in proprietary hardware drivers

At home I use my Fujifilm X-T3 as a webcam. It makes for a great quality video feed, but when Fujifilm updated the camera driver to integrate with one of the previous macOS updates, they introduced a memory leak which would end up using 90 GB+ of RAM plus swap by the end of a call and sometimes take down my system before I realized it. Knowing I had little hope of motivating Fujifilm to fix this, I made a binary patch to the driver and fixed the bug directly. This was directly inspired by stories of Microsoft fixing bugs in components whose source code they had lost.

To my delight this fixed the memory leak and provided a plausible explanation. By decompiling the driver, the AI found a missing call to release JPEG data from each frame after passing it to CMIOSampleBufferCreate — a classic memory bug. It predicted the impact of this defect and confirmed the rate of memory bloat with successive system dumps of the process. To add the missing release call it shuffled around some existing instructions to a region of padding bytes in the driver and then called into those; this freed up the bytes necessary for the instructions to call the release function. 44 bytes are written across three spans to make the fix, and this is a verifiable fix that I was able to apply without disabling the system integrity protection — an even better delight.

This has been quite possibly my favorite AI-assisted project. There is no way I could have imagined doing this work myself or having traction with Fujifilm to debug and fix this issue, and yet now I can have video calls run on for hours (were I to want such a thing) and memory use by the driver is fixed; it doesn’t fill up and then purge all of my RAM.


A special thanks belongs to Automattic for providing this space in which to learn and explore, to OpenAI who provided elevated access to their frontier models and made it possible to preview what a future of abundant AI might look like, and to the Jetstream2 project funded by US taxpayers who donated high-capacity compute resources to help improve the reliability and security of the WordPress project. I would also like to thank Dan Luu, who worked with me on this project and who taught me so much about practical generative/fuzz testing, and with whom I could never keep pace, in the best of ways.

Over the course of this time period I worked with GPT-5.4 all the way up to GPT-6-Astra, at ultra thinking levels on fast priority, and with Claude Sonnet 4.6–5.4. The earliest use came from Qwen3.5-397B-A17B, but I had also been running Qwen3.5-27B-4bit locally before the experiment started, and by the end was relying on Qwen3.6-27B-4bit.

I’m thankful for the chance to reach into the past and demonstrate ideas I’ve had sitting on the back-burner, as well as to look towards the future and prototype designs I want to see turn into usable products.

by Dennis Snell at October 19, 2026 07:46 AM

October 17, 2026

Matt: Anthropic Employment

How employment is changing at Anthropic is a fascinating read.

by Matt at October 17, 2026 12:20 PM

October 16, 2026

Open Channels FM: Open Web vs Walled Gardens, Simplifying the Difference

A straightforward look at what the open web is, how it started, and why it matters for digital communities.

by Open Channels FM at October 16, 2026 12:09 PM

Matt: Pushing Standards

We get a lot of flak at WordPress.org for supporting older PHP versions, but an area we’ve always pushed the frontier is in Web Standards, getting websites and browsers evolving together to make the web richer. Ever since I caught the religion from Zeldman, promoting more functionality in the browser has been a life mission.

It’s a little nerdy, but we wanted to do client-side media processing (use all that amazing Apple and Google silicon instead of burdening the poor servers) so we used something amazing Google created called Document Isolation Policy. When WordPress 7.1 “Mary Lou” shipped these features only worked in Chromium-based browsers and Mozilla and Webkit/Apple weren’t keen to support it, but since then Mozilla has expressed support and WebKit has withdrawn their initial concerns. WordPresser Adam Silverstein has been driving much of this work and opened a WICG issue to help move the standard forward and formally requested that WebKit add support.

Hat tip: Anne McCarthy for helping with this post.

(If you want to see other crazy stuff we’re doing in browsers, check out WordPress Playground, I think it’s actually the perfect web development environment for agents, which can then publish to Spacefast.)

by Matt at October 16, 2026 12:40 AM

Follow our RSS feed: 

WordPress Planet

This is an aggregation of blogs talking about WordPress from around the world. If you think your blog should be part of this site, send an email to Matt.

Official Blog

For official WordPress development news, check out the WordPress Core Blog.

Subscriptions

Last updated:

October 29, 2026 04:30 AM
All times are UTC.