WEBVTT
00:00:00.000 -->
00:00:00.660Carl: Hello everyone.
00:00:00.660 -->
00:00:04.200Thank you for joining us for the
October edition of This Month in React.
00:00:04.500 -->
00:00:08.640As we recap what's going on with React,
React native in the web, we're coming
00:00:08.640 -->
00:00:12.486to you live from React Flux, the place
for professional developers using React.
00:00:12.989 -->
00:00:13.799I'm Carl.
00:00:13.829 -->
00:00:17.970I'm a staff staff product developer and
freelance community leader here at React
00:00:17.970 -->
00:00:20.939Flux, where I run community programs
like these events and build tools to
00:00:20.939 -->
00:00:22.530help keep the community operating.
00:00:23.009 -->
00:00:23.820Mark: Hi, I'm Mark.
00:00:23.820 -->
00:00:27.299My day job is at Replay.io and in
my copious amounts of spare time,
00:00:27.299 -->
00:00:29.609I maintain Redux and rewrite Immer.
00:00:30.029 -->
00:00:32.399Mo: I am Mo, I head the
mobile team at Theo.
00:00:32.700 -->
00:00:35.849I'm an active part of the React
native ecosystem and community,
00:00:36.090 -->
00:00:39.479and I organize the React Native
London Meetups and conference,
00:00:39.810 -->
00:00:42.026which is coming up in two weeks.
00:00:42.170 -->
00:00:43.040Terrifyingly so.
00:00:43.550 -->
00:00:44.030Carl: Coming right up.
00:00:44.030 -->
00:00:44.240Yeah.
00:00:44.240 -->
00:00:45.800And you got a shout out
that we're gonna talk about.
00:00:46.160 -->
00:00:47.300Let's start with some new releases.
00:00:47.300 -->
00:00:48.740Mark, tell us about Immer.
00:00:49.325 -->
00:00:51.005Mark: Okay, I can, I can
do both these things.
00:00:51.005 -->
00:00:53.285So I actually take very
full credit for this one.
00:00:53.315 -->
00:00:58.595So to be clear, I do not maintain the
Immer immutable update library that is
00:00:58.595 -->
00:01:01.685Michelle West Rate, who created it and
has maintained it all the easier years.
00:01:01.955 -->
00:01:06.245However, since the start of September,
I have sunk a stupid amount of time,
00:01:06.275 -->
00:01:11.315something like 120 plus hours into
trying to rewrite the internals of
00:01:11.345 -->
00:01:16.475Immer for faster performance after
some re users filed complaints to the
00:01:16.475 -->
00:01:18.425Redux repos, that it was kind of slow.
00:01:18.935 -->
00:01:22.565So I filed a few different prs,
one to make some relatively
00:01:22.565 -->
00:01:25.985small tweaks, and then a couple
larger architectural changes.
00:01:26.060 -->
00:01:31.235And Michelle just merged and released
Immer 10.2 with the small options.
00:01:31.475 -->
00:01:36.005And we are hoping to land the larger
architectural changes in the near future.
00:01:36.305 -->
00:01:40.025And those will probably come out
as Immer version 11, hopefully in
00:01:40.025 -->
00:01:41.555the next few weeks or something.
00:01:41.884 -->
00:01:45.095So I'm excited faster for
performance free upgrades.
00:01:45.155 -->
00:01:45.759Yeah, should be.
00:01:46.550 -->
00:01:50.960Carl: Yeah, love some big core
performance improvements of deep packages.
00:01:50.960 -->
00:01:51.440That's awesome.
00:01:51.860 -->
00:01:53.990Mark: And I will also hopefully
turn this into a conference talk.
00:01:54.559 -->
00:01:55.039Nice.
00:01:55.460 -->
00:01:58.880Along with that, I, I just saw the
announcement, I think like yesterday,
00:01:59.059 -->
00:02:03.570that the author of the ARC type
validation Library, which is a, a
00:02:03.570 -->
00:02:08.630competitor to Zod that takes a, a rather
different API approach, just released
00:02:08.734 -->
00:02:11.810a, a similar tool called ARC RegX.
00:02:12.200 -->
00:02:17.030It's a function that is supposed to
be a replacement for defining regular
00:02:17.030 -->
00:02:23.930expressions in JavaScript, but it
actually parses the RegX string into
00:02:23.959 -->
00:02:26.750TypeScript types so that it can both.
00:02:27.244 -->
00:02:30.994Interpret at the type level, what
the regular expression is doing,
00:02:31.385 -->
00:02:38.285and also even provide syntax errors
if the reg itself is invalid.
00:02:38.644 -->
00:02:40.625Just looking at the
docs, my mind is blown.
00:02:41.165 -->
00:02:44.105Carl: Well, yeah, other than
new releases, we have a bunch
00:02:44.105 -->
00:02:45.334of main content this month.
00:02:45.334 -->
00:02:49.531The React conf happened, what,
three weeks ago, and a bunch
00:02:49.531 -->
00:02:50.671of new stuff came out of there.
00:02:50.761 -->
00:02:55.681They did put up an official recap
blog post from it on the 16th, about
00:02:55.681 -->
00:02:57.571a week after the event happened.
00:02:57.931 -->
00:03:01.141The big takeaway here, I think, well,
I don't know, we got a couple of big
00:03:01.141 -->
00:03:05.731takeaways, but one of the headlines
is definitely the React Foundation.
00:03:06.211 -->
00:03:09.811This is a pretty big change to, or this
sounds like it will be a moderately
00:03:09.811 -->
00:03:12.541large change to the governance of React.
00:03:12.901 -->
00:03:16.681They're pretty light on details
of the actual governance, so far.
00:03:16.741 -->
00:03:19.921They have talked about like a
new technical steering committee.
00:03:20.351 -->
00:03:24.011But they also say that the
governance of that is not finalized.
00:03:24.011 -->
00:03:28.751The members are not finalized, but
they do have the founding members of
00:03:28.811 -->
00:03:33.881the founding sponsors basically of
this foundation, which are Amazon Call
00:03:33.881 -->
00:03:39.401Stack, Expo, Meta, Microsoft Software
Mansion, and Vercel with Seth Webster.
00:03:39.551 -->
00:03:42.581Seth Webster is executive
director and he's the what
00:03:42.581 -->
00:03:44.051manager of the React core team,
00:03:44.741 -->
00:03:45.281Mark: Basically.
00:03:45.281 -->
00:03:45.641Yes.
00:03:46.061 -->
00:03:47.801Carl: Yeah, so that makes sense.
00:03:47.801 -->
00:03:52.301He is basically already doing that
role and expanding what the core team
00:03:52.331 -->
00:03:55.841means to an intercompany organization.
00:03:55.961 -->
00:03:59.111But yeah, it's a lot of the details
that I was most curious about, like what
00:03:59.111 -->
00:04:01.786does, what does this mean for governance?
00:04:01.786 -->
00:04:05.746Like how will decisions be made
are not yet answered right now from
00:04:05.746 -->
00:04:08.326the, from the various posts on this.
00:04:08.746 -->
00:04:11.836A quote is, the React team is
actively working on this new technical
00:04:11.836 -->
00:04:14.566governance structure, and we'll
share more details in a future post.
00:04:14.656 -->
00:04:18.136So this is an announcement of
a future announcement in some
00:04:18.136 -->
00:04:19.441ways, but it's pretty real.
00:04:19.621 -->
00:04:22.766So this is in collaboration with
the Open JS Foundation, which is
00:04:22.766 -->
00:04:24.356a partner to the Linux Foundation.
00:04:24.356 -->
00:04:30.896So like th these are very large, pretty
well-founded organizations that the React
00:04:30.896 -->
00:04:37.526team is glomming onto in support of like
a neutral home for React, as they call it.
00:04:38.036 -->
00:04:42.776It's sounds like they're in incorporating
React Native into this as well, which
00:04:42.776 -->
00:04:44.276I think is not necessarily a given.
00:04:44.276 -->
00:04:48.056You know, if you're talking about the
governance of React, what that means for
00:04:48.056 -->
00:04:50.456React Native is not necessarily implied.
00:04:50.906 -->
00:04:54.266But just looking at the founding
members like Amazon, Call Stack,
00:04:54.266 -->
00:04:58.586Software Mansion, and Expo, and I
guess Microsoft too, like those are
00:04:58.586 -->
00:05:00.926all heavy React native investors.
00:05:01.316 -->
00:05:05.096Mo: I think it's quite surprising
in that sense because it's more
00:05:05.096 -->
00:05:07.106heavy on the React native side.
00:05:07.586 -->
00:05:12.326Like Vercel is really the key
sort of non-react native player.
00:05:12.326 -->
00:05:16.646The rest are really heavy on React
Native and there's like noticeably
00:05:16.646 -->
00:05:20.846missing membership from like Shopify
on the Remix side as an example.
00:05:21.341 -->
00:05:24.056I, I actually find it's very skewed
towards React Native, almost shockingly.
00:05:24.566 -->
00:05:25.376Carl: Yeah, I'd agree with that.
00:05:25.436 -->
00:05:27.261It's, it is almost shockingly
skewed towards React.
00:05:27.266 -->
00:05:32.936React Native, given that it was not really
pitched as the React Native foundation.
00:05:33.356 -->
00:05:34.016That's true.
00:05:34.316 -->
00:05:38.366I guess Software Mansion does do
a fair amount of web React work.
00:05:38.801 -->
00:05:42.101But I, I believe Call Stack is
predominantly a React native shop as well.
00:05:42.281 -->
00:05:46.301Mark: So I'll do my usual thing where
I, I step back and provide historical
00:05:46.301 -->
00:05:48.911context and what matter at all.
00:05:49.421 -->
00:05:52.241So React was invented at Facebook.
00:05:52.631 -->
00:05:57.221It has always been a project
owned by Facebook and Meta.
00:05:57.731 -->
00:06:00.461The code has been open source, but.
00:06:01.026 -->
00:06:05.526You know, for years the entire
development team was Facebook meta
00:06:05.526 -->
00:06:09.096employees paid by Meta to work on React.
00:06:09.666 -->
00:06:15.686And I've said even in my conference
talks this year about Meta, Vercel, React
00:06:15.976 -->
00:06:19.866ownership, that the React team has had
the freedom to work on what they want.
00:06:19.926 -->
00:06:24.816And that's true, but I've, I was
reminded in some conversations with
00:06:24.816 -->
00:06:30.486React team members at React Con, how
much their work is constrained by,
00:06:30.906 -->
00:06:35.226like the fact that their performance
reviews are, "what have you done
00:06:35.226 -->
00:06:38.316to further meta's goals this year?"
00:06:38.856 -->
00:06:44.646And so in some ways their ability to push
React in the technical directions that
00:06:44.646 -->
00:06:49.986they think are right, are limited by how
much they can make the case for that.
00:06:50.421 -->
00:06:55.281Inside Meta, even something like
the Concurrent Stores work is
00:06:55.281 -->
00:06:59.481essentially being pitched as, how
can we make Facebook's Ads Manager
00:06:59.481 -->
00:07:01.851app faster in a lot of ways?
00:07:02.571 -->
00:07:07.041So we saw multiple React team
members move over to Vercel.
00:07:07.101 -->
00:07:11.001Like people used to complain that
this is all a Facebook app, all
00:07:11.001 -->
00:07:12.651the meetings are inside Meta.
00:07:13.041 -->
00:07:16.161There's no public roadmap, it's only meta.
00:07:16.671 -->
00:07:20.451And then we had team members move to
Vercel, and then it became, well, now
00:07:20.451 -->
00:07:24.441Vercel is applying too much ownership
to React and all the stuff we've talked
00:07:24.441 -->
00:07:28.821about with Next and server components
and Vercel and how that's supposedly
00:07:28.821 -->
00:07:30.261driving the roadmap, et cetera.
00:07:30.821 -->
00:07:34.751And so the team itself has been
split across two companies,
00:07:35.261 -->
00:07:36.761and they're working together.
00:07:36.821 -->
00:07:40.691It's one team, but it's kind
of within these two companies.
00:07:41.201 -->
00:07:46.061And so because of Reacts widespread
usage, there's been calls for many,
00:07:46.061 -->
00:07:50.771many years that there ought to be
some kind of an independent foundation
00:07:51.221 -->
00:07:56.411that would own the trademarks, the
rights, the development process.
00:07:56.846 -->
00:07:58.226To React itself.
00:07:58.736 -->
00:08:00.866And it always seemed kinda
like one of those pipe dreams.
00:08:01.106 -->
00:08:04.376The calls on Twitter to
build, React into the browser.
00:08:04.496 -->
00:08:06.446And obviously there's no
way that's going to happen.
00:08:06.671 -->
00:08:09.566And, and this felt like much
of the same kind of idea.
00:08:10.046 -->
00:08:14.696And so they, they did the initial
React and the initial keynote at
00:08:14.696 -->
00:08:17.426React Con, and they were mostly
focusing on technical things.
00:08:17.426 -->
00:08:22.856Like last year we, we fixed
the, the sibling preloading bug.
00:08:22.856 -->
00:08:26.636That was the suspense gate problem that
everyone was talking about last year.
00:08:26.636 -->
00:08:30.116And 19.2 came out and the compiler is 1.0.
00:08:30.626 -->
00:08:34.226And then Seth came out and he
did the one more thing routine
00:08:34.736 -->
00:08:40.526and as soon as he put the React
Foundation slide up, my jaw dropped.
00:08:40.766 -->
00:08:44.006And I think I even said out loud,
oh my word, they actually did it.
00:08:44.546 -->
00:08:49.256And my first reaction
was, even without knowing.
00:08:49.796 -->
00:08:53.906Any actual details about what the
foundation is or how it's going
00:08:53.906 -->
00:08:57.086to work or whether this is even
going to work out in practice.
00:08:57.596 -->
00:09:02.426The fact that they have taken the time
to do the legal preparation work to try
00:09:02.426 -->
00:09:08.486to make this happen and are actually
attempting to execute on that is a
00:09:08.486 -->
00:09:11.996huge deal for React and the ecosystem.
00:09:12.446 -->
00:09:17.906It, it is a statement of good
faith and intent for how they want
00:09:17.906 -->
00:09:20.066React to proceed in the future.
00:09:20.456 -->
00:09:25.526Like without any details, my
immediate reaction is, yes, finally,
00:09:25.526 -->
00:09:27.206this is a good step forward.
00:09:27.716 -->
00:09:32.396We'll see what it means in practice,
but this is a really big deal.
00:09:32.936 -->
00:09:34.616Carl: Yeah, I would agree with that.
00:09:34.676 -->
00:09:37.466It's a really big deal that
they're moving in this direction.
00:09:37.766 -->
00:09:41.396I'm really curious about the details
because I think there's a lot of, I
00:09:41.396 -->
00:09:44.996don't know, like in the past they've
done working groups and et cetera.
00:09:45.401 -->
00:09:48.671And my understanding of the takeaway
is generally, has generally been
00:09:48.671 -->
00:09:54.101that they found it really difficult
to manage participation in those
00:09:54.101 -->
00:09:56.321like open access kind of arenas.
00:09:56.771 -->
00:10:01.121So maybe the, this is kind of like adding
a new layer of abstraction perhaps with
00:10:01.811 -->
00:10:08.291administrative support from currently
thriving independent foundations.
00:10:08.591 -->
00:10:08.681Mm-hmm.
00:10:08.921 -->
00:10:13.391So that, that definitely makes me
think that this has a real chance
00:10:13.391 -->
00:10:17.471of being something real and valuable
that goes on for a long time.
00:10:17.981 -->
00:10:22.091I'm curious what it means for things
like, like in practice, it's not
00:10:22.091 -->
00:10:23.891like anyone's employer is changing.
00:10:23.951 -->
00:10:25.391No details have been shared yet.
00:10:25.391 -->
00:10:29.441At least that anyone is being
paid from this new foundation.
00:10:29.771 -->
00:10:34.061I, I don't know whether to call it meta or
Facebook 'cause it's on the fb.com domain.
00:10:34.241 -->
00:10:34.361Mm-hmm.
00:10:34.601 -->
00:10:37.721But in the Facebook engineering
announcement here, they do say that Meta
00:10:37.721 -->
00:10:41.531has committed to a five year partnership
with over $3 million in funding.
00:10:42.146 -->
00:10:43.586I don't know what other
funding they might have.
00:10:43.586 -->
00:10:45.986I don't know what other sources of
funding they might have in the future,
00:10:45.986 -->
00:10:51.896but like just looking at five years,
$3 million, like that's 600,000 per
00:10:51.896 -->
00:10:56.816year, which is like, you know, for meta
engineers, that's like free engineers.
00:10:57.296 -->
00:10:58.826So I don't know.
00:10:58.826 -->
00:11:01.556I don't know what that means for
people's incentives and where they
00:11:01.556 -->
00:11:04.736will work and how their focus and
performance will be evaluated.
00:11:04.796 -->
00:11:05.006Yeah.
00:11:05.366 -->
00:11:10.136Mo: What that rules out is that
effectively the React Native or React and
00:11:10.136 -->
00:11:14.246React Native Core teams will definitely
not be unemployed by the React Foundation.
00:11:14.531 -->
00:11:14.881Right.
00:11:14.886 -->
00:11:18.236'cause that would basically cover
three salaries, which is far smaller
00:11:18.236 -->
00:11:19.466than what the React teams are.
00:11:19.826 -->
00:11:22.436Carl: I think the React core
team has like 10 engineers.
00:11:22.486 -->
00:11:23.446Mo: And RN is about the same.
00:11:23.446 -->
00:11:24.586So you're talking 20 engineers.
00:11:24.586 -->
00:11:28.066It's definitely not going to
cover those employees to move them
00:11:28.066 -->
00:11:30.436over, which is in some capacity.
00:11:30.796 -->
00:11:32.386And then details are to be fleshed out.
00:11:32.386 -->
00:11:35.416But in some capacity it is a bit
disappointing because it would be great
00:11:35.416 -->
00:11:40.666if they had more freedom as the React
Native Core team to play around without
00:11:40.666 -->
00:11:43.756the restrictions, like you mentioned,
of the reviews that Meta has internally.
00:11:44.131 -->
00:11:47.401And so it's gonna be interesting
to see how that Dyna dynamic plays
00:11:47.401 -->
00:11:49.741out effectively because there is
still gonna be that same team.
00:11:49.981 -->
00:11:50.551At Meta
00:11:51.016 -->
00:11:54.151Mark: I, I have three sources
of information that I'm piecing
00:11:54.151 -->
00:11:57.901together for some of how the
foundation is supposed to work.
00:11:58.381 -->
00:12:02.641Seth Webster answered a few questions
about this during the q and a session
00:12:02.731 -->
00:12:05.291that was broadcast at React Conf.
00:12:05.731 -->
00:12:11.041I had a conversation with a couple
React team members and the topic came
00:12:11.041 -->
00:12:12.541up about how things would be governed.
00:12:13.081 -->
00:12:17.011And then there was an article on
the new stack where Seth Perry was
00:12:17.131 -->
00:12:21.421interviewed and was giving some further
details about some of the governance.
00:12:21.871 -->
00:12:24.841So as best I understand it, so
you've got kind of the corporate
00:12:24.841 -->
00:12:28.591level stuff that's Meta, Amazon,
Callstack, Vercel, et cetera.
00:12:29.131 -->
00:12:33.091They will then elect a
technical steering committee.
00:12:33.421 -->
00:12:38.431Which is, I guess sort of similar
to how Node and other projects work,
00:12:39.061 -->
00:12:45.181Seth said in the q and a, that meta
will start with five votes on that
00:12:45.181 -->
00:12:50.041corporate board, and then it will go
down to one over the next five years.
00:12:50.131 -->
00:12:53.191So you kind of a decreasing
amount of influence in that sense.
00:12:53.581 -->
00:12:57.751The technical steering committee, I
assume, would be able to make decisions
00:12:58.261 -->
00:13:02.911themselves, but obviously the fact that
they are employees of the companies
00:13:03.151 -->
00:13:08.071elected by those companies, et cetera,
they would be taking their company's
00:13:08.071 -->
00:13:09.876interests into account in the process.
00:13:10.861 -->
00:13:15.211The article says that the
technical governance will be in
00:13:15.211 -->
00:13:17.071the open more than it once was.
00:13:17.071 -->
00:13:20.341Request for comments,
sets of stages, et cetera.
00:13:20.641 -->
00:13:23.881But a lot of the process
is still to be figured out.
00:13:24.391 -->
00:13:28.681The article also talks about the
foundation doing things like investing
00:13:28.681 -->
00:13:34.891in React hubs, helping boot camps teach
React better, possibly some things with
00:13:34.981 -->
00:13:37.621conferences and alignment and such.
00:13:38.041 -->
00:13:43.651So it sounds like the foundation is
going to be doing more outreachy things.
00:13:43.651 -->
00:13:47.581So there, there's a lot of this
that is not clear what it means
00:13:47.581 -->
00:13:49.981in practice yet, but certainly.
00:13:50.776 -->
00:13:55.516React is not solely a meta
owned thing at this point.
00:13:55.876 -->
00:13:58.096There are multiple companies
that are invested in it.
00:13:58.486 -->
00:14:04.096There is a, a future for React
independent of META'S ownership and goals.
00:14:04.576 -->
00:14:10.606And this all feels like the people who
care are trained to do the right thing.
00:14:11.116 -->
00:14:11.326And
00:14:11.656 -->
00:14:14.596Mo: on the conference side, I mean, I
hope that's the case because one of the,
00:14:14.896 -->
00:14:18.676as a conference organizer, one of the
things that's perhaps challenging is
00:14:18.676 -->
00:14:24.106that Meta doesn't necessarily sponsor any
conferences beyond just React conf, right?
00:14:24.136 -->
00:14:26.776And so, look, it's well known
that that's sort of the case.
00:14:26.776 -->
00:14:31.516And so maybe the React Foundations
that is going to be able to sponsor
00:14:31.516 -->
00:14:36.046those conferences, even if it's
not a meta badge to speak, which
00:14:36.046 -->
00:14:38.536would be very, very interesting
if some of that is used for that.
00:14:38.716 -->
00:14:40.486So I'm sure it's not just
Meta who's investing, right?
00:14:40.486 -->
00:14:43.516Like I, I suspect that there's
funding coming in from.
00:14:44.101 -->
00:14:47.341Amazon and Microsoft, at least
from the bigger, bigger sort
00:14:47.341 -->
00:14:49.051of established enterprises
00:14:49.531 -->
00:14:50.071Carl: hopefully.
00:14:50.071 -->
00:14:50.911And that's interesting.
00:14:51.121 -->
00:14:55.591And the new Stack article interviewed
Seth and has a bunch of poll quotes
00:14:55.591 -->
00:14:58.561from him and they do talk about that,
that like the foundation will look
00:14:58.561 -->
00:15:00.481at expanding the annual React conf.
00:15:00.511 -->
00:15:03.271I guess that's not sponsoring
other conferences, but they're
00:15:03.271 -->
00:15:04.621talking about conferences at least.
00:15:04.921 -->
00:15:06.601But also something that
caught my attention.
00:15:06.631 -->
00:15:09.721They say while React Comp is one of the
few conferences that actually makes a
00:15:09.721 -->
00:15:12.121profit, it basically only paid for itself.
00:15:12.721 -->
00:15:14.971And also it's a thousand
dollars a ticket conference.
00:15:14.971 -->
00:15:20.881So like hopefully the mode of making
conferences self-sustaining is not
00:15:20.911 -->
00:15:22.381making them cost a thousand dollars.
00:15:22.891 -->
00:15:23.221Mo: Yeah.
00:15:23.311 -->
00:15:27.541I mean conferences are from experience
a very, very expensive endeavor.
00:15:27.541 -->
00:15:30.631And if you don't have companies
backing them, they will make a loss.
00:15:31.121 -->
00:15:34.451Carl: I do wanna shout out, as we
mentioned at the start, Seth says
00:15:34.481 -->
00:15:36.701"We have lots of boot camps out there
that are doing their best, but they're
00:15:36.701 -->
00:15:39.911also sending people out into the world
misinformed about how React works."
00:15:40.211 -->
00:15:41.561This is interesting there.
00:15:41.621 -->
00:15:44.021It's a, it's funny, they're actually
hitting on a couple of points
00:15:44.021 -->
00:15:49.181that I've investigated myself
about how to do businesses in
00:15:49.181 -->
00:15:53.831like a community since like I had
previously connected with a bootcamp.
00:15:53.981 -->
00:15:57.911Somebody was working there as
the curriculum lead and they
00:15:57.911 -->
00:15:59.291were doing a curriculum overhaul.
00:15:59.321 -->
00:16:01.931'cause they hadn't changed what they
were teaching in three or four years.
00:16:01.931 -->
00:16:03.701And they were like, is
this still relevant?
00:16:03.731 -->
00:16:05.111Is this what the industry's using?
00:16:05.596 -->
00:16:06.406And I was like, cool.
00:16:06.406 -->
00:16:07.426I help run a community.
00:16:07.426 -->
00:16:08.566I know lots of experts.
00:16:08.926 -->
00:16:12.526I would be happy to facilitate
some kind of professional review.
00:16:13.006 -->
00:16:17.176And then the bootcamp curriculum lead
got laid off because that was 2022
00:16:17.206 -->
00:16:18.976and lots of things were not happening.
00:16:18.976 -->
00:16:22.006So it's interesting to see them talk about
things that I've thought a lot about.
00:16:22.636 -->
00:16:27.766And also a lovely shout out, Seth says
there are also cohorts such as meetups
00:16:27.796 -->
00:16:29.236and local groups that could be assisted.
00:16:29.266 -->
00:16:32.566One meetup actually led to the creation
of the conference React Native London.
00:16:32.986 -->
00:16:34.276So that's super cool.
00:16:34.336 -->
00:16:35.326Love that for you, Mo.
00:16:36.226 -->
00:16:39.016Mo: Yeah, I didn't, I, I did not
have that on my Bingo card to get
00:16:39.016 -->
00:16:42.436a shout out from Seth Webster on
an interview, which is awesome.
00:16:43.006 -->
00:16:44.176Yeah, it was good to have him last year.
00:16:44.656 -->
00:16:48.166Carl: Mo is the organizer of
React Native London and that one
00:16:48.166 -->
00:16:49.516meetup that led to the creation.
00:16:49.516 -->
00:16:51.106So that, that's just fun.
00:16:51.106 -->
00:16:51.616That's cool.
00:16:51.796 -->
00:16:54.496We have actual players in the
ecosystem in the podcast right now.
00:16:55.726 -->
00:16:56.416Mo: Well, you got Mark.
00:16:56.416 -->
00:16:59.386So I'm stepping up to very,
very, very high standards.
00:16:59.731 -->
00:17:00.361Pretending to.
00:17:00.811 -->
00:17:01.231Carl: Cool though.
00:17:01.231 -->
00:17:01.351Yeah.
00:17:01.351 -->
00:17:02.041So I don't know.
00:17:02.071 -->
00:17:03.301I don't know if there's more to say there.
00:17:03.631 -->
00:17:04.891Mark: Some of the more technical stuff.
00:17:04.981 -->
00:17:08.371So they, they talked about React
19.2 coming out, which if you've been
00:17:08.371 -->
00:17:10.981paying attention to this podcast for
the last several months, you would've
00:17:10.981 -->
00:17:12.631known all the details already.
00:17:12.991 -->
00:17:17.401Like the new activity component for being
able to hide components while persisting
00:17:17.401 -->
00:17:23.431state use effect event for hopefully
fewer use effect related bugs, et cetera.
00:17:23.941 -->
00:17:27.541React compiler hit 1.0 and then
00:17:27.601 -->
00:17:31.891Mo as like as usual, you wanna talk
about the React Native-y things?
00:17:32.371 -->
00:17:37.876Mo: So a few updates that they did, one
of which was quite surprising was that
00:17:38.041 -->
00:17:43.771the next release of React native version
0.82 is going to be new architecture only.
00:17:44.071 -->
00:17:46.891So obviously earlier on a few
months ago, we talked about how they
00:17:47.071 -->
00:17:50.011deprecated the old architecture than
they froze the old architecture.
00:17:50.221 -->
00:17:52.231Now they're dropping the old architecture.
00:17:52.591 -->
00:17:55.921And so to me that was a much
faster deprecation cycle
00:17:55.921 -->
00:17:57.571than I, I would've expected.
00:17:57.991 -->
00:18:02.491Specifically when it comes to the fact
that there are still a fair few libraries
00:18:02.761 -->
00:18:06.391that are using the old architecture
and only support the old architecture.
00:18:06.391 -->
00:18:10.351So to give you a very concrete
example, we had our monthly meetup
00:18:10.411 -->
00:18:15.031literally yesterday, and there was
a talk about Arrive, which is this
00:18:15.031 -->
00:18:17.791animation engine that a lot of people
are using to animate websites and
00:18:17.791 -->
00:18:19.021make really, really cool stuff.
00:18:19.351 -->
00:18:24.091But what we learned surprisingly was that
Rive only supports the old architecture.
00:18:24.361 -->
00:18:28.171So what that means is that this company
who's a very popular healthcare company,
00:18:28.171 -->
00:18:31.921really don't have a path to sort of
migrate to the new architecture and
00:18:31.921 -->
00:18:36.871hence version 0.82 until Rive starts
to support the new architecture.
00:18:37.231 -->
00:18:41.131So there are still libraries, albeit
the majority of major libraries have
00:18:41.131 -->
00:18:44.701been ported to the new architecture
that are still hanging behind.
00:18:44.701 -->
00:18:47.731So I'm quite surprised by this,
but we'll see how it goes.
00:18:47.731 -->
00:18:50.821It probably means that these library
maintainers really need to like step up
00:18:50.821 -->
00:18:52.471in the next month or two and get ready.
00:18:52.921 -->
00:18:56.731The second big thing, which I have
a little bit about later on, but
00:18:56.791 -->
00:19:02.551just a quick one, is that Amazon did
the Vega Os announcement earlier.
00:19:02.611 -->
00:19:04.771It was towards the end of September
that they actually announced it,
00:19:04.771 -->
00:19:08.281but they formally talked to the
React and React native communities
00:19:08.281 -->
00:19:10.011about it during React Conf.
00:19:10.291 -->
00:19:15.601This is a completely new operating system
that's fully built from scratch by Amazon
00:19:15.601 -->
00:19:18.211folks and React Native is the UI layer.
00:19:18.211 -->
00:19:21.931It's the only way that you can write
apps for it, which is quite a big
00:19:21.931 -->
00:19:26.641investment from Amazon's perspective
into React Native as a technology.
00:19:27.121 -->
00:19:29.371So Amazon makes a lot of devices.
00:19:29.401 -->
00:19:32.581For a little bit of context, you might've
seen their Fire TV devices, some of the
00:19:32.581 -->
00:19:37.111Kindle fire devices that they had, but
also like Echo dots and a whole slew of
00:19:37.111 -->
00:19:39.151different devices that they manufacture.
00:19:39.511 -->
00:19:43.111And previously a lot of these were
running on Android or a variety of Android
00:19:43.111 -->
00:19:46.741called Fire Os that they had adopted
from the Android open source projects.
00:19:47.191 -->
00:19:50.821And so now they've kind of completely
ditched that and they're betting
00:19:50.821 -->
00:19:55.141long term on React native now at our
company at Theo and a bunch of other
00:19:55.141 -->
00:19:58.351companies have been sort of working
with Amazon behind the scenes on this.
00:19:58.351 -->
00:20:01.141And we're aware of this but weren't
really allowed to speak about it.
00:20:01.291 -->
00:20:02.401So it's now out in the public.
00:20:02.401 -->
00:20:06.271But it has been a good while, which I
cannot specify how long that duration is
00:20:06.541 -->
00:20:09.631that I have been aware of this, but just
not able to talk about it and have been
00:20:09.631 -->
00:20:12.781working with the Amazon folks to make sure
that things are ready for their launch.
00:20:12.931 -->
00:20:15.391So they have an introduction video
at React Con, which I think is
00:20:15.391 -->
00:20:21.271interesting because TV apps need
to run on very, very limited specs.
00:20:21.271 -->
00:20:24.391You're talking like a few gigs of
Ram one or two gigs of ram and like
00:20:24.391 -->
00:20:28.111very, very, very slow CPUs and some
of them are even worse than that.
00:20:28.381 -->
00:20:32.911So effectively they really had to
optimize the living crap out of their
00:20:32.911 -->
00:20:36.811operating system and make sure that
React plays nice with it and is like the
00:20:36.811 -->
00:20:38.761first class citizen when it comes to it.
00:20:38.761 -->
00:20:40.921So it's, it's very interesting
how they had to optimize it and
00:20:40.921 -->
00:20:42.031it was a big undertaking for them.
00:20:42.031 -->
00:20:42.271So.
00:20:42.691 -->
00:20:45.691I guess congrats to the Amazon team,
but beyond that, it's quite interesting
00:20:45.691 -->
00:20:48.361for people that are interested in
performance and React and React native.
00:20:48.811 -->
00:20:51.991Carl: Yeah, I was just scanning this
to see if I could find any details
00:20:51.991 -->
00:20:55.021about what they built on top of,
because like, I don't know, nobody
00:20:55.021 -->
00:20:57.211builds a whole OS from scratch anymore.
00:20:57.211 -->
00:20:59.101And this is on top of Linux?
00:20:59.521 -->
00:21:01.381Mo: Yeah, it's c plus
plus on top of Linux.
00:21:01.381 -->
00:21:02.551Basically it's a Linux.
00:21:03.211 -->
00:21:04.861Or is a Unix based system.
00:21:05.401 -->
00:21:07.321Carl: Right, like, and so is Android.
00:21:07.711 -->
00:21:14.401Like, I'm curious to what extent this
is a locked down, stripped back version
00:21:14.401 -->
00:21:16.561of Android that they're calling Vega.
00:21:16.831 -->
00:21:20.221They don't say that anywhere, but
like reading the tea leaves here,
00:21:20.221 -->
00:21:23.641I, my assumption is that the, I
don't know, Android was such a
00:21:23.641 -->
00:21:28.141massive undertaking that Google
then acquired and commercialized.
00:21:28.561 -->
00:21:32.551Curious to hear more technical details
about the OS layer here and how it…
00:21:32.611 -->
00:21:35.131Mo: I can tell you a little bit about that
because I've known about it for a while.
00:21:35.311 -->
00:21:37.771It's not on top of
Android in any capacity.
00:21:38.071 -->
00:21:41.341It is fully, the Android open
source project components of
00:21:41.341 -->
00:21:42.301it are fully stripped out.
00:21:42.301 -->
00:21:46.771It's built from scratch, which means
that compatibility with old apps is.
00:21:47.281 -->
00:21:49.231Limited and there's other solutions.
00:21:49.291 -->
00:21:51.931It's not that you can run Android
apps on it as an example that
00:21:51.931 -->
00:21:53.851we're the old Fire OS apps.
00:21:54.151 -->
00:21:57.931Carl: So wait, it sounds a little bit like
you're saying there is a shared lineage
00:21:57.931 -->
00:22:02.731with Android, but it's different enough
that its own technically distinct thing.
00:22:02.821 -->
00:22:07.141Mo: They share a technical lineage in
the same capacity that like Mac Os and
00:22:07.141 -->
00:22:11.011Androids here, which is, they are both
unique systems and that's pretty much it.
00:22:11.011 -->
00:22:15.331Like they serve the same kernel but
like so does 90% of devices out there.
00:22:15.451 -->
00:22:19.306So it's as Android, as IOS's,
Android, if that kind of makes sense.
00:22:19.996 -->
00:22:21.796Carl: The Tree of Life,
kingdom Family order.
00:22:21.796 -->
00:22:23.686Like this is not shared genus.
00:22:23.686 -->
00:22:25.546This is shared order maybe?
00:22:25.756 -->
00:22:26.146Yes.
00:22:26.236 -->
00:22:26.776Okay, cool.
00:22:26.776 -->
00:22:27.166Good to know.
00:22:27.166 -->
00:22:27.556Thank you.
00:22:27.796 -->
00:22:30.976Mark: I do wanna highlight a couple talks
in particular, and again, you can look at
00:22:30.976 -->
00:22:35.446the whole React con recap blog posts to
get links to the different talks and the
00:22:35.446 -->
00:22:36.676different portions of the live stream.
00:22:36.946 -->
00:22:40.846A lot of good talks that were worth
watching, but two that I liked in
00:22:40.846 -->
00:22:45.316particular, Joe Savona did a talk on
some of the React team's performance
00:22:45.316 -->
00:22:49.906experiments, and there's a bit of
controversy because he showed a bunch of
00:22:49.906 -->
00:22:54.856hypothetical, semi hypothetical benchmark
numbers without any real details on the
00:22:54.856 -->
00:22:56.746actual implementation of the benchmarks.
00:22:56.806 -->
00:23:00.886And then some of them were like,
versus we built NAP with signals
00:23:00.886 -->
00:23:05.986and compared it with one with React
and then ex a highly prototype
00:23:05.986 -->
00:23:07.696React and a bunch of other stuff.
00:23:08.026 -->
00:23:12.136And then people were saying, well, we
tried to mimic this and we think you're
00:23:12.136 -->
00:23:13.576probably using signals the wrong way.
00:23:13.846 -->
00:23:18.271But it was still interesting to
hear the discussion around, we agree
00:23:18.271 -->
00:23:22.141that performance has been a problem
and we've tried prototyping some
00:23:22.141 -->
00:23:26.161different ideas to see what's possible
and where bottlenecks might be.
00:23:26.671 -->
00:23:30.991The other one I really wanna point to
though, Rick Hanlon did a talk called
00:23:31.051 -->
00:23:36.331Async React and he had a few major, he
had a couple different points out of this.
00:23:36.631 -->
00:23:40.531One was that the React team has been
talking about things like suspense and
00:23:40.531 -->
00:23:47.071concurrency since 2018, and if it's been
hard to follow where the React team is
00:23:47.071 -->
00:23:51.931trained to go with this, it's 'cause
the React team itself really didn't know
00:23:52.021 -->
00:23:53.431where they were trained to go with this.
00:23:53.431 -->
00:24:01.021He even pulled out meeting notes from a
React team weekly meeting in like 2015 or
00:24:01.021 -->
00:24:08.8512016 where they started having the first
initial ideas for, we think we want to go
00:24:08.851 -->
00:24:13.831in this direction, but they really didn't
know what the final result ought to look
00:24:13.831 -->
00:24:15.391like or how they were going to get there.
00:24:15.886 -->
00:24:20.626And so showed a diagram with a
whole bunch of back and forth wavy
00:24:20.626 -->
00:24:24.946lines like we, we don't know where
we're going, but now it's 2025.
00:24:25.006 -->
00:24:26.956We've gotten through the confusion.
00:24:27.316 -->
00:24:32.086We've now built all the main concurrent
pieces that we were trained to build.
00:24:32.446 -->
00:24:37.066We are seeing the results of even
like the React 16 fiber rerate.
00:24:37.576 -->
00:24:42.646And now we can actually say, we've
built these pieces and here's
00:24:42.646 -->
00:24:43.966how they ought to fit together.
00:24:44.476 -->
00:24:49.456And so the second half of his talk
was a demo where he took a badly
00:24:49.456 -->
00:24:53.296written but viable React app, which
uses use effect for data fetching
00:24:53.296 -->
00:24:56.626and manual setting, state for
loading states and things like that.
00:24:56.926 -->
00:25:02.296And he first refactored it to have
a bunch of transitions for better
00:25:02.296 -->
00:25:08.056loading animations, using suspense for
the data fetching, and he showed the
00:25:08.056 -->
00:25:10.906visible improvements in user experience.
00:25:11.476 -->
00:25:17.206And then his point towards the end was
that, yeah, the, so like this is how
00:25:17.326 -->
00:25:21.226modern Async React code ought to work.
00:25:21.736 -->
00:25:26.236But in fact, you shouldn't even have
to write most of this code in your
00:25:26.236 -->
00:25:30.916own app because the transitions and
the loading states and everything else
00:25:31.186 -->
00:25:36.316really ought to be embedded in your
router and your data fetching library.
00:25:36.796 -->
00:25:41.356Now, unfortunately, his actual talk got
interrupted for stupid technical reasons.
00:25:41.626 -->
00:25:46.426So he came back at the end of day two and
picked up with his demo and actually had
00:25:46.426 -->
00:25:48.106a chance to do a better version of it.
00:25:48.631 -->
00:25:53.191And so I think the key points are,
one, the React team has now built
00:25:53.191 -->
00:25:55.771the concurrent async features that
they've talked about for years.
00:25:56.251 -->
00:26:02.949Two, a lot of us, including myself, are
still kind of stuck in like a 20 16, 20
00:26:02.949 -->
00:26:06.84118 era mindset of how to use React three.
00:26:06.871 -->
00:26:11.701These things make writing React apps
better and better user experience.
00:26:12.211 -->
00:26:17.671Four, we need to get these things
embedded in component libraries and
00:26:17.671 -->
00:26:22.651data fetching libraries so that a lot
of this stuff just works outta the box.
00:26:23.041 -->
00:26:26.371So I highly, highly recommend
watching Ricky's talk.
00:26:26.641 -->
00:26:28.861He also put up the demo code as well.
00:26:29.281 -->
00:26:30.031Carl: That was a good talk.
00:26:30.091 -->
00:26:30.871It was a good demo.
00:26:31.441 -->
00:26:34.141I will say, while watching
him write the code.
00:26:34.711 -->
00:26:36.811I was like, man, this
looks really complicated.
00:26:37.021 -->
00:26:37.381Mark: Yeah.
00:26:37.381 -->
00:26:39.631And that, and that's another point that
we're going to touch on here with a
00:26:39.631 -->
00:26:41.191couple of the, the other things as well.
00:26:41.401 -->
00:26:45.661One other thing that really caught my
attention, so if you've been listening
00:26:45.661 -->
00:26:49.471to podcasts for a while, you've heard
me agitating, saying that we really
00:26:49.471 -->
00:26:55.171need is a new React working group
where folks from the community can
00:26:55.171 -->
00:26:58.441officially communicate to the React team
for things like, Hey, we think there
00:26:58.441 -->
00:27:00.211should be more docs to cover this topic.
00:27:00.631 -->
00:27:03.121Or, oops, create React app just broke.
00:27:03.121 -->
00:27:05.191I think you should fix
it, and things like that.
00:27:05.701 -->
00:27:11.161And Ricky was actually the person who
drove most of the React eight team.
00:27:11.491 -->
00:27:12.001Working group.
00:27:12.721 -->
00:27:16.051And so at the end of his talk, Ricky
actually announced that there is
00:27:16.051 -->
00:27:19.711now a new Async React working group.
00:27:20.401 -->
00:27:26.371And this is sort of a catchall, it's meant
to cover discussions of things like how
00:27:26.371 -->
00:27:32.576do we get async React features into major
ecosystem libraries and, what kind of
00:27:32.576 -->
00:27:34.826docs should we have to cover this stuff?
00:27:35.216 -->
00:27:39.626And so the, even the first discussion
thread is a lot of discussion between me,
00:27:39.656 -->
00:27:45.566Ricky, Dan Aberman of Corbin Crutchley,
about a whole bunch of possible docs,
00:27:45.566 -->
00:27:50.126pages that we could add that would
cover things like transitions and
00:27:50.126 -->
00:27:52.586suspense and how to use them correctly.
00:27:53.066 -->
00:27:57.206And getting people from the community
to contribute those new docs pages
00:27:57.206 -->
00:27:58.796rather than waiting on the React team.
00:27:59.086 -->
00:27:59.566To write them.
00:28:00.166 -->
00:28:03.496So I am actually genuinely,
genuinely excited.
00:28:03.556 -->
00:28:09.226Like I've done a lot of complaining
and this is the answer to my complaints
00:28:09.256 -->
00:28:14.776that we have working group and docs
plans and an agreement that people
00:28:14.776 -->
00:28:16.516outside the team can contribute.
00:28:16.996 -->
00:28:20.746So like I am actually
legitimately thrilled by this.
00:28:21.316 -->
00:28:21.766Carl: Nice.
00:28:22.156 -->
00:28:26.506I do appreciate more, I don't know, open
participation more, more discussion.
00:28:26.986 -->
00:28:27.406That's great.
00:28:27.796 -->
00:28:29.446Should we get into Remix V three?
00:28:29.956 -->
00:28:30.796Mark: Yes, we should.
00:28:31.036 -->
00:28:35.176Alright, so usual caveat, I still
have not had time to actually watch
00:28:35.386 -->
00:28:39.346the announcement, but I, I think
I can give a fair summary of it
00:28:39.406 -->
00:28:43.186from having seen the discussion on
Twitter and the articles afterwards.
00:28:43.366 -->
00:28:46.756We have mentioned for the last
several months that they were teasing
00:28:46.786 -->
00:28:51.616Remix V three is going to be, not
pre-ACT, its own component model,
00:28:51.766 -->
00:28:54.046something with iframes, whatever.
00:28:54.436 -->
00:28:58.246And our last comments on it were
just show us some code already.
00:28:58.906 -->
00:29:02.806Well, at the Remix Jam conference,
they did actually show us the code.
00:29:03.376 -->
00:29:09.466There was a, a repo put together that did
timestamped links to all the appropriate
00:29:09.466 -->
00:29:11.626pieces of the announcement video.
00:29:12.136 -->
00:29:16.906So if you'd like to be able to jump
in and see the examples of what Remix
00:29:16.906 -->
00:29:19.786V three code is supposed to look
like, that should make it easier.
00:29:20.296 -->
00:29:25.336My first impressions, again, just
having seen screenshots of the code in
00:29:25.336 -->
00:29:30.496following the discussions, is that Remix
v three's component model is sort of a
00:29:30.496 -->
00:29:34.756mixture between React, view and backbone.
00:29:35.446 -->
00:29:38.806So it's kind of like React in
that you have function components
00:29:38.866 -->
00:29:40.456and they, and that uses JSX.
00:29:41.056 -->
00:29:45.856It's kind of like view and the
composition API, where you're
00:29:45.856 -->
00:29:48.676given a closure as the setup.
00:29:49.151 -->
00:29:53.741It's a little bit like backbone
in that the function component
00:29:53.741 -->
00:29:58.241you're rating still sort of is
organized like as if it were a class.
00:29:58.571 -->
00:30:03.641It passes in a reference to the
instance rather than getting
00:30:03.641 -->
00:30:08.111the props as an argument, and
you're supposed to call it this.
00:30:08.591 -->
00:30:12.401And part of that is to make use
of a TypeScript typing trick that
00:30:12.401 -->
00:30:15.881lets you declare the type of this
as an argument to a function.
00:30:16.481 -->
00:30:23.351But also you manually trigger
updates by first mutating a variable
00:30:23.471 -->
00:30:28.811in the setup closure, and then
you manually call this update.
00:30:29.411 -->
00:30:34.901And so Ryan Florence even said, this
is basically old school React class
00:30:34.901 -->
00:30:36.821component, this dot force update.
00:30:37.306 -->
00:30:42.766Essentially, so I, I can see bits and
pieces of parallels and influences
00:30:42.766 -->
00:30:45.076between all three of those frameworks.
00:30:45.076 -->
00:30:49.396When I look at the Remix code,
it's also supposed to come with a
00:30:49.396 -->
00:30:54.196bunch of utilities for being able
to compose event handlers together.
00:30:54.856 -->
00:30:59.086And yeah, so we, we have
finally seen the code.
00:30:59.476 -->
00:31:03.646I believe they also gave some
demonstrations of what the server side
00:31:03.646 -->
00:31:05.986loading story is supposed to look like.
00:31:06.286 -->
00:31:12.136Some kind of an I frame alike
component that has its own URL and
00:31:12.136 -->
00:31:14.416can automatically re fetch HTML.
00:31:14.476 -->
00:31:18.976I haven't looked into those pieces
as much, so very big picture.
00:31:19.126 -->
00:31:23.206I saw a lot of people arguing
about having this dot update.
00:31:23.831 -->
00:31:28.121A lot of people saying it feels like a
step backwards, it's manual update code.
00:31:28.691 -->
00:31:33.101But some people demonstrated that you can
very quickly write your own wrappers that
00:31:33.101 -->
00:31:34.811just call this DOT update internally.
00:31:35.081 -->
00:31:38.771I have seen wrappers that
mimic like the used state hook.
00:31:39.101 -->
00:31:43.391I've seen wrappers for other state
management libraries like Redux.
00:31:43.751 -->
00:31:48.551So it's a primitive that can clearly
be abstracted if you really want to.
00:31:48.911 -->
00:31:53.291I saw some good posts and articles
from James Long and a couple other
00:31:53.291 -->
00:31:58.421people with thoughts on the ability
to compose interactions together.
00:31:58.961 -->
00:32:03.131Carl, to your point that modern
React and all the new async
00:32:03.131 -->
00:32:06.131features feel very complicated.
00:32:06.431 -->
00:32:11.981Like there's good reasons why methods
like transitions exist to try to give
00:32:11.981 -->
00:32:17.411better user experiences, but it's just all
these additional concepts and behaviors
00:32:17.411 -->
00:32:19.661you have to keep track of in your head.
00:32:20.176 -->
00:32:27.226And Remix is trying to go for a less
magic, less abstraction approach.
00:32:27.706 -->
00:32:31.156So we'll see what it means
in terms of adoption.
00:32:31.276 -->
00:32:36.496Again, this is non-reactive, so
different framework, different ecosystem.
00:32:36.496 -->
00:32:40.366Who knows what the actual adoption
will look like, but I get the sense
00:32:40.366 -->
00:32:44.356of what they're trying to go for
and I, I think it will appeal to
00:32:44.446 -->
00:32:49.306some number of users out there that
want to have that kind of behavior.
00:32:49.816 -->
00:32:53.026Carl: Yeah, I'll definitely keep
paying attention to it 'cause
00:32:53.026 -->
00:32:58.066they're thoughtful about things and
historically have just done a lot.
00:32:58.456 -->
00:33:00.496So I'm very curious to
see where this goes.
00:33:00.496 -->
00:33:07.336But my gut feeling here is that this is
going to end up more as an API exploration
00:33:07.696 -->
00:33:13.876and that any great ideas that come out of
it will be a fresh exploration and then
00:33:14.656 -->
00:33:19.696maybe validate some ideas that get brought
into React or view or other big tools.
00:33:19.786 -->
00:33:22.756But yeah, I, I could be
wrong, could be, could be more
00:33:23.086 -->
00:33:24.496independently successful than that.
00:33:25.006 -->
00:33:28.216They, they did stress in the
video that I watched, that this
00:33:28.216 -->
00:33:29.956is all like prototype phase.
00:33:29.986 -->
00:33:33.976So they, like right now apparently
there's splitting it all up into
00:33:33.976 -->
00:33:35.176a bunch of different packages.
00:33:35.176 -->
00:33:39.136They can iterate independently and
explore a bunch of different things.
00:33:39.136 -->
00:33:43.231But the, the final intended
usage would be from one package,
00:33:43.231 -->
00:33:44.881not from 20 different packages.
00:33:45.361 -->
00:33:48.361Just to throw that out there
as a a thing that will change.
00:33:48.841 -->
00:33:49.861Yeah, I don't know.
00:33:49.921 -->
00:33:50.371We'll see.
00:33:50.881 -->
00:33:51.241We'll see.
00:33:51.451 -->
00:33:54.331I think the component model is just
gonna be really hard to disrupt.
00:33:54.421 -->
00:34:00.001One, one thing I did see in the video of
Ryan Florence talking about just talking
00:34:00.001 -->
00:34:04.351while he was demoing, he like compared
and contrasted with like, here's how we
00:34:04.351 -->
00:34:08.251do state changes and you just call the
dispatch function instead of set state.
00:34:08.551 -->
00:34:10.891And I was like, I dunno,
you can do that in React.
00:34:10.891 -->
00:34:14.701Like they've been encouraging people to
do that for years, for like six years
00:34:15.001 -->
00:34:18.991basically Ever since hooks came out and
you could do a state reducer, they were
00:34:18.991 -->
00:34:24.211like, please, except for trivial uses
of state, all of your state should be in
00:34:24.211 -->
00:34:25.801a reducer and you should use dispatch.
00:34:25.801 -->
00:34:26.461Not set state.
00:34:26.971 -->
00:34:30.271So just like calling that out as a
point of comparison, like React has been
00:34:30.271 -->
00:34:31.951trying to do that for a long time too.
00:34:31.951 -->
00:34:34.921It's just nobody actually does, I
dunno, just caught my attention.
00:34:35.431 -->
00:34:37.981Mark: Well least we have an actual
code to critique now and argue
00:34:37.981 -->
00:34:39.661about instead of the vague teasing.
00:34:40.111 -->
00:34:41.311True facts.
00:34:41.641 -->
00:34:44.011Carl: I will happily continue
reading code and critiquing.
00:34:44.551 -->
00:34:48.001Speaking of which , I love this project.
00:34:48.031 -->
00:34:50.881I have thought about doing this
so many different times and I
00:34:50.881 -->
00:34:52.171never have because it's hard.
00:34:52.471 -->
00:34:57.631Somebody built the same app 10 times
in a variety of different frameworks
00:34:57.631 -->
00:35:04.141and tools and benchmarked them and
compared and contrasted their performance
00:35:04.141 -->
00:35:05.371in a bunch of different metrics.
00:35:05.431 -->
00:35:10.141It seemed like they focused pretty heavily
on like bundle size to me, very wordy.
00:35:10.141 -->
00:35:12.361I, I will say I got a
little bit lost in the
00:35:12.361 -->
00:35:12.661Mark: instruction.
00:35:12.661 -->
00:35:17.371Very wordy and very, also, a lot of the
article was very clearly AI generated.
00:35:17.371 -->
00:35:20.371I saw some comments from the author
saying he had written pieces of it in
00:35:20.371 -->
00:35:22.411sections and used AI to help with it.
00:35:22.651 -->
00:35:25.861So like there, there was clearly
human involvement in it, but the,
00:35:25.981 -->
00:35:29.701the AI generation of the article
itself was a critique point.
00:35:30.271 -->
00:35:30.451Carl: Yeah.
00:35:30.451 -->
00:35:33.151Just like as I'm scrolling, it's
got so many paragraphs in a row
00:35:33.151 -->
00:35:34.801that are all like identically long.
00:35:35.281 -->
00:35:36.841Just a little bit of a wall of text.
00:35:36.841 -->
00:35:38.341I definitely skimmed this pretty hard.
00:35:38.611 -->
00:35:42.511All that aside, like I just
love the idea of doing the exact
00:35:42.511 -->
00:35:44.071same thing with the exact same.
00:35:44.071 -->
00:35:46.861Like, well, I don't know that they
use the same test suite, but that,
00:35:46.861 -->
00:35:48.001that was always my idea is build.
00:35:48.031 -->
00:35:52.651You build an end-to-end test suite and
then you get a passing app for that test
00:35:52.651 -->
00:35:54.121suite in a bunch of different tools.
00:35:54.641 -->
00:35:57.511I meant to do more of a deep
code review on a couple of
00:35:57.511 -->
00:35:59.071the different implementations.
00:35:59.311 -->
00:36:03.421It's a CanBan board, it's, you
know, a Trello clone type project
00:36:03.421 -->
00:36:06.001where you're doing task management
with cards and drag and drop.
00:36:06.151 -->
00:36:10.111I guess it, it's a great and a
parable comparison because drag
00:36:10.111 -->
00:36:12.601and drop is really hard to do and
so it's very frequently something
00:36:12.601 -->
00:36:14.491people try to lean on libraries for.
00:36:15.031 -->
00:36:20.521So if you are implementing it
yourself, that's kind of cha, that
00:36:20.521 -->
00:36:23.791makes it a little bit challenging
to use as a point of comparison.
00:36:24.301 -->
00:36:29.941But the tools that were used here,
he built it analog, which I guess is
00:36:29.941 -->
00:36:31.831vanilla js is what I'm assuming, or
00:36:31.921 -->
00:36:36.421Mark: analog is actually a,
a next like tool for Angular.
00:36:36.991 -->
00:36:37.291Carl: Oh great.
00:36:37.321 -->
00:36:37.621Okay.
00:36:37.891 -->
00:36:38.131Okay.
00:36:38.131 -->
00:36:41.251So you built it an analog,
which is an angular type thing.
00:36:41.701 -->
00:36:45.091And HTMX, Marco, which I'd never heard of.
00:36:45.301 -->
00:36:46.351Next.JS, of course.
00:36:46.351 -->
00:36:46.951Next.
00:36:47.041 -->
00:36:47.461Sure.
00:36:47.851 -->
00:36:49.871Qwik City, which is Qwik.
00:36:49.891 -->
00:36:51.931I've heard of Qwik City
I had not heard of.
00:36:51.931 -->
00:36:53.191So this is I guess
00:36:53.191 -->
00:36:55.591Mark: probably another solid
versus solid start type thing.
00:36:55.741 -->
00:36:57.091Carl: Qwik city to qwik Sure.
00:36:57.571 -->
00:37:02.851Solid start spelt Kit Tan Stack with
solid and then Tan Stack with React.
00:37:03.451 -->
00:37:07.081Yeah, one of the first tables, one
of the first actual like points of
00:37:07.081 -->
00:37:11.761comparison of the output tables is
just on bundle size and how much
00:37:11.761 -->
00:37:14.191JavaScript was served in order to.
00:37:14.851 -->
00:37:15.931Get this app running.
00:37:16.261 -->
00:37:22.471They used Next.JS version 16 as
the baseline and that was about 500
00:37:22.471 -->
00:37:24.241kilobytes gzipped, which is huge.
00:37:24.241 -->
00:37:25.561It's big hand stack.
00:37:25.561 -->
00:37:27.541Start with React.
00:37:27.721 -->
00:37:32.071Clocked in at about 300 kilobytes
a little bit more with solid
00:37:32.071 -->
00:37:33.571was a half of that hand stack.
00:37:33.571 -->
00:37:36.601Start with solid was 150 ish kilobytes.
00:37:36.871 -->
00:37:39.331The smallest was Marco.
00:37:39.826 -->
00:37:43.90612. At 12 kilobytes followed
by quick city at 88.
00:37:44.146 -->
00:37:47.506Oh, I just realized there's
parenthesized compressed.
00:37:47.506 -->
00:37:49.306I thought I was reading the
compressed and I was not.
00:37:49.816 -->
00:37:53.626Mark: There's also the board
page versus the homepage sizes.
00:37:53.866 -->
00:37:54.286Carl: Yeah.
00:37:54.286 -->
00:37:54.616Okay.
00:37:54.706 -->
00:37:54.976Alright.
00:37:54.976 -->
00:37:57.076This is more confusingly
presented than I realized.
00:37:57.466 -->
00:38:00.226Mark: I think the biggest picture
takeaways, number one, it's worth noting
00:38:00.316 -->
00:38:04.006that the author of this article previously
put up a post a month or two ago saying
00:38:04.006 -->
00:38:08.566that React by is the default choice and
it's killing innovation in the ecosystem.
00:38:08.956 -->
00:38:11.116So that kind of to where
they're coming from.
00:38:11.506 -->
00:38:12.406But I do think they did.
00:38:12.406 -->
00:38:16.966They were legitimately trying to do
a real meaningful comparison, even
00:38:16.971 -->
00:38:19.906if the results were sort of what
they were hoping they would be.
00:38:19.906 -->
00:38:21.706IE reacted big and bad.
00:38:22.306 -->
00:38:28.576So yeah, the big takeaways are like React
itself is huge and so any React app is
00:38:28.576 -->
00:38:31.756going to be very large bundle size wise.
00:38:32.236 -->
00:38:37.186And look, if we do like Tan Stack
with Solid instead of Tan Stack
00:38:37.186 -->
00:38:38.866with React, it gets smaller.
00:38:39.256 -->
00:38:45.256But also if you do these other frameworks,
it gets even better smaller and then it
00:38:45.256 -->
00:38:48.856kind of ends with a bit of a, another
rant about React is a bad choice.
00:38:49.396 -->
00:38:51.106Carl: Yeah, I, I will validate that.
00:38:51.316 -->
00:38:55.936To me it also looked like they really
tried to give React a fair shake here.
00:38:55.936 -->
00:38:58.126Like, you know, if you wanted to, if
you were wanting to complain about
00:38:58.126 -->
00:39:01.876bundle size, if React apps, like
there are so many easy ways to bloat
00:39:01.876 -->
00:39:03.586this up to a couple of megabytes.
00:39:04.096 -->
00:39:08.086So like the fact that they didn't do
that is indicative enough to me that
00:39:08.086 -->
00:39:09.316they tried to give this a fair shot.
00:39:10.246 -->
00:39:10.756It's cool.
00:39:10.756 -->
00:39:11.236I love this.
00:39:11.236 -->
00:39:13.366This is a great project, great effort.
00:39:13.756 -->
00:39:17.056I don't know that, to me, at the
end of the day, this is interesting
00:39:17.056 -->
00:39:21.556and fascinating and a great point of
comparison, and also like not that
00:39:21.556 -->
00:39:26.026meaningful because the performance
metrics that you measure here that are
00:39:26.026 -->
00:39:31.366easily measured by comparing the outputs
of identically functional applications,
00:39:31.876 -->
00:39:38.146that's really only like maybe a third of
the reason why you would choose to build
00:39:38.146 -->
00:39:41.146an app with any particular set of tools.
00:39:41.176 -->
00:39:45.316Like really, if you're starting
a company and hiring engineers
00:39:45.316 -->
00:39:47.266and doing a greenfield project.
00:39:47.941 -->
00:39:51.811Like some of the most important
things are how much will this cost?
00:39:52.141 -->
00:39:53.101Mark: How well is everything?
00:39:53.101 -->
00:39:54.781How well is everything documented?
00:39:54.781 -->
00:39:57.541How easily can we spin up
engineers who know these things?
00:39:57.541 -->
00:39:59.551I mean, the, the ecosystem
argument is a real thing.
00:39:59.911 -->
00:40:03.661Carl: And like, you know, if it takes
you two months to find a developer,
00:40:03.721 -->
00:40:08.041you know, a senior developer who
can build your app in Marco, you
00:40:08.041 -->
00:40:09.721know, you could do that in a week.
00:40:09.841 -->
00:40:10.231I don't know.
00:40:10.471 -->
00:40:14.131The hiring for React is much easier
than hiring for some niche tool.
00:40:14.131 -->
00:40:16.891And I have seen writeups of people
saying like, yeah, we built our
00:40:16.891 -->
00:40:20.281startup on this niche framework
and we couldn't hire for it.
00:40:20.281 -->
00:40:22.771And that ended up contributing
to the death of the company.
00:40:23.011 -->
00:40:25.711So like, you know, these performance
metrics are important, they're really
00:40:25.711 -->
00:40:27.301useful, it's great to have them.
00:40:27.301 -->
00:40:31.441So we know where opportunities
to improve are like tying this
00:40:31.441 -->
00:40:33.061back mark to your Immer work.
00:40:33.061 -->
00:40:36.211Like if somebody hadn't complained
about performance, you wouldn't
00:40:36.211 -->
00:40:37.351know that it needed to get better.
00:40:37.351 -->
00:40:37.501Pretty
00:40:37.501 -->
00:40:37.741Mark: much.
00:40:37.741 -->
00:40:38.011Yeah.
00:40:38.281 -->
00:40:41.431Carl: So this is great and I love it,
but it's also not the end all, be all
00:40:41.431 -->
00:40:44.431of like decision making for, things.
00:40:44.431 -->
00:40:44.731Yeah.
00:40:45.271 -->
00:40:48.121It's also, man, this, it's just so
hard to read because of how long it is.
00:40:48.181 -->
00:40:49.891I wish they'd stripped
this down a bit more.
00:40:49.951 -->
00:40:53.581Mo: And if we take like a step back out
of our like web ecosystem bubble for a
00:40:53.581 -->
00:40:59.371second, like you go to like the backend
world and like enterprise business
00:40:59.671 -->
00:41:04.411companies or finance or whatever, and like
they employ a lot of developers, right?
00:41:04.411 -->
00:41:07.531Like thousands, thousands
and thousands of developers.
00:41:07.861 -->
00:41:11.791And like there's a reason they're
all on Java and .Net is because like
00:41:11.971 -->
00:41:15.091they can hire for those and it's
pretty easy to build a team around.
00:41:15.091 -->
00:41:16.051That's the top priority.
00:41:16.051 -->
00:41:20.146Even like this stuff is quite
minuscule when people are, companies
00:41:20.146 -->
00:41:21.571are hiring at a large scale.
00:41:21.751 -->
00:41:25.321And then the second thing, which is
like not accounted for, I think in this
00:41:25.321 -->
00:41:30.001like approach of looking at like just
the bundle size that's outputted is the
00:41:30.001 -->
00:41:34.711fact that like your productivity with
the fact that most of the AI tools are
00:41:34.711 -->
00:41:39.901really like optimized around React is not
something that you should not look at and
00:41:39.901 -->
00:41:41.431consider when you're choosing something.
00:41:41.821 -->
00:41:45.901There's so much training data and so
much like tooling around building React
00:41:45.901 -->
00:41:50.941apps quickly and prototyping React
features or React apps that with AI
00:41:50.941 -->
00:41:54.841that is just a bit, it feels a bit moot
some of some of these conversations.
00:41:54.841 -->
00:41:55.291It feels.
00:41:55.351 -->
00:41:58.231Mark: To be clear, like React
has got itself has gotten
00:41:58.231 -->
00:41:59.371much bigger over the years.
00:41:59.371 -->
00:42:02.191In fact, even just 18 to 19
it got notice will be bigger.
00:42:02.761 -->
00:42:05.221Bigger bundle sizes are not a good thing.
00:42:05.221 -->
00:42:08.341We are not sitting here saying
Your bundle size does not matter.
00:42:08.671 -->
00:42:12.781Alex Russell, as much as I disagree
with his communication style is right
00:42:12.841 -->
00:42:16.981to point to the technical receipts
saying that big bundle sizes are
00:42:16.981 -->
00:42:21.511bad, but also it's not the only
single metric you should care about.
00:42:21.931 -->
00:42:22.651Carl: Yeah, right.
00:42:22.741 -->
00:42:23.071Yep.
00:42:23.191 -->
00:42:24.781And also, last thing I'll shout out here.
00:42:24.781 -->
00:42:30.391I think the author of this blog
post also mentions that he tried not
00:42:30.391 -->
00:42:32.341to pull in too many dependencies.
00:42:32.341 -->
00:42:40.471So like did not pull in fetch wrappers
or data fetch tools like React Query and.
00:42:40.981 -->
00:42:45.091Axios, the data fetch thing, which
many people still use, I don't know.
00:42:45.451 -->
00:42:49.651They still have a fair amount of utility
just for things like observability and
00:42:49.651 -->
00:42:51.991security and various guarantees like that.
00:42:52.291 -->
00:42:57.271Like Axios itself is 36 kilobytes
ified like 14 compressed.
00:42:57.631 -->
00:42:59.881React Query is 55 kilobytes.
00:42:59.911 -->
00:43:05.431I guess to say that the way he did
it is actually better quote unquote
00:43:05.431 -->
00:43:09.871for React in terms of the bundle size
argument, but it's also not representative
00:43:09.871 -->
00:43:11.311of how people actually build apps.
00:43:11.371 -->
00:43:16.171It's a challenge of these types of
articles is that by necessity it has
00:43:16.171 -->
00:43:20.221to be the level of scope that a single
developer can execute on their own, and
00:43:20.221 -->
00:43:21.481that's just not how most apps are built.
00:43:21.511 -->
00:43:23.551Like most apps are not passion
projects by one person.
00:43:23.551 -->
00:43:24.241So yeah.
00:43:24.721 -->
00:43:25.261Super cool.
00:43:25.261 -->
00:43:26.251Love this post.
00:43:26.911 -->
00:43:29.851It's interesting more than
it is authoritative, I think.
00:43:30.361 -->
00:43:30.931Mark: Good way to put it.
00:43:31.141 -->
00:43:32.921Mo, tell us about Solito.
00:43:33.501 -->
00:43:34.831Mo: Yes, Solito.
00:43:35.101 -->
00:43:36.871So go back a few months.
00:43:36.871 -->
00:43:40.001You'll remember that we said
Fernando Rojo joined Vercel.
00:43:40.321 -->
00:43:42.631And he joined as the head
of mobile firm Vercel.
00:43:43.081 -->
00:43:46.851This was significant because he's the
author of this library called Solito
00:43:47.161 -->
00:43:49.171and a few other libraries like Ziga.
00:43:49.471 -->
00:43:52.801So he's really, for the last
few years, has been focused on.
00:43:53.341 -->
00:43:56.911Using React native on the web as
well, especially with Next.JS.
00:43:57.301 -->
00:43:59.461So he built his own startup
in that sort of tech stack.
00:43:59.821 -->
00:44:03.721It is from experience and having built
with this tech stack quite a lot,
00:44:03.991 -->
00:44:09.331it's a challenging approach because
you are always balancing oversharing
00:44:09.331 -->
00:44:14.461between your native components and
your React native code and the web
00:44:14.461 -->
00:44:16.111functionality that you import in.
00:44:16.111 -->
00:44:20.281And oftentimes that comes at a
detriment of performance or ux,
00:44:20.581 -->
00:44:22.321depending on if you do it right.
00:44:22.651 -->
00:44:27.241And the more that you share, the
more chance there is that you're
00:44:27.241 -->
00:44:29.461not, you're sharing something
that you probably shouldn't share.
00:44:29.971 -->
00:44:33.661And so there's a lot of libraries
in the secret system, but Solito is
00:44:33.661 -->
00:44:37.411probably one of the key ones where
it lets you share navigation across
00:44:37.411 -->
00:44:39.061Next.JS and React native apps.
00:44:39.421 -->
00:44:42.451Now, we've talked a bit
about Toledo in the past.
00:44:42.691 -->
00:44:46.711One of the big limitations that
any library in this space has is
00:44:46.711 -->
00:44:49.591that it relies on React Native
Web Now, React native web was
00:44:49.591 -->
00:44:50.941made several, several years ago.
00:44:50.941 -->
00:44:52.231I think it was back in 2015.
00:44:52.756 -->
00:44:55.036And it was made by Nicholas Gallagher.
00:44:55.036 -->
00:44:58.336Now, he also did a talk at React
Conf, which I would recommend
00:44:58.336 -->
00:45:00.406you watch about React strict dom.
00:45:00.646 -->
00:45:04.126But the key thing with React Native
Web is that it's not really receiving
00:45:04.126 -->
00:45:07.366as much love because Nicholas is
working more on React strict dom, which
00:45:07.366 -->
00:45:11.506is sort of like the future path for
sharing code across the web and mobile.
00:45:11.986 -->
00:45:15.646And so React native web is, is a little
bit bloated, and what that means is
00:45:15.646 -->
00:45:19.006that any library that you really use,
especially your, something like your
00:45:19.006 -->
00:45:23.326navigation and routing library will import
in large portions of React Native Web,
00:45:23.326 -->
00:45:25.036even if you're not using all of the APIs.
00:45:25.396 -->
00:45:28.246And so that means that your
bundle size goes through the roof.
00:45:28.696 -->
00:45:33.586And what the Vercel team slash Fernando
Roho have now been able to do is actually
00:45:33.586 -->
00:45:38.836remove React Native Web as a dependency
from from Solito, which is pretty massive.
00:45:39.196 -->
00:45:43.936It sets us up in a foundation where
you can effectively get ready for React
00:45:43.936 -->
00:45:48.676strict dom adoption more easily in the
long run, but also means that if you
00:45:49.066 -->
00:45:53.686pick and choose your libraries well, when
you're building a UniVercel app and you
00:45:53.686 -->
00:45:58.486really think about what you're using on
the web platforms, you can really start
00:45:58.486 -->
00:45:59.986to tackle that bundle size problem.
00:46:00.586 -->
00:46:03.616It doesn't help if you're using libraries
like let's say Reanimated, which has a
00:46:03.616 -->
00:46:05.326pretty heavy reliance on React Native web.
00:46:05.851 -->
00:46:09.301But if you're going really vanilla
and you're very careful, it means that
00:46:09.301 -->
00:46:14.041you can actually achieve much better
performance on the web by using this new
00:46:14.041 -->
00:46:15.961version of Solito, which is very exciting.
00:46:16.321 -->
00:46:19.711So yeah, if you're already using
Solito, give it a look and if you're
00:46:19.711 -->
00:46:22.501thinking of building a uniVercel
app, it's a really good candidate if
00:46:22.501 -->
00:46:25.441you wanna build a highly performant
web variant of your application.
00:46:25.711 -->
00:46:26.251Carl: I love that.
00:46:26.311 -->
00:46:29.461It definitely makes a lot of
sense to start moving away from
00:46:29.461 -->
00:46:32.971React Native Web, given that we've
compared and contrasted React Native
00:46:32.971 -->
00:46:35.011Web with like React strict dom.
00:46:35.141 -->
00:46:37.911I guess it makes sense to move
away from React native web, 'cause
00:46:37.911 -->
00:46:42.591the guy who made it is now doing a
different thing in the exact same
00:46:42.591 -->
00:46:44.691space from a very different angle.
00:46:44.721 -->
00:46:47.601So yeah, that's a pretty
strong argument for changing.
00:46:49.056 -->
00:46:56.376Mark: Okay, the last major topic
for the day next 16 and directives.
00:46:56.616 -->
00:46:58.506So next 16 came out.
00:46:58.956 -->
00:47:03.606The headline feature is they now have
what they're calling cash components.
00:47:04.146 -->
00:47:08.256This is the, I don't know, second,
third, fourth iteration on how
00:47:08.256 -->
00:47:11.766to do caching in next, across
the last couple major versions.
00:47:12.276 -->
00:47:14.976I'm not gonna pretend that I
understand what, how this works.
00:47:15.336 -->
00:47:19.056No one does, but thing
is that they introduced.
00:47:19.351 -->
00:47:21.391Another new directive.
00:47:21.451 -->
00:47:25.981Now to recap a directive is these little
strings that you just put in your code.
00:47:26.521 -->
00:47:33.721Originally we had use strict back in
the ES 2015 days and then React server
00:47:33.721 -->
00:47:40.341components introduced, use server and
use client, and now we have 'use cache'.
00:47:40.681 -->
00:47:44.851And the idea is that by slapping this
directive on certain components, that
00:47:44.851 -->
00:47:48.871tells the next bundler and compiler
that, Hey, this is the output of this
00:47:48.871 -->
00:47:50.461component is supposed to be cached.
00:47:50.491 -->
00:47:51.631I don't understand the details.
00:47:51.631 -->
00:47:53.821From there, go read
the documentation long.
00:47:53.821 -->
00:48:00.301With that, they also announced a new
long-lived workflow product, kind of
00:48:00.301 -->
00:48:02.636similar to what the temporal company.
00:48:03.311 -->
00:48:07.661Has built where you can have a function,
for example, that implements a billing
00:48:07.661 -->
00:48:13.931workflow by sweeping for 30 days and
you've written what looks like one
00:48:13.931 -->
00:48:18.851function, but under the hood it's actually
like saving its status to a database and
00:48:18.851 -->
00:48:22.961then a time job wakes it up and continues
executing the code, that sort of thing.
00:48:23.591 -->
00:48:30.521And I believe they opted to implement
this also with a use workflow directive
00:48:30.521 -->
00:48:32.441and like a use step directive.
00:48:33.271 -->
00:48:37.411And I think there may have even
been one or two others related to
00:48:37.411 -->
00:48:42.781variations on caching, like use
Cache, remote, something like that.
00:48:43.261 -->
00:48:46.891And meanwhile, we've also got the
React compiler has opted to use
00:48:46.891 -->
00:48:48.691directives for a couple things.
00:48:48.691 -->
00:48:52.321So there's a use no memo directive.
00:48:52.321 -->
00:48:57.571If you want to tell the compiler, don't
try to auto optimize this component.
00:48:58.111 -->
00:49:03.301And so all of a sudden we've gone from
the JavaScript language specifying.
00:49:03.681 -->
00:49:04.881One directive.
00:49:05.241 -->
00:49:10.821There was also the unofficial,
oh, was it use a SM directive that
00:49:10.821 -->
00:49:15.951was part of a SM js, the precursor
to web assembly, but like one
00:49:15.951 -->
00:49:17.931official directive in the language.
00:49:18.411 -->
00:49:22.341And now we have a couple for bundlers,
and now we have more for workflows and
00:49:22.341 -->
00:49:23.961the compiler and all these other things.
00:49:24.531 -->
00:49:28.131And so the Twitter discourse
over the last couple weeks has
00:49:28.131 -->
00:49:31.281been our directives, good or bad.
00:49:31.341 -->
00:49:34.911And they're so confusing and
they are changing the language.
00:49:34.911 -->
00:49:39.951And you have all this bundler
defined behavior that is not
00:49:39.951 -->
00:49:41.151part of the language spec.
00:49:41.661 -->
00:49:45.321And so Tanner Linsley, again, creator
of all the different Tan Stack
00:49:45.321 -->
00:49:50.541libraries, put out a blog post where
he expressed his opinion that he does
00:49:50.541 -->
00:49:53.151not think directives are a good idea.
00:49:53.496 -->
00:49:58.386Because they are unofficial, because
they're not standardized, because make
00:49:58.386 -->
00:50:03.456it not clear what the actual intended
behavior ought to be, as opposed to
00:50:03.456 -->
00:50:08.856like explicitly importing a function
that says, turn this into a client
00:50:08.856 -->
00:50:11.196server function or something like that.
00:50:11.676 -->
00:50:16.206So there there's been a lot
of arguing about directives
00:50:16.236 -->
00:50:18.366and are they understandable?
00:50:18.366 -->
00:50:19.386Are they good or bad?
00:50:19.386 -->
00:50:20.466Are they too much magic?
00:50:20.916 -->
00:50:22.176So that's been happening.
00:50:22.536 -->
00:50:23.106Carl: I'll say it.
00:50:23.166 -->
00:50:23.736They're bad.
00:50:23.826 -->
00:50:24.576It's too much magic.
00:50:24.576 -->
00:50:25.146I hate it.
00:50:25.231 -->
00:50:25.926I'm not a fan.
00:50:26.461 -->
00:50:27.751Mark: I understand the thought process.
00:50:27.776 -->
00:50:29.371I, I can't say I'm thrilled.
00:50:29.701 -->
00:50:33.241And so on that note, two article
articles that are related enough
00:50:33.241 -->
00:50:34.561to throw them into this section.
00:50:34.891 -->
00:50:41.341I've seen lots of different article
articles upset at Next or critiquing next.
00:50:41.341 -->
00:50:45.451Most of them are frankly very badly
written, but I saw one come out last
00:50:45.451 -->
00:50:49.651week that I thought was very well written
and focused strictly on the technical
00:50:49.831 -->
00:50:52.231pros and cons of using the App Router.
00:50:52.651 -->
00:50:56.161The title is Clickbait, everyone
Hates Next, but the article itself
00:50:56.161 -->
00:50:57.541is actually very well written.
00:50:57.541 -->
00:51:01.531It discusses technical aspects of
using Next, some of the problems his
00:51:01.531 -->
00:51:06.421team went in, ran into, and how and
why they ended up migrating from the
00:51:06.421 -->
00:51:08.671App Router over to 10 Stack Start.
00:51:08.911 -->
00:51:13.051And then Nadia Vic, who has done a
bunch of very excellent articles on
00:51:13.051 -->
00:51:18.871React rendering behavior, put together
a very data-driven look into do server
00:51:18.871 -->
00:51:23.761components actually help with things
like First Contentual Paint and various
00:51:23.761 -->
00:51:25.471other White House style metrics.
00:51:26.066 -->
00:51:27.266So very worth reading.
00:51:27.836 -->
00:51:31.796Carl: As I'm trying to think about how
you might solve problems of caching
00:51:31.856 -->
00:51:35.216and runtime things without directives.
00:51:35.696 -->
00:51:38.366And I'm thinking about, you know,
my experiences using like CloudFlare
00:51:38.366 -->
00:51:44.996workers or other runtimes where it's
not a traditional process scope.
00:51:45.356 -->
00:51:48.926And I don't know, I guess like it
is a really challenging question
00:51:48.926 -->
00:51:52.496of like, how do you signal to a
developer that the file they're editing
00:51:52.736 -->
00:51:55.856runs in a certain type of context?
00:51:56.336 -->
00:51:59.516And I guess I understand why
directives are an appealing thing to
00:51:59.516 -->
00:52:04.886reach for, but man, just the state
we're in right now is really a lot.
00:52:05.366 -->
00:52:09.676I found the Next.JS docs page with
directives and it lists 'use cache',
00:52:09.896 -->
00:52:13.846'use client', 'use server', and then
two sub variants of 'use cache'.
00:52:14.396 -->
00:52:19.706And that's not all of 'em that,
so there's missing ones here and.
00:52:20.426 -->
00:52:20.786I don't know.
00:52:20.786 -->
00:52:26.306When you start getting into like
many different contexts, just naming
00:52:26.306 -->
00:52:30.266them at the top of the file doesn't
really seem like enough for me.
00:52:30.296 -->
00:52:30.656I don't know.
00:52:30.656 -->
00:52:35.696And then like the implication for that
code can import other code that will not
00:52:35.696 -->
00:52:40.016have it flagged what context it's running
in via a directive at the top of the file.
00:52:40.806 -->
00:52:41.646And I don't know.
00:52:41.676 -->
00:52:42.426It's a tough problem.
00:52:42.426 -->
00:52:47.766It's a weird unanswered question
in the industry, like not even the
00:52:47.766 -->
00:52:49.296ecosystem, but like the industry.
00:52:49.296 -->
00:52:54.756How do you flag code that might run on
your browser, a real server, serverless
00:52:54.756 -->
00:52:57.126environment, and yeah, I don't know.
00:52:57.816 -->
00:52:58.506It's a challenge.
00:52:58.986 -->
00:53:02.376Mark: I think it really does speak
to the overhead and mental complexity
00:53:02.646 -->
00:53:04.266of trying to juggle all these things.
00:53:04.566 -->
00:53:09.906We said earlier that React 19 has, 18,
19 have introduced a whole lot of things
00:53:09.906 -->
00:53:15.036like transitions and other pieces to try
to let you write better user experiences.
00:53:15.546 -->
00:53:19.476But now you're having to juggle in your
head like, here's the current version
00:53:19.476 -->
00:53:24.516of my app in its display state versus
a work in progress rendered version
00:53:24.906 -->
00:53:27.996versus a future output rendered version.
00:53:28.536 -->
00:53:33.111On the server side we're having to deal
with, this is server code, this is client
00:53:33.111 -->
00:53:36.231code, sometimes they're mixed together
in the same file, sometimes they're
00:53:36.231 -->
00:53:37.941mixed together in the same component.
00:53:38.241 -->
00:53:39.351Which code is running?
00:53:39.351 -->
00:53:44.181In which context do I have to worry
about accidentally leaking security
00:53:44.181 -->
00:53:45.681tokens or something like that.
00:53:46.071 -->
00:53:50.991We're building tools to solve real
problems, but there's more and more
00:53:50.991 -->
00:53:53.271to juggle in your head as you go.
00:53:53.661 -->
00:53:57.621Carl: Well, I'm gonna plug effect one more
time because I saw it come up in the chat.
00:53:57.951 -->
00:53:58.521Oh, man.
00:53:58.551 -->
00:54:04.611It just like talking about different
ways of signaling facts about the code.
00:54:04.611 -->
00:54:06.651The code you're writing
has certain dependencies.
00:54:06.651 -->
00:54:08.841Certain dependencies is too loaded.
00:54:08.841 -->
00:54:11.661That's, that carries too much context
with it, but the code you write
00:54:11.661 -->
00:54:16.446has a certain amount of assumption
baked into it about what will be
00:54:16.446 -->
00:54:20.106available and what it can rely on.
00:54:20.466 -->
00:54:23.286The thing I love about a fact is
that it makes that more explicit
00:54:23.316 -->
00:54:26.196and brings it into the type system.
00:54:26.706 -->
00:54:32.346So I think the challenge right now is
that we are missing a like platform
00:54:32.346 -->
00:54:38.346and language level abstraction
to express information like this.
00:54:38.916 -->
00:54:41.886And yeah, I don't think we're
gonna get it anytime soon.
00:54:41.976 -->
00:54:46.536And I think these explorations will
lead to something like that and
00:54:46.536 -->
00:54:47.646hopefully converge into something.
00:54:47.646 -->
00:54:51.426But I think this is gonna be like
a real state-of-the-art problem
00:54:51.426 -->
00:54:55.176for a couple of years and still,
which I hate, but it'll get better.
00:54:56.136 -->
00:54:57.966Mark: Alright, moving on
to the lightning round.
00:54:58.386 -->
00:55:03.036In addition to React Con and Remix
Jam, we also had Vite Conf and the V
00:55:03.036 -->
00:55:06.966team gave a bunch of updates on all the
different tools they've been working on.
00:55:07.356 -->
00:55:12.366Some of the highlights to me were
that OX LT now supports ES lint and JS
00:55:12.366 -->
00:55:19.266plugins via some really awesome tricks
for interop between js and rust without
00:55:19.296 -->
00:55:21.456the the cost of serial serialization.
00:55:21.996 -->
00:55:28.116They announced a combined tool chain
called v plus, which basically pulls
00:55:28.236 -->
00:55:33.696all the different tools, VIOX lint, OX
format, Vitest, everything else together.
00:55:34.056 -->
00:55:37.656That'll be their enterprise
sales targeted tool set.
00:55:37.986 -->
00:55:41.436And then Vitest four is out
with browser mode support.
00:55:42.006 -->
00:55:45.606You basically just put a flag in
your Vitest config and suddenly
00:55:45.606 -->
00:55:48.936your tests are running in a real
browser instead of a node plus js.
00:55:49.446 -->
00:55:55.866Last week, AWS east went down and the
internet died and they put out the
00:55:55.866 -->
00:56:02.736postmortem and it was DNS apparently
they, their internal DNS system for
00:56:02.736 -->
00:56:08.046dynamo DB had like three different
instances of the DNS updater running
00:56:08.556 -->
00:56:13.326and one of them got stuck and was taking
a long time to complete, and the other
00:56:13.326 -->
00:56:17.766one came along and updated and then
said, well, these, some of these plans
00:56:17.766 -->
00:56:19.296look out of date, let's delete them.
00:56:19.776 -->
00:56:23.766And next thing you know, DNS
goes down, dynamo DB goes down
00:56:23.766 -->
00:56:26.076and the internet goes down.
00:56:26.586 -->
00:56:28.056So, oops.
00:56:28.386 -->
00:56:31.326Mo: It's funny that the, uh,
internet is backed by Dynamo db.
00:56:31.506 -->
00:56:34.266Mark: A lot of people like
us East One is the default.
00:56:34.356 -->
00:56:37.116A lot of people have tried to get
away from US East one, but when a lot
00:56:37.116 -->
00:56:39.276of Amazon's own stuff depends on US.
00:56:39.276 -->
00:56:39.906East one.
00:56:40.236 -->
00:56:40.536Yep.
00:56:40.596 -->
00:56:40.986You all
00:56:40.986 -->
00:56:43.416Mo: of your certificates can
only be issued in US East one,
00:56:43.416 -->
00:56:45.006so that doesn't really help much.
00:56:45.336 -->
00:56:50.106Side note, if you end up working in a
consultancy one day, just hope nothing
00:56:50.106 -->
00:56:53.406like this happens because the morning
of was fascinating reaching out and
00:56:53.406 -->
00:56:56.976getting reached out to by a bunch of
clients being like, my site is down.
00:56:57.486 -->
00:57:00.966And then having to figure out what's
going wrong, which is US East one on AWS.
00:57:01.056 -->
00:57:02.226So it was a fun Monday,
00:57:02.856 -->
00:57:05.916Carl: but at least the uh, at the
end of it was a vendor is out.
00:57:06.066 -->
00:57:07.056This is not our fault.
00:57:07.986 -->
00:57:09.606Mo: At least it was that, which was great.
00:57:09.846 -->
00:57:10.266Cool.
00:57:10.266 -->
00:57:10.986Moving on.
00:57:10.986 -->
00:57:14.406So a couple of React native
lightning route items.
00:57:14.436 -->
00:57:18.516Firstly ra, which is really cool because
we've talked a little bit about live
00:57:18.516 -->
00:57:22.086activities on iOS and iOS extensions,
all of the little widgets and stuff
00:57:22.086 -->
00:57:24.126that you can now use on your iPhone.
00:57:24.306 -->
00:57:28.476And you were able to use iOS
extensions within a React native app.
00:57:28.626 -->
00:57:30.846But the challenge was you had
to write SWIFT code to be able
00:57:30.846 -->
00:57:32.016to actually implement those.
00:57:32.136 -->
00:57:37.866And so a independent developer named
S has been working on building an MPM
00:57:37.866 -->
00:57:42.246package that allows you to ship these
custom widgets and extensions without
00:57:42.246 -->
00:57:47.496needing to use Swift X code or extra js,
which is so cool because he's basically
00:57:47.496 -->
00:57:54.756had to like write a translation layer
or a render that takes React UI code.
00:57:55.311 -->
00:58:00.921And converted to Swift UI code,
which is not trivial because many
00:58:00.921 -->
00:58:02.811have tried before him and failed.
00:58:03.081 -->
00:58:06.441So this is a really cool project
and like it's one of those things
00:58:06.441 -->
00:58:07.911that's like kind of mind blowing.
00:58:08.151 -->
00:58:09.951So kudos to him for making this.
00:58:10.371 -->
00:58:13.341Secondly, and I thought this was
an interesting article to link to.
00:58:13.491 -->
00:58:20.001On the expo blog, they publish an article
about building fully native apps with EAS.
00:58:20.031 -->
00:58:22.491So EAS is expo's application services.
00:58:22.791 -->
00:58:28.971Typically, this is being used to build
React native apps that are usually
00:58:28.971 -->
00:58:33.741running on Expo, but actually a lesser
known fact, and one that we've actually
00:58:33.741 -->
00:58:37.131used on some of our apps is that you
don't need to be on Expo and you don't
00:58:37.131 -->
00:58:38.511even need to be on a React native app.
00:58:39.081 -->
00:58:43.971And so EAS is really great and it's become
super mature and it's a really just good
00:58:43.971 -->
00:58:45.531build tool for building mobile apps.
00:58:45.861 -->
00:58:49.251And so people have started to use it
in the wider mobile community rather
00:58:49.251 -->
00:58:51.831than it just being a React native
thing, which is quite cool to see.
00:58:52.311 -->
00:58:57.801And lastly, this was something that
Tzveton from the Hermes team in Meta
00:58:57.801 -->
00:59:00.261actually, uh, published a week or so ago.
00:59:00.561 -->
00:59:05.241And this was actually something he linked
me on a DM because we were chatting about
00:59:05.241 -->
00:59:08.541interesting things that could be talked
about at a conference by a Hermes team.
00:59:08.961 -->
00:59:10.371And this was quite cool to see.
00:59:10.371 -->
00:59:16.581So for those who don't know, Imgui is like
a very light UI layer that is powering a
00:59:16.581 -->
00:59:18.201lot of sort of debugging for video games.
00:59:18.786 -->
00:59:21.516And it's used in a bunch of other places,
but like the key thing is that it's just
00:59:21.516 -->
00:59:23.976like a very, very lightweight UI layer.
00:59:24.276 -->
00:59:29.736And so he made a puck of basically
using React and then rendering
00:59:29.736 -->
00:59:31.416it on Imgui, which is quite cool.
00:59:31.806 -->
00:59:33.846And it runs obviously like fully natively.
00:59:33.846 -->
00:59:36.186It's fully running on c plus plus.
00:59:36.276 -->
00:59:41.706And all it really needed was some typed
JavaScript and it's basically just
00:59:41.706 -->
00:59:43.566React really, which is quite cool.
00:59:43.836 -->
00:59:47.286So yeah, it's just a little cool
fun POC, but it shows the power
00:59:47.286 -->
00:59:51.696of using React and how it can be
applied to different contexts, which
00:59:51.696 -->
00:59:52.896I thought was quite cool to include.
00:59:53.301 -->
00:59:57.681Mark: Okay, Lodash has powered much
of the JavaScript ecosystem for years.
00:59:57.771 -->
01:00:00.711Those of us who have been around for
a while, remember its predecessor,
01:00:02.031 -->
01:00:05.481but low, has also been relatively
unmaintained for a while.
01:00:05.811 -->
01:00:09.171The author John David Dalton, said
there was going to be a low dash
01:00:09.171 -->
01:00:13.941version five, and then that never really
happened, and so some announcements
01:00:13.941 -->
01:00:15.231came out in the last week or two.
01:00:15.261 -->
01:00:21.141That low dash is being taken over by a
new maintenance foundation, and they're
01:00:21.141 -->
01:00:25.731going to be doing work to update the ci,
put out some new maintenance releases,
01:00:26.121 -->
01:00:31.041and then apparently when low dash V five
happens, it'll be more about stripping
01:00:31.041 -->
01:00:35.991out a lot of the internals that tried
to polyfill platform behavior and
01:00:35.991 -->
01:00:40.071try and make it lighter and make use
of platform built-ins at this point.
01:00:40.491 -->
01:00:43.581So Lodash is still around, it
ain't going anywhere, and good
01:00:43.581 -->
01:00:44.871to see it being maintained.
01:00:45.381 -->
01:00:50.211And then there was a really good post
unrelated to React, but cool on building
01:00:50.211 -->
01:00:56.631your own key value database system that
walks through a whole bunch of pieces on
01:00:56.661 -->
01:01:01.071what a key value database actually has to
track and how the internals would work.
01:01:01.071 -->
01:01:03.801And I believe it's actually
pretty interactive, which is cool.
01:01:04.101 -->
01:01:07.371Carl: This build your own database
post, I love, this is so good.
01:01:07.371 -->
01:01:10.701I love when people rebuild
foundational building blocks.
01:01:11.151 -->
01:01:14.001And this is also something I've thought
about a little bit because he talks
01:01:14.001 -->
01:01:17.361about in a file, you know, if you need
to store something, put it in a file.
01:01:18.021 -->
01:01:21.531And this is something I've thought
about a little bit because I have been
01:01:21.531 -->
01:01:25.521using SQL Light pretty extensively in
my own work the last couple of years.
01:01:26.001 -->
01:01:27.951And at the end of the day,
sequel light is a file.
01:01:28.161 -->
01:01:31.791So like when I realized
that like most of the time.
01:01:32.466 -->
01:01:35.616If I want to store something in a
file, like I should just use sql,
01:01:35.886 -->
01:01:38.346you put something in a file and then
the file gets too big and you need
01:01:38.346 -->
01:01:42.096to optimize it, and you need a better
way to access it and like, oh, maybe
01:01:42.096 -->
01:01:44.706I could use a more descriptive query
language to get things out of it.
01:01:44.706 -->
01:01:50.376And like the end result is that you
will recreate a shittier less performant
01:01:50.616 -->
01:01:53.406version of SQLite that doesn't use sequel.
01:01:54.006 -->
01:01:54.846And so, I don't know.
01:01:54.846 -->
01:01:58.206I just like reading this that
was very strongly on my mind and
01:01:58.626 -->
01:02:00.936everyone should do SQLite if they
start putting things in a file.
01:02:00.966 -->
01:02:01.896'cause it's just a file.
01:02:02.256 -->
01:02:02.706It's cool.
01:02:02.736 -->
01:02:03.156I like it.
01:02:03.606 -->
01:02:07.866Mark: The SQL Light website even has
a page that says why, why you should
01:02:07.866 -->
01:02:14.076consider just using SQL L as your
app's file format rather than inventing
01:02:14.076 -->
01:02:16.356another new binary format from scratch.
01:02:16.566 -->
01:02:17.196Carl: A hundred percent.
01:02:17.196 -->
01:02:20.766If you start right, if you start
thinking I should put this in a binary
01:02:20.766 -->
01:02:22.776format on disc, like no, stop it.
01:02:22.986 -->
01:02:23.646Use SQLite.
01:02:23.856 -->
01:02:24.306It's great.
01:02:24.816 -->
01:02:25.086Mark: Alright.
01:02:25.146 -->
01:02:28.956Jared Palmer, the creator of
the Formik Library, has had
01:02:28.956 -->
01:02:30.786been at V at Vercel for years.
01:02:30.876 -->
01:02:35.026He worked on turbo repo, v0.
01:02:35.046 -->
01:02:37.896And he announced just a month or
two ago he was leaving Vercel.
01:02:38.166 -->
01:02:44.856He has then announced that he has joined
Microsoft as a senior VP at GitHub.
01:02:45.576 -->
01:02:50.376And the first thing he did was post
on Twitter saying, how can we make
01:02:50.376 -->
01:02:53.166the GitHub PR experience better?
01:02:53.676 -->
01:02:57.996And he got like eight or 900
replies, and he was pretty actively
01:02:57.996 -->
01:02:58.986engaging with a lot of 'em.
01:02:58.986 -->
01:03:03.036A lot of them were people asking for
things like Stacked Diff support, so
01:03:03.036 -->
01:03:06.636you could have multiple PR branches
that depend on each other and be
01:03:06.636 -->
01:03:08.406able to automatically update them.
01:03:08.961 -->
01:03:12.681He actually came back even just
a couple days later and gave some
01:03:12.681 -->
01:03:17.631technical details that he had found
after internal discussions on here were
01:03:17.631 -->
01:03:23.391some previous prototypes of stacked
diffs at GitHub and how, like how far
01:03:23.391 -->
01:03:25.431they got and what the blockers were.
01:03:25.911 -->
01:03:30.951So I have no idea how long it'll take
to roll out any of this stuff, but like
01:03:30.951 -->
01:03:35.811he seems pretty serious about trying
to improve the PR experience, whether
01:03:35.811 -->
01:03:40.341it's paper cuts or new functionality
and is trying to look into that stuff.
01:03:40.431 -->
01:03:43.731So given that we all pretty much
depend on the GitHub PR experience,
01:03:43.731 -->
01:03:45.201I'm happy to see improvements.
01:03:45.711 -->
01:03:46.071Carl: Yep.
01:03:46.071 -->
01:03:46.701Love that.
01:03:46.851 -->
01:03:47.061Wow.
01:03:47.061 -->
01:03:48.231This is very jargon heavy.
01:03:48.321 -->
01:03:50.341Mark: Yeah, I, I know, that's
why I was happy to see it.
01:03:50.751 -->
01:03:51.411Cool.
01:03:51.891 -->
01:03:53.751Carl: Sounds like a technical roadmap.
01:03:54.141 -->
01:03:59.061Mark: Couple other bits, node 25 is out
and so another development line branch
01:03:59.061 -->
01:04:02.541for node and the biggest thing there
is they've updated the version of V
01:04:02.541 -->
01:04:07.731eight and that includes those faster js
ON string of FI improvements that we,
01:04:07.761 -->
01:04:09.321we talked about a couple months ago.
01:04:09.801 -->
01:04:12.951So given how much everything
depends on JSONs string offi, it's
01:04:12.981 -->
01:04:14.781nice to see that being sped up.
01:04:15.306 -->
01:04:20.256And speaking of more optimization work,
I believe Theo put out a benchmark
01:04:20.406 -->
01:04:25.206where he was comparing CloudFlare
in Vercel in Building Next versus
01:04:25.206 -->
01:04:26.916Vanilla versus a couple other things.
01:04:27.366 -->
01:04:32.016And it pointed out places that both
Vercel and CloudFlare were slow and
01:04:32.046 -->
01:04:35.976CloudFlare jumped on this and they
found a bunch of places in their system.
01:04:36.246 -->
01:04:38.046Where things could be optimized.
01:04:38.526 -->
01:04:42.246They did a excellent blog post
detailing some of the improvements.
01:04:42.546 -->
01:04:46.476They also went in and they looked at next
itself and they found a bunch of places
01:04:46.476 -->
01:04:54.216where Next is doing like useless request
copying like 1500 or 1700 request streams
01:04:54.666 -->
01:04:56.976per request or something like that.
01:04:57.276 -->
01:05:01.086So basically everybody is
getting faster as a result of
01:05:01.086 -->
01:05:01.841this, which is a good thing.
01:05:02.681 -->
01:05:04.841Mo: CloudFlare folks are just
doing some great work recently,
01:05:04.931 -->
01:05:07.871especially with the whole like workers
rebrand as well is really cool.
01:05:07.991 -->
01:05:12.821Mark: So Interop is an attempt to
get all the different browsers on the
01:05:12.821 -->
01:05:17.051same page in terms of what features
they're working on, especially around
01:05:17.051 -->
01:05:19.391compatibility with each other each year.
01:05:19.811 -->
01:05:25.061And so this year the Firefox folks
put up a rather nifty interactive
01:05:25.061 -->
01:05:29.231suggestions thing where they list
dozens, like 50 or a hundred different
01:05:29.231 -->
01:05:35.261potential features or technical areas of
emphasis that they could spend time on.
01:05:35.771 -->
01:05:39.431And it's got a neat drag and drop
interface where you can basically use that
01:05:39.431 -->
01:05:44.261as a way to vote for which features do
you want browser manufacturers to work on?
01:05:44.751 -->
01:05:45.171This year.
01:05:45.801 -->
01:05:46.311Carl: Love that.
01:05:46.551 -->
01:05:46.761Yeah.
01:05:46.761 -->
01:05:49.821They say they're gonna publish
the final selection of proposals
01:05:49.821 -->
01:05:52.341in February, so I'll, I'll keep
an eye out on that, I guess.
01:05:52.851 -->
01:05:53.181Cool.
01:05:53.241 -->
01:05:56.691Chris Chedeau, vjeux, he has
been really prolific in the
01:05:56.691 -->
01:05:58.461React ecosystem for many years.
01:05:58.461 -->
01:06:02.961Was really influential in React becoming
open source and was the original
01:06:02.961 -->
01:06:07.971author of Prettier, which changed my
professional experience significantly.
01:06:08.271 -->
01:06:12.621He put out a blog post titled The
Birth of Prettier earlier this month.
01:06:12.681 -->
01:06:15.111I'd spent almost 10 years
since Prettier was released.
01:06:15.111 -->
01:06:16.851He says, which is wild.
01:06:17.241 -->
01:06:21.261I like his introduction of this is
the story of how the tabs first spaces
01:06:21.261 -->
01:06:23.796Holy War ended, and yeah, it did.
01:06:23.931 -->
01:06:24.681I appreciate that.
01:06:24.711 -->
01:06:28.231I actually just did a little
DX PR for a code base.
01:06:28.231 -->
01:06:33.301I maintain to make better use of prettier
because somebody created a plugin to
01:06:33.301 -->
01:06:36.271sort imports and like, yes, I love that.
01:06:36.271 -->
01:06:39.121I hate sorting my imports and I hate
when of my imports are not sorted.
01:06:39.601 -->
01:06:43.801The introduction of automated
formatting into the JavaScript ecosystem
01:06:43.801 -->
01:06:46.351was, oh, what a, what a blessing.
01:06:46.591 -->
01:06:48.121Like what hours?
01:06:48.301 -->
01:06:51.781The years of my life that have
been saved from arguing over
01:06:51.781 -->
01:06:55.741formatting is just really lovely
and this is a great retrospective.
01:06:55.861 -->
01:06:58.351Looking into just the whole
process of how it came out.
01:06:58.381 -->
01:07:00.361Mark: There's some
fascinating details in there.
01:07:00.571 -->
01:07:04.501Carl: Yeah, like one of the challenges
of this that I remember in the moment a
01:07:04.501 -->
01:07:10.351little bit, but like if you're gonna start
formatting things, the format needs to
01:07:10.351 -->
01:07:15.141be something relatively unobjectionable
to the people who are evaluating
01:07:15.141 -->
01:07:16.491whether they want to use it or not.
01:07:16.551 -->
01:07:23.931Like, yeah, so, and then figuring
out what options should be exposed,
01:07:23.931 -->
01:07:25.851what is actually configurable,
because if you make it too
01:07:25.851 -->
01:07:27.921configurable, then it's not helpful.
01:07:28.371 -->
01:07:35.361If it's too much manual thing, then
it's not actually consistent enough to
01:07:35.361 -->
01:07:37.371be valuable at its intended purpose.
01:07:37.371 -->
01:07:40.191So lots of really interesting
details throughout here.
01:07:40.401 -->
01:07:41.271Definitely recommend it.
01:07:41.511 -->
01:07:45.741I always love a great technical white
paper, a writeup of implementation,
01:07:46.131 -->
01:07:48.051and this is, oh boy, is this that.
01:07:48.051 -->
01:07:48.561It's great.
01:07:49.011 -->
01:07:51.591Mark: One of the most interesting
bits I saw was he was talking about
01:07:51.591 -->
01:07:55.401how they started rolling it out
and like Prettier has some options,
01:07:55.521 -->
01:07:59.001but they wanted to minimize them
and he wanted everyone to basically
01:07:59.121 -->
01:08:02.001agree on a single set of options.
01:08:02.451 -->
01:08:05.721And so he said the strategy I used to
figure out how to make this work was
01:08:05.721 -->
01:08:10.191lining up incentives so that it took
a ton more work to use a different
01:08:10.191 -->
01:08:12.111set of options if you wanted to.
01:08:12.801 -->
01:08:16.791It said Prettier is either in
this, in CI or in your IDE.
01:08:17.091 -->
01:08:20.361So I made it so that they read
them from different places with a
01:08:20.361 -->
01:08:23.841different rollout schedule to make
it harder to choose one or the other.
01:08:24.651 -->
01:08:25.521Carl: Oh, that's incredible.
01:08:25.701 -->
01:08:26.391That's some good details.
01:08:26.391 -->
01:08:30.801Reading this a little bit more is it's
got lots of fun non-technical details
01:08:30.831 -->
01:08:34.461that like they're not the engineering
work, but they are absolutely essential
01:08:34.461 -->
01:08:40.176for actually making a thing that is
successful and sustainable and thriving.
01:08:40.266 -->
01:08:43.926Like it also talks about money
and like ongoing maintenance is
01:08:43.926 -->
01:08:45.036a thing that you have to pay for.
01:08:45.546 -->
01:08:48.336You don't have to, I guess most open
source does not, but if you don't,
01:08:48.336 -->
01:08:49.866then it has its own challenges.
01:08:49.866 -->
01:08:54.276So like not only is this a great technical
writeup, but it's also a great, I don't
01:08:54.276 -->
01:08:55.536know, like entrepreneurial writeup.
01:08:55.596 -->
01:08:57.876Mark: How do you do the, the
real work to make stuff happen?
01:08:58.146 -->
01:09:01.716Carl: People talk about the difference
between like senior and staff
01:09:01.716 -->
01:09:04.746engineering being, the difference
between junior and senior is how
01:09:04.746 -->
01:09:06.546much English you're asked to write.
01:09:06.816 -->
01:09:10.086And the difference between senior and
staff is like how much non-technical
01:09:10.086 -->
01:09:12.306things you're asked to account for.
01:09:12.636 -->
01:09:16.806And so this is a phenomenal, I
would say, staff engineer writeup.
01:09:16.806 -->
01:09:21.456Like, this is how you take an idea and you
make it an industry level impact project.
01:09:21.546 -->
01:09:21.756Yeah.
01:09:21.876 -->
01:09:22.331Great Writeup.
01:09:23.061 -->
01:09:25.821Mark: I can even point to a
couple personal examples of how
01:09:25.851 -->
01:09:28.971prettier has affected my work
just within the last few days.
01:09:28.971 -->
01:09:34.251One is that I'm jumping between the
Redux repo, which is two spaces,
01:09:34.251 -->
01:09:36.591single quotes, no semicolons.
01:09:36.921 -->
01:09:41.811The Immer repo, which is four spaces,
double quotes, and I can't, and may,
01:09:41.871 -->
01:09:46.731maybe no single semicolons, Replay.io
repo, which is four spaces, double
01:09:46.731 -->
01:09:51.651quotes, semicolons, and I don't
think about any of that anymore.
01:09:52.131 -->
01:09:59.511And then also just yesterday, I was trying
to tweak some of ER's exports and tried
01:09:59.511 -->
01:10:07.326to put in an export type keyword, which I
was pretty sure was a legit thing except
01:10:07.326 -->
01:10:09.486that when I hit save, it didn't format.
01:10:10.176 -->
01:10:14.196And I have learned that if it
doesn't format, I have put in invalid
01:10:14.196 -->
01:10:16.776syntax somewhere for a moment.
01:10:16.776 -->
01:10:21.276It was like, oh, export type
must not be a valid TS keyword.
01:10:21.666 -->
01:10:25.696And then I finally realized, oh
wait, this is on prettier 1.19.
01:10:25.716 -->
01:10:29.406That must predate that syntax
being added to TypeScript.
01:10:29.646 -->
01:10:34.296And so I had to update prettier, but like
that's how much I have learned to lean on.
01:10:34.296 -->
01:10:37.086You hit save and it
formats and it's valid.
01:10:37.721 -->
01:10:38.891Carl: Yep, a hundred percent.
01:10:38.976 -->
01:10:40.571I, I recognize that in myself as well.
01:10:41.051 -->
01:10:41.411Okay.
01:10:41.471 -->
01:10:42.971Let's wrap it up with some conferences.
01:10:43.241 -->
01:10:44.201Mo: Let's jump into it.
01:10:44.201 -->
01:10:47.951So we've hinted a few times
and I can now say that we've
01:10:47.951 -->
01:10:49.601got Seth Webster's endorsement.
01:10:49.601 -->
01:10:54.461So the executive director of the React
Foundations talks about my conference.
01:10:54.461 -->
01:10:55.361I'm very happy today.
01:10:55.691 -->
01:10:58.781We've been organizing this for the
second year, so React Native London
01:10:58.991 -->
01:11:02.861for anyone who's a React native
enthusiast in London and beyond.
01:11:02.861 -->
01:11:05.231We have people from Brazil and
India last year, so that's like the
01:11:05.231 -->
01:11:08.411furthest extent that we have people
coming in from around the world.
01:11:08.741 -->
01:11:11.861But if you are interested,
we've got our conference on
01:11:11.861 -->
01:11:13.631the 13th and 14th of November.
01:11:14.046 -->
01:11:17.766In Central London, we've got a beautiful
venue, some great talks from Meta, Amazon,
01:11:18.216 -->
01:11:22.656Microsoft, and just a bunch of community
people from expo and independent app
01:11:22.656 -->
01:11:25.596developers who are gonna come and give
some really, really phenomenal talks.
01:11:26.046 -->
01:11:31.116Use the code TMIR 10 and you should get
a 10% discount on checking out, which
01:11:31.116 -->
01:11:37.056will, if I'm doing my mental maths right,
make the ticket price 330 ish pounds
01:11:37.356 -->
01:11:41.826for a two day conference to be able to
attend workshops and the conference day.
01:11:42.276 -->
01:11:46.686Carl: Um, other ones we've got
coming up are Wey Wey Web November
01:11:46.686 -->
01:11:48.99617th and 18th in Malaga, Spain.
01:11:49.206 -->
01:11:54.006We've also got React Summit November
18th through 21st in New York.
01:11:54.096 -->
01:11:56.496Mark: There's JS Nation on the 17th.
01:11:56.556 -->
01:12:00.456There's in-person React Summit in
person on the 18th, and then they
01:12:00.456 -->
01:12:02.196have an online day the next week.
01:12:02.271 -->
01:12:02.301Okay.
01:12:02.991 -->
01:12:03.921Carl: Oh, oh, oh yes.
01:12:03.921 -->
01:12:06.291I see it's 18th and 20th, not through.
01:12:06.441 -->
01:12:06.951Interesting.
01:12:07.191 -->
01:12:08.091One day in person.
01:12:08.091 -->
01:12:08.841One day online.
01:12:09.051 -->
01:12:09.351Okay.
01:12:09.381 -->
01:12:09.831Makes sense.
01:12:10.341 -->
01:12:13.041There's also React Advanced
November 28th, also
01:12:13.041 -->
01:12:15.921Mark: in London the
day after Thanksgiving.
01:12:16.311 -->
01:12:18.291Someone in England didn't
think about that part.
01:12:18.861 -->
01:12:19.491He, he, he,
01:12:19.701 -->
01:12:19.941Carl: yeah.
01:12:19.941 -->
01:12:20.931It's not for Americans.
01:12:21.471 -->
01:12:24.381Mo: It's not just React Advance,
it's also Tech Lead Conf, which is
01:12:24.381 -->
01:12:27.501also organized by the Ation folks
on the same day in London as well.
01:12:27.501 -->
01:12:31.161So, no, I would doubt that there's
gonna be a lot of people from
01:12:31.161 -->
01:12:32.511the states there, unfortunately.
01:12:32.961 -->
01:12:33.381Carl: For sure.
01:12:33.891 -->
01:12:38.541Well, I'll, I'll also add, I just saw
like two days ago, the organizer of
01:12:38.541 -->
01:12:43.551React Paris posted in the events channel
here that CFP is open, so we gotta React
01:12:43.761 -->
01:12:45.861Paris if you want to submit a talk.
01:12:46.161 -->
01:12:48.621But that's gonna be in like March
though, so not anytime soon.
01:12:49.191 -->
01:12:49.911That's all we got.
01:12:50.241 -->
01:12:53.061Thanks so much for sticking
around for a whole 90 minutes.
01:12:53.151 -->
01:12:54.651Mark: It was a very busy month.
01:12:54.681 -->
01:12:55.161Okay.
01:12:55.521 -->
01:12:55.881Carl: Yeah.
01:12:56.001 -->
01:12:59.751We'll be back next month, on the
last Wednesday here in the live
01:12:59.751 -->
01:13:02.721stage or back in your podcast
feed just as soon as we can.
01:13:03.201 -->
01:13:03.531Yeah.
01:13:03.591 -->
01:13:04.161Thanks so much.
01:13:04.641 -->
01:13:07.401Well, normally we gather sources
from a variety of newsletters.
01:13:07.401 -->
01:13:10.401We actually had so many things
that Mark shared in the tech
01:13:10.401 -->
01:13:14.211reads and news chat this month
that I don't think any of us did.
01:13:14.641 -->
01:13:15.376So that's cool.
01:13:15.706 -->
01:13:18.466Mark: And I pasted a lot more links
in the discussion threads too.
01:13:18.766 -->
01:13:20.026Carl: That's something I
should be better about.
01:13:20.026 -->
01:13:21.496That would be lovely and helpful.
01:13:21.856 -->
01:13:24.616But yeah, if you see anything
newsworthy, definitely let us know
01:13:24.616 -->
01:13:26.986in the Tech News and Reads channel,
just like Mark has been doing.
01:13:27.376 -->
01:13:30.616You can also email us at
hello@reactiveflex.com.
01:13:30.676 -->
01:13:33.766But you know it's a community
like Join, participate.
01:13:34.186 -->
01:13:36.856I do read every email though, so if
you send something I, I will read it.
01:13:37.096 -->
01:13:39.736If this is a show that you get value
from and want to support, best way
01:13:39.736 -->
01:13:43.546to do so is by submitting a review
wherever you listen and by telling
01:13:43.546 -->
01:13:44.626your friends and coworkers about it.
01:13:44.776 -->
01:13:47.476And go to a meetup and say, Hey,
there's this great podcast I love.
01:13:47.806 -->
01:13:48.226Cheers.
01:13:48.556 -->
01:13:49.186See you next month.