Copy of Peter Pistorius - AUDIO EDIT === Noel: [00:00:00] Hello and Mo Pod Rocket, a web development podcast brought to you by Log Rocket. Log. Rocket provides AI first session, replay, and analytics, which surface the UX and technical issues impacting user experiences. Start understanding where your users are struggling by trying it free@logrocket.com. I'm Noel, and today I'm joined by Peter Pistorius, CEO of Redwood Js. Here to talk about redwood js, Redwood, SDK, everything that's happening in the redwood world. How's it going, Peter? Peter: It's going really great. ~Well, I've actually, I'm super tired 'cause it's 9:00 PM here where I am and I have a 3-year-old and, uh,~ Noel: ~Yeah.~ Peter: ~I'm just exhausted.~ Noel: ~yeah. Yep. Yeah. We'll, uh, we'll try to keep the energy nice and kind of middle of the road so we can, we can get into the weeds without it being too exhausting. And that'll, that'll be~ Peter: ~I,~ Noel: ~for the episode~ Peter: ~I, I actually have a monster here on my desk, but I don't think I should drink this. It's just not a good idea at 9:00 PM in the evening, so~ Noel: ~It can be a trap. It can be a trap for~ Peter: ~totally.~ Noel: ~Yeah. It can be a bad energy sometimes. Um, but anyway, let's just, let's just get into it and hopefully the excitement will be enough to, to keep the energy moving. Um, ~maybe just to start with, for people that aren't like really in the ecosystem, can you give us just like the brief like history of where redwood js kind of fits in, like the framework, meta framework kind of spectrum, that ecosystem. Peter: Sure. So ~there, ~there are actually two versions of Redwood js, which are confusing. There's the original framework that we ~bought ~built five years ago, ~um, ~and we've renamed that to Redwood JS GraphQL. ~Um, ~that's a. ~Uh, a, ~a website and the API side that you can host ~on a serverless on ~on serverless infrastructure. And now we've pivoted to a new [00:01:00] project called Redwood, SDK Redwood. SDK is a react framework for CloudFlare. ~Um, ~and it gives you react server components, vet realtime capabilities, and an amazing exposure to Cloudflare's developer, ~uh, ~platform. Noel: Yeah. And an ~excellent, ~excellent marketing website. Your guys' marketing website for the SD is amazing. It was like, ah, ~the, ~the vibe is so good. ~Um,~ Peter: Thank you. ~We actually had, uh,~ we do this thing called this week in Redwood, where we kind of share,~ uh,~ what we're trying to do with the framework. And someone came through,~ uh,~ this week and they said, Hey, your brand is really cringe. ~Um, ~I'm over 40. And I, ~you know, ~I know what you're talking about, but I don't think it resonates with anyone. Under 40. So we took a poll and we asked the internet or people on X whether we were cringe, and ~uh, ~28.2% said that we are cringe. So I'm gonna bet against those odds. I think if we can at least stir some sort of emotion in you,~ uh,~ be it cringe or not, then that's probably better than nothing. And ~you know, ~I love the office and that show is just about cringe. So maybe we're onto something ~I.~ Noel: ~No. ~Yeah, and ~I feel, ~I feel like ~there's a, ~there's different [00:02:00] kinds. There's like cringe and there's self-aware cringe. ~I got the, ~when I hit the website, I was very much like, oh yeah, ~this is, ~this is exactly the vibe I want. Maybe it won't resonate with everyone, but I feel like everyone will remember it if nothing else. Peter: ~Totally. Yeah. We're trying to bring back, ~totally. We're trying to bring back this feeling of being able to ship software on your own and just build stuff that excites you. Noel: Yeah. ~Yeah, that's, that's, that's a, ~that's as good a segue as any, ~so, ~so tell me ~what kind of, ~what kind of motivated ~this, ~this, I don't want to use the term like branch, but ~kind of this, this like split, this like ~shift in, ~um, ~approach to how~ you like. ~This is used by, ~um, ~the end user, the developer. ~Um, like what, what, ~what was the motivation to ~kind of, to ~break these out into, ~um, ~the GraphQL and the SDK piece? Peter: ~So, um. ~The GraphQL framework didn't really grow ~as, ~as well as we thought it would, so we decided to take another shot at what we were building. And I had some ideas around what I wanted to see out in the world. ~Um, ~with AI agents and these like generative coding tools, you ~kind of ~get the sense that building software or writing software is actually not that difficult anymore. And I don't mean difficult in terms [00:03:00] of. ~Um. ~The thought processes that go into it. But ~I mean, ~difficult in terms of ~the, ~the emotional energy that you have to put into writing software. There are things that I really dislike. ~Um, ~building forms, building auth solutions and things like that. And I can get AI ~to, to, ~to build that for me so I can stay in flow for longer and just build software. ~Um, ~but the part where it does start to get really difficult is when I wanna host ~that, that ~that thing that I've built. ~Um. ~It's the part that takes me outta flow the moment when I wanna release it to production. ~Uh, ~my expectation is that it doesn't work,~ uh,~ that I have to ~kind of like put it, ~put these secrets into the environment ~and, ~and connect the services and ~it, ~it just feels disjointed from what I'm actually trying to achieve. ~Uh, ~so I set out with those two things in mind. ~Uh, ~the first being that. Software is gonna be written ~by, ~by a lot of software is gonna be written by ai. And the second part being that I want a developer platform. ~Um, ~so we went and searched around for something and we found CloudFlare. Noel: ~Yeah. Yeah. Um, what about CloudFlare specifically? That's maybe not a great question. I think the question I want to ask is like, why, um. ~do you think that ~the, the, ~the kind of,~ uh,~ tighter coupling to ~like ~a specific,~ um, you know, ~like hosting infrastructure ~is, ~is the way that these kind of,~ uh,~ frameworks, meta frameworks,~ like,~ like these [00:04:00] tools that are trying to give dev devs as much as they can off the shelf, right? Like, why do those inherently need to be tied to a specific like hosting provider? Peter: ~Um, so how I think so, ~so actually I really like that question about why CloudFlare. ~Uh. ~But I'll answer this one and then we can maybe go back to that one. Noel: roll up, I'll roll back to that one later. I think this is like a, kind of an interesting,~ um, you know, ~conceptual exploration first. Yeah. Peter: So what I think about when it comes to software development, you are trying to share memory in a safe way from one ~machine to another ~machine to another machine. ~Um, ~as an example, if you query a database, you do that on your server and then you pause that down to the browser using some sort of API. We're pausing memory. From those three machines down to the one in a safe way, the tighter and closer those couplings are, the easier it becomes, the more standards orientated they are, the easier it becomes. So with CloudFlare, it feels as if your database, your storage, your queues, are all on the same machine. Because they have this amazing,~ uh,~ way to bind them to the worker where you have [00:05:00] direct access to the resource that you're, or the service that you're trying to access. So it feels like magic. And you're just, in many cases just using fetch in order to,~ uh, like ~upload a file. ~You can, ~you can take ~a ~a fetch request. ~Uh, ~push it up to the server, you can stream that directly into R two, which is cloudflare's version ~of, of, ~of storage. ~Um, ~and it's ~like ~10 lines of code. It feels really intuitive. ~I.~ Noel: Do you think that,~ um, I guess kind of, kind of kind of ~this encapsulates ~both of my, ~both of those questions I'm teasing at here a little bit. Like ~why. Why is it you think that it's like, so ~why is it necessary for the hosting provider to ~kind of ~expose ~these, ~these primitives ~for, ~for something like the redwood SDK to be viable versus something ~kind of in this, ~in this slice of the stack? Like ~why, ~why can the redwood, SDK again, just as an example, ~like ~not ~do this, ~do this abstraction layer for us? ~Like, like why, ~why as a developer, does my meta framework need to be tied to a specific. ~Kind of ~hosting provider. 'cause I think we're seeing this pattern across the board, right? ~Like ~this is happening with the frameworks. ~Um, ~but ~I'm, ~I'm curious, like ~if ~in your words ~why, like,~ why is that a necessary, ~um, kind of ~bind, like tight coupling to make that really, ~um, ~work versus ~the, ~the [00:06:00] frameworks ~kind of able to, ~being able to abstract that away? So the devs are a little bit more agnostic. Peter: So with Redwood GraphQL, we actually provided a layer. ~Uh, ~we provided a lot of integrations to a lot of different services. ~Uh, ~and I think we had something like 28 authentication services at the end of the day, Noel: Yeah, Peter: and it became ~very, ~very difficult to maintain those. ~Um,~ Noel: Yeah. Peter: and it actually took our focus away from what we were trying to achieve. So we ended up integrating. VC funded businesses into our framework that made it bloated and made it harder to maintain. And ~uh, ~I don't think it really translated into something that benefited the end user, the developer themselves, unless they picked one of those solutions. So how I like to think about it is when you want to use an external service, you pay. I'm gonna say five taxes. So say for instance, you want a database, first off, you have to figure out what database you want. So you go and search the internet, you find the branding,~ uh,~ and the pricing and the performance to your liking. Then you have to create an [00:07:00] account that's tax number one. Then you have to give them your credit card. That's tax number two. Tax number three is you have to figure out their API,~ uh,~ tax. Number four, you have to make it work locally. Tax number five, you have to make it work in production. And if you're lucky, you'll get a staging environment. So you're paying like a lot just to use a database. ~Uh, ~and if you, if that stuff is part of the platform that you're, you've chosen, it's there automatically and it really makes, it makes software more,~ um, um.~ What's the word I'm looking for? Stable. ~Uh, ~and it makes shipping feel like magic. And ~you know, ~one of the things that I I would ship to production and it would work, and that would surprise me. ~I. ~Every single time I did it, it just worked. No matter when I was like, if I introduced a new binding or a new service, it just worked. And then after a while I got surprised that I was surprised. I was like, why am I surprised by this? This is how it should be. This is how it was when I was building software back in the olden days. You shipped it and it worked. And I think it's because of the complexity ~of ~of integrating services ~there.~ ~Not part of the, you know, ~we want you to focus on the [00:08:00] software you wanna build rather than the infrastructure. That structure that it runs on that stuff is not what you should be focusing on. You should be writing code. Noel: ~Do you think that this, like, this kind of, um. Do you think the fact that it's necessary to kind of like that, these, these frameworks,~ Peter: ~I.~ Noel: ~at this layer that you guys are operating at, ~do you think the fact that it is necessary to do this is a little bit of ~kind of ~a failure in standards being developed that kind of make this easier, ~that like, ~that necessitates this tight coupling that we're talking about? Or do you think that ~this, ~this is just ~kind of ~an inevitability as. ~Um, ~the ecosystem evolves and stuff like, ~it's, ~it makes sense that the primitives, which these hosting providers are offering are going to change. So the way in which we're interacting is gonna be too ~like ~dynamic or do you ever think will be in a realm where there is like some kind of standardization that makes ~this level or ~this level of convenience,~ um,~ kinda more ubiquitous? Peter: ~I, ~I think, ~you know, ~maybe MCP servers are something that could resolve this, ~uh, ~down the line, but ~I think ~then you still need to figure out whether the offering that. ~The, ~the agent is surfacing to you. Makes a lot of sense, ~um, ~for your needs and yeah, it's a really great question. I think it could be solved, whether it will be, ~is, is, I, I'm, ~I'm not so sure Noel: Yeah,~ there's,~ Peter: I. Noel: a lot of motivations and factors in play. ~Um, I'll, I'll, I'll, I'll, uh, like ~reel us in a little bit here from the abstract. ~We can talk about, ~we can [00:09:00] talk about some actual,~ like,~ cool,~ um,~ capabilities that have been empowered by you guys making this specific decision. ~Um, ~we talked a little bit about kind of ~the, the, ~the beauty of. ~The, ~the CloudFlare worker abstraction and the way in which you can ~kind of ~interact with compute and data and all that stuff ~is, ~was there anything in particular, ~um, ~that led to ~these, this, ~this kind of beautiful developer experience you're talking about where things just worked? Like ~why, ~why do you think that in particular manifest out of your guys'? ~Um, ~CloudFlare Choice? Peter: So I'll tell you how we actually ended up picking CloudFlare. I live in South Africa, ~uh, sort of ~at the bottom of Africa. ~Uh, ~so I'm pretty much far from everything. ~Um, ~and when I write software, I would love it to be fast for people near me. ~Um, I want to, ~I want them to have the performance that they get ~from, from, you know, ~international experiences. ~Um. ~And then number two, I live in a community where there are a lot of people that just don't have credit cards. And I remember what it was like being ~a, ~a 20-year-old or a 16-year-old wanting to enter the conversation, ~you know, ~build software and ship software. So when we were out there searching for a platform, ~we, we picked, ~there were two things that we needed.[00:10:00] Number one, it had to be everywhere in the world. And number two, you had to be able to use it without a credit card. And ~CloudFlare. Uh, cloud ~CloudFlare does both of those ~two. Um, ~so we spent a month actually building a React server component, ~uh, ~implementation with VET and CloudFlare workers, and we were blown away by what we could achieve. ~Um, you know, the, ~the fact that. ~Uh, ~they had a database and queues and, ~um, ~storage all available locally meant that the developer experience locally also matched production. And it just felt so good. Like I kept looking for the downsides. When it comes to technology. ~You, ~you're usually ~like, ~enthusiastic about it, but eventually you figure out what the trade-offs are. And ~when it came to CloudFlare or ~when it comes to CloudFlare, I haven't really found them yet. And it's surprising for me,~ um,~ why do I think CloudFlare has built such a great system? I think ~my, my, ~my understanding is that they're actually a networking company with really solid engineers and ~they're entering the, the, ~they're entering the space trying to compete with AWS and they've built something ~really, ~really solid. ~Um.~ Noel: ~Yeah. Yeah. Yeah, I think, ~I think that ~I, I share my. ~My intuition is probably ~is ~similar there and that like ~I, ~I think that their approach of coming at this [00:11:00] from the other direction of ~like, ~we're gonna be a networking company, we're gonna solve all these problems, and then ~like, kind of ~backing their way into these ~like ~hosting provider services, ~I think. or not, ~has ~like ~lined up really well with a lot of ~the, ~the evolution that's been happening with ~like ~front end development and frameworks and ~these, these current, ~the current push that we're seeing. And I think that the primitives that made sense for them to offer, ~just like ~there was just such kind of implicit, ~um, ~harmony. ~Like ~it just ~kind of all it, it ~jives so well and I think. I've had a similar experience where it's like the cloud flare paradigm. It's ~like, what are we gonna lose out? ~What are we even gonna miss out on here by ~like choosing, ~choosing to go this route? It's ~like, ~yeah, there's not, I haven't really been burned too bad. I'm knocking on the wood here yet, but ~it, it, it's, I've, ~I've had a similar experience I guess. Maybe to zoom out just a little bit, just to ~kinda~ give devs, ~devs~ a little bit more context. ~when, ~when they're using the redwood SDK, ~like how, um, ~how much of a membrane is there between the cloud flare services versus ~like, are, are, am I, ~am I developing thinking about redwood or am I still ~kind of ~thinking about the underlying cloud flare infrastructure? Peter: So one of the other lessons that we learned when we built Redwood,~ uh,~ GraphQL was [00:12:00] that we wanted to make sure that nothing was hidden from you. ~Uh, ~I wanted to build a framework that had zero magic that only used TypeScript, and that allowed you to follow the request and response model. In every line in the code. So when you're building using Redwood SDK, what you get is a v plugin. That v plugin gives you access to worker D, which is cloudflare's,~ uh,~ JavaScript runtime. ~Um, ~and then you get react server components, ~server stride, ~server side rendering. And then on top of that we've built a router. ~Uh, ~the router allows you ~to ~to handle. Routing. ~Uh, ~and then also return pages or responses. Everything we've built is web standard. ~Uh, ~we don't have. Any magic exports. And what I mean by that, there isn't like a special export that you do in a file that is somehow hooked up magically that gives you like a loading indicator or an error ~of ~boundary or something like that. You have to be explicit in your code. ~Uh, ~and our APIs feel really intuitive. ~Uh, ~it feels like you're actually building on the primitive of what [00:13:00] the web was meant to be built ~on ~upon. ~Um. ~So that V plugin, just rolling back a little bit, that V plugin also gives you access to something called mini flare. Mini flare is cloudflare's emulation environment and that gives you database and queues and even ai. What happens with AI is they actually link it to your cloud flare account and then it runs in the cloud. 'cause you can't run them locally, but it feels like you're running them locally. ~Um, ~it's really a fantastic experience. Noel: ~Yeah. Very cool. Do you think~ so? ~So. ~CloudFlare, ~I like, ~I hope this ~is isn't too kind of, it ~doesn't sound like too points at a~ at ~a question, but CloudFlare has ~their kind of, um, there's, there's~ a couple different ways that if you go look at their docs, it's like, here's how you develop ~whatever, like ~a React app on CloudFlare and you can ~like ~talk about deploying a React app and ~you know, ~the capacity to use server components and all of those things. But ~there, I mean, I think it's a little bit, ~it is a little bit trickier to ~kind of. Um, ~stitch together,~ like,~ okay, how do I set up my development environment and how do I ~like ~deploy this and all that stuff. So ~do, ~do you think that's the main ~kind of ~benefit ~of going with something like, like ~of using Redwood SDK? I guess ~like ~is there,~ um,~ like that router I think is also unique to you guys, but is ~that, is like ~the developer experience ~kind of the, ~the pain point that you guys are trying to target there? Or is there some other ~kind of ~technical [00:14:00] piece that ~you think, um, ~Redwood, SDK solves uniquely. Peter: ~Um, ~so ~we, ~we actually have this ability to upgrade ~the, ~the request and response model ~to, um. To, to re to a real time, uh, to, ~to real time to web sockets. So what we've done there is ~we've, ~we've given you access to durable objects, ~um, ~when you initialize the client. ~Uh, ~and that means that if you perform a server action, a React server action, the state lives in the server, we can tell when, ~uh, ~two clients are connected to the same key, and we can ship ~the, ~the RSE payload to those clients and update the screen. ~So. ~What we're doing is taking React, taking TypeScript and CloudFlare, and we're binding those together as something that feels cohesive and well thought out. But based on web standards where you can control every bite over the wire, I don't think there's a framework that does that. Frameworks usually try to abstract away the complexity and we're saying, here it is, think about the request response model and go for it, and it makes things make sense. We also have this idea that. If you can reason about it, then it's very likely that an AI can reason about it better. So if you're ~using like a, uh, ~using agents [00:15:00] to code, then we are also trying to be helpful there. We give them ~cursor, uh, sorry, we give them, uh, ~rules, ~uh, ~and we're also building MCP servers to generate your code for you. But we're trying to be helpful here and. No, I'm not gonna, I'm not, I wanna say something spicy, but I'm not gonna share it. Noel: ~No, ~no, ~that's fine. ~That's fine. No sweat. ~Um, it, it'll, ~it'll eat at me the rest of the day, but that's fine. ~Again, that's, yeah. It's all~ Peter: ~No. ~No. Okay. I'll share it and you can decide ~whether, whether you, uh, ~whether you can put it in or not. So one of the things that I think about quite often is there's a lot of people who are trying to learn how to build software. So they go and pick a framework that's backed by a massive corporation that has ~hundreds of, ~hundreds of millions of dollars in funding, and you're spending your one finite resource, your time. To learn something so that you can pay some giant SaaS corporation $20 a month. At the end of the day, what we were giving you is a framework that is ~the ~fundamentally based ~on the web technology, ~on web technology, ~uh, ~and you can translate that ~into, into, ~into any other framework. So that's my hot take. Don't waste your time learning a big corporates tools. Noel: ~Yeah. Yeah, I mean, I think, I think that are, ~there are options on there which are not tied to things, but ~I think, ~I think we are not tied to these, ~you know, big, ~big, ~uh, ~[00:16:00] for-profit corporate entities that are ~like, you know, ~very entrenched and they've built their moat. But yeah, ~it does, ~it still doesn't feel like we're at the point where. At least ~may, ~maybe devs set out and they wanna learn one of those. But ~I, ~I don't think we're at the point where that's the thing. ~It's not the kind of, um, you know, ~it's not the norm for what companies are using, what people are looking for. So ~I'm, I'm always, ~I'm always, ~uh, you know, ~excited to hear about people, ~like ~thinking about using the web primitives to make, ~uh, those, ~those kinda the building blocks and offering those up to devs too. ~know,~ stay a little bit more open. ~Um, I'm, I'm, I'm you, ~you mentioned, ~uh, ~durable objects in this kind of streaming, ~uh, ~paradigm making that a little bit easier. I think durable objects are very cool and ~I think ~probably underutilized right now. ~Like, ~I don't think ~a lot, ~there's a lot of people using those. ~Um, did ~when you guys set out and ~like, ~were ~kind of ~looking to expose some of that functionality, ~did, did you have the. The the did, ~did you feel that ~they, ~they were a little bit too tricky to interact with ~kind of ~naively if you're just coming in and ~like, there, there would, ~there would be a lot of utility there for devs ~if we ma, if, ~if that were made a little bit simpler or ~did that, ~was that just ~kind of ~the obvious choice? ~Um, like ~for this abstraction, Peter: I think that durable objects probably have the worst name,~ uh,~ in the CloudFlare offering. ~I don't, I still, ~I still don't exactly know [00:17:00] what a durable object is. ~Uh, ~I should go ~check, ~check up on that. But really, we had someone on the inside at CloudFlare helping us out, which was Sunil. ~Um. ~We knew that we needed sessions. ~Uh, ~so he said, Hey, do that on a durable object. A durable object can, ~uh, ~exist just for one single user, and that durable object can be hosted closer to them, whereas your worker can be hosted closer to the database and that overall reduces latency. And that's something that CloudFlare can figure out for you. ~Uh, ~and then when it came to real time, we knew that web sockets were the way to go. And durable objects are web socket native. And they can scale infinitely. So you can have, I'm gonna say hundreds of thousands of users on your platform, on your website, and it's still gonna work. ~Um, ~so it felt like an incredibly natural choice just to use those Noel: Yeah. Peter: I did not find them difficult to reason about. But maybe this is in hindsight now that I've worked ~for ~with them quite a bit,~ uh,~ they are a little bit strange. Noel: ~Yeah. Yeah. I don't, my, I, I, I don't, I don't think that they're too conceptually. Well, maybe, yeah. just, ~I think that they're so unique, right? ~They're kind of this like weird, they're, ~they're solving a problem that I feel is not easily surfaced, and you ~kinda ~realize ~once I. ~Once you [00:18:00] have it, you're like, I need this abstract thing that's ~like ~tied to a specific, ~like ~user or session, but I want to put it ~like ~somewhere out of the browser, right? Like ~I, ~I don't know where, I don't know, ~like ~where this abstraction needs to live. And ~kinda ~wrapping that up ~and, ~and giving you ~like a, like a, a, ~a fast way to communicate with it and all that stuff is ~like, it's ~cool. I ~kind of ~don't want to have to think about it all the time. It's cool. I just have a browser, API and it all works. ~Um, so~ Peter: Oh, that's actually a really nice way to put it. I like that. Noel: Yeah, I agree. ~And I, ~and I think that maybe is why the name Durable Objects was chosen, but I'm not, I don't wanna try to read too deeply into that because ~I haven't, ~I haven't done any research either. ~Um, ~but yeah, like ~the, um, you talked, you, ~you mentioned ~like, uh, the streaming overall, uh, like for, or~ streaming at large ~for, uh, Um, is, ~is that. On top of what you guys are doing with, ~uh, ~durable objects or is there another, ~um, like ~kind of ~response ~request, response streaming component? Peter: ~So, so, um. Uh, ~response has the ability to actually stream over the wire. ~You, ~there's a flag, you say stream is true, and then you push that out ~to the, ~to the browser, and the browser will read it in chunks. ~Um, ~so we surface that in two ways. ~Uh, you, ~once you set it as a response, ~you, ~you can just make ~the, ~the fetch handler in the browser, deal with that. But you can also do it for rack server components. ~So. ~A good example is [00:19:00] if you're chatting to an AI agent or ~an uh, ~an LLM, the response that it returns is often, it's not the whole thing at once. It happens over time. ~Uh, ~and you can either show like a giant loading indicator for your user in the browser, or you can stream it word for word ~down to the, ~down to the user. So we've included functionality that allows you to, ~uh. ~Take that stream and then pass it back down through the rack server component and update the state ~in your, ~in your client components so that you can see ~like ~every single word coming in and you get that, ~uh, ~responsiveness that you want. ~Um, so we've taken,~ Noel: ~_go ahead. Go ahead._~ Peter: ~_oh, sorry._~ So we've taken ~these, ~these,~ um,~ like the web API's ability to stream and we've made it feel native to react. Noel: Yeah. Cool. ~Had had, ~had you seen any other kind of, ~um. ~Meta frameworks on top of React or anything that were providing ~that, um, ~that kind of native handling that abstraction as well? Or ~was this, ~was this largely just ~a, ~kind of an internal, ~uh, ~idea that you guys had? Peter: ~I haven't, I, I, you know, ~I try not to compare what we're doing too much to other frameworks, but I didn't see this anywhere else. ~Um. ~It seems intuitive to me. ~Like ~if you're focusing on the request response stuff and the capabilities of [00:20:00] the browser, then ~you're, you, you, ~you're like, oh yeah, of course we can do this. ~Um, ~but we wanted to make sure that you understood that it can do it. 'cause we understand it because we're building the framework. Noel: Yeah. ~Yeah,~ Peter: Yeah. ~So,~ Noel: ~Um, are there any, ~are there any,~ uh,~ potential kind of traps, foot guns that one can find themselves in if they're in this world where you're kinda like using streaming, but you're in the react world, so you've already got like hooks and stuff firing, like potentially, ~is there, ~is there any potential edge cases there that you guys have seen users run into or have tried to proactively solve? Peter: Yeah, ~the, ~the, one of ~the, ~the largest things is that people. Tend to forget when they're using a client component or a server component or how to pass them around. And it's something that we haven't solved yet. The errors are ~kind of ~ob to use. ~Um, ~and it's one of the things that we'd really love to say, Hey, like you actually can't do this. There's a rule here. We'll fix it. ~Um, ~but that's gonna take a little bit of time. Noel: ~Yeah. ~Yeah. And I feel like those are also those tricky things. As soon as you put the rule into place, like that probably solves it for some set. But then there's a set of developers that are confused as to why the rule is there, enforcing the thing. And it's ~like, ~maybe you can use it as a learning experience. But ~those are, ~[00:21:00] those are always the tricky questions, right? Where you're like. ~Kind of ~you're in this realm of having opinions based on what, like ~the, ~the constraints of the frameworks platform. And it's ~like, I, it's one, ~one has to ~kind of ~open the hood to understand why you can or cannot do something. ~Um, ~and I think ~that, that, that is always, ~that is always tricky. I, let's see. ~I've, you, you've mentioned. And ~I think this is ~kind of ~my, the last line of questioning I want to get into before we move to some ~quick, ~quick round questions. ~you, ~you mentioned,~ uh, kind of ~exposing things to ease AI development, ~like, ~like using AI to ~help, ~help code. like what does that look like? I feel like for most devs they're like, AI development is like using copilot and browser and or maybe some tools off the shelf to give them like a, ~you know, ~CSS and kinda HTML component scaffolding. What does that look like? In SDK. Peter: ~Um, ~so we ship something called, ~we, ~we actually use a third party package called Vibe Rules. And what this does is it figures out what ~your editor is, uh, on your, or what edit ~editors you have on your computer. ~And it, it runs off, ~you install packages, and then it takes ~our, ~our rules ~for the, for the agent or ~the LLM. And injects them ~into the, ~into the right folder. ~Uh, so it, ~it's also version, so if we update our rules, ~you'll get, ~you'll get new rules. ~Um, and ~in addition to that, we also have experimented with an [00:22:00] MCP server. ~So ~a good example of that is if you go to an agent, ~uh, ~in your ~cursor, ~cursor editor and you say, Hey, create a new page for me that lives at the route slash i. It's quite possible that the LLM will be able to do that for you. ~And I mean, ~I've seen it do it for me, but sometimes ~it doesn't, ~it gets it wrong. ~Uh, and ~that's when our MMCP server comes in play and it says, I know exactly how to do this. Give me the wheel and then it ~goes and generates it with, uh, it just ~generates it using, ~uh, ~ts morph and modifies your code directly. ~So ~the response is also crazy fast and it doesn't take a lot of credits, and we know ~that ~that is exactly what we should be doing. ~Uh, ~the agent just needs to call our tool. So that's how we're trying to be super, super helpful, like directly helpful. But thirdly, we also think that the choices that we've made building upon web APIs. Building upon just react and type script and not ~generating anything, not putting, uh, ~putting any weird files in weird places so you don't actually know what's going on. We think ~that we, ~that choice gives you a really good foundation 'cause your editor can understand it. ~Um, ~yeah, so I'm hoping that turns out to be correct. Noel: Yeah. ~Yeah. It's, it's, ~it's cool to see this, just ~kind of ~see ~this, this, um, I dunno, tier this, uh, ~[00:23:00] class ~I guess of, ~of tools where ~like, were one. ~one can more easily instruct the agent to ~go like, ~interact with whatever abstraction that may be in a given context to ~like ~add code more easily. 'cause ~like ~I think ~that ~that is the big problem right now is ~like ~getting the correct delivered to whatever model you're trying to invoke dynamically and ~like. ~all over the place. Still just ~kind of as a, ~as an industry. ~Like, ~there's no standard. ~And I, I think, I think this is one of those, like the, like ~all industries have this problem. It'll get solved in the engineering land first because, ~you know, ~it's engineers that are trying to solve this problem for themselves. And then once this paradigm ~kind of is, ~is figured out, ~um,~ Peter: ~So, so, you know, ~even despite the fact that we provided these rules to our editor, ~um, ~it would still think that we're ~still ~on the older version of Redwood. So we actually had to do something drastic. We had to rename our packages to R-W-S-D-K instead of it being at Redwood JS slash sdk. ~Uh, ~because we don't want the LLLM to know about the previous one. ~You know, ~they're a little bit backdated and they haven't figured out this new version yet, ~so.~ Noel: You can't expunge everything from them either. ~Like, ~you ~kind of ~just have to tell 'em it's a new thing. Yeah. ~That's~ Peter: ~And, ~and I tried. I tried everything. I even, ~you know, ~I was like, never do this. If you do this, you'll go to [00:24:00] jail. I tried everything, like it just didn't work. Noel: yep. It's, ~I, ~I think, I feel like, yeah, it's like ~the in, ~in either direction, working with LLMs and like saying, no, it has to be this, or, no, you cannot do this. ~Like once, like the, ~once you're in that kind of mode of decision, like ~once, ~once you've found the path that it's gonna follow for a given prompt, ~it's like, ~it's pretty hard to force it, not to at least tend that way. ~So I feel~ Peter: Yeah, feels like an incredibly circular argument. And ~you know, ~one of the things that. I just wanna mention is that,~ um,~ my, my brother,~ uh, is a, ~is a technical person. He's wanted a code his whole life. And ~like ~two months ago he came to me and he was, Hey. He said, Hey man, look at this thing I built. And I opened up the web website and there was this pretty decent page that had animations and like a form and all kinds of stuff on it. And he was like, I bought this. And I was like, how did you do this? And he said,~ well,~ I used Cursor. And I said, where's it hosted? He's ~like, ~it's on verse. And I was like, what database are you using? He said, neon. And I was like, why did you make those choices? He said, I didn't, it just happened. And he said, I spent so much time just trying to get this online. And he's ~like, ~the coding part [00:25:00] was easier, had it working locally, but trying to get it into production. That was the biggest pain for me. ~Uh, ~and then he was like, I also pay them $20 a month. Like I pay for sell $20 a month. And I was like, okay. ~So. ~I'm glad that there's a tool. ~Well, ~I'm glad that Redwood, SDK exists for people that are trying to enter the programming world,~ uh,~ so that they can just scratch a itch and solve a problem without necessarily having to learn about other people's products. Noel: Nice. Yeah. ~This, this, I kind of, I had, ~I had one more question on my kind of core outline here, and that ~is, ~is concerning ~kind of the, ~the future of development in general and what kinda impact you're hoping Redwood has. I think ~that's an, ~that's an interesting story because ~I, I, I think the, ~I think the problem is often for ~like ~people coming in, it's just ~like it's ~so hard ~to ~them not to end up treading the most. Trodden path, right? ~Like ~either the LLMs ~just ~tend to do it because it's the thing that's recommended. There's the most documentation on it, or they just Google it. The top Reddit response says, ~you know, ~learn, react, ~uh, ~and ~like ~deploy on Versal because it's ~like ~the most industry standard thing or whatever. ~How do you think that like. I guess ~from your perspective, ~what's, what's the, what's the, ~what's the path to ~kind of ~break that mold a little bit to try to get these tools into the hands of devs that are just [00:26:00] starting out? So ~like, ~it's ~kind of in their, in, in, ~in their view when they're on this initial journey. Peter: So I think we're gonna try two things. ~Um, ~the first one is our messaging around personal software. We're trying to reach those people through building a framework that speaks directly to them. So we ~kind of ~have this messaging around I. You don't have to build something that's profitable, you just have to scratch a itch. ~Um, ~and there's nothing wrong with making money, but in the early stages, ~you know, ~just focus on learning and building and shipping. ~Um, ~and the second thing that we're thinking of is creating a store ~for software, uh,~ for source code. ~So, um, ~how to think about this is maybe I've built something useful. I don't necessarily wanna build a brand or a pricing strategy or even do customer support because I just, ~you know, ~I just wrote the thing. I scratched a itch. So you can take this piece of code, you can put it onto,~ um,~ the Redwood SDK store, and then you can sell it for $5. You can sell a license for,~ uh, for like ~a year. I get the code. ~I, ~I'm the customer, I get the code. I can modify it for my own needs and I can put it in. I can put it on my own, CloudFlare, I can host it myself. So [00:27:00] that's how we're thinking about monetizing Redwood SDK, but also ~kind of ~changing the mindset of the industry that ~there's, ~there's a middle ground. You don't just have to give it away for free and open source is amazing. Um,~ Um, Um,~ Noel: ~Mm-hmm.~ Peter: I. And you don't have to create like an enterprise grade charting library. Yeah. You can just charge, ~you know, ~a hundred dollars for something if it's helpful. I'm pretty sure someone will pay for that. And it shortcuts their experience and they get the code so they can modify it for their own needs. ~Um. ~And I'm excited about that. I'm excited about saying there is an alternative. You can make money,~ uh,~ just writing code. ~Uh, ~let's see how that works out. Noel: ~Yeah. ~Yeah. That's cool. ~That's cool. I, I have, ~I have a couple projects. Neither of them ~are, are, ~are technically like front end project. They're not like react Peter: I. Noel: but they're in the similar vein where ~it's, ~it's open source. I run like a hosted version of it. And then I like charge a ~very, ~very light fee to ~like ~cover my own hosting costs for people that are using it and to help prevent abuse. But I often get questions that are like, Hey, I want to host this myself. How do I do it? And they're like, brand new people coming into this. And I'm like. I want to empower you to host, and I've tried to make it as easy as possible, but ~the, like, ~the people that are asking these questions just have ~like, ~no, I don't Peter: [00:28:00] No. Noel: even know where to start, which is fine, right? ~I'm~ Peter: Yeah. Noel: you can either deploy the containers and ~like, you know, ~run a, run, ~like ~run wherever. You can deploy containers, you can run the containerized version, or you can just spin up a server somewhere and run it, like hop in and spin it up and it's ~like, ~it would be super cool. If I could just ~like ~find a way to give them a button to click that's ~like, ~okay, like here, copy this, and you, it'll be charged to your account and whatever, like CloudFlare, you name it, and it'll Peter: Totally~ Totally~ Noel: ~Um, so I think,~ Peter: ~that that is.~ Noel: ~is utility there.~ Peter: That is 100% the idea. And a lot of people that I've spoken to ~have the same, ~have the same feelings. They're like, this thing's useful. I want to share it with people, but I dunno how, I don't wanna charge them,~ uh,~ for the service. I just want to give them the utility. Yeah. Noel: ~exactly. ~Exactly. Yeah. ~This kind of, ~this kind of paradigm of like micro software that one can self run ~like ~is I think an interesting one that we probably haven't been thinking about as an industry in a while, but ~like, ~I think. ~It's like, it'll be, ~it'll be cool to see if that ~kind of, kind of ~evolves at all. I feel like the closest we ever got to this conversation was ~like ~in the ~like ~smart contract space. Everybody was talking about this stuff, but ~that ~it's ~like, it kind of ~tied up in this whole other thing that makes it ~all, it's, it's, it's ~really tricky. There's a lot of barriers to entry there to even get Hello world off the ground. ~Right.~ Peter: So ~I, ~I was a PHP [00:29:00] developer a long time ago, and then it was ~sort of ~just bare metal and I actually ended up buying some source code from a person who sold, ~uh, uh, this package that, or ~this piece of software that read ~your. ~Your HT access logs and then gave you like a really nice UI around who was visiting your site, how long they've stayed there. And I think it was like $20 and I hosted it myself. ~Uh, ~I think it was called Mint actually. ~Um, but you know, I, ~it did work back then and I think it can work now, especially if you can just one click install it on your own ~cloud ~CloudFlare account. ~Um, ~maybe ~you check ~you have a ~uptime, ~uptime monitor, or ~you know.~ ~I don't know, ~like a social media, ~uh, planner, ~post planner or something ~like, so ~there's so much. Noel: some endpoints or something. Yeah. Like you, there's a lot of little kind of toy app ~toy. I'm, ~I'm air quoting toy, but like simple apps that do one thing that's ~like, I, ~I would pay, ~you know, ~10 bucks for this source code. Peter: Yeah. Why not? Noel: ~Totally. Yeah, ~totally. Cool. Okay, we're getting low on time. I should get into ~our, our, ~our quick round questions. I could keep picking your brain all day, but ~let's, uh, ~let's do it ~more, um, ~more intentionally here. Peter: Cool. Noel: off,~ off, ~what do you think the biggest misconception is people have about serverless or edge development? Peter: I think that there aren't computers involved. ~Uh, they are, ~there always are. Noel: ~Yeah. Is there, um. If you were,~ if you were starting Redwood, SDK from scratch today, is there anything you'd change or ~is ~[00:30:00] is Redwood, SDK, ~kind of ~the clean slate version? Peter: I wouldn't change a thing. ~I, you know, ~I am so surprised by what we've built. I dunno where it came from, but I'm really glad that ~it, ~it exists. Noel: Oh, nice. ~What a, what a good, ~what a beautiful answer. ~Um,~ Peter: Thank you. Noel: ~do you, ~what do you think the most,~ uh,~ underrated feature or maybe like the most surprising feature for new Redwood SDK users is or will be? ~I.~ Peter: ~Um, ~so we give you ~ev ~control over every bite over the wire. So that means that you control the document, the actual HTML and head and body that gets sent to the browser. You can turn off client side hydration, so you can turn off React, which means you're just shipping HTML. ~Um, ~so if you have a blog or a marketing page. You can keep that in the same worker as your actual product and people get the most efficient experience. The most surprising thing is if you ship to a CloudFlare using Redwood SDK, without trying, you will get a lighthouse score of a hundred. Without a doubt. If you don't get ~like ~90 or above, I would be surprised. Noel: Wow. Wow. Cool. All right. I'm gonna have to try this after [00:31:00] this call. ~I'm gonna go, ~I'm gonna go and ~spin, ~spin up a version of our marketing website and we'll see if it works. ~Um, cool. Cool, cool, ~cool. ~What's a, ~what's a feature you wanna build into Redwood that you haven't had time for yet, or ~like, ~is ~kind of in the, ~in the early planning stages? Peter: So we have the ability to be really composable,~ uh,~ which means that we can give you,~ uh,~ routes, components, functions, database, migrations in a folder. ~So. ~You want an admin side, I can give you an add-on that enables that. If you want a forum, I can give you an add-on. If you want a blog post, I can give you an add-on. I think this concept ~has is, ~is in a lot of really good frameworks. Jango has it, rails, has it. I haven't seen ~a, ~a Java script framework that has it. I wanna just give you the source code to those things so you can modify them for your own needs. But it starts you off in a really good path and it plugs in without ~boil, ~boilerplate. Noel: ~That's cool. ~That's cool. ~Is the, is the, ~is the code all available ~if you're, ~if you're using one of these like plugins or is it like,~ um,~ I guess is it all modifiable or ~is, ~are you ~kind of ~to act with whatever the plugin exposes? Peter: So we think ~of, ~of it like Shad, where you literally get ~the com, ~the code,~ um,~ but you're not [00:32:00] just getting components, you're getting,~ uh,~ like services or. ~You know, ~functionality,~ um,~ but you can modify it all yourself. I think that's really important. ~Um.~ Noel: Yeah. ~Yeah. Nice, ~nice. Awesome. Yeah, ~that's, uh, that's, ~that's cool to hear. I feel like ~that's always, ~that's always the trick on those,~ like,~ I wanna pull something just off the shelf and get everything, but it's like, oh, the way it does author or something is ~like ~very specific and I can't integrate it with ~my, ~my service. I've already, I'm trying to ~kind of ~bolt this on too,~ so,~ Peter: Yeah. ~Well, ~it's like in a package, Jason, ~on, it's in a, ~it's in a module and then you have to ~like ~run some kind of script. Modify it specifically after installation or something. ~Yeah.~ Noel: Yeah. Yeah. It's ~always, ~always a little rough. ~Yeah. Yeah. Cool, cool. Um, Well, uh, I guess is, ~is there ~any other, any other, ~anything else you ~kind of ~implore users to go check out or where would you have them jump into Redwood ~if they wanna, ~if they wanna get rolling? Peter: So go to ~redwood sdk~ rw sdk.com, and I implore you to star our repo. Noel: Yeah. Peter: know ~that ~that's a vanity metric, but it really means a lot to us. ~Um, ~and also triad. ~Uh, ~so ~our, ~our trend line of our NPM installations can continue going upward. ~Uh, ~those are really good signals for us that is gonna help us continue down the path of building. ~The, ~the based react framework ~out ~out there. Noel: [00:33:00] Yeah. ~Nice, ~nice. ~Very, ~very well said. Cool. ~Well, ~thank you so much for,~ um,~ coming on today and chatting with me, Peter. It's been a pleasure. Peter: Thank you, Noelle. Noel: Yeah, have a good one. Peter: ~Awesome.~