AIAI EngineerAug 5, 2026· 18:54

Gadgets: Personal app vibe coding that is actually safe — Kenton Varda, Cloudflare

Kenton Varda, creator of Cloudflare Workers, argues personal AI codegen breaks traditional cloud infrastructure and needs a different platform: his side project Gadgets, an office suite of user-vibecoded apps on Workers. Feature requests die in Jira; the plugin-rewrite trap stalls; Gadgets answers with per-instance apps where the platform, not the app, handles sharing, and a null-origin iframe talks over Cap'n Web RPC to a dynamic worker sandbox, so XSS doesn't matter. He shows Claude adding strikethrough, centering, and an SVG box to a slide builder to fulfill a deck request. It all runs locally on workerd, the open-source Workers runtime, no containers, no database, only durable objects. He apologizes that Cloudflare's CTO stopped him from open-sourcing it today; a careful release comes soon.

Transcript

Personal AI0:00

Kenton Varda0:24

Okay. Hi. Allright, I've got a lot to talk about, so I'm going to launchright into it here. So, SWIX says that you only get to make 1 point at every talk, 1 key takeaway, and so I figured I'd just lead with that.

My key point is: Personal AI code gen breaks traditional cloud infrastructure. And to clarify what I mean about that, the word "personal" here is doing a lot of work. It's load-bearing, as Claude would say. The point is that if we want to see this future where everyone has personal apps and can personalize the apps that they run, the infrastructure we're using today

for software in general is not theright thing, and we need something completely different. So, to explain what I mean:

think about the way that software is produced and distributed today. You have a developer in an ivory tower who builds an app and then sends it down to the people, the users, who use the app. And many of them are happy with it, but some of them are not.

Some of them say, "This app needs some additional features for my use case." And so they go to the developer and they say, "Oh great developer, will you please grant my feature requests? Your app is literally unusable without it."

And so then the developer's representative, the product manager, takes these feature requests and files them into Jira where they are never seen again. But sometimes, sometimes the product manager sees a feature request and says, "Ah, you know, I want that too."

And then that feature request goes onto the roadmap, and the developer works on it. And the developer is implementing all these features, features that, you know, each one is only used by a small subset of users, and each one is adding all these if statements to their code and making things messy, and they don't like it because the codebase is becoming a mess, and each of these features is really kind of boring to implement.

And so the developer says, "Ah, I know what I need to do. We need a rewrite. We need to, we need a new architecture that has a plugin system." And then every one of these features can be a plugin, and it can be nice and clean and easy to build, and the core can stay clean.

And so the developer goes off and starts working on the new architecture with the plugin system, and there are still feature requests coming in. And the developer says, "Well, we can't do those features yet because we need the plugin system.

This will be so much easier once we have the plugin system, and if we do it now, we're just delaying that, and we'll just have to redo it later anyway." And so

the years go by, and the new architecture is not ready yet, and none of the features are being implemented, and people are saying, "What are they doing? This developer has given up their product." And everybody is sad. So,

AI seems to present a new alternative to this. What if the developer could create their app, the first version of their app, give it to the users, and the users, if they need a new feature, could say, I could ask their AI agent to write that feature just for them, add it to the app.

AI Alternative3:30

Kenton Varda3:52

Then everyone gets the features they need, no one is bogged down in everyone else's features, and the developer gets to keep the core app nice and clean and beautiful. But there's a problem with this, which is that none of the infrastructure we build software on today is, like, remotely designed for this.

You've got Apple and Google for the past 15 years gatekeeping their systems to the point where there's, like, 5 companies that can build mobile apps now because everyone else has been banned. And it's almost, like, easier in the United States to buy a gun than it is to, like, get access to your own phone to install unsigned software.

Gatekeeping4:14

Kenton Varda4:36

You go to Google and you say, "I want to install unsigned software," and now they're going to say, "Oh, whoa, hold on, buddy. You seem upset. You should go home and think about this. If you still want that unsigned software in 24 hours, then you can come back and talk to us."

Fortunately, we have a workaround for all of that, which is the web. On the web, everyone can build whatever they want, and it turns out it's fine. It's not the security disaster that Apple and Google keep telling us would happen.

So, you can build whatever you want on the web, but there's a different problem on the web, which is that for the past 25 years of cloud architecture, we've been running in the wrong direction. When you distribute a web app, you run it on your own server.

