skip to content
Video cover art for Remix 3 with Brooks Lybrand
Video

Remix 3 with Brooks Lybrand

Brooks Lybrand explains Remix 3’s web primitives, full-stack design, type safety, unbundled assets, and agent-friendly JavaScript approach.

Open .md

Episode Description

Brooks Lybrand explains Remix 3’s web primitives, full-stack design, type safety, unbundled assets, and agent-friendly JavaScript approach.

Episode Summary

Brooks Lybrand, developer relations manager on Shopify’s open-source Remix team, joins Anthony Campolo and Dev Agrawal to discuss Remix 3’s history, architecture, and release plans. Brooks traces his path from organizing an Austin meetup to joining the team as Remix 2 shipped, then explains how that framework became part of React Router 7 while Remix pursued a broader JavaScript-on-Rails ambition. He describes more than 40 reusable packages for routing, cookies, sessions, schema validation, testing, database access, and UI, connected into a full-stack framework without requiring applications to adopt every piece. A component walkthrough covers JSX, composable mixins, separate setup and render functions, and explicit updates from event handlers. The group examines how coding agents influence API design, why observing their mistakes matters more than asking whether they like an API, and how templates and documentation shipped with packages help them use unfamiliar tools. Brooks also explains Hydrogen’s move toward framework independence, Remix’s unbundled asset server, and his use of Zed and Pi to review agent-written code and switch models. The conversation ends with CLI diagnostics, release plans around Remix Jam, future portable backend capabilities, early framework experiences, and the need to gather community feedback.

Speakers

  • Anthony Campolo
  • Dev Agrawal
  • Brooks Lybrand

Chapters

00:00:01 - Brooks Lybrand and the Remix Team

Brooks Lybrand introduces his developer relations role on Shopify’s open-source Remix team. He distinguishes React Router from the broader JavaScript framework being developed as Remix 3 and explains that the new version is approaching release. Anthony and Dev then ask how he became involved in the project.

Brooks traces his path from an unsuccessful early application to work on H-E-B’s web platform team. Learning from experienced colleagues and organizing a Remix meetup in Austin helped him grow as a developer and community organizer. A conference talk about meetups eventually led Michael Jackson to offer him a position at Shopify.

00:05:15 - Shopify, Hydrogen, and the Acquisition

Anthony asks whether Remix and Shopify’s Hydrogen project were originally supposed to merge. Brooks says he joined roughly a year after the acquisition and does not know of such a plan. He describes Hydrogen’s early use of React Server Components and the challenges that preceded its adoption of Remix.

The teams worked closely, but Brooks distinguishes that collaboration from combining them into one team. Shopify let Remix continue developing its own framework while applying its expertise to Hydrogen. Brooks also introduces Hydrogen’s move toward framework-neutral commerce APIs, allowing merchants to choose tools beyond React Router.

00:08:22 - Developer Relations with Coding Agents

Brooks describes a role spanning user conversations, newsletters, documentation, videos, demos, and organizing Remix Jam. Agents have also made him more involved in implementation. A Discord report can now lead directly to a reproduction, failing test, proposed fix, and changelog entry, rather than stopping at a handoff to another engineer.

He still reviews the change and asks the team to assess it. Dev observes that developer relations increasingly includes working on the product itself. Brooks distinguishes building applications with a framework from developing the framework, explaining how agents reduce the friction of balancing community work with concrete fixes.

00:13:21 - From Remix 2 to React Router and Remix 3

Brooks joined the team during the week Remix 2 shipped and helped announce its release. He follows the project through its integration into React Router 7, when the team decided that maintaining a separate framework layer no longer made sense. Much of that layer had become a Vite plugin above React Router.

The Remix name remained because Michael Jackson wanted to pursue a substantially broader JavaScript framework. Brooks describes ambitions around components, testing, schema validation, and database tools. Remix 3 therefore represents a larger change in scope than its version number might suggest, while React Router continues serving applications built around React.

00:15:58 - The Rise of Full-Stack React Frameworks

Anthony asks why Remix, Redwood, and Blitz appeared within a short period around 2020. Brooks points to gaps in server rendering and mutations, Gatsby’s emphasis on static sites, and competition between framework authors. Cheaper server infrastructure and simpler deployment also made server-side JavaScript accessible to more developers.

Anthony adds that React had become a common foundation for bootcamp graduates and tutorial users. That created an opportunity to build the missing application stack around a familiar frontend. Brooks sees several conditions converging rather than one decisive cause, with developers rediscovering the advantages of controlling their own server layer.

00:20:57 - Meteor and Colocating Application Logic

Dev recalls building early projects with Meteor and recognizes similar ambitions in newer full-stack frameworks. He values organizing application code by feature rather than separating it into client and server repositories. Where a function executes can be an implementation detail instead of the principle that determines where all related logic lives.

As applications become more complex, separating those layers can duplicate logic and allow implementations to drift. Dev connects the new framework generation to keeping that work together and making coordinated changes easier. The discussion then turns to the specific constraints that pushed the Remix team toward a different architecture.

00:23:04 - React’s Roadmap and Remix’s Independence

Brooks explains the tension between Remix’s server-oriented design and React’s direction around Server Components and caching. React Router continues supporting React, but being built on that foundation limits how far the team can depart from its architectural choices. Remix’s wider ambitions needed room to follow a different roadmap.

A detour into earlier React Router migrations highlights another constraint: the cost of breaking changes for real applications. Brooks describes lessons about versioning, future flags, and preparing users for upgrades. He then returns to the distinction between maintaining React Router for its community and exploring a broader framework through Remix 3.

00:29:35 - Reusable Packages and Web Primitives

Brooks presents Remix 3 as a full-stack framework assembled from more than 40 reusable packages. Cookies, sessions, schema validation, routing, testing, and database-related tools can work together without requiring every application to adopt all of them. He compares the framework to a Linux distribution that connects independent pieces into a coherent whole.

Developers can use the router for HTTP APIs, adopt the component system for a client application, or substitute tools such as Drizzle. A website tour also highlights the Fetch request-response model, the Navigation API, ordinary variables, and directly served JavaScript modules. Web standards provide the foundation for the overall design.

00:36:09 - Agent Documentation and API Feedback

Dev asks how coding agents handle unfamiliar Remix APIs. Brooks describes the team’s bet that improving models would understand designs grounded in JavaScript and web primitives. Templates, skills, and documentation shipped inside installed packages help agents discover the relevant version’s APIs rather than reverting to assumptions about earlier Remix releases.

Brooks separates an agent’s agreeable assessment from evidence gathered by watching it build. Confusion around an early component props model affected both humans and agents, prompting changes. Repeated mistakes and awkward workarounds reveal weaknesses in an API, giving the team useful feedback before a large community has adopted it.

00:43:10 - JSX, Mixins, and Component Setup

Dev asks for a closer look at the syntax and how Remix differs from React and Solid. Brooks outlines the HTTP router and backend tools before focusing on components. Remix retains JSX and adds mixins that compose styles, attributes, and behavior without the ordering and nested event-handler concerns of repeated prop spreading.

A counter example introduces separate setup and render scopes. Setup runs when the component mounts, while a returned function describes its rendered output. A component handle provides access to props and other capabilities. Brooks distinguishes using an initial prop to establish local state from reading values each time the component renders.

00:48:19 - Explicit Updates and the TSRX Discussion

Brooks explains call-site updates: an event handler changes a value and calls handle.update to refresh the component. He says agents have generally handled that sequence well, despite making other mistakes in Remix applications. His explanation is tentative: a procedural sequence may map directly from a request to the resulting code.

The hosts compare that approach with hooks, effects, signals, and TSRX. Brooks says substituting TSRX was not a design goal and would take Remix away from its priorities. Dev discusses its richer control flow while respecting Remix’s effort to reduce build-time complexity. JSX and TypeScript remain pragmatic concessions within that approach.

00:55:02 - Hydrogen’s Framework-Neutral Direction

Brooks clarifies Shopify’s work to make Hydrogen less tightly coupled to React Router. Merchants may want Next.js, Solid, Svelte, or Remix 3, and Shopify benefits from supporting those choices. He describes Vercel’s involvement as providing feedback on commerce capabilities that should work well across different framework setups.

Compatibility with Remix 3 is a useful consequence rather than the sole reason for the effort. Brooks argues for exposing the underlying APIs without unnecessary layers of framework coupling. The discussion distinguishes Shopify’s goal of helping merchants build stores from prescribing a single frontend architecture for every merchant.

00:57:29 - The Unbundled Asset Server

Asked about his favorite features, Brooks describes how Remix helped him become more comfortable building backend applications. He then highlights its unbundled asset server. The design treats JavaScript modules as web resources and allows bundling to remain an optimization, rather than making a bundler the foundation of the application architecture.

Brooks contrasts that choice with frameworks closely tied to Webpack or Vite, while expressing confidence in React Router’s existing Vite relationship. Dev relays a comparison with Deno Fresh. Brooks leaves room for the approach to evolve and emphasizes that developers can still use a bundler when it suits their application.

01:00:57 - Reviewing Agent Code with Zed and Pi

Anthony asks about Brooks’s preferred agent tools. Brooks values Zed’s speed and Git diff experience because he still wants to inspect generated changes, understand fixes, and remove unnecessary complexity. He uses Pi to switch between models available through Shopify and to extend his workflow without adopting a heavily prescribed process.

He compares that setup with OpenCode, Codex, and Claude Code, describing frustrations with interface changes and difficulty reviewing code. These are personal preferences shaped by his work and access to models. The conversation also touches on how developers and Remix itself are redefining their roles as agents write more application code.

01:06:54 - CLI Diagnostics and Useful Agent Tools

Dev asks whether Remix will offer Rails-style scaffolding and how its CLI fits alongside agents. Brooks says scaffolding remains possible but has become less urgent because agents already generate boilerplate effectively. He describes a doctor command that identifies configuration problems, adjustable conventions, and CLI commands for running tests.

For Brooks, tools are valuable when they give people and agents accurate information and concrete feedback. He questions adding an MCP server merely because documentation sites are expected to have one. Shipping reference material with installed packages is part of making the correct documentation available without building a large collection of specialized integrations.

01:09:52 - Release Plans, Feedback, and Backend Scope

Brooks describes plans, as of the recording, to release Remix 3 around Remix Jam on October 2. Documentation, website improvements, demonstrations, and explanations of the framework’s philosophy are immediate priorities. After release, the team wants users to reveal missing features, confusing behavior, and APIs that need improvement.

He discusses an intended yearly release cadence and longer-term possibilities such as background jobs. New backend capabilities should offer useful abstractions while remaining portable across runtimes. Videos, writing, and community conversations are also needed to explain what the team has built before it moves further into the feature roadmap.

01:13:45 - First Frameworks and Closing Plans

Anthony asks about Brooks’s first web frameworks. Brooks recalls using Python tools before working with jQuery and D3 for data visualization. Trying Angular, Vue, and React eventually led him toward React, while the hosts compare that experience with their later interest in Solid and other approaches.

The conversation closes with thanks and plans for future content. Anthony mentions the next interview with Carl DiClementi and his upcoming European trip. Dev discusses spending time with family in India and the time difference for their next stream. Brooks hopes to make more videos, and the guests exchange their final farewells.

Transcript

00:00:01 - Anthony Campolo

Welcome back, everyone. We have a new guest today, Brooks from the Remix team. How you doing? Also, can you tell me how to pronounce your last name?

00:00:11 - Brooks Lybrand

Yeah, you're good. I didn't even write it down. I guess it's in my little, my little So yeah, it's Brooks Lybrand. It's a German last name. Yeah.

00:00:18 - Anthony Campolo

Awesome.

00:00:19 - Brooks Lybrand

So the way it's spelled is typically don't try to make it fancy. Otherwise it'll get confusing.

00:00:24 - Anthony Campolo

Yeah. I used to host a podcast and the first thing I'd always do before we start is I would ask, how do you pronounce your name? So I would know it. And it's been a long time since I did. And I got to that moment like, ah, fuck the question.

00:00:35 - Brooks Lybrand

Oh, man.

00:00:36 - Anthony Campolo

Yeah. It's great to have you here. Um, you know, Dev and I know a lot about Remix. Um, I went to Remix Conf, was my first ever in-person convention actually. And, um, that was 2023. Um,

00:00:48 - Brooks Lybrand

okay. Cool.

00:00:48 - Brooks Lybrand

Yeah. We missed each other then. I, I was there. I was not part of the team by any measure.

00:00:52 - Anthony Campolo

That's

00:00:52 - Anthony Campolo

awesome. Yeah. Yeah. So, um, go ahead and tell our listeners who you are and what you do.

00:00:56 - Brooks Lybrand

Yeah. My name is Brooks Lybrand. I'm the developer relations manager of the Remix team. And Remix is, it's an open source team is actually even the better way to say it. We work on React Router. So, that's kind of our more, I don't want to say legacy because that makes it sound worse. But like our more React-suited meta framework. So, we've been working on that for a long time.

00:01:16 - Brooks Lybrand

We just released v8. Well, not even just. I guess that was a few months ago. Anyway, version 8 is our latest version of that. And then Remix is A full-stack JavaScript framework that really kind of controls and owns its own just everything. And so, I'm sure we'll get into the details of what does that mean. But it's much more akin to like a Ruby on Rails for JavaScript.

00:01:35 - Brooks Lybrand

So, we've been working on that. And we are currently in the release candidate phase. And we're getting really, really close to releasing it. It is going to be version 3. So, Remix 3. And that's just because we have a bit of a weird history with SemVer. Which I'm happy to talk through and explain. How we got ourselves into that.

00:01:51 - Anthony Campolo

Yeah.

00:01:52 - Brooks Lybrand

Yeah. That's awesome. And also, I should say that we are an open source team at Shopify. So, Shopify is our employers. And they are, you know, funding open source, which is super awesome.

00:02:05 - Dev Agrawal

Nice. Yeah. I'd love to hear a bit more about how you got involved with the Remix team in the first place. Yeah. And what was your background before that?

00:02:16 - Brooks Lybrand

Totally. Yeah. No, that's a good question. Let's see. How did I get involved in the Remix team? It was kind of a long story. So, I actually applied to the Remix team really early on when they announced that they were doing Remix and that they were taking— actually, it was right before they announced that they were taking funding, but they were hiring people.

00:02:32 - Brooks Lybrand

I applied and was rejected kindly. You know, they just were— mostly I just wasn't ready necessarily as a developer. At that time, I'd been working— I was a few years maybe out of university. So, this would have been like 20— 21 or 22. So I would've been like—

00:02:48 - Anthony Campolo

What school did you go to?

00:02:49 - Brooks Lybrand

I went to the University of Texas in Austin. Oh, wow. So yeah, Hook 'Em Horns. We just won. So sorry, I'm on a really big high. So if you watch college sports, you're in it, but otherwise half you are like, what are you talking about? Don't bring sports in this. This is a tech podcast. We don't talk sports here, which is fair and understandable.

00:03:06 - Brooks Lybrand

But anyway, so I was probably 3 or 4 years out of college at that point. I'd been working for a pretty small company that was doing Mostly consulting and a lot of like— it was very data-oriented. So, it wasn't really a web shop necessarily. And I kind of was— had become the web guy more or less. So, I was looking for my next venture.

00:03:23 - Brooks Lybrand

I really liked Michael and Ryan. I really liked React Router. And it was so cool to see them building a meta framework on top of it. And I just thought it was so cool. It jived with the way I thought. It was teaching me how the web worked. All this stuff. So, I threw my hat in the ring and applied. But I had not really done any open source work or anything like that.

00:03:38 - Brooks Lybrand

So, They didn't go forward with me at that time, which is totally cool. Then I ended up working at a grocery store in Texas. It's a very Texas-coded story called H-E-B. And I was on their web platform team. So it was a really good opportunity to work at a bigger company, but still very rooted to real users, which I loved. It wasn't just pure software.

00:03:59 - Brooks Lybrand

It was very much like in-between software that served Texans just trying to get their groceries. So I worked on the web platform team, which was like Pretty much everyone on that team was more senior than I was, which was an incredible learning opportunity. Obviously we don't always get to choose exactly the teams we join, but if you could, I would say that is absolutely the kind of team that you should join earlier and even middle of your career.

00:04:19 - Brooks Lybrand

So learned a ton there. And I just started a Remix meetup in Austin cuz I really loved what Remix was doing at the time. Kent C. Dodds was doing the kind of DevRel role and he had started all these little meetups or he was like encouraging people to start up meetups. And I was like, that sounds fun. Like I love going to meetups.

00:04:36 - Brooks Lybrand

I think it'd be cool to start one. This is something I'm, you know, have a developing passion for Remix, this meta framework. And so, I started a meetup and it was going pretty well. And then at Remix Conf 20— would that have been 2023 or '24? I should know. Because I've run a couple of them now. But whatever their second conference was, I got to speak about meetups.

00:04:57 - Brooks Lybrand

And I got to speak about building community. And at that point, At that point, yeah, Michael Jackson, one of the co-founders of Remix, was like, hey, you wanna kind of do this for a job at Shopify? And I said, that sounds great. I did apply a couple years ago, so let's, let's do it. Let's make it happen. Um, and yeah, the rest is history.

00:05:15 - Anthony Campolo

I actually have so many questions about this era of Remix going to Shopify. I remember when this happened and, um, it sounds like that's like when you really got into it. Also, I interviewed Kent. This was like a month or two after his car crash.

00:05:28 - Brooks Lybrand

And, uh, oh my gosh.

00:05:28 - Anthony Campolo

Yeah. He was still like physically like recovering from it. It was, uh, I remember that so vividly. It was really intense when it happened. So people can check out this episode. He tells the story on this episode. If people have never heard of that, he almost died. But,

00:05:41 - Brooks Lybrand

uh, yeah, it was pretty intense. Yeah.

00:05:43 - Anthony Campolo

Yeah. Yeah. So, um, my question though is I heard this may not have been actually true or not, but I remember hearing that like Remix and Hydrogen were going to kind of merge. Was that actually a plan at some point?

00:05:54 - Brooks Lybrand

Not that I'm aware of. So, just to give the full kind of background of my journey with it. So, I joined the Remix team officially like 1 year after their acquisition. So, a lot of my knowledge is like from the outside and then marrying that with like being on the inside and asking all these questions. Like, so, what's going on here? My understanding of kind of how it went with Hydrogen was basically Hydrogen, for those who don't know, is like a headless— it's Shopify, built for Shopify.

00:06:20 - Brooks Lybrand

It's headless. Specifically it was React. They're actually moving to be agnostic, framework agnostic, which I think is really, really cool. But a framework, a React framework for building Shopify stores in a headless way. So you're not tied to Liquid, which is their templating engine. You're not tied to anything like that. You can build it your own way. If you have developers on your team, they can really customize it how they want.

00:06:43 - Brooks Lybrand

The first version they built of it, they leaned very heavily into React Server Components well before server components were adopted by anyone, even Next.js.

00:06:51 - Anthony Campolo

GraphQL. Yes. Yes.

00:06:53 - Brooks Lybrand

Very GraphQL-y. That's true. But yeah. So, they leaned heavily into RSC, React Server Components. And I think that burned pretty hard. It did not go super well. And so, I do believe, as I understand it, that that was part of like the impetus of looking around and being like, hey, who else is in the React space ecosystem, understands that space well and can help us build a framework that just can work really well?

00:07:20 - Brooks Lybrand

I've never heard that there was any sort of understanding that they were going to be adopted into the Hydrogen team. And it was more so, let's let the Remix team keep building Remix and then let's see where at Shopify it fits well. Hydrogen being the first obvious place of let's build on top of Remix. And at this point, yeah, they're again, like I said, they're doing kind of a more agnostic approach to it, which is in retrospect kind of like It maybe feels like what they always should have done, but you kind of have to sometimes, you have to go through it before you kind of realize the path that you should have taken,

00:07:53 - Brooks Lybrand

I guess. So they built Hydrogen on top of Remix. But now, yeah, it's decoupled so you can build it on top of React Router or on top of Remix or Next.js or whatever have you, Solid, et cetera. So I really love the way they're going with it. But no, it was never like a, we're merging together. But the team did work very closely as they were trying to help them with their next version of Hydrogen.

00:08:15 - Brooks Lybrand

And as we were receiving feedback, of course, on how to make Remix, like V1 at the time, much better.

00:08:22 - Anthony Campolo

Awesome. So you wanna talk a little bit about like what your role is exactly? I think you said you're DevRel manager.

00:08:28 - Brooks Lybrand

Yeah, yeah, yeah. It's a funny title because I don't manage anybody, but you know, that's what my title is. I think that was an existing role at Shopify at the time. I don't know if that role actually exists anymore.

00:08:40 - Anthony Campolo

So you're DevRel.

00:08:41 - Brooks Lybrand

Yeah, exactly. I'm just a dev rel. I'm managing all the relations of all the dev rels. Yeah, exactly. So yeah, it's like, it's a very hybrid kind of like, it's a very weird role. It's like very much what it needs to be. And it has changed a lot over time. I will say like these days I honestly am way more involved with the actual development of Remix.

00:09:02 - Brooks Lybrand

Partly because like AI, now that AI like it has lowered the floor, I guess is the right term in that sense. That's part of it. But also, it's just before, you know, the flow would be I'm engaging with users. I'm talking to them on X or I'd maybe talk to them at a meetup or whatever it may be. And I— or I'm just even perusing GitHub issues.

00:09:22 - Brooks Lybrand

And it's like, oh, hey, here's a bug or something that's, like, not that great. Okay. We should fix this. This seems like a problem. So I'd maybe get to the point where I made a recreation of it. But at that point, I typically— it was just much easier to it off to whichever developer had most recently worked on that area of Remix or React Router and say, hey, can you look into this when you have time?

00:09:42 - Brooks Lybrand

And advocate for that issue going along. These days, it's really lovely with agents. I can just be like, hey, I screen— literally screenshot Discord and it's like, all these people are talking about this issue. This sounds like a problem. Is it a problem? It's like, it is a problem. I made a test and the test fails. So, this is a problem. It's like, great.

00:09:58 - Brooks Lybrand

How can we solve it? Let's go through some ideas. Or I'll maybe give it some ideas at that point. Or where in the codebase is is a problem. And so I can just more directly, without really breaking out of like what it was I was doing, which is engaging with those users, I can get an agent to start fixing that issue and push it up.

00:10:13 - Brooks Lybrand

And then get the, you know, the team to review it at this point. But it's so much easier to review like a test that actually shows the issue, an actual fix to it, an actual like changelog that, you know, I've reviewed at that point to make sure I understand and refined in a way that like communicates The issue and the fix. So these days, because of that, because that lowering of the floor, I actually end up doing a lot more development than I used to.

00:10:37 - Brooks Lybrand

But in terms of overall job, yeah, there's a lot of different things. It's a lot of little things like getting our newsletter out every month, just general communication things. I used to make a lot more videos in the past and would do more interviews and stuff like this. That slowed down a bit for a myriad of reasons, but that's something I'm gonna start kicking up a lot.

00:10:55 - Brooks Lybrand

Thank you. Yeah, we actually have a newsletter archive. It's really nice that you can link that now. Yeah, kicking back up our videos a lot more on our YouTube. Definitely wanting to do a little bit more video content. So there's the education aspect of it. Writing docs, though I don't do that exclusively by any means, but that is something I think about a good bit of just like, what is the written communication form of what we're doing?

00:11:16 - Brooks Lybrand

Sending out the tweets, all the just fun marketing stuff, as well as coordinating Remix Jam, which is our conference, October 2nd that we have coming up in Toronto. I help organize that and make sure that we have the speakers and that we're organizing all that. But also I will be speaking at that. And yeah, a good bit of dev, a good bit of demoing.

00:11:35 - Brooks Lybrand

It's a myriad of things. I feel like it is very hard to know where the edges of my job end. But yeah, DevRel, this is what it is.

00:11:45 - Dev Agrawal

Yeah, I feel like people doing roles like DevRel, a lot of us used to stay away from the code or maybe only do demos and stuff. But the time for that is now completely over. Like, if you're a DevRel, you probably should be— you probably should have been involved with the actual coding anyways. But now you don't have an excuse to stay away from that.

00:12:10 - Dev Agrawal

So, yeah, that's amazing to hear.

00:12:12 - Brooks Lybrand

Yeah, yeah. It's so true. I mean, yeah. Ideally, everyone can be involved in all the things. And I've always— I will say, like, I've always been I've always been the one who's actually using the product, I would say. Maybe not the most, but definitely these days. I would say I'm number one user of Remix. I mean, actually, number one user is probably ChatGPT 5.6 SOL or whatever.

00:12:32 - Brooks Lybrand

But besides that, I am the number one, the user behind the user. So, my role has always been building stuff with it and giving feedback from that standpoint and making sure we're communicating. But yeah, it's a very different thing to— it's very different to build with something and then build the thing that you're building with. Um, and probably better dev rels than I were able to balance that, uh, very well.

00:12:53 - Brooks Lybrand

I— that was always very difficult for me, um, to do both those things. I felt like I was either, you know, one gear or another. And I feel like these days it is much easier. I also think I probably have gotten a little bit more experience, a little bit more confident in both of those roles. Um, but even still, like, if I'm fully heads down and like making a video or something, it's very hard to, to fix bugs.

00:13:10 - Brooks Lybrand

But it's not that hard to be like, is this a bug? You know, and get, get at least that thread going. So, it's much easier to come back once I'm done making that video to come back and patch that stuff up.

00:13:21 - Dev Agrawal

Nice. So, you have been involved with the Remix team since before v3, right?

00:13:28 - Brooks Lybrand

Oh, yeah. I've been officially on the Remix team 3 years. I just hit my anniversary. So, I've been with them for 3 years. The full history of that— oh, hold on. Let me find the— I've got a link for you since you've been posting all these links. So, this is the full history. This is kind of the canonical— I'll send it on the internal chat and you can post that wherever.

00:13:47 - Brooks Lybrand

This is like the canonical history of Remix. If you go to remix.run/remix-history. And basically the story of it is like how we started with React Router, built Remix 1 and 2, kind of merged those back into the same project and then like siphoned off and built Remix 3. And it has like a little diagram to explain that. But I'm pulling it up just so I can remember the exact history.

00:14:08 - Brooks Lybrand

So, 3 years ago would have been 2023. Literally the week I joined the Remix team. The Monday I started, you know, I met— talked to Michael, talked to, you know, the team. I was starting to meet people. And we had an all-hands that Monday. And it was like, all right. We're gonna ship Remix 2 this week. I was like, oh, okay. Awesome.

00:14:26 - Brooks Lybrand

And so, that Friday we shipped Remix 2. And I, you know, I wrote and sent out the tweet that told everyone about Remix 2. So, I've been involved for sure with, like, the whole project. Just, like, community standpoint, everything from like v0 days. But yeah, joined the team right before v2. Saw all the way through v2. Saw it through the merge, upmerge into React Router v7 when we decided this does not need to be its own framework.

00:14:53 - Brooks Lybrand

This should be part of what we're doing with React Router. Because we had this— basically we had this relationship where it's like layers of React and then it's— thank you. And then it's React Router, you know, handling the routing. And then Remix is like this extra layer. And basically it just became like a Vite plugin on top of it. That just handled some code splitting and stuff.

00:15:10 - Brooks Lybrand

And it just— it was just not— it didn't make sense. So, we just like collapsed all the layers and made that React Router 7. And then the reason we stuck with the Remix name is honestly because like Michael always had this ambition of making Remix so much bigger. And he was like, you know what? Screw it. I'm gonna do it now, guys.

00:15:25 - Brooks Lybrand

We're gonna make Remix even bigger. We're gonna make it the JavaScript on Rails. Like it's time to go. And so, we said, all right. We'll do it. Like let's go crazy. Let's like build, you know, our own component library. Let's build testing built in, a testing harness built in. Let's build, you know, a Zod alternative and a data schema, uh, like handler and all the crazy stuff, like a database layer that, uh, like is a Drizzle kind of not full equivalent, but it would take that piece of your stack.

00:15:51 - Brooks Lybrand

So that's like what Remix is now. It's so much bigger than what we've done with, uh, React Router. So yeah. So let's keep going.

00:15:58 - Anthony Campolo

Your thoughts on this since you're one of the few people who is kind of in this same spot. Why do you think in early 2020 it was such a good time to make full-stack React frameworks? Because you had Blitz, Redwood, and Remix were each introduced in a 3-month span.

00:16:14 - Brooks Lybrand

Yeah, I actually, I've been kind of contemplating this a lot. Um, I don't know if I have like the exact right answer. I think it's a combination of, I think there are a lot of things. Um, I think part of it is just like there is this weird reality, right? Where when something, it almost feels like when someone does something for the first time or does something good for the first time or whatever, like every, there is that rush or like there's that, like, like, like, you know, calculus was invented by 2 different people at the exact same time who didn't even know each other.

00:16:40 - Brooks Lybrand

That kind of happens. When React came out, there was already Angular, but then Vue came out and it was like all these other frameworks that all came out at the exact same time. AI obviously is the same thing now. We can definitely attribute that to competition for sure. So I think, I think to some degree it's just like it's because it did happen.

00:16:57 - Brooks Lybrand

I don't know. It's because it did happen. And so therefore everyone was kind of getting in. As far as why 2020 though, I do think that there is like— I think the server story is a big piece of it. Because up to that point, you could always do React server-side rendering. You just kind of had to own that piece. They had it built into the React library.

00:17:15 - Brooks Lybrand

That was actually a really big reason a lot of people did pick React early on. It's not really the the hero that everyone really talks about. We talk about composition. We talk about all these other things. But server-side rendering actually was a really nice piece of that framework story. But yeah, there was no framework that did it great. Next.js was the one I remember that did it at all really that was popular.

00:17:37 - Brooks Lybrand

And even the way it did it was the Pages API, right? And it was not like— it was very limited in what the server-side rendering was. And there was no mutation story really. There's no actually sending an action back up. And Gatsby, we also were very focused on the, what's the word? The Jamstack architecture, right? Where it's like you're— anyway, Gatsby was a very static site builder approach, which static site builders aren't bad in and of themselves, but it's very much a specific use case kind of tool.

00:18:07 - Brooks Lybrand

And Gatsby unfortunately was being adopted as this one size fits all. So we were in this kind of— I felt like we had starts and stops. And then finally by 2020, yeah. I think Next was getting good and honestly, I do think got really good because Remix kind of came in and there was this competition. And then all those others you mentioned were also coming out.

00:18:26 - Brooks Lybrand

So there was just this, I think, building on each other of like, oh yeah, let's take this really far. But again, I think that as best as I can remember, and I really was not a backend guy at the time at all, but I think it just got a lot cheaper to run serverless environments, to do server-side rendering. It was a lot cheaper.

00:18:43 - Brooks Lybrand

But also cool tools like Fly were coming out where you could do this. Server to the edge, but it still was like a containerized kind of environment and stuff. So I just think the server story got good enough that it kind of felt like, okay, we can finally do JavaScript on the server for the mainstream. Obviously Vercel has built a whole company around kind of this concept, or at least that's a big part of what Vercel does very well.

00:19:04 - Brooks Lybrand

Makes it really easy to deploy these sort of things. And I think a lot of us developers who kind of came up with React and were so used to just client-side rendering, we kind of relearned what a lot of people knew of like, oh, hey, servers are actually They're pretty cool sometimes. Like you can do a lot more if you're not just relying on your backend team to send you an API when they're ready.

00:19:21 - Brooks Lybrand

Um, if you can kind of control that layer, you can do a lot more. So I think it's a confluence of like a billion things. And so I gave you like a, not an answer at all.

00:19:28 - Anthony Campolo

A couple others that I would love to hear would be, um, at this point, so React had, uh, decisively beaten Angular and had been around long enough that was not going to be decisively beaten by like Vue. Like it was kind of obviously the runaway winner by 2020.

00:19:45 - Brooks Lybrand

I think it's fair.

00:19:46 - Anthony Campolo

And also you look at this whole generation, including me, I was one of them, uh, bootcamp kids and people who learned tutorials, they all learned React.

00:19:55 - Brooks Lybrand

Yeah.

00:19:55 - Anthony Campolo

So it was just kind of like, everyone was like, there's really, it's going to be React. So who, and also because it didn't have the backend stuff built yet, everyone's like, whoever built this, they get like the framework, you know?

00:20:06 - Brooks Lybrand

I think, yeah, no, I think you're right. I think that's actually, I think that's a huge part of it. I think you're right that like we had a common kind of agreement that we could build on top of. Because before that, you know, we had like Meteor was like the, the maybe the first attempt at what Remix 3 is trying to do in the JavaScript space.

00:20:19 - Brooks Lybrand

Where you are trying to build this like full-stack application. Even it tried to build around React. It just like, I guess just was ahead of its time. I don't know. We can, we can argue the merits of like how, how it approached it. But like it's not for lack of imagination is all I'm trying to get at. But I think you're right.

00:20:34 - Brooks Lybrand

Just like the fact that we could center around React made it towards like, oh yeah, it's not like you're picking React. I don't know about that. Like I can't try Next.js. Like that. Maybe for some people, yes, that was an issue, but for the vast majority of people are just trying to do their job, trying to ship H-E-B.com so that people can order groceries.

00:20:51 - Brooks Lybrand

I don't think that was the qualm. And so then now you get to start fighting on those margins. Yeah.

00:20:57 - Anthony Campolo

Dev, do you have any theories or additional points on this question?

00:21:02 - Dev Agrawal

I guess the first thing is that I love the Meteor callout. For the longest time, that was my absolute favorite framework. My first freelance gig and a couple of— like most of my first few projects were all built with Meteor. It's kind of like the framework that— I mean, yeah, like you said, I feel like the last few years most frameworks have been trying to capture the same experience that Meteor offered like 10 years ago.

00:21:33 - Dev Agrawal

And I love that. Remix is another attempt. Maybe a much better attempt than the previous ones to do that. But, yeah, so far I think I agree with the different factors that have been brought up. I don't think I have anything new. I think maybe the one thing that I would add that comes more from my experience is trying to co-locate client-side and server-side code together a little bit and not have them split across different repos and maybe even different languages.

00:22:02 - Dev Agrawal

That's the one that I like the most about this new generation of frameworks that I didn't have— that's what I like most about Meteor, actually. That my application logic lives together. Not my client and my server logic. That's just an implementation detail that shouldn't dictate where my code lives. I should be able to co-locate them based on the features, not based on the place where they run.

00:22:29 - Dev Agrawal

And this is something that— this is one of the many things that I think this new generation of frameworks were solving. Because it just— as people were building more complex applications on the client side, it just became inevitable that you're going to be duplicating code. Things are going to drift. And you need an actual solid way to keep them together, to maintain them together, to change them together.

00:22:55 - Dev Agrawal

And that was one of the things that this age of frameworks kind of brought.

00:23:00 - Brooks Lybrand

Yeah, I think that makes sense.

00:23:04 - Dev Agrawal

Cool. Yeah, so one of the reasons I— I mean, we have been at it for about 30 minutes. So we should probably get into the actual Remix stuff soon. But one quick thing that I wanted to bring up to ask was, like, what kind of issues were you running into with React Router that you decided to, or like the team decided to take this jump towards a completely brand new architecture, dropping React, stuff like that?

00:23:35 - Brooks Lybrand

Yeah, that's a good question. Yeah, it was a long time in the making. So we first talked about Remix 3 publicly, talked about our decision to kind of go away. And even that decision was like, Sorry, we talked about that about a year ago. And that decision we'd been talking about for a long time. Because just for a really long time, like, we built Remix.

00:23:59 - Brooks Lybrand

We built it to be very server-centric with Remix 2 and everything. And actually really Remix 1. And then React came out with server components. They announced that pretty shortly after Remix hit v1, if I recall correctly. It was in December, I think, of 2020. So Remix hadn't hit v1, but they had definitely been showing kind of what they were doing. Because it started in 2020.

00:24:18 - Brooks Lybrand

And so, for a long time, we just kind of felt like we were constantly struggling, fighting against how React wanted to do server stuff. And to be fair, React Router does support server components. So, we fully— we want React Router to be the full React story. But it just like— as long as we— if we have a disagreement, if we just don't like the way React does it, just too bad because we're built on top of React.

00:24:41 - Brooks Lybrand

And so, we could never really make our own kind of decisions, it felt like. We had okay relationships maybe with the React team and we could certainly talk to them and try to communicate their path. But the reality of it is Next.js just kind of became the de facto React framework. I mean, that's literally their tagline is the React framework. Or for, I think for the web or something.

00:25:01 - Brooks Lybrand

So it's just like, it always felt like we were— it did not feel very competitive. It just felt like, and maybe I'm being a sore loser or whatever, and that's fine.

00:25:09 - Anthony Campolo

Um, you didn't lose as hard as us.

00:25:11 - Brooks Lybrand

Yeah, exactly. Yeah, there you go. That's fair. Yeah, we can commiserate. Um, and to be fair, like, again, React Router is still like incredibly used, especially like the non-framework piece of it. The framework piece of it is still very popular. Um, you know, nothing compared to Next.js, obviously, especially with the way agents have taken it. Um, and the core React Router is still very popular for a lot of, uh, real quick on that.

00:25:31 - Anthony Campolo

Okay. I learned React Router in my, um, bootcamp actually.

00:25:34 - Brooks Lybrand

Yeah. Yeah.

00:25:35 - Anthony Campolo

I think they were in the process of migrating the curriculum from 4 to 5. Because you guys would change and then they have to rewrite some of the curriculum. And it was the only thing that changed in the curriculum. I was like, and then they'd be talking about, yeah, Remix 4 used to do this. Now Remix 5 does this. I'm like, don't tell me what Remix 4 did.

00:25:51 - Anthony Campolo

Yeah. It's so hard for me to even learn what 1 did.

00:25:53 - Brooks Lybrand

Just tell me, just, yeah, that's like, it's unfortunate.

00:25:55 - Anthony Campolo

I know that's not your guys' fault.

00:25:57 - Brooks Lybrand

No, you're good.

00:25:58 - Brooks Lybrand

I mean, no, React Router 4 to 5 wasn't like a mistake the way it went. That was well, well before Michael and Ryan actually made this a company. The way they were doing that is they were doing React training. They were teaching people how to train. And on the side, they were like, building a little router that they thought was super cool.

00:26:17 - Brooks Lybrand

And it took off. Partly, absolutely great name, right? React Router. You don't even necessarily think that it's a separate thing. But also because people did like it. It was not a bad framework. They made some decisions based on stuff they knew was coming, specifically like hooks and stuff. Um, or maybe it was 3 or 4, I always get the versions, but there was one that was like particularly bad that they, they were learning SemVer as they went, you know.

00:26:39 - Brooks Lybrand

And they, they knew SemVer, but they were learning like the implication of like, yes, you can, you can, you are allowed to break whatever you want when you go from B major to B major plus 1. The reality is though, you have like the community and then their, uh, feelings about what you decided to break and how difficult that is going to be for actual projects that are making companies money or are supporting grocery stores again or whatever.

00:27:04 - Brooks Lybrand

And so, that was a very, I think, big learning moment. And I think that they, like, they carried that forward a lot when they hired a bunch of other engineers like myself and like Matt Brophy and whatnot who we've created a much more robust system for updating your code early on with future flags and all sorts of stuff. So, I think we learned a lot from those early days.

00:27:24 - Brooks Lybrand

But, yeah, that was well before Remix was even like a company and like a meta framework. It, now our framework will not. Uh, I think I lost the thread of what the original question was, but good, good tangent. I like it.

00:27:34 - Anthony Campolo

Yeah, that was pretty, pretty much it. Um, Dev, what was— where do we start with you? I forget.

00:27:41 - Dev Agrawal

No, no worries. Um, no, yeah, the, the original thread was like, what issues were you running into with React Router? I think you—

00:27:47 - Brooks Lybrand

oh, right, right.

00:27:48 - Brooks Lybrand

Yeah, yeah, yeah. I think, you know,

00:27:50 - Dev Agrawal

yeah, go ahead.

00:27:51 - Brooks Lybrand

It's just that it's the roadmap of React. React is, is a good project, and honestly, Next.js, like They have fixed a lot of issues. We certainly— we wouldn't be making a meta framework of React Router with the framework mode or Remix v1, v2 if it weren't for the fact that we thought we could do it better. Like, why would you do— why would you put anything else out into the world unless you think that you have some take that is good?

00:28:09 - Brooks Lybrand

I think that's okay. And yeah, we just— we didn't love the way that they were handling caching being built in. We didn't like that it was server render— sorry, React Server Component. Centric. We just didn't love that primitive. We didn't think it was fully baked out. We didn't think people actually understood it as well as the React team maybe thought people were gonna immediately understand it.

00:28:29 - Brooks Lybrand

So, we just had a lot of reasons we were kind of hesitant about that. Even as we were building towards it. So, it felt like we were begrudgingly adding something to the framework that we didn't really love. And all along, again, we always kind of— and especially I say we, really Michael has always had, I think, this vision of Remix to be just so much bigger.

00:28:46 - Brooks Lybrand

I mean, his roots are much more in the Ruby world. And he is much more of a backend guy. He was one of the very early people like, oh, you can put JavaScript on the server. What else can you do with that? And so we just, I think I've always had this ambition and it was just, it felt like it was gonna be easier to build it around React.

00:29:02 - Brooks Lybrand

That's where Michael and Ryan had their community. That's where they'd made their big name. We just kind of got to a point where we're like, you know what? We are going to continue supporting React Router, this React-based framework. And we're gonna continue adding good features to it. We have a team built out that can do that. But our ambition of where we want to try to move the web forward is just not gonna be able to be built around that.

00:29:24 - Brooks Lybrand

'Cause we're always gonna be fighting against the grain on that. So we can never just kind of go the direction we want to go. So it really, it kind of just, yeah, comes down to roadmap, I guess, more than anything.

00:29:35 - Dev Agrawal

Nice. Yeah. So I think this is a great segue into what actually is Remix and what does it do?

00:29:42 - Brooks Lybrand

Yeah, totally. This is a great question. We are still kind of wrapping it all together, the way to present it. So, Remix is a full-stack JavaScript framework. That is the simplest way to put it. On our website, which we're still kind of continuing to work out how we want our website to actually present Remix. It's not quite there yet. I think all the pieces are there, but we just have a lot more we want to flesh out.

00:30:04 - Brooks Lybrand

We call it like the fully stacked web framework. And the idea of that is just like, like I'm just gonna build React, you know? Yeah. Well, yes. Yeah, exactly. Sorry. Yes. This is kind of a common story of like the way that we, we have talked about and thought about like a lot of meta frameworks around React is that, yeah, they're like kind of middle stack.

00:30:23 - Brooks Lybrand

Which just means that you basically are doing server-side rendering. You can kind of make a backend for frontend, which is, which is great. That's a very good architecture. But it's very much still kind of built around just like the middle of it. And then all the frontend stuff is kind of left for you to do whatever you want. Pull in shadcn. That's a very popular choice if you're in the React world.

00:30:43 - Brooks Lybrand

But you kind of have to make your decisions. Pull in Tailwind, et cetera, et cetera. And then on the flip side, you— yeah, you're just kind of like, yeah, you got server-side rendering. But everything else that you want to do on the server, you got to pull in other things. Drizzle, Zod for schema validation, all this sort of stuff. So, we actually wanted to make something that's like full stack.

00:31:01 - Brooks Lybrand

It actually has all the different pieces like Ruby on Rails, like Laravel. That just has not really existed in the JavaScript space. And we're, you know, I guess arrogant enough to think like, hey, maybe we could actually build that and people might like it. So the way that we are approaching Remix, and honestly, like it's not for lack even of ambition. Like there is a story to just like, this would've been so incredibly hard to do if it weren't for like agentic programming.

00:31:26 - Brooks Lybrand

That has made this so possible. Because we actually can like, we can bite off pretty big chunks and actually go forward with it. Doesn't mean that we're just like sloppifying it all. Like we definitely have slopped some of it, but then we've gone back and we've been like, this was not a good API. Let's like rework this. Why not? Partly why we're taking a little while to release it, but we are, we're, you know, a couple weeks away at this point.

00:31:45 - Brooks Lybrand

Um, but yeah, it is, it is like 40+ packages at this point. The way we develop these packages is any, pretty much any of them, there's gonna be a couple exceptions, but should just be able to be used in anything. So take, we have like a cookie package that is some nice helpers around handling cookies. We have a session kind of package.

00:32:02 - Brooks Lybrand

We have like our Zod equivalent schema validation library. Just Remix/data-schema. And that is like uses the schema— what's it called? Like V2 schema. Whatever. It's like an API that has been built. A spec. That's the word.

00:32:20 - Dev Agrawal

Standard schema.

00:32:20 - Brooks Lybrand

Yeah. Thank you. Standard schema. That's the one. Sorry. My brain is not working today. So, standard schema. So, we have all these different packages that you can use as single use. And the way that— what Remix is, is it's a tying of them all together. Kind of like a Linux distro is maybe a good analogy to think of. Of like our flavor of like this is how we think you should use all of these together to do full-stack framework kind of stuff.

00:32:47 - Brooks Lybrand

To build a full-stack website. You have all the different pieces all coming together. Through Remix and then a couple little glue pieces that kind of tie it all together and make the experience very seamless. But on that note, it's not necessarily like— you don't have to actually do full stack if you want. You could just use our little router, which is like super typesafe and speaks request-response, you know, the fetch model.

00:33:09 - Brooks Lybrand

You could just use that for like an Express equivalent. You could use it as your router. You could use it as your, you know, to do your RESTful APIs. You could just use our component library to do SPAs, to do SPA architecture kind of style application instead of React or whatever. It's smaller. It's got a really nice API that's very, very simple and really leans on how JavaScript works.

00:33:29 - Brooks Lybrand

It doesn't hide that inside of a compiler or any sort of magic like that. It's very, very oriented around variables as state, that kind of stuff. So, all these different pieces you can kind of use all together as this one giant thing. Or you can kind of jettison the pieces you don't want and just use the core that you want. You can also swap out pieces.

00:33:46 - Brooks Lybrand

You don't like our our database, you know, management kind of tools, you can pull in Drizzle. That's totally fine. Like, we're not locking you into anything. So, that is as succinctly as I can say it is what Remix 3 is.

00:33:59 - Dev Agrawal

Nice. That is fantastic. And yeah, I remember that Ryan is using the Remix cookie— Ryan Carniato. He's using the Remix cookie packages in some of—

00:34:13 - Brooks Lybrand

I know. Did you lose Dev too? Oh no, it happens.

00:34:15 - Anthony Campolo

This usually happens like once an episode or something. Um, I think he was— looks awesome, by the way.

00:34:22 - Brooks Lybrand

Oh, thanks. Yeah, we definitely have— it is fun. We have, we have some work to do. Um, I, I now see all the problems and the things I don't like, but it is very fun. Like, our designer, uh, yeah, made this and wanted to do this cool like particle visualizer. Um, it actually looks best on mobile, I will say. Um, but yeah, we've been receiving some good feedback about, uh, kind of reducing some of the, the visuals just because like it's really cool to look at, but then you're like, wait, I want to read the content and you're, you're a little bit distracted.

00:34:49 - Brooks Lybrand

So we definitely are, uh, uh, yeah, making it a little bit better.

00:34:52 - Anthony Campolo

I like the Pac-Man on the component. Yes.

00:34:54 - Brooks Lybrand

Yeah. Yeah. That one's it. That's a good one. Yeah. He, uh, our designer had a lot of fun making like fake logos for, for the, the fake car that is Remix. But yeah, this basically talks through kind of exactly what I was saying of like it's this one package, but you can— you do all these different things. We're kind of re-rethinking. That's like a nod to like how React was this original like rethinking best practices.

00:35:15 - Brooks Lybrand

We're really trying to make it like web API-centric. I didn't even talk about that. But that is like very, very core to what Remix is. We are trying not to reinvent the wheel. We're trying to build on what the web framework gives us. The navigation API being a very new one. Variables as your state instead of like a hook or whatever. Speaking HTTP.

00:35:34 - Brooks Lybrand

Speaking request-response model. Even like our built-in like asset server is just like serving modules just the way you'd expect. So, if you open like the Remix.run homepage and you look at all the modules, you'll see like 100+ different JavaScript modules, which feels crazy if you're super bundler-pilled. But over, you know, HTTP/2, it's it's all parallelized and it's pretty fast, pretty cool.

00:36:00 - Dev Agrawal

Nice.

00:36:01 - Brooks Lybrand

We'll be talking about that a ton in a couple weeks also. So, if you are confused, watch Remix Jam. Sorry, go ahead, Dev.

00:36:09 - Dev Agrawal

Definitely. No, yeah. Honestly, yeah. There's so much to cover here. There's a lot of this that we could do a deep dive into. But I feel like these days nothing Nothing matters except for does it work with agents? And it's great timing that Nicky also just asked the same question. And you mentioned earlier that the number 1 user of Remix is GPT-5.6 SOL.

00:36:35 - Dev Agrawal

So, I'd love to hear about like what's your experience been like building with Remix with agents? Have you— has that led to like improvements to Remix itself? Like seeing how the AI works with it? And then taking that feedback, uh, like similar to how, how we might do with like human developers.

00:36:54 - Brooks Lybrand

Yeah, it's been huge. And it's, it's also been like such a moving target, um, as we all know. Like this, this is a very rapidly developing technology. Um, anyone who tells you they know how the future is going to be is like lying to you. No one, no one knows. But we, we can all make guesses, we can all make, you know, predictions, and we can all like say, I think it's trending this way, so I'm gonna go this direction.

00:37:15 - Brooks Lybrand

I think that's totally valid. But like MCP was really hot for a second and then it's not, and then maybe it is again and we're not really sure. And really all you just need is one good agents.md file and just getting it skills. And we're all learning how this thing works. Meanwhile, the models are getting better. So the initial thing when we told people we were building an alternative or a React replacement was just people being like, why are you doing this?

00:37:38 - Brooks Lybrand

It will not be in the training data. No agent's going to understand this. We didn't even use the word agent at the time. No model's going to understand this. They don't even have this because at the time most people were still just talking to ChatGPT and being like, write me useEffect that's not broken or whatever. And then you'd copy and paste that into it.

00:37:54 - Brooks Lybrand

Maybe some people were early on using Cursor or something, but even then it was more so you had this really nice auto tab complete. So yeah, people thought we were crazy because it wasn't going to be in the training data. But yeah, we made this bet that it's just like, A, models are going to get better. And B, the— if we build on, like, the core primitives of the web, on the language of JavaScript, models are gonna be able to pick it up.

00:38:19 - Brooks Lybrand

Because they already speak all that. They're— if you think they're trained on React, they're far more trained on JavaScript. So, if we build already— yeah, yeah. Exactly. Yeah. And honestly, like, it kind of is— we joked, like, when we were first developing it, we're like, this is kind of like jQuery meets React. And I don't hate it. Like, that's actually kind of nice.

00:38:39 - Brooks Lybrand

And so yeah, sorry, that's a very roundabout way of saying that, that yeah, we initially were, we kind of had this belief that eventually the models will be good enough and we can work out an API that they will actually be able to pick up pretty easily. What comes along is like, yeah, the use of skills, the use of tool calling, the use of all these other things.

00:39:00 - Brooks Lybrand

So we've learned a ton that like at this point I do not struggle with agents like understanding Remix. I still do talk to plenty of people who are like, hey, I actually had a little bit of trouble getting it started. It was getting confused with Remix v1 or v2. Uh, probably not v1, but yeah. So I'm not saying it's like completely solved, but there is—

00:39:16 - Anthony Campolo

that can happen with any library. That's exactly— yeah, it is.

00:39:21 - Brooks Lybrand

It is an issue. And so, so here's my, here's our choices. Okay. Choice 1, we figure out how to make that work. Or choice 2, we just give up ever making anything new. And we just say, all right, cool. Let's just React from here on out. And we're never going to use it. And we can't even use the new React features. So it doesn't matter, just use whatever you want.

00:39:38 - Brooks Lybrand

That's a really sucky world. I don't want to live in that world. And also, that's just not how technology works. We don't invent something that then allows us to never invent again. It's a very, very strange version of reality that I just don't buy into at all. And so yeah, what we found is a decent skill to get you started with, plus an actual template that is actually showing the agent examples.

00:40:00 - Brooks Lybrand

Have you used the agent? Recently at all, the first thing they do when you say, hey, can I look at this project and do blah, blah, blah? It goes into your package.json. It looks up all your commands. It opens up your README if it has one. It goes and searches up files. It sees how have we done this before, etc. Even

00:40:16 - Dev Agrawal

goes into node_modules and looks at the source code of your packages.

00:40:20 - Brooks Lybrand

Right, exactly. That's why we started shipping our docs in our node_modules. We're like, screw this. Let's make the skills a lot simpler and just ship these in the node_modules. In the skill, we just say, hey, if you have more questions about the API and you can't figure it out, Just go here. This— it's gonna be in your node module. You don't need to do— you don't even need to go try and search our docs.

00:40:36 - Brooks Lybrand

You have all the docs that you need and now it's versioned to your thing. So, we're gonna keep getting better at this stuff and smarter. But anyway, sorry, back to like the original question. How did the developing of it go? Yeah, it was actually super, super helpful to talk to an agent and kind of have it give you feedback on your API design.

00:40:56 - Brooks Lybrand

It's a very— you have to be so careful. These things are so sycophantic, and we've known this, and that is like not changed at all. Um, you can ask it, you know, you can ask it if anything's good and it'll tell you yes for the most part. Um, unless it's like you're explicitly hitting, you know, like you're, you're asking like, is being a racist good or something?

00:41:12 - Brooks Lybrand

Then it'll be like, no, that's not good, because they've explicitly said don't.

00:41:16 - Anthony Campolo

Should I get my flu shot?

00:41:17 - Brooks Lybrand

Yeah, exactly, something like that.

00:41:20 - Anthony Campolo

Yes, yes, exactly.

00:41:22 - Brooks Lybrand

So there's a handful of things, but for the most part, the subjective stuff, you say Hey, am I conventionally attractive? It will tell you you're conventionally attractive. No matter even if you showed a picture of Shrek or whatever. So it's just these things are sycophantic. So you have to be careful. But what we would do and we still do very often is really just try to build with it and try to see what does it run into?

00:41:41 - Brooks Lybrand

What issues does it have? We had very early versions of the component module where like— or the component, sorry, model where you would have like— we basically have a setup state and a render state. And it's hard to talk about without code. But for the purposes, you just need to know that you have these 2 kind of scopes. So, you can set up some stuff and then you can render it.

00:41:59 - Brooks Lybrand

I think Svelte has very similar ideas. A lot of frameworks actually do. We did not like invent this idea wholly. Maybe the way we're doing it is a little bit unique, but whatever. And before we had like this weird mirroring of props or you had like setup props and you had like these render props. At the time, I was still doing a little bit of hand coding.

00:42:15 - Brooks Lybrand

And I was telling Ryan like, hey, this is— this is a little bit confusing. Like I can't always keep it in my mind. I keep running into issues. Oh, he's like, we'll figure it out. The agents will get it or whatever he would say. I don't know. Or maybe he would listen to me. I don't remember. But then he was like, you know what?

00:42:29 - Brooks Lybrand

Actually, I'm noticing the agents keep messing this up too. So I think you're right. I think it was a mistake. And so we did realize that, yeah, not what the agent tells you it likes or doesn't like, but actual the real experience of what did the agent do? When did it build a hack around what we have? Those are incredible tells. What great feedback.

00:42:46 - Brooks Lybrand

You don't have to wait for users to adopt your thing to tell you what's not great about it. And then you can, um, and it's not really like, you're not like building it so the agent can make it easier. You're just making it easier to grok quickly, whether it's an LLM grokking it for the first time or a human grokking it for the first time.

00:43:00 - Brooks Lybrand

So LLMs have been incredible for that development, just on top of the whole productivity of our team. Like, that's not even an area I've gotten into. That's just, yeah, the testing piece.

00:43:10 - Dev Agrawal

Nice. Yeah. So, uh, like you mentioned, it's definitely more difficult to talk about some of these concepts without code. So, I mean, we don't need to, like, actually get into code in this stream, although that might be helpful. It's completely up to you. But I would definitely love to see or maybe just love to hear about, like, what is the syntax of Remix?

00:43:37 - Dev Agrawal

What makes it different from React or from Solid? And what does it— like, Yeah. Some— and also, like, some of the other stuff that Remix decides to do that React or Solid don't do at all. Like, the backend stuff.

00:43:54 - Brooks Lybrand

Yeah. That's a good question. So, yeah, it's kind of 2 pieces. Because I think a lot of people when they ask about Remix, they definitely want to know, like, oh, Remix, like the component module. Or the component library, rather. Or library is not the right word. Because that's even another thing. But, yeah, the, like, React alternative, right? And by the way, like, JLarky, I asked it for a Remix 3 app and it's downloading Remix 3 RC.

00:44:19 - Brooks Lybrand

So, I don't know what your agentic setup is. But I've not had this experience. So, please let me know what model you're using and what prompt you sent it. Because I would love to know what it's setting up that it's doing React Router 8. Not saying— I'm sure we have these issues. I'm just not running into this. We've asked a lot of people internally to ask their agents to use Remix 3.

00:44:39 - Brooks Lybrand

And they generally find it. It will get better. We're obviously in a prerelease. So, yes, the default is— might not be Remix 3 typically. But they're pretty good at finding this. So, I'd really love to know if you are running into issues. Like, please send me actual reproducible steps. Because I'd really like to know what you're running into. Back to what you were saying, Dev.

00:45:00 - Brooks Lybrand

What differentiates it? So, yeah. There's like the component module side. That is like very, very diff— or is like similar to React but a little bit different. So, we can talk about that. And then there's, yeah, like you said, all the backend stuff. I think the backend stuff I mostly have covered for the most part. Like it has server-side rendering. It has like those things you'd expect.

00:45:17 - Brooks Lybrand

It also has like this router that speaks HTTP. And it's like very, very type safe. So, that's like built in. And it's not like a file-based router. Like it's an actual like router you get to set up and own. And you have a route config that you kind of— not a config really. A route like map that you set up with named routes and all that stuff.

00:45:34 - Brooks Lybrand

So, and then you have all the pieces for handling sessions and for handling, you know, your data sources and whatnot. Eventually I'm sure we'll add like an email kind of client and some background jobs and all sorts of other things on that end. But yeah, the piece that people typically want to know about is the difference between React and Solid and all these other ones.

00:45:50 - Brooks Lybrand

So the main thing I would say is it's not— gosh, there's so many things to talk about. Let's talk about the similarities. It uses JSX. We love JSX. I think that most people at this point seem to be centered around JSX as a very, very nice primitive. It's a very nice way to express express your declarative UI in JavaScript. So, we very much have leaned into that.

00:46:15 - Brooks Lybrand

We haven't given that up. We've definitely changed some things for sure. We have a mixin prop instead or a mix prop. And that is how you add both behavior and styles. You can use— you can still use class names, by the way, or class as we have it. But this is a way to use our built-in CSSinJS. This is the way to You can attach attributes with this.

00:46:37 - Brooks Lybrand

So, you can build these kind of lower-level primitives that you can then pass in as mixins to your JSX versus having to spread props, which is like the React kind of way you have to do things. And so, if you're spreading all these props, then you have to think about the order in which you're putting them. And if you want to compose events, you have to do an onClick that calls the extra props onClick that maybe calls the extra props onClick.

00:47:02 - Brooks Lybrand

Whereas you can just, in our mixin model, you can just have multiple on properties or mixins, rather, that would call that. So, that's a big piece of it that's a little bit different. Like I said, yeah, we don't have hooks or anything. And we don't have like a— we don't have a— what's a Solid— yeah, we don't have signals, which are like such a cool primitive.

00:47:20 - Brooks Lybrand

And honestly, one you can— we've seen people implement in Remix. But we try to make Remix like to take it a lot further down. There you go. That's a nice, great example. So, I can just kind of talk through this. Because this is way better than me like pantomiming. Everything. So, your function has kind of 2 pieces to it, right? It has this setup piece, which is lines— oh, we don't have line numbers on these.

00:47:40 - Brooks Lybrand

That's the let count. And then you have the— and then you have the return piece, which is like the actual render function. So, in the setup, that's only run once when you actually like mount the component itself. So, that sets up— in this case, it's taking in a prop which comes from that handle object. And that handle object has a ton of stuff.

00:48:01 - Brooks Lybrand

But every component will have a handle. And so, from it, you can pull out the props. In this case, you have an initial count. So, you're trying to say, this is the initial count. I don't want to be updating that count. I want to update an internal count, right? When we update things. And then down in the return, that is when every time you render, that's what will be rendered.

00:48:19 - Brooks Lybrand

What's very different from React is that React has this very, like, when something updates, everything— that component updates and everything below it updates. And typically updates because you call useState, right? Or something like that. You call some sort of hook. That causes everything to render and everything below it to render. We don't do it that way. We have call site updates. This is where it feels a little bit like jQuery.

00:48:44 - Brooks Lybrand

You are responsible for when to call. This was incredibly controversial at the time, especially when we get to LLMs because everyone said, how in the world are you going to teach an LLM to do this? This is so cool until the LLM forgets to do it. To which our first response was just like, why are you writing any behavior and not actually clicking the button.

00:49:04 - Brooks Lybrand

But I know that's a little bit facetious. So, like, not a great argument, right? The reality is we actually have to use it. I have seen agents struggle with, like, so, so many things in Remix. Like, so many issues that they run into. Not setting up the router right. Not realizing, like, that they can set up, like, the assets modules correctly. And then just blowing up the scope of, like, what they're serving— sending to the browser.

00:49:26 - Brooks Lybrand

And all sorts of stuff. APIs just that weren't very clean. I have yet to see— I think there might have been one time. I can't remember if that was, like, a dream I had one time stressing about this or not. But I have yet to see an LLM forget to call handle.update. I think the reason, now this is me being very speculative and trying to read the mind of a large language model, the mind.

00:49:47 - Brooks Lybrand

I think the reason is because the translation of intent, what I want in my prompt, what I want the behavior to happen to the empirical code is very procedural and very direct in my opinion. Hey, when the user clicks, I want you to update the count and then I want you to update everything so that the latest count is reflected. Versus like the hook approach, which is, you know, here's my state.

00:50:14 - Brooks Lybrand

I've declared my state. My state has, you know, an on— it has the state and then it actually has like the setState. And then in the click, you're gonna set the state again. And then you just— you should just expect that everything will be updated again. And if you have any side effects that would be impacted by that, you need to guard against them in certain cases.

00:50:31 - Brooks Lybrand

So, kind of like, I'm not really explaining it very well because I'm still working out this kind of way of talking about it. But I think just this very procedural, like, do step A, do step B, do step C, is very Remix. That's kind of the way we designed it. And so far, I've seen agents seem to understand that. And when I perchance to peek into the code, I find that I still understand it too, which is nice.

00:50:54 - Brooks Lybrand

That was a long way to be.

00:50:55 - Brooks Lybrand

I'm sorry.

00:50:55 - Anthony Campolo

Did we answer this question or not? I wasn't sure.

00:50:58 - Brooks Lybrand

Um, can it be potentially swapped out for TSRX, or is JSX integrated, uh, deep into the framework? Uh, that's a good question. I haven't really thought about it at this point. I would say it would be a lot more work to put into TSRX. We did not design it to try to, to switch it out, so I think you'd have to— we'd have to like decouple probably the, the UI a bit.

00:51:18 - Brooks Lybrand

I definitely know you can use— I'm pretty sure though you can use it without JSX. So now I'm kind of Second guessing myself.

00:51:24 - Anthony Campolo

Anytime. I don't know. The answer is you could, but you shouldn't. You really shouldn't. Yeah. I mean, I've seen people do this a lot of times. You don't want none of this shit, do we?

00:51:32 - Brooks Lybrand

I think it's also, to be honest, like TSRX, I don't, I don't know it that, that well, but

00:51:37 - Anthony Campolo

I don't know anything

00:51:37 - Anthony Campolo

about it.

00:51:38 - Brooks Lybrand

It doesn't go, it just doesn't go with our core principles of like, like JSX is honestly one of our big concessions of like trying to be very web-centric. And we actually fought about it. We, Ryan really didn't want us to build it on JSX. Not really, but like, he was like, hey, what if we didn't? And we fought him on that one.

00:51:54 - Brooks Lybrand

But yeah, our point of trying to build on the web and on web primitives, TSRX is a further departure from that and going more of a direction, which is very interesting, but it's not very Remix. So I don't know. It just doesn't really make sense for a project to pick up something really new that is not really web-centric. And then we'd have to build on top of it.

00:52:12 - Brooks Lybrand

And then again, we're now tied to someone else's roadmap in a different way.

00:52:18 - Dev Agrawal

Yeah, TSR is definitely a bit out there. Dominic is kind of just like a compiler genius in many ways.

00:52:27 - Brooks Lybrand

Oh, 100%.

00:52:28 - Dev Agrawal

He just ships out these crazy projects.

00:52:31 - Brooks Lybrand

Yeah, super

00:52:31 - Dev Agrawal

cool. But yeah, but it's also like it does a lot of branching. It kind of builds in conditionals and loops into JSX. And maybe I think also some different ways of doing reactivity or try-catch error handling, async. But yeah, that's— I think some of it is also like it's kind of built for a more reactive or that style of framework. Whereas this, from what you've described, it sounds like a lot more of your application logic lives in these event handlers where you have these sort of procedural code rather than being distributed in these useEffects where you have— kind of the execution of them is determined by an array that you have to keep in mind that,

00:53:25 - Dev Agrawal

oh, anything— whenever something in this array changes, this function is going to run and it's going to do something. And if you change some state, then all of that is going to happen. Instead, you can move all this logic to this procedural structure inside your event handlers.

00:53:40 - Brooks Lybrand

Yeah, no, I think you expressed it well. And I honestly, like, TSRX looks really cool. I've not spent a lot of time in it because it's just not the world that I'm building in. So I'm going to trust your word on it, Dev. And I love Dominic. I love his work. And if people are excited about it, then again, my point here is build with stuff you're excited about.

00:53:59 - Brooks Lybrand

I don't know. Just this weird React won, therefore don't try is— we need to drop that. That's That's pretty silly.

00:54:08 - Dev Agrawal

Yeah, for sure. No, TSRX is very, very cool. But I think this principle of let's try to eliminate as much build time complexity as possible and see how far we can go, I really respect that kind of approach that Remix has taken. And yes, TypeScript and JSX are kind of small exceptions to that. But it's fair. It's a fair exception. I, I would have, like, if, if you guys chose that, oh, there's gonna be no TypeScript, no JSX, I'd be a little more weirded out.

00:54:41 - Dev Agrawal

Like, okay, this is a little too out there.

00:54:44 - Brooks Lybrand

Yeah, that was, that was our worry. Like, there is just these concessions of like, ah, this is just, does this just throw people off a little too much? All right. Is Shopify rebuilding Hydrogen because it should work with Remix 3? I'm not sure if I'm getting the grammar of this right.

00:55:02 - Anthony Campolo

That was what I asked about Hydrogen and Remix 3 working together.

00:55:05 - Brooks Lybrand

Yeah, totally. Shopify is actually rebuilding Hydrogen. I don't know if that answered that question or if you knew this apart from the Vercel partnership. Also, sorry. Yeah, I don't know how I want to address all of this.

00:55:20 - Anthony Campolo

I think it might've been a joke, like half joke.

00:55:22 - Brooks Lybrand

No, I know that. The Vercel partnership is a little bit funny. They— it's great that they're partnering. It was not like a— anyway, I don't need to go there. It's not even my team. So, yes, Shopify is rebuilding Hydrogen and they have worked with the Vercel team because they wanted them to give feedback on the way that they're building Hydrogen. The purpose was to say, hey, Hydrogen is really tied to React Router, but there are plenty of merchants who want to use Next.js.

00:55:49 - Brooks Lybrand

There are going to be other merchants who want to use Solid or Svelte. Or Remix 3 when it comes out. Why are we pigeonholing people? Why are we forcing them into just one? Which we like React Router. Again, don't forget, I think it's a great way to build. It's how I built the Remix store is with the React Router version of Hydrogen.

00:56:06 - Brooks Lybrand

But why? It just does not make sense for Shopify to limit themselves in that way. And it honestly makes, in my opinion, a much better product when they break it down into those core, what are the actual APIs you need? Versus really heavily coupling it to a meta framework, which is built on top of a framework. And you just have these layers of abstraction that are all interconnected in a way that's actually not totally necessary.

00:56:28 - Brooks Lybrand

So the impetus for Hydrogen, as best I understand it, is yeah, to break it apart and to make it this more headless— yeah, this headless thing. And of course Next.js is one of the biggest ones that people want to build with. So they decided to, as I understand it, to work with Vercel and say, hey, would you guys test and give feedback on how this works and also help us when we're trying to make this this work well for everything such as Next.js.

00:56:51 - Brooks Lybrand

So, yeah. That was kind of the mindset behind that. The purpose was not to build it with Remix 3 at all. The purpose was not to make it compatible with Remix 3 or whatever. That is a happy byproduct for sure. And I guess it was the purpose just as much as it was the purpose to make it work with Next. I guess that's the way to say it.

00:57:11 - Dev Agrawal

Yeah. Or at least make sure that it works with Next since it's Kind of the de facto most popular choice.

00:57:16 - Brooks Lybrand

Oh yeah, totally. Yeah. I mean, it would be a, yeah, it's not a great business decision. I don't think for Shopify to not, you know, wanna make it work with, with everyone. Like at the end of the day, Shopify wants you to build a Shopify store. Right.

00:57:29 - Dev Agrawal

Right. Yeah. We, we talked about the Hydrogen being like the first team up to try to bring server components in a while ago. Yeah, cool. I mean, what's your favorite part about Remix?

00:57:50 - Brooks Lybrand

That's a good question. There's a lot of things I'm really excited about. I think it just depends on the day. I think the 2 things. The one is when Remix, early, early Remix came out, the React meta framework version of it. I felt like it unlocked me a lot to be more comfortable on the backend or to feel like I could— like it was a stepping stone for me.

00:58:13 - Brooks Lybrand

And I think this has been like a continuation of that story of feeling a lot more comfortable being like, oh, yeah, I can like— I can have my own little Node server. And I can like kind of do whatever I want on that Node server. It opens you up to like you need to be careful about security and stuff. Which is part of why like having a framework is very helpful.

00:58:27 - Brooks Lybrand

Because we're not gonna solve every— you can still shoot yourself in the foot. Like it's a server. You can do, you know, whatever you want kind of. But we are like those, the common issues that you might run into, we are protecting you from. And so, I do like that piece of it. But I will say one thing I'm particularly excited about, and Mark Dalgleish is gonna be talking about this, a core team member at Remix Jam in a couple weeks, is our unbundler approach.

00:58:49 - Brooks Lybrand

And I talked about that a little bit earlier. It's the Remix asset server. And it's a pretty cool way of serving modules to the browser that just feels It felt so counterintuitive and I was very surprised we were not building Remix around a bundler. But I'm really excited about it. A, I think it's really cool. I think it'll be really compelling when people see it.

00:59:10 - Brooks Lybrand

But also it doesn't preclude bundlers at all. It turns bundlers into what they should be. Bundlers are, in my opinion, an optimization step. But I think sometimes we accidentally can go very far with bundlers and we can make them part of our core architecture. And this is what happened with Webpack, obviously, for a lot of people. Even in Vite, React Router is very, very heavily tied to how Vite works.

00:59:33 - Brooks Lybrand

And we very much trust the Void Zero team. And we're happy for that partnership. And we're okay for React Router to be more coupled to that because it's already coupled to React. And so, it's kind of in that space. Whereas with Remix, we really just wanted to take an opportunity to— if we're gonna build around anything, it's gonna be the browser. And it's gonna be the web.

00:59:49 - Brooks Lybrand

That is what we're— it's not even just the browser. It really is the web. It's JavaScript that works on the server, on the actual standards that work across all the different runtimes and the browser again. That's what we want to center around, not a bundler. I think it's really cool. I would talk about it more, but I honestly don't want to take away from what Mark is going to be showing people.

01:00:10 - Brooks Lybrand

But also you can go play with it yourself and draw your own conclusions.

01:00:16 - Dev Agrawal

Nice. We have some pushback from JLarky about Uh, Deno, also Fresh, also not shipping with a bundler but then ending up with Vite anyways.

01:00:27 - Brooks Lybrand

Um, maybe one day I'll be eating my words, you know. Maybe we'll be back on Vite in, in a few years, who knows.

01:00:34 - Dev Agrawal

Yeah, yeah, maybe in 2 years or maybe not. Um, yeah, depending on how things go. Cool.

01:00:39 - Brooks Lybrand

I'm sure there will be plenty of people who still want to use Vite with Remix, and they— I mean, they already can in our— um, so that's great. But yeah, I, I would not say what we're doing is the same as what Deno Fresh is doing, but I don't necessarily have to go there.

01:00:53 - Dev Agrawal

Yeah, of course. Anthony, any questions so far?

01:00:57 - Anthony Campolo

Um, uh, what are your, uh, kind of tools of choice in terms of agents and models and things like that?

01:01:05 - Brooks Lybrand

Um, it's a good question these days, man. There was, there was a time where I was like trying a new workflow every other week and I just was like feeling so exhausted. Uh, and so I like picked one. It was like, I'm going to use this for like at least a month and not, uh, not change it at all. Um, and so these days what I, what I use is I use, uh, Zed and I use Pi.

01:01:32 - Brooks Lybrand

Um, and so I use Zed because I really like their Git diffing. Um, and like I, I tried to go back to VS Code and, and it's good still or fine or whatever, but it's like. I just get so tired of like they're updating things all the time and they're just like really going through their own identity crisis. I would say maybe not, maybe it's better and maybe I'm being too harsh and that's fine.

01:01:51 - Brooks Lybrand

But there kind of is something nice about like just when you have a new tool, right? And you're like, everything's fresh and you just kind of can restart. That's how I felt with Zed. I was just like, at this point I'm not like in the, oh, I'm not looking at code phase at all. But like I am very much letting agents write a lot of it, if not all of it.

01:02:06 - Brooks Lybrand

But I still really, really wanna be able to go quickly and especially when I'm changing something. When I'm at, you know, when I'm adding a new feature, when I'm like trying to fix a bug, I really need to be able to look at like, what did it actually do? I need to be able to give it feedback. I need to make sure we're not like making something that's gonna be an unmaintainable mess later.

01:02:21 - Brooks Lybrand

I need to make sure we're not just piling on, you know, crap to fix other crap. Instead, we're like erasing the crap and building something new. And so I found Zed just like very, very fast and very nice for like that kind of diff looking. And then I think that with Pi, the reason I picked Pi is because it's an agentic harness.

01:02:39 - Brooks Lybrand

If you don't know, Shopify is super generous to its developers and lets us use all of the models. And so I wanted something that would let me switch between them. I did not want to be beholden to one. I don't have a need to buy the Claude Pro Max account or whatever. If I were a solo developer, I'm confident my— well, maybe not confident.

01:03:00 - Brooks Lybrand

I can imagine my answer would be quite different, but because I'm blessed by the generous Tobi Lütke. I want a harness that will let me do anything. And I also just found that I really like that it stopped getting in my way. Um, I just really didn't like how much these harnesses were like trying to like, yeah, force me into just a very specific way of working with agents when like these models are changing all the time.

01:03:21 - Brooks Lybrand

And I actually don't even, I don't even think they always know exactly the best way to work with these things. I think they have like their way of working with it. Um, and I might have mine. So I really like that. I really like that you can just like get it to build extensions. It feels very, in some ways, Well, I'm not gonna make that comparison.

01:03:34 - Brooks Lybrand

I just really like it, uh, for the ability to switch models and to make extensions quickly. But even then, I don't know, I'm finding friction right now in my workflow, so I don't, I don't know if I'm gonna stick with both those in like a month at this point, which is frustrating. But alas, it's, uh, it's tech.

01:03:50 - Anthony Campolo

What about this question? Pi versus OpenCode?

01:03:53 - Brooks Lybrand

Uh, I don't have hot takes. I like OpenCode. Um, I haven't really used it a ton, ton though. I Very much am like, when they have— I don't even know if they have OpenCode 2 out because I don't really pay that much attention. But when they have it out, I'm gonna probably try it again because I really like everything I've seen.

01:04:08 - Brooks Lybrand

Um, I would like a nice desktop version. Um, I've been using Codex, but there's the problem again of, um, I can't switch models very easily. Although I've heard it is open source and you can. And again, like, I just— I'm so just like, I don't want to spend all the time like building the tool for myself. I want to build—

01:04:24 - Anthony Campolo

OpenCode has a desktop app.

01:04:26 - Anthony Campolo

Are you just saying you're not a fan of it?

01:04:28 - Brooks Lybrand

OpenCode does have it. So I'm trying to remember. It could totally be Shopify had a limitation. It's been a while since I've tested this. There was some reason I couldn't do their desktop. So at that point, I was just like, I'm not gonna worry too much about this. I've got a setup working. I think it was just maybe under review or it just wasn't in a good state.

01:04:46 - Brooks Lybrand

I don't remember. But I am eager to try it again because I do want to get to a desktop experience that allows me to switch models. I think that's That's nice. I think that maybe is kind of where we're going. As long as I can actually interact with the code, that's what I want. And the Codex app makes it— the last time I used it, it made it so hard to actually look at the code and interact with the code.

01:05:09 - Brooks Lybrand

I think they've made it a lot better. I just got burned so many times. And they would freaking update the UI all the time. And it would always be broken. And they would make a new update and it would fix one thing and break another. And I'm just like, I don't trust you guys to build software. So I'm just done with this.

01:05:23 - Brooks Lybrand

Um, never really liked Claude Code that much either. I think that people are like way overhyped on its, uh, you know, its cuteness or something. I don't know. I just like, I don't, I, these are my hot takes of just like, I, I don't get why people are like so tool obsessed. Like I just, I just need to talk to the agent and I need it to call tools and to edit stuff for me.

01:05:40 - Brooks Lybrand

Like that's what matters. But again, I am also building a framework, so I am not like necessarily the average dev. So maybe, maybe I'm just like in the, in a very, you know, Uh, specific place. But yeah, the, the visual bugs though of like Codex, um, and just like the unusability just drove me up the wall. I could not do it.

01:05:57 - Anthony Campolo

Yeah, I use the CLI for all of them because those are kind of similar. They're all, they all feel within the realm of each other, so I can kind of hop from one to the other and it's not a, not a big deal because I have, um, subscriptions with all of them.

01:06:10 - Brooks Lybrand

So yeah, no, that makes sense. Oh, I do want to address, JLarky, you said, their own identity crisis. So you do think that Remix has an identity crisis? No, I think I have an identity crisis and I think all of us do as developers. That's what I was trying to get at. We are, we're all working through what does it mean to actually be a software engineer?

01:06:25 - Brooks Lybrand

And I think that's really healthy. I think, I think if you aren't working through that, like I think you need to maybe be a little bit more aware of what's going on. I know you're being cheeky, but yeah, I think that's valid. Remix absolutely had an identity crisis. I think we're almost done with that. As soon as I can freaking, switch, you know, with that RC, whether it will be on 4 probably at that point to a 3.

01:06:46 - Brooks Lybrand

Oh my gosh, I'm gonna be so glad. I mean, we're still gonna get comments and, and jokes and, and they're, they're well deserved, so keep them coming.

01:06:54 - Dev Agrawal

Nice. Uh, do you think agents do better with— I mean, yeah, you, you, we talked about stuff like agent skills and, uh, agents MD or stuff like, yeah. Um, but I, I see that Remix also has a CLI So how do you think about like CLI and MCP or like, uh, one of, like one of the infamous things about Rails is that it has CLI commands that can like scaffold out a bunch of things for you.

01:07:21 - Dev Agrawal

Is that something that has been in the roadmap or, uh, do you think that agents are just completely going to take that over and you don't need to offer anything like that?

01:07:30 - Brooks Lybrand

Yeah, that's a great question. We've, we've had some good conversations about this because very early on we Before I was even on the team, they demoed a scaffolding tool for Remix V1, I think way back when. And then when they announced that, very, very shortly after that, ChatGPT was launched. Like the very, very first chat, gpt.com. And I think that the team kind of struggled with like, well, yeah, what is the value of a scaffolder?

01:07:56 - Brooks Lybrand

It's maybe still on the table, that one specifically. That's very much like Michael Jackson, really, our co-founder really, really loves. Yeah, kind of that experience and really loves the CLI. So he has very much been leading that. It's not really, yeah, it's not my area, but so much, but like what, where the conversations we've had and the feedback that I've given is very much like, yes, it needs to be something that is like, gives valuable output to the agent and to the human as well.

01:08:22 - Brooks Lybrand

That's what's gotta be valuable. So scaffolding, maybe that's helpful, but right now, like an agent is just so good at scaffolding. To me, that is not a high priority. To build something like that. And so, we've kind of decreased that. However, like we do add a Remix doctor. It's pretty simple, but it will tell you a couple things about if you've misconfigured your Remix application.

01:08:43 - Brooks Lybrand

Or yeah, just not following kind of some conventions we recommend. And you can change it. We have a Remix.json config. So, you can change a couple things in here. It's also the thing the Remix CLI also calls the closure tests. And it has a couple commands for that. So, we do like strongly— or maybe not strongly. We think that there is value in if you have a framework, you might as well have some tools that you can give to the agent.

01:09:06 - Brooks Lybrand

Um, I don't see a world where we would build an MCP server. I, I just like, I remember when those came out first, people were like, every doc site should have an MCP. And I was just like, I don't know what we're doing, guys. Like, doc sites don't need an MCP server. Uh, doc sites need, uh, accurate information. That is the most important thing for a doc site.

01:09:22 - Brooks Lybrand

Um, so, uh, so yeah, we are, we're, we're, we are trying to provide tools that we are seeing that it's pretty valuable to, but it's a lot of, you know, just testing it and kind of seeing what's valuable and seeing what we like and looking at prior stuff. I don't think we're gonna go ham and go crazy with trying to build a bunch of agent-specific tools.

01:09:42 - Brooks Lybrand

For the most part, the more you can just give— the more you can give them accurate text, I think the better. Which is why we ship the docs in the Node modules, stuff like that.

01:09:52 - Dev Agrawal

Cool. What is next for Remix? Like after the RC is out, after v3 is out, maybe docs are fixed, website is fixed.

01:10:01 - Brooks Lybrand

Yeah.

01:10:02 - Dev Agrawal

What's on the horizon?

01:10:04 - Brooks Lybrand

Yeah, that's a good question. So hard to always think of the horizon when you're so focused on just getting to the top of the hill, right? But no, yeah, we are, to recap, we are trying to get, or we are getting, we're going to release Remix at Remix Jam or that week rather, which is in about 3 weeks now. So Remix Jam is October 2nd.

01:10:21 - Brooks Lybrand

So we're gonna release it there. We're gonna talk about it a ton, which is exciting. Leading up to it, like you said, we've got some updates to the website we wanna get in and we also have Yeah, a ton of docs we want to finish writing out and making better. After that, we do have a big roadmap. We have a ton of discussion that the community has started.

01:10:40 - Brooks Lybrand

And so all sorts of features we do want to add. So we'll definitely start working on those. But we also just, we do want to let people use it. I mean, we hope people use it. Obviously we can't force anyone to do anything, but we want to let people use it and give us their feedback of what's missing, what's confusing, what's not helpful.

01:10:54 - Brooks Lybrand

And I think we actually really wanna focus in on like, we've been so heads down building and I think we're realizing like we've gotta take a step back and actually like talk about this. We need to explain why we think this is a valuable way to like build a website. We think we need to explain why we think this still matters in the world of agentic.

01:11:11 - Brooks Lybrand

Yeah, exactly. Remix 4 win. Yeah. I think we're gonna try and do a yearly cadence. So hopefully like end of 2027 would be when Remix 4 comes. We're trying to do a yearly cadence with React Router and with Remix. So, and probably like stifling those about 6 months apart so that the team can handle both of it. Yeah. I don't know. You don't believe AI are people.

01:11:32 - Brooks Lybrand

So, that's speciesist of you, JLarky. So, that's on you. But yeah, we want people to actually like give us feedback. And we want to like, I want to make a ton more videos. I know Michael has a ton of like blogs that are even more like kind of as I understand it, a little bit more philosophical of why are we building this way that we want to get out.

01:11:50 - Brooks Lybrand

I've been doing a lot of personal writing. I'm gonna try and get a blog post out tomorrow. So, we just— we want to start engaging in the conversation better than we have. And then pointing to why Remix is really good in that conversation. So, I think that's actually what's next. Maybe not as exciting as background jobs or whatever. We definitely will get to that stuff.

01:12:07 - Brooks Lybrand

But we gotta show people for a little bit before we before we build more stuff.

01:12:13 - Dev Agrawal

For sure. Yeah. And that's the— that's almost the exact same struggle that Solid team is going through right now. So I'm super excited to see how, how you approach it, how you handle it. Cool.

01:12:26 - Brooks Lybrand

Yeah,

01:12:26 - Dev Agrawal

I think I

01:12:27 - Brooks Lybrand

understand it.

01:12:27 - Dev Agrawal

We're almost at time, so maybe we can— yeah, we can take one more question.

01:12:30 - Brooks Lybrand

Sure. Yeah, yeah. Um, yeah. How, how much scope is the goal for Remix? Is it full stack, right? Is it going to be, uh, do Micron jobs? I guess that can be done in Node. Yeah, that's a good question. I don't know if we've talked about— we've talked about background jobs for sure. And that was a feature that we had a PR up for.

01:12:44 - Brooks Lybrand

But we deprioritized it. But yeah, we have a pretty big appetite. So, like, I could see if we feel like we can create— and it's also like it's not just Node can do it. It is also can we build it in such a way that it can be used on, you know, like platform agnostic? Like if there are actual primitives. That's how most of, like, our router is built.

01:13:06 - Brooks Lybrand

That's how, like, a lot— yeah, just a lot of our backend components are built. I'm struggling to remember some specific examples. But we— yeah, like our file management stuff uses the file API versus trying to use Node's built-in APIs. So, if there's a space for that where it's like, oh, it would be nice to have an abstraction around something that's a little bit cleaner, a little bit nicer, and can plug into Remix easier than me having to, like, build this myself or get an agent to build a mess on its own.

01:13:34 - Brooks Lybrand

It can be portable across platforms. I would say that's philosophically ripe for the type of thing that we would continue to extend the backend into.

01:13:45 - Dev Agrawal

Nice. Cool. Yeah, we're close to wrapping up. Anthony, any questions?

01:13:55 - Anthony Campolo

No. I mean, we covered a lot of great stuff. This was super interesting. I especially liked here in that kind of history type stuff. Um, what was the first framework you ever used when you first learned to code?

01:14:06 - Brooks Lybrand

Um, like for the web, actually. Um, wait, I'm trying to remember. I might have used Django before I actually got into any JavaScript stuff because I was like trying to— I was going down the data science route, and so I was using a bit of Python, but also potentially Flask. So I actually think those might have won. Before I finally was like, just jQuerying up websites is like, okay, this works.

01:14:30 - Brooks Lybrand

It looks okay. The first one I really dug into though was D3, funny enough. That's not really a web framework, but we used it that way. We used it as our jQuery equivalent because we're like—

01:14:40 - Anthony Campolo

Is that an animation?

01:14:41 - Brooks Lybrand

Yeah. Yep. It's an animation from Mike Bostock. He was working at New York Times at the time and they needed a really cool data viz animation because my entry was trying to build data visualizations for all our data science that we were doing. And I was like, you know what? Why do we have jQuery? Like D3 can like handle all these nodes and stuff.

01:14:58 - Brooks Lybrand

And I knew like nothing. I did not understand how the web worked. I did not know how to build stuff right. And so I went that route and we were building a bunch of stuff and I was like, what if we wanted like an actual full like website and we wanted it to like not suck and not be spaghetti code? And then I was like, oh, Angular, React, Vue, like these things are cool.

01:15:15 - Brooks Lybrand

And so I like learned all 3, you know, in a week or whatever, like learned, you know, enough to like try to compare them. I was like, I am— I don't get Angular. I don't get what's going on over here. Vue is kind of cool, but like I'm really tracking with React. Um, and so

01:15:28 - Anthony Campolo

I was the same way exactly. Like, like Angular made no sense to me, and Vue and Svelte, I both like. These are cool and like they're different, but, um, React should definitely— because I, again, because it was my boot camp and everyone was doing it, so that was the easiest one for me to kind of get into. But now I'm Solid world.

01:15:45 - Anthony Campolo

So, but that was a pretty smooth transition overall.

01:15:48 - Brooks Lybrand

Yeah. Yeah. No, it's great. Like Solid is, it seems like such a smooth transition. I feel like looking at the code, I'm like, okay, I, I get this. Like I have to, I definitely have to like, you know, rewire my brain a little bit with signals and stuff, but it's not like, it's not such a jump, which is cool.

01:16:01 - Anthony Campolo

Awesome, man. It was great meeting you. Great talking with you. Our journeys are very parallel in so many ways. So this was super fun and, uh, I look forward to, um, chatting again. Um, do you do streams or anything like that?

01:16:12 - Brooks Lybrand

I haven't in a long time. I don't know. I don't know. I don't know what the future holds. I definitely, like I said, want to make some videos. I don't know if I'm gonna get back on the streaming. Remix better. Yep, just, you know, me talking to an agent and being like, no, make Remix better. That's pretty much gonna be it.

01:16:26 - Anthony Campolo

So awesome. And thank you everyone who's in the crowd. Um, we got a ton of people, so I'm gonna just shout everyone out right now. Um, we got one more episode coming up before I'm going to take like a month-long break. So, um, on Wednesday the 16th, my old boss Carl is going to be here to talk about AI and kind of like crypto spot markets kind of stuff.

01:16:47 - Anthony Campolo

So that'll be interesting. Very interesting, I'm sure. And yeah, then I'm going to take a break. I'll be going to Europe on an epic 3-week trip across Ireland and Italy and Greece and a whole bunch of other places. So I'm super stoked. And yeah, Dev, any announcements you got?

01:17:08 - Dev Agrawal

Um, not really so far. I'm just kind of spending time with family here in India. Um, yeah, I don't know when I'll be back in the, in the States, but hopefully it'll be sometime soon. Uh, yeah, enjoy your vacation. Or I guess not yet, we, we're still gonna be live on Thursday.

01:17:30 - Anthony Campolo

Yeah, one more time. I think it's Wednesday.

01:17:35 - Dev Agrawal

Okay.

01:17:35 - Anthony Campolo

I guess it's Thursday for you, I guess,

01:17:36 - Dev Agrawal

or it's close to Thursday.

01:17:38 - Dev Agrawal

Yeah. Yeah. It's gonna end up being Thursday, like 2 to 3 AM.

01:17:42 - Anthony Campolo

Oh yeah. It's gonna be like 4 AM before. Yeah. I know the Indian time zone so well now because I was, I was on it for so many months.

01:17:49 - Brooks Lybrand

Oh man.

01:17:50 - Anthony Campolo

Nice. Okay. We'll, we'll close out here. Thank you everyone, and we will catch you next time.

01:17:55 - Brooks Lybrand

Thanks, y'all.

On this pageJump to section