Blog

  • The velocity of innovation in the AI coding agent space is incredible—especially in TypeScript. Tons of different AI coding agents are being developed across the ecosystem: everything from local CLI agents (like Claude Code and Gemini-CLI), IDEs (like Cursor), and extensions (like Cline) to SaaS agents (like v0 and Bolt) and now open-source coding evaluation harnesses (like the recently released Next.js Evals). These diverse and fast-paced developments, while exciting, are surfacing a fundamental, recurring problem for developers: reinventing the wheel to solve the same infrastructure challenges.

    This post introduces my very new, early-stage project, AI Code Agents, a TypeScript SDK built on top of the AI SDK, specifically to address this technical challenge and foster faster, more efficient iteration across the ecosystem.

    Read more

  • For years, the world of Machine Learning and Generative AI has been synonymous with Python. And rightly so, its data science roots, scientific computing libraries, and extensive ecosystem have made it the undisputed champion for training models and managing data pipelines. But with the shift in recent years, AI has been moving from the data lab to the hands of end-users and product developers, and those people rarely use Python. Fortunately, a significant shift is taking place: TypeScript is stepping up to the plate. 🚀

    This isn’t a dig at Python by any means; I’m using Python a lot at work, and I enjoy it in many ways. That said, I’m simply excited that more and more AI tooling is emerging in a language that is intuitive for the vast majority of web developers who build customer-facing applications and developer-facing SDKs. This means building compelling AI experiences becomes more accessible to the web development community, and, as a result, to our products’ users as well.

    If you know me, you probably know I usually post about WordPress, and more recently about AI in WordPress. If you’re wondering about why I suddenly post about TypeScript, it’s simply a language I have been exploring more and more – both in the context of WordPress and outside. In particular, I’ve been keeping a close eye on some of the more recent TypeScript ecosystem developments that make me increasingly excited about what the future holds for AI on the web. And this TypeScript revolution truly moves the needle in that regard.

    Read more

  • In my last post, I shared 10 lessons from 10 years of contributing to WordPress Core. If you’re new to open source, I encourage you to review those insights. But today, I want to talk about something different: Even though you hopefully contribute out of passion and goodwill, giving back to an open source project can also give something significant back to you. Some of it my previous post may hint at, but in this post I’d like to look at it more broadly.

    As I mentioned in my previous post, contributing to WordPress Core has changed my career, and indirectly even many other aspects of my life, for the better in so many ways. And while my experience is rooted in WordPress Core, the benefits that OSS contributions can have for your professional development largely apply to almost any sizable open source project.

    Read more

  • Today marks a special anniversary for me: It has been exactly 10 years since I received my first props for a contribution to WordPress Core. And it was just a day before that I actually worked on that first contribution.

    You may know that I am a long-term WordPress Core contributor, having contributed ever since. To celebrate this 10-year milestone, I wanted to reflect on this journey and share the 10 most valuable lessons I learned along the way. But first, let me provide a bit of background about just how I started.

    Read more

  • I recently undertook a significant project: migrating the entire JavaScript codebase of my AI Services plugin for WordPress (GitHub repository) to TypeScript.

    Why is that significant?

    • We’re talking about over 80 JavaScript files, so it’s by no means a small project. Not gigantic like e.g. Gutenberg, but certainly a substantial amount of code.
    • Additionally, that JavaScript code is powering a plugin with a fairly unique feature set. This uniqueness often makes it harder for Large Language Models (LLMs) to assist, as there’s likely less similar code in their training data.

    The process taught me a lot about the synergy between a well-structured codebase and LLMs. It also strengthened my belief that, while an LLM isn’t magically going to solve complex development tasks for you, it can be a massive productivity booster when you prepare your project and guide it effectively.

    This post will walk you through how I used Cline in VS Code together with Google’s Gemini models to get it done efficiently and why I think this migration was worthwhile.

    Read more

  • I’m thrilled to announce a new plugin from the WordPress Core Performance Team: View Transitions! This experimental plugin brings the power of the cross-document View Transitions browser API to your WordPress site, allowing for smoother, animated transitions between page navigations.

    View Transitions?

    Traditionally, moving from one page (or, technically, URL) to another on the web has always involved an abrupt, “hard” reload. While this might seem completely natural to many of us on the web, user expectations have shifted drastically in the past (almost) two decades.

    Native mobile applications, with their seamless in-app navigations and smooth transitions, have set a new bar for user experience. This has led web developers to try to catch up with that experience, often turning to Single Page Applications (SPAs). While SPAs aim to mimic native app navigations by dynamically updating content without full page reloads, this often comes with increased development complexity and a shift in how you structure your entire website, often at the cost of accessibility or performance.

    Now, with cross-document view transitions, you can achieve that desired user experience through smooth transitions on the web without any extensive overhaul of your website. And the new View Transitions plugin makes it super simple in WordPress.

    Read more

  • Two years ago today, on May 22, 2023, I opened an experimental pull request for a new module in the Performance Lab plugin. That little experiment was the very first step on a long road that ultimately led to the “Speculative Loading” feature landing in WordPress 6.8 last month (April 2025).

    For those unfamiliar, the Speculative Loading feature enhances performance by speculatively loading pages a user is likely to visit next, which can make navigation feel almost instantaneous. If you want to dive into the technical nitty-gritty, I recommend checking out the “dev note” post on Make WordPress Core.

    This post, however, isn’t about the what or how of the feature itself. Instead, I want to pull back the curtain and share the story behind the feature—the milestones, the discussions, and the collaborative effort that took it from a spark of an idea to a reality for millions of WordPress sites. The impact is considerable even for the entire web. Keep reading to the end for concrete numbers. 👇

    Read more

  • Keeping the “Tested Up To” version of your WordPress plugin up-to-date on WordPress.org is crucial for ensuring compatibility and giving your users confidence. However, the process of manually updating this information can be a bit tedious, often involving a new release even if no other code changes are necessary.

    While there are existing GitHub Actions that can deploy plugin assets to WordPress.org, such as the excellent 10up/action-wordpress-plugin-asset-update, using them solely for updating the “Tested Up To” version without any customization can be less than ideal. You might inadvertently deploy other changes you’ve made to your readme.txt file or other assets, even if those weren’t intended for immediate release. This could lead to unexpected updates on the plugin directory.

    Imagine you implemented a new plugin feature in your GitHub repository which is not released yet, and you’ve already included documentation about it in the readme.txt. You wouldn’t want that to be deployed by accident when all you want to do is bump the “Tested Up To” version.

    This post highlights a targeted GitHub workflow for exactly this purpose, which allows you to automate the deployment of bumping your WordPress plugin’s “Tested Up To” version in isolation.

    Read more

  • The other week we were hanging out with our friends K. Adam and Emily, and K. Adam shared with us some delicious Italian cookies he had made. Their texture and almond flavor reminded me of my favorite German Christmas cookies, called “Vanillekipferl”. Maybe you’ve seen them or even had them before – they’re half moon-shaped cookies with somewhat crumbly dough, usually topped with powdered sugar (or “snow”).

    Vanillekipferl have been a staple in my life for as long as I can remember, and every Christmas I would eat far too many of them. Every Christmas I would love to come home to my parents and eat my mom’s Vanillekipferl. But when I moved to the US and then COVID hit, gone was my ability to go home for Christmas – which is when I made them myself (or rather, with my then-girlfriend, now wife 😊) for the first time and asked my mom for the recipe. They were and still are my favorite Christmas cookies after all.

    So as we were talking about the cookies the other week, K. Adam asked me for the recipe for Vanillekipferl, but all the instructions I had were in German, and also were missing some explanations that my mom had just told me in addition. This led me to think that I should write down this recipe, in English, with all the ingredients and amounts and temperatures translated too. To share them with others of course, but even to help myself when I make them here in the US – yay for the imperial system. 😂

    So in this post I’m sharing with you my mom’s recipe for my favorite Vanillekipferl.

    Read more

  • In my initial post that announced the AI Services plugin for WordPress I mentioned several times how it simplifies using AI in WordPress by providing AI service abstractions as central infrastructure.

    In this post, let’s take a more hands-on look how you as a developer can use the AI Services plugin: We will write a WordPress plugin that generates alternative text for images in the block editor – a crucial aspect of good accessibility, which AI can be quite helpful with. Since the feature will be built on top of the AI Services plugin, it will work with Anthropic, Google, OpenAI – or any other AI service that you may want to use. And the entire plugin will consist of less than 200 lines of code – most of which will in fact be for the plugin’s UI.

    Read more