Like, you put it on your server, and then users send requests to your server where the one version of your app, the one, you know, blessed version, runs for every single user. And so that's convenient for developers. That's why we've done it, is so the developer can make sure things stay updated and everyone's on the same version.

But it obviously means that users cannot customize their apps.

So, you know, last year, vibecoding comes along, and we have all these vibecoding platforms out there, and most of them are targeting web apps because that's the easy thing to target, but they're all targeting this existing infrastructure, which is actually, like, not theright way to do it.

We need something entirely different, and hence my point.

Guest6:20

Do you like how the word "breaks" kind of wiggles every now and then?

Kenton Varda6:26

That was something Claude put in there, and it was so stupid I just had to keep it.

I want to know where in Claude's training data it learned that you could make words wiggle to give them emphasis, because, like, you know, I understand the red, I understand the underline, but the wiggle, like, I don't think that's from humans.

I think that's an AI original.

This is ASI, folks. This is beyond my puny human brain's ability to comprehend. Anyway, so you might be wondering at this point, like, who is this guy who hasn't introduced himself up on stage giving a Richard Stallman-esque rant about how we should have the freedom to modify our own software, and what does he know about cloud infrastructure?

Who Am I6:54

Kenton Varda7:17

So, I'm Kenton Varda. I created Cloudflare Workers. I started the project back in 2017 when I joined Cloudflare. I am still the lead engineer today. It now is, you know, it's a serverless application hosting platform. We have millions of developers.

We serve trillions of requests per day. But what I'm going to talk to you a little bit about today is sort of a side project I've been working on on top of Workers, which is

Gadgets7:46

Kenton Varda7:46

designed to, is my exploration in how to solve this problem. So, this thing you're looking atright now is actually a little app that I created in this platform. But, going to the front page here, so you have your vibecode prompt.

You know, these things are a dime a dozen. You've all seen this before, but I'm just going to put in a little prompt to show that it works. Make a silly counter app. Silly max it. Someone silly. Allright, but I'm not actually going to sit here and watch it.

Oh no, it said error.

Yep, the internet doesn't work. That's okay. That's not the most important part of my talk. So,

what I want you to understand about this environment

is this is not like your typical vibecoding environment where you're deploying apps to a web page. This is, you need to think about it more like an office suite. So, think about Google Docs. You open Google Docs, you have a bunch of documents, hundreds, maybe thousands of documents.

You open one, you edit it, you share it with people. This is the same thing, except instead of documents, you have gadgets. And each gadget is an application with code. They can all be different code.

I have an app here which is like a collaborative whiteboard app. Like, this is a one-shot prompt. I have an app here which, so I get a lot of email in Spanish. It's a long story. I don't know Spanish, but I need help, like, filtering all the Spanish email.

So I made a little app to help me do that. A gadget. I have a gadget to help me sort pull requests that I need to review on GitHub. But those are, you know, things that I just, like, vibecoded from scratch.

But we also have this concept over here of blueprints. And a blueprint is someone made a gadget and they decided that it was useful, and they took a blueprint of it, which is just taking the code, exporting the code without the data, which they can then share with someone else, and then other people can instantiate gadgets from these blueprints.

So, we have, like, a document editor app here, a Kanban board, and a slide builder. So, like, you know, typical office apps. I'm going to, so this slide builder was built by my colleague Philip here, who's a product manager at Cloudflare.

And of course, these days, all product managers are also prolific engineers. So, you know, he vibed this in an afternoon, I believe. But if I instantiate this gadget, I get this nice little slide deck. You know, it has things I can edit it and so on.

Yay. And if I shared it, it would, well, so an important point here is that when I instantiate this app, it is only for one slide deck. If I want multiple slide decks, I make multiple instances of the gadget, one for each.

And the reason for that is that all gadgets are shareable and, you know, you can collaborate with other people on them. And the sharing model is implemented by the platform instead of by the app itself. So if I click up here, I get sort of a share dialogue, kind of like a Google Docs share dialogue, and I can create a share link and send it to people.

And because each gadget is just the one thing that you want to share, that means that the platform can implement the sharing model and the access control such that the gadget itself can't possibly get that wrong. So, I'm going to go over to actually another instance of the same slides app.

This is

the slides I originally wrote for this talk, which yesterday I decided these slides were trash, and I threw them all away and rewrote it. But the reason they're bad is entirely my fault. It's not Philip's fault. It's not the software's fault.

But this can still serve as an example to demonstrate some of what you can do on this platform. So, if I click on here, I can see the conversation. You know, of course, I didn't edit the slides myself by hand.

AI Customization12:03

Kenton Varda12:17

I asked the agent to make them for me,right? And every app in this platform automatically integrates with agents so that you can do that. And so what I did is I gave Claude a link to this document, this Google doc where I had described all of the gadgets that I wanted, or all the slides that I wanted in my presentation.

And crucially, though, this is the interesting point. I said,

if you need to add any new features to the slides app itself to support some of these slides, feel free to do so. And it did. Claude read all the code for the app and read my doc and said, yes, actually, let's see, slide 3 needs a strikethrough formatting.

That's not implemented. We can add that. Some of the slides require things to be centered. And, you know, I guess Philip's design taste is too good for centering text, but my more pedestrian taste called for some centering, and that's okay.

Claude can add that.

More interestingly, slides 5 and 6 here. So, I asked for this, like, really crappy diagram of the cloud,right? And the app didn't support sort of, like, arbitrary diagrams. It supported, you know, box diagrams and arrows and such, but not an arbitrary drawing like this.

And so Claude said, okay, that's okay. We can add a feature. We'll add a feature that allows you to insert a bunch of SVG. Just paste it into this box here, and now it becomes part of the slide.

And now that's not very useful for any human, but it was perfectly useful for Claude, who then generated the SVG. Now, at this point, you might be looking at this and saying, that's a little scary. SVG can contain JavaScript.

Security13:57

Kenton Varda14:11

Are there XSS bugs here? And the answer to that is, it doesn't really matter because of the way this environment is set up. So, the UI that you see for the app here is running inside a null origin iframe sandbox with content security policy set so that it basically cannot talk to anything.

Any of the rest of the world can't access any cookies, so on. The only thing it can do is postMessage to the parent frame. And through that postMessage channel, we set up a Cap'n Web RPC session, which forwards onto the server and all the way back to the server code for this gadget, which is this code here, which is written as a durable object on Cloudflare Workers.

And basically, that means, so this server code runs in a dynamic worker sandbox on the server side where it, too, is prevented from talking to any of the rest of the world. So, now we've set up this environment where there's a vibecoded client and a vibecoded server, and they can only talk to each other and produce the UI for the user.

And so, if you have an XSS bug, it actually doesn't end up mattering because these can't leak anything. They're prevented from doing so. And basically, there is no security bug you can have in this code that matters.

And that makes it safe to, you know, go and do things.

So,

there's a whole lot that I would like to talk about that I won't have time for here, unfortunately.

So, like, for instance, we created a whole system by which these apps can talk to external services in a safe way, but I could give, you know, two more talks about that. We created, there's a lot of stuff here.

The points that I want to make in the time that I have left, though, is, so everything you see here is built on, everything except for the LLM is built on Cloudflare Workers. A lot of people don't know this, but you can actually build complex apps on Workers.

Under the Hood16:19

Kenton Varda16:36

There are no containers involved here. There's just dynamic Workers. There are no, there's no database involved. It just uses durable objects.

And furthermore, all of this is actually running locally on my laptop, which is why it doesn't matter that the internet didn't work. Because, so this is all running on WorkerD, which is our open source runtime. A lot of people don't know this.

The Cloudflare Workers runtime is open source. You can self-host it. And I'm excited about that because we have in here a Home Assistant connector and a Spotify connector, and I want to run this in my basement and use it to do home automation tasks.

So, this is where, though, I have to give a little bit of an apology. So, a couple of months ago, when I submitted

Release Plans17:19

Kenton Varda17:29

the proposal for this talk, this was like a side project I was working on. And the plan was I was going to come here and I was going to present it, and then I was just at the end of the talk going to yeet it onto GitHub so that everyone could go and download and play with it themselves.

In the last couple of weeks, there's been a lot of excitement inside Cloudflare, and this has become a more serious project. And so, last Thursday, Dane, our CTO, pulled me into a room and said, "Kenton, I don't think you should yeet this.

I don't think this is yeet material. I think we need to be more careful and disciplined and intentional about how we release this. So, let's hold it off for a few weeks." And I was pretty upset about that because I promised in the abstract that I was going to open source it, but sorry, that's not happening today.

It will happen soon, though.

And I wish the silly counter worked because GPT makes some silly counters, but, oh well, it's not a big deal. And that's all I got.