Zack Jackson - ByteDance, rspack, and the Future of Web Development

Zack Jackson - ByteDance, rspack, and the Future of Web Development

Released Monday, 21st April 2025
Good episode? Give it some love!
Zack Jackson - ByteDance, rspack, and the Future of Web Development

Zack Jackson - ByteDance, rspack, and the Future of Web Development

Zack Jackson - ByteDance, rspack, and the Future of Web Development

Zack Jackson - ByteDance, rspack, and the Future of Web Development

Monday, 21st April 2025
Good episode? Give it some love!
Rate Episode

Episode Transcript

Transcripts are displayed as originally observed. Some content, including advertisements may have changed.

Use Ctrl + F to search

0:00

builds a compiler that produces the smallest

0:02

bundle would most likely win the

0:04

bundle or war. Regardless of how developers

0:06

feel about it, or if they

0:08

say, oh, well, they love this ecosystem

0:10

so much, that doesn't matter if

0:12

you can produce 50 % less payload. Hello,

0:20

welcome to DevTools FM. This is a podcast about

0:22

developer tools and the people who make them. I'm

0:24

Andrew, and this is my co -host, Justin. Hey

0:26

everyone, we're really excited to have

0:28

Zach Jackson back on the podcast with

0:30

us. Zach, you were on, it

0:32

was like episode 30, we're like in

0:35

the hundreds now, so it's been

0:37

a while. So

0:39

excited to have you on. And

0:41

we know there's a lot that's changed with you. So

0:45

previously, when we last

0:47

talked to you, you were working at Lululemon,

0:49

and now you're at ByteDance. And

0:52

so if anybody wants to

0:54

go back and check out episode

0:56

30, we talked a lot

0:58

about some really interesting work you're doing at

1:00

the time, and I hope to get

1:02

some updates on that. But before we dive

1:04

in, would you like to update our

1:06

listeners and kind of tell the new listeners

1:08

about yourself and what are you up to

1:10

these days? Uh, yeah, sure. So, um,

1:13

I'm a info architect

1:15

at bite dance. And

1:17

what that basically means is that I

1:19

work on like a lot of our

1:21

infrastructure tools. So, uh,

1:23

obviously the company is really large.

1:25

So there's a, a big

1:27

set of problems that, uh, is

1:29

never ending to sell. And,

1:32

uh, And yeah, and so essentially

1:34

we think our team with

1:36

about 60 members on the infrastructure

1:38

team. And so it's about

1:40

60 of us. And on Infra,

1:42

we pretty much deal with everything

1:45

from like building

1:48

out custom runtime. So like custom

1:50

JS run times that comes out

1:52

of our kernel team. native

1:55

frameworks and renderers for

1:57

various things, compilers, obviously, JS

2:00

frameworks, and then other things

2:02

in between, like just the tooling

2:04

to get stuff from A

2:06

to B. So

2:08

yes, that's a lot of what I do day to

2:10

day, which is essentially what I've just always been

2:12

doing, but now at a much bigger scale, which is

2:15

quite nice. Then

2:18

obviously, module Federation is

2:20

still very close to my

2:22

heart. Luckily,

2:24

I happened to land at the company

2:27

who happens to be the largest user

2:29

of it out there. So it all

2:31

worked out well. Yeah. It seems like

2:33

ByteDance has created a lot of different

2:35

things just from the outside looking in.

2:37

There's like a lot of

2:39

innovation going on and like

2:41

next generation type tooling. So like what

2:43

for when you first started, like

2:45

what attracted you to the company

2:47

and what projects that the company

2:49

of you gravitated towards. Let's

2:52

see. Okay,

2:54

so I guess like a thing that

2:57

I usually look for at a company

2:59

is like, you know, I'm always about

3:01

like impact. And I know that's like

3:03

an overused word these days. But

3:05

like generally, if I have to go

3:07

somewhere and I'm just pigeonholed into cool,

3:09

well, like you'll do this is kind

3:11

of why I got out of product

3:13

engineering is it was just not high

3:15

impact enough. And I think after

3:18

a while, it's also very dependent

3:20

on the health of the organization, how

3:22

enjoyable it is to work on the

3:24

product actually becomes. In

3:29

some places,

3:31

you're very beholden

3:34

to changes of non -technical users,

3:36

which can be difficult to

3:38

really get and get things

3:40

done. I

3:42

would say the the main reason what kind

3:44

of attracted me was just really the size of

3:46

the issues that they had and the fact

3:48

that a lot of the problems that they were

3:50

looking at were really similar to things that I

3:53

had been interested in solving. And, you

3:55

know, I think ultimately it was kind of like,

3:57

OK, well, you know, like when I was looking around

3:59

at the opportunities and then the kind of

4:01

just the numbers come out of like, hey,

4:03

well, here's the size of the people that

4:06

use this stuff and here's like the runway

4:08

of problems that you can have to solve

4:10

here. And that really kind

4:12

of hooked me in the end but

4:14

how it kind of started was

4:16

it turned out bite dance had been

4:18

after me a couple times and

4:20

I Just didn't remember Speed apparently I

4:22

had like a call with the previous

4:24

in protein manager before and I don't

4:26

know like why I didn't end up

4:28

going there or what the deal was

4:31

but So what ended up happening on like about

4:33

a year and a half later or so? how

4:36

we actually started like getting

4:38

involved was I was trying

4:40

to replace Webpack's ES TreeParser

4:42

with SWC in like a desperate

4:44

search for, you know, to

4:46

make it faster. And obviously

4:48

I knew nothing about Rust at the time. So I'm

4:50

like, hey, how do I get like the Rust

4:52

back to the JavaScript? Like, you know,

4:55

the most basic thing, like just how do you

4:57

like get it back out? And

4:59

so I'm fumbling through asking

5:01

around online and somebody, Someone's

5:04

like, hey, yeah, I can help you. And

5:06

jumps on a call with me. And so

5:08

we chat for a little bit. And he

5:10

unblocks me. And then we're going back and

5:12

forth over just like as I uncover the problems

5:14

of why this ultimately is not going to

5:16

work. And

5:20

who I ended up speaking to was actually

5:22

the lead of RS5. And I just

5:24

didn't know it at the time. So we're

5:26

kind of going back and forth. He's

5:28

watching me like fumble through, like failing, trying

5:30

to make Webpack faster with some rust. and

5:33

then you know things kind of die down and then maybe

5:35

like a week or two later he just messes with me like

5:37

hey I want to show you something and so

5:39

I get on a call and they're

5:41

like surprised there's this thing we've been working

5:43

on where we actually have ported Webpack

5:46

into Rust which obviously I was very skeptical

5:48

about because I've heard this song and

5:50

dance many a time before and you know

5:52

my general assumption was you can't like you

5:55

can't really do it. Like for the surface

5:58

of the API that it gives you, that's

6:00

just not something that you can create

6:02

in native. Cause I haven't seen anything done

6:04

in like, you know, in any of

6:06

the other native build tools that have

6:08

like an API on par

6:10

to something that's just stays in

6:13

JavaScript. So, you know, he

6:15

kind of sent me through it, showed me actually

6:17

these are the real loaders and are the

6:19

real plugins that we didn't just fork visit

6:21

and just look like web packets actually running

6:23

their ecosystem without a problem. And

6:25

I think if that was probably the main thing

6:27

that hooked me into coming in was like,

6:29

okay, this is real inch like for all my

6:31

involvement in a web pack and like how

6:34

much I've been like, you know, a fan of

6:36

it and how it's helped my career. Obviously,

6:38

when like the rust web pack pops up and

6:40

it's like, okay, well, you know, I feel

6:42

like this would be real good. And then

6:44

on top of that, I found out, you

6:46

know, they use a lot of Federation here. So,

6:48

you know, there was just like, cool, I

6:50

get to work on the thing I like to

6:52

work on already. just in Rust and faster

6:54

and less constraints because we would actually own the

6:56

product. So, you know, it was

6:58

just, that's really

7:00

kind of what attracted me. Cool. There's really

7:02

big problems to solve here that usually

7:04

you can't really get solved unless you just

7:07

have like unlimited resources to throw at

7:09

the problem. And that's really, really

7:11

difficult to come by. And luckily,

7:13

just because of like how the company is,

7:15

it like because it has so

7:17

many products and so many different

7:19

like, you know, offshoots of various

7:21

things, a lot

7:23

of the architecture attempts to be unified. So

7:26

that means it's like, okay, well, you need a

7:28

tool that's going to be able to do

7:30

like 200 different, you know, business cases that

7:32

are, you know, vastly different. So just,

7:34

you know, it was kind of

7:36

cool because it wasn't as fragmented and

7:38

disjointed as like you would usually

7:41

see where things kind of pop up.

7:43

around an organization for, hey, what works

7:45

there? Which I mean, you know, that's

7:47

totally fine. But I guess, like, it's one of

7:49

those things where I think economies of scale really kind

7:51

of help. And I like working in the areas

7:53

where economy of scale is useful. So there were a

7:55

lot of things here that just made it a,

7:57

yeah, I'd love to come and work here. Big

8:00

thanks to WorkOS for sponsoring this

8:03

episode of DevTools .fm. If

8:05

you're building a SaaS and thinking about moving up

8:07

market, WorkOS gives you everything you need to make

8:09

your app enterprise ready. without turning your

8:11

roadmap completely upside down. From

8:14

single sign -on and directory sync to audit

8:16

logs and fine -grained authorization, WorkWest is packed

8:18

with the features that companies expect and developers

8:20

can actually work with. What sets it

8:22

apart is how modular and well -designed everything

8:24

is. You don't have to use everything at

8:26

once, just pick what you need and

8:28

drop it in. The APIs are

8:30

consistent, the SDKs cover all major languages,

8:33

the developer docs are genuinely some of

8:35

the best out there. And

8:37

if you're dealing with onboarding flow

8:39

issues or user management headaches, WorkOS

8:41

has solutions for that too. A prebuilt

8:43

admin portal, secure credential storage

8:45

with ball domain verification and a whole

8:47

lot more. It's built to scale with

8:49

you, whether you're closing out your first

8:51

enterprise deal or rolling out compliance features

8:54

before the questions start coming in. So

8:56

if that sounds like something you

8:58

need, check out workOS at workOS .com. Let's

9:03

talk a little bit about. Webpack.

9:06

So it seems like for

9:08

a little while, at least

9:10

in the realm of Twitter and Blue

9:12

Sky or whatever that I'm on, a

9:14

lot of companies and a lot of

9:16

people have been talking a lot about

9:18

Veet and its shape in the ecosystem.

9:21

And I know that there are still

9:23

a ton of companies using Webpack

9:25

and I know some folks. places

9:28

that I used to work there still using

9:30

webpack but like you definitely don't hear

9:32

as much about it these days and I'm

9:34

curious like How do you think like our

9:36

spec is like changing that? What are

9:38

you sort of doing fresh and new and

9:40

like how does it sort of how

9:42

do you see it fitting in the the

9:45

current ecosystem? So

9:48

I guess

9:50

I Don't

9:54

know I personally view them

9:56

as like two different categories

9:58

of tool, to be honest.

10:00

And nothing against Veet, just in

10:03

its current form, I

10:05

know that it can do the

10:07

job for many developers, but

10:10

I

10:12

guess, well, why

10:14

doesn't Next .js just use

10:16

Veet then? Why does TurboPack

10:19

exist? I'm not

10:21

trying to throw shade here, and maybe I

10:23

just got off a very long flight, so. But,

10:26

you know, if it's the BL and Mdoll,

10:28

then we should, then nobody would be building

10:30

TurboPak. Next would be using it and blah,

10:32

blah, blah. But it's not. And that's nothing

10:34

like, I mean, nobody uses the RA to

10:36

build out these crazy type of things. And

10:38

there's various use cases for them. I

10:41

think, really, why Veet

10:43

got so momentously popular, you

10:45

know, just speculating here

10:47

is configuring build stocks. And

10:50

nobody cobbled a solution to that

10:52

together. You had WebPak, which was

10:54

okay. It's all in one. But

10:57

then you also have like, you know, a

11:00

PhD degree in configuring Webpack to

11:02

go along with it. So

11:04

over time, and then, you know, it's

11:07

something like ES Build pops up. And

11:09

it's like, oh, cool. Here's like, you

11:11

know, an API with four hooks. And

11:13

that sounds fantastic. Because if what

11:15

you want, you know, when I think of ES

11:17

Build, I always kind of in my

11:19

head kind of put it as, oh, I need

11:21

fancy Babel. Like I need something

11:23

that mostly just transforms things and kind

11:25

of puts it in certain places and that's

11:27

about it like a little bit

11:29

more than SWC but You know

11:32

fancy Babel transpile

11:34

things pack it into simple files

11:36

and off you go So so

11:38

I don't know I kind of

11:40

see like What Veet had done and we've learned

11:42

from this as well when we saw what they had

11:44

done, but they got super successful because if

11:46

you weren't using webpack then it was like either

11:48

roll up or es build or some kind

11:50

of frankenstein between the two or whatever and so

11:53

what v did was say okay well and they

11:55

introduced this thing of like a build

11:57

tool i don't think we had that really

11:59

like i don't know i really only use webpack

12:01

so i can go hunting around but

12:03

we didn't really have something like a

12:05

v type experience that was just off

12:07

the shelf to use where hey here's

12:09

a react plugin and it's not you

12:11

like configuring the loaders but there's like

12:13

middleware on top of the that's instrumenting

12:15

the tool. I think that

12:17

really helped a lot in its popularity

12:19

because Can Shake Hell was real and

12:21

also it was just faster because unbundled,

12:24

you know, Skip's doing a lot of

12:26

the build -up front and back in

12:28

the JavaScript -based tooling world, that was a

12:30

big issue. Now, I

12:32

would say on the flip side,

12:34

though, it hasn't been all like

12:36

Sunshine and Rainbows from like... And

12:39

again, I just know from like the research

12:41

that I do on these bundlers and from

12:43

like what users tell me. So I'm mostly

12:45

just kind of parroting like the things

12:47

that I've heard or think they might

12:49

not be totally accurate or whatever, but

12:52

you know, like, I think

12:54

a big one that we can probably all

12:56

understand is like, okay, well, the development versus production

12:58

discrepancy. And so, I

13:01

mean, that's not a super bad

13:03

problem. It's something you can work

13:05

around. Like either way, like it

13:07

seems to have not impacted the community

13:09

to a detrimental point. The problem

13:11

is though, is I don't see a

13:13

lot of people putting like half

13:15

a trillion dollar company embedding it on

13:17

that consistency being good. And

13:20

this is something that I would say

13:22

like Webpack has historically done well.

13:24

It's had good artifact integrity. It bundles

13:26

really small. It supports lots of

13:28

things. It kind of meets you where

13:30

you're at. and I think like

13:32

when you're looking at the tools that

13:34

you want when you're on the

13:36

lower end of like the problem surface

13:38

when you're in the let's say like you're

13:40

when you're in the 80 -20 rule in the

13:42

80 you have a lot of options but in

13:44

the 20 you don't have so many like

13:46

example okay if you take next .js well next .js

13:48

can't just use the s build or you

13:50

just use v like I mean, maybe if you

13:52

rewrote it from scratch, you could get all

13:54

the things in there, but they could do that

13:56

easier with just like TurboPak or WebPak to

13:59

kind of do the roll. But these

14:01

are also some of the more sophisticated like

14:03

build needs out there where they're doing a

14:05

lot more crazy stuff. So,

14:07

you know, I think there's just kind of

14:09

a difference between the target markets of

14:11

what we're looking at. There's, you

14:14

know, like. I would usually

14:16

say that probably these are an acquired

14:18

taste, but our target market is

14:20

obviously everybody we'd love for you to

14:22

use the tools, but our

14:24

focus primarily is like the focus

14:27

we have here at home, which is,

14:29

okay, you've got a $400

14:31

billion business and everybody uses these

14:33

things and it needs to

14:36

scale and like your compute costs

14:38

are like, you know, it's at the

14:40

point where you're, you know, you're looking at

14:42

engineering is cheaper than compute. So,

14:44

CI taking long and

14:46

chewing up boxes, the amount

14:49

of manpower to just write a new

14:51

compiler is cheaper than living with the

14:53

boxes taking 40 minutes. And if you

14:55

can do that, plus artifact integrity, all

14:57

the other things that you want, we

15:00

were just in a position of why not go

15:02

and do it. So ultimately, I think

15:04

the two will live side by side. What

15:06

I think really needs to happen, though, is

15:08

with roll down. So that's kind of what

15:10

I'm excited to see what's going to happen

15:12

there. Because I think

15:14

a lot of the problems in Veet, it's also

15:17

kind of unfair to say, oh, well, I

15:19

see some users use an escape code. Oh, well,

15:21

it doesn't do this set or the other

15:23

thing. And yeah, sure. But they have a

15:25

thing that they're working on to bring out. It's

15:27

just not out yet, which you

15:31

know, again, we'll see what happens when it

15:33

comes out. But I

15:35

think when we're in that space, what

15:37

we've also noticed that was interesting is

15:39

that Z seems to be like looking

15:41

at the bundle mode for apps. So

15:44

instead of doing the bundle list and dev like

15:46

it's always done, they're looking at adopting some kind of

15:48

like proprietary webpack -esque

15:50

chunking format

15:53

and some kind of

15:55

runtime for it. And I think

15:57

that that's a really good move because at

15:59

the end of the day, think like, The whole idea

16:01

of unbundled ESM, I think everybody

16:03

has tried it for a while

16:05

and it, you

16:07

know, it kind of works, but

16:10

there's like problems with it that

16:12

aren't necessarily on paper problems. Like

16:14

doing everything unbundled, it's technically

16:16

going to work really well on

16:18

your machine in incognito mode. but

16:21

go get the user machine with like the

16:23

six Chrome extensions and the Bing search

16:25

bar. Like you remember the old IE where

16:27

you'd have like that many toolbars? Like,

16:30

you know, imagine a browser that's

16:32

got like that, like your average Chrome

16:34

like laden

16:36

extension laden browser. And then if you

16:38

have to download like, you know, 4 ,000

16:40

little modules, it's not your

16:42

network isn't the problem. It's all the junk

16:44

that's sitting on the client device that

16:46

you can't benchmark against that like brings it

16:48

down in the real world. So

16:53

I think a lot of these things seem to

16:55

be going in the right direction of, hey,

16:57

we tried various things. We think a bundled mode

16:59

would be good. And the reason that we

17:01

can do a lot of this stuff is we

17:03

have faster tools, so they can do more

17:05

work. Cool, we can bundle

17:07

it all really quickly and make

17:10

it more or less as fast

17:12

as unbundled just because Rust

17:14

would enable. speed

17:16

where, oh, if it takes like, you know, 300

17:18

milliseconds to start up, we don't really care at

17:20

that point. Like it's beyond the point of caring. So

17:23

I'm also excited for us to get that because it

17:25

seems like everybody in the bundling space is kind

17:27

of getting to the point where speed isn't going to

17:29

be like this thing that, you know, the bundle

17:31

of wars are fought over, which I feel for like

17:33

the past two years, that's a lot of what

17:35

it's been. Oh, well, you know, which one's faster or

17:38

so on and so forth. But now it seems

17:40

we're talking about like, oh, well, this one did it

17:42

in one second and this one did it in

17:44

600 milliseconds. And it's like,

17:46

okay, sure, that's still maybe, you

17:48

know, two times faster or whatnot.

17:50

But then when you look at the demo app and

17:52

it's building like, you know, 15

17:55

,000 modules or something, you're like,

17:57

okay, well, realistically, yes, there could

17:59

be scaling issue. But if you can build,

18:01

I don't know, like we have one

18:03

here that's like, I think 50 ,000 modules. It's

18:06

like, okay, I can build a product of 50 ,000

18:08

modules and I can build it in 20 seconds. then

18:11

you know, that's probably the slowest

18:13

build RSPAC has on the market. And

18:16

that seems more than

18:18

acceptable to us coming from,

18:21

you know, that taking like over an hour

18:23

or more to build. So I think as

18:25

well, just like the focus is going to

18:27

start to shift as we all get the

18:29

tools where it's fast and where it's like,

18:31

okay, well, a little fit. Like when you're

18:33

doing HMR, if it takes 100 milliseconds versus

18:36

like 85 milliseconds, Nobody cares at that

18:38

point. It doesn't take 15 seconds to see

18:40

the update. So I'm hoping that

18:42

the speed war kind of changes. But then

18:44

again, I don't know what the next thing

18:46

will be that the bundler is kind of,

18:48

you know, vying for. Anyway,

18:51

long winded response. But that's just kind of

18:53

how I see things. I think there's a

18:55

place in the market for two and or more.

18:57

And at the same time, like now it's more

18:59

become like, well, what ecosystem do you want to

19:01

buy into? Like which one

19:03

has the parts you want? Veet

19:05

has a big community and big type

19:07

of ecosystem and lots of people

19:09

like using that. But there's also people

19:12

who, you know, enjoy the Webpack

19:14

type ecosystem. But

19:16

usually because of like, oh, well, they're very familiar

19:18

with loaders or there's certain APIs that let

19:20

them do certain things that are just easier to

19:22

get done in there or, you know, whatever

19:24

other reason, just that's their flavor of the month.

19:27

Then it's kind of nice to say, OK,

19:29

well, this becomes more of a preference choice than

19:31

not like a, oh, Well,

19:33

what's the real big difference here? But I think what

19:35

we'll just see is there's going to be, just like

19:37

you have React and you have Angular and you have

19:39

View, you're probably going to have like,

19:41

cool, they're all going to more or less

19:43

do the same jobs that 80 % of the

19:45

users need. And then it's really

19:47

just what do you like using to do that

19:49

job? Or what does it integrate with that you

19:51

might also want? A lot to

19:53

dig into there. One

19:57

of the original goals of RS

19:59

pack was kind of just to be

20:01

this drop in replacement for web

20:03

pack into like completely support the API.

20:06

Uh, that, that works in the beginning,

20:08

but as you said, new things

20:10

are going to be unlocked. So like

20:12

what, what has RS pack like

20:14

worked towards that's kind of like innovations

20:16

on top of web pack rather

20:18

than just like matching the old API.

20:20

Okay, so I guess to go back a little bit

20:22

as well for some context on why we went

20:24

this route. So we didn't just like

20:27

go let's port webpack and that was the

20:29

plan. That was the last thing that we did.

20:31

So we have like pages and pages of

20:33

documents. I think there

20:35

was something crazy. I think

20:37

like people who, people

20:40

from ByteDance have worked on every

20:42

Rust bundler except TurboPack as far as

20:44

I'm aware. So most of them

20:46

that are on the market, like in

20:48

some way shape or form, some

20:50

origin story can be traced back to

20:52

that person's time working here. So

20:54

there's just a ton of knowledge in

20:56

building these rust bundlers. And like,

20:59

you know, like 60 %

21:01

of them came from people who had

21:03

started working on those here, maybe left

21:05

and took it further, whatever. But like,

21:07

there was a lot of like, catalyzes

21:09

here around bundler research doing this. So.

21:13

The big thing that we have discovered is writing

21:15

a bundler is actually not as hard as it

21:17

sounds. The real problem is the

21:19

API design and how that ends up

21:21

biting you down the road. So

21:24

when we started, we actually were like,

21:26

okay, well, the first version of RSPAC

21:28

actually was ES -filled and we rewrote ES

21:30

-filled. And so at a full time,

21:32

we're thinking of calling it GoPAC and

21:34

it was going to be written in

21:36

Go. the problem with Go that we

21:39

found is it doesn't do well with

21:41

bindings to JS with like very complicated

21:43

bindings. Mostly like you have a garbage

21:45

collected language to a garbage collected language

21:47

and that doesn't play so nicely. So

21:50

then we kind of looked, okay, let's look into

21:52

the Rust side of it, moving ES filled into

21:54

Rust. And let's just fix some of the problems

21:56

ES filled has because it was almost good enough

21:58

for what we needed. At

22:00

the time we were just building our links

22:02

apps with it. So we needed a, it

22:05

was originally called Speedy. So we needed a

22:07

Speedy. solution for length.

22:09

And that was, hey, ES Build can

22:11

almost do the job there, but if we

22:13

could just fix these issues, perfect. What

22:15

we ended up finding though is like

22:18

there were bigger challenges in like ES build

22:20

for example like if trying to fix

22:22

the code splitting so that it chunks the

22:24

code better or HMR There's like architectural

22:26

challenges that make that not just easy to

22:28

add like the dev just doesn't want

22:30

it in there But it seems to be

22:33

like well, you know, there's fundamentally it's

22:35

a little bit trickier to try and do

22:37

that So

22:39

we kind of ran to this wall a couple

22:41

times where it's like, oh, well, let's try

22:43

and create something new. And then it's like, OK,

22:45

well, then there's the explosion of what ifs

22:47

that come in that haven't necessarily been thought through

22:50

in its uncharted territory and so on. So

22:52

we had two main issues. One, we had a

22:54

lot of things using Webpack. We

22:56

were also investigating VIT at the time because

22:58

VIT was getting popular. We were like, hey, maybe

23:00

we could switch over to that. And

23:04

and you know maybe that could

23:06

work and so then one of our

23:08

infer teams ended up building I

23:10

don't know if you guys know farm

23:12

.fe Have you heard of that bundler?

23:15

I think I might have been

23:17

on the page before yeah farm .fe

23:19

so so anyway so farm actually started

23:21

out as ploy so our infer

23:23

team was split into two sections one

23:25

one half of the infer team

23:27

was building rstack the other half the

23:29

infer team was building ploy We

23:31

reorg folded the compiler teams together to

23:33

reduce redundancy. And then

23:35

I think the main guy

23:38

behind Ploy left the company

23:40

and released Farm, which was

23:42

like heavily, which is essentially like from

23:44

all the work that they had done in

23:46

Deploy, packaged it up and put it out

23:48

there. And from what I understand of Ploy

23:50

was the idea was to have like

23:52

almost a V -type compatible API just very quick

23:54

and solve the problems that we were impacted

23:56

by that. There wasn't a world out

23:58

at this point. So this was the way

24:00

that, you know, they were going out to

24:02

solve it. So we wrote, like, you

24:04

know, I think maybe five bundlers in total,

24:06

like, getting through to this point. The reason

24:09

we ended up on Webpack is, again,

24:11

design issues. Oh, we can extend it here

24:13

and there. But then, like, there's all the

24:15

unknowns and race conditions coming in, which

24:17

essentially just makes the risk too high to

24:19

look at. So what we thought is, OK,

24:21

well, probably the easiest solution would actually

24:23

be to take something tried and tested that

24:25

we know is guaranteed to work. for

24:27

all the business cases, and that was

24:29

Webpack, which is a lot more complicated.

24:31

But the nice thing with Webpack is

24:33

it's also got over 10 years of

24:35

testing behind it. And so

24:37

you know it's pretty solid to start

24:40

with that. So if we could port

24:42

Webpack into Rust and say we have

24:44

a foundation that we know has 10

24:46

years of like, here's all the things

24:48

that all works, it's all very well

24:50

tested. then we could start to enhance

24:52

and iterate on it knowing that we

24:55

actually have a stable replica of a

24:57

powerful bundler to begin with, which is

24:59

a lot less complicated than trying to

25:01

design one that could be that or

25:03

more in the future. So

25:05

2024 was largely get parity,

25:08

get stability with the APIs. A

25:10

lot of it was speed

25:12

doesn't matter. It's about artifact quality

25:14

and making sure we have

25:16

a one -to -one or make sure

25:18

it works. safely, like make

25:20

it safe and then make it fast

25:23

essentially. So

25:25

in 2025, now we're looking at speed

25:27

opportunities. So I would say

25:29

like things that we've been, we've been considering

25:31

as like, you know, time is going to

25:33

involve on. So there's,

25:35

there's a bunch of a bunch of

25:37

like various things, but we're quite interested

25:39

in a lot of what the turbo

25:41

pack. team has been cooking up. And

25:43

so we've had a lot of those

25:45

plans in our plans since like mid

25:47

2024. So things like

25:49

remote caching, function level caching,

25:52

cash, you know, cash

25:54

that you can share between different

25:56

developers. That's

25:58

something we're very interested in. I think

26:00

we already have like function level code

26:02

splitting as well so you can move

26:04

single functions out of chunks. which

26:07

these aren't super, like most people don't

26:09

really care about those type of minutia,

26:11

but basically it means you can make

26:13

a lot more fine grained implementation, a

26:16

lot better code splitting, tree shaking, stuff

26:18

like that. Another

26:21

big area, though, that we

26:23

want to look into, that

26:25

I think we've already started

26:27

the work, but is going

26:29

to be into a unified

26:31

build graph. Essentially,

26:33

saying I want to build to an edge

26:35

worker, a native device, a node server, and

26:38

the browser. And I want to do it

26:40

all from a single build. And then I

26:42

want certain imports in that build to remain

26:44

under certain boundaries. So

26:46

building the whole module graphic

26:48

control potentially three to four

26:50

layers of your deploy stack,

26:53

but it's understood as a

26:55

single system to the runtime.

26:57

So this is something TurboPak has also been working

27:00

on. What I would say probably is a

27:02

lot of the future things that we would consider

27:04

is going to be, we started with the

27:06

Lightning to Webpack, we have a stable core, then

27:09

now looking at things like what

27:11

Turbo is doing, how can those

27:13

be incorporated? Because we think a

27:15

lot of those problems again are things that

27:17

kind of align with the problems that we would

27:19

like to see solved. Some

27:21

other areas though, like that, you know,

27:23

it's kind of an interesting one

27:25

is... Like, there's still a lot of

27:27

room and tree shaking and dead

27:29

code elimination. Like, my personal

27:31

opinion has always been whoever builds

27:34

a compiler that produces the smallest

27:36

bundle would most likely win, like,

27:38

the bundler war. Because regardless

27:40

of how developers feel about it, or

27:42

if they say, oh, well, they love this

27:44

ecosystem so much, that doesn't

27:46

matter if you can produce 50

27:48

% less payload. to the

27:50

end user like the user wins and

27:53

if you can serve them twice

27:55

the light of the lighthouse score like

27:57

the business will override any engineering

27:59

just because of like the depending on

28:01

the industry but you know that's

28:03

what I would say if you can

28:05

produce a smaller artifact all the

28:07

other points are moot like everybody's going

28:09

to go for smallest thing to

28:11

ship to user best experience at least

28:14

that's how I kind of think

28:16

about it um But tree shaking in

28:18

dead code elimination is really tricky.

28:20

However, most modern bundlers still leave about

28:22

40 % to 50 % dead code

28:24

even after optimizing. So that's how much

28:26

still could be done. And

28:29

so one thing we've been looking

28:31

at as well, and we've been working,

28:33

I think, with KDY on some

28:35

of this too, but looking at how

28:37

could we use dead code elimination

28:39

and tree shaking by using the typescript

28:41

syntax to help inform the bundler

28:43

of what's going on. So usually when

28:46

you build things, how it works

28:48

is you take your TypeScript code, convert

28:50

it into JavaScript, pass it to

28:52

the parser, the parser reads it and

28:54

does whatever. So you lose

28:56

a whole bunch of things like, oh,

28:58

well, if there were private, you know,

29:00

is this class as private, you could

29:02

check, well, is that method actually used

29:04

in the implementation? If not, we know

29:06

that outside you can't use it because

29:08

it's marked as private. So it's safe

29:10

to tree stake if we don't find

29:12

any inner -brass linkages. So I think there's

29:14

a ton of information like that that

29:16

we can extract, which would really help

29:18

with how a bundler can understand the

29:20

app using a better syntax or a

29:22

more informative syntax. Some

29:25

other things that I know we've

29:27

been playing around with was we had

29:29

the idea of being able to

29:31

use hot reloading to redeploy production. So

29:33

HMR was designed for production use,

29:36

and nobody really did that. So something

29:38

that we've been looking into, well,

29:40

is imagine if you need to perform

29:42

certain hot fixes. Instead of

29:44

having to redeploy the entire code base,

29:46

what if you could just push the hot

29:48

update chunk into an existing app? So

29:50

if you just needed to add the patch,

29:52

and the patch was only one kilobyte,

29:54

you were essentially just pushing an extra KB

29:56

into the existing app, and all your

29:58

users could get it, and

30:01

you could. hot reload them,

30:03

not preserve state in the

30:05

browser, but you could effectively

30:07

do things like that where

30:09

your deployments just become hot

30:11

reloads to the pipeline. So,

30:14

you know, those are probably some

30:16

of the more interesting areas. And I

30:18

know we're also getting into stuff

30:20

with AI and other things like that.

30:22

So what I kind of see

30:24

is potentially somewhere down the line where

30:27

these things kind of like mash

30:29

into something like combined. where you essentially

30:31

have like a environment that's then

30:33

custom built and then potentially we could

30:35

bolt on some kind of like

30:37

aging system to it and we have

30:39

a dock site system that's designed

30:41

to be parsed by like a indexer

30:44

for like you know a question

30:46

and answer bot and you wouldn't be

30:48

able to have a code sandbox

30:50

because we have like a Yeah, like

30:52

essentially, we have enough of the

30:54

loose parts where we could probably do

30:56

some more interesting things like that.

30:58

I'm personally quite interested to see, I

31:01

know we started on it, but

31:03

like MCP, for example, hooking

31:05

up our build doctor, ours doctor to

31:07

MCP servers, and now your AI would

31:09

be able to understand what's going on

31:11

in the build. And what if that

31:13

could go a bit further and you

31:15

had like some knowledge grasp, so like

31:18

the compiler helps serve, here's the application,

31:20

here's how it's working. and

31:22

potentially kind of, you know, starting

31:24

to utilize the bundler almost like

31:26

as a language server of sorts

31:28

to find context and understand relationships

31:30

about like manually splitting chunks and

31:32

doing things like that. I think

31:34

a lot of problems that you

31:36

have in like AI and like

31:38

RAG is very much the same

31:40

thing as bundler. It's just you're

31:42

serving a different type of module

31:44

back, which is like a text

31:46

chunk versus a script chunk. But

31:49

yeah, there's some kind of interesting things that I

31:51

could see floating around here. But I think in

31:53

general, a lot of it's going to be on

31:55

how do we make it faster? I

31:58

think mainly the big things right now are speed,

32:00

improving the unified graph structure,

32:02

because that would open up

32:04

doors like RSD and other

32:06

areas like that. And so

32:09

something we've also been kind

32:11

of considering is, what

32:13

if something like RSD

32:15

wasn't bound to

32:17

react? But what if there

32:19

was like a bundler level protocol

32:21

of some kind that fits within you

32:23

know that kind of paradigm because

32:25

if you have like a unified graph

32:27

and you can build the server

32:29

build the edge build the browser and

32:31

The build is aware of every

32:33

like where every part is going to

32:35

be going but also the runtime

32:38

is aware of it as well So

32:40

the runtime could know that hey,

32:42

this is a server module per se

32:44

But what if you could kind of

32:46

bait that into, well, this is

32:48

just how like importing certain code works,

32:51

rather than like, oh, well, here's

32:53

React server components and you have to

32:55

pass it props. But I

32:57

mean, theoretically, you could do the same

32:59

thing where you say, hey, here's bindings

33:01

to a function that you get on

33:03

your end. And there's bindings that are

33:05

to translate into a network -related call or

33:07

call to a worker and then get

33:09

decoded on the other end. you

33:12

know, kind of using this similar

33:14

kind of principle as, as like

33:16

what RSC would do. So,

33:19

and I think particularly for something like

33:22

links, that would probably be very useful

33:24

because we already have this use main

33:26

thread and like using the background thread,

33:28

you do parallel like multi threaded processing

33:30

on there. And so being able to

33:32

do that more sophisticated without needing to

33:34

kind of glue certain parts together, I

33:36

think, you know, would be quite interesting.

33:38

I think this is where it would

33:40

be nice to say, oh, well, links

33:43

already use this thing where it's kind

33:45

of like RSC, but it's built into

33:47

links itself. Now,

33:49

what if the bundler itself had

33:51

universal way to handle this problem of,

33:53

here, communicate with resources that might

33:55

not be here, but to you, they

33:57

feel like they are? This

34:00

episode is sponsored by Meltrap, an

34:02

email platform that developers love. Go

34:04

for high -deliverability, industry -best analytics, and

34:06

live 24 -7 support. You can

34:08

get 20 % off for all plans

34:11

with the ProDemo code DevTools. Check

34:13

out the details in the

34:15

description below. Yeah,

34:20

Lynx is such an interesting project,

34:23

and I think the thinking about the

34:25

bundling... there is like really interesting.

34:27

This is something that we want to

34:29

talk more about in a second,

34:31

but before we move on to that,

34:33

I would like to ask you

34:35

a little bit about like, you know,

34:37

just recently announced a next RSpec

34:39

module and like kind of moving into

34:41

the next JS ecosystem, starting to

34:44

support that. And this seems

34:46

like sort of like an alternative. So

34:48

if like your team's not using

34:50

TurboPak or not ready for TurboPak, like

34:52

you have this alternative, can you

34:54

talk a little bit about like, to

34:56

work behind that, like how that

34:58

came about. And the introduction

35:00

post mentions like some collaboration with

35:02

Verso and at least like fundamentals

35:04

is like, what does that look

35:06

like for y 'all? Yeah.

35:08

So, so yeah, I think it

35:10

kind of, I think, well, I think

35:12

it kind of all jumped started a little

35:14

bit when, when about, I don't know,

35:16

like seven or eight months ago, when, whenever

35:18

I was in China, I, uh,

35:21

we were kind of looking for, hey, what should

35:23

our plan be for like the next year? Kind

35:25

of doing like mid -year planning, trying to think

35:27

about like a bit, you know, midterm, what our

35:29

roadmap's going to be. And

35:32

so we're all sitting around the table, like

35:34

putting out ideas. We had things like RS

35:36

tests, which is now kicked off to like,

35:38

you know, RV tests, but like integrated within

35:40

like all of our other tools. And so

35:42

we're going through a list of like things

35:44

we want to add the ecosystem or change

35:46

and then, you know, wanna, and then sarcastically,

35:49

I just threw out RS next. And

35:52

I don't think sarcasm translates

35:54

super well. So everybody was

35:56

like, oh, OK, that would

35:58

be interesting. And essentially, what it

36:00

ended up being was like,

36:02

oh, we've tested a

36:04

web RS pack on virtually everything we can

36:07

find. We just cloned down repos, see

36:09

if RS pack can build them. And that's

36:11

kind of how we've tested a lot.

36:13

But the one we couldn't test was next,

36:15

because you couldn't just clone it down

36:17

and replace web pack with RS pack and

36:19

you're good to go. So

36:22

then we decided to try it. And so

36:24

we forked next and yeah, I think it was

36:26

like we went out like over dinner somewhere.

36:28

We like went out for an evening and we're

36:30

like, okay, let's just mess around a little

36:32

bit like over a steak and just see, you

36:34

know, what we can get it to do.

36:36

And so, you know, within a couple hours, we

36:38

got, you know, pages root are working. And

36:40

of course, not all the tests were passing,

36:42

but it was like, okay, I could take,

36:45

you know, a series of random tests and

36:47

like, you know, a basic page of router

36:49

with some CSS and a couple of the

36:51

various things would work. That

36:53

was quite impressive to just

36:55

see, oh, wow, okay. It wasn't

36:57

that difficult and a lot

36:59

still doesn't work. But the fact

37:01

that you could get maybe

37:03

40 percent of test passing or

37:05

something like that from just

37:07

quickly trying it out to say,

37:10

hey, could it actually build

37:12

this? So ultimately, I think like

37:14

the challenges that we had with that is, hey, this

37:16

is really cool. And I hyped it up far more

37:18

than I should have just because I was so excited

37:20

to see it. But

37:22

the thing is we didn't have a use case for

37:24

it. So maintaining a fork of next is like

37:26

a tall order. But

37:28

it was really cool to prove that,

37:30

hey, for us, it was can the bundler

37:33

do the job? If it can, then

37:35

cool. I think we're hitting the right track

37:37

when we can build what Because next

37:39

is, I mean, really, next is just the

37:41

most complex webpack plugin ever created. And

37:43

that's Next .js, with some server

37:45

thrown in there. But it's eventually like,

37:47

you know, the goat of build

37:49

plugin out there. So it was the

37:52

perfect test case. So

37:54

yeah, so anyway, we kind of built that and

37:56

shelved it for a little while. A few people after

37:59

the RS Next thing went out, think a couple

38:01

of people from Versailles kind of reached out, like, hey,

38:03

what's your plans with this thing? And we're like,

38:05

it was just kind of like mostly for testing. We

38:08

wanted to see if it would work, and it

38:10

did work, so that was the end of it. And

38:13

they would ask, would you

38:15

consider upstreaming this? Because it'd be

38:18

great to have another option.

38:20

And hey, I think a big

38:22

challenge next has is they're

38:24

not necessarily closed off to other

38:26

options being presented. The

38:28

problem is people aren't just on tap

38:30

who can just quickly drop out a

38:32

new, just, you know. a brisk replacement

38:35

of Next .js as whole build infrastructure with

38:37

something else. So I don't really think

38:39

it's been a case of like, oh,

38:41

well, Next is really closed off. It's just,

38:43

well, how many groups are out there who are

38:46

just going to like, well, one, know how

38:48

to do it or what to do. And

38:50

like, two, like, you know, just, it's

38:53

complicated to do. So

38:56

yeah, when we had something that was

38:58

partially working, we started the conversations with them

39:00

and, you know, it kind of like.

39:02

died out and came back and died out

39:04

and came back a little bit over

39:06

time. And I

39:09

think ultimately like what we had

39:11

found is there'd be really nice

39:13

symbiosis here because regardless of if

39:15

like there's, if Turbo competes with

39:17

RS Pack or you know, whatever,

39:20

like the problems that RS Pack faces, so

39:22

like a lot of stuff at Bite Dance

39:24

is built in -house. And the main reason is

39:26

because when we run into a problem, there's

39:28

nobody we need to ask from the outside.

39:31

So, oh, you know, and that

39:33

can get a little crazy. Like,

39:36

you know, let's build our own

39:38

JavaScript runtime. But ultimately, if the

39:40

business needs a problem solved, you

39:42

don't have like, there's no no,

39:44

it's yes, we have everything we need.

39:48

So that said, there's still open source

39:50

stuff we depend on. And so

39:52

like a really big one for us

39:54

is SWC. So if,

39:56

and that's one that is

39:58

hard to get. access

40:00

to because it's largely like time,

40:02

like Katie wise, like the main guy

40:04

behind it. And if Katie why

40:06

doesn't have the capacity to do it,

40:08

we can't like then it doesn't

40:10

matter how many PRs you send in,

40:13

like you can't like help coordinate

40:15

with the author and cool. How can

40:17

we like. utilize a

40:19

mix of manpower and what did you

40:21

want to do here and then like

40:23

combine to try and like solve some

40:25

of these issues. So we identified there's

40:27

lots of like common shared foundations in

40:29

general that even if there is a

40:31

turbo pack here like if ours pack

40:33

is currently impacted by an issue in

40:35

SWC we know turbo pack will be

40:38

as well and beyond like competing in

40:40

the open source because again like we

40:42

don't have too much skin in the

40:44

game in terms of like Like, you

40:46

know, we don't need anything from these

40:48

tools. They're side effects of we have

40:50

our own problems to solve. And

40:52

by solving ours, they mostly work for everybody else.

40:54

So here's a copy of it. But

40:57

so I think what was interesting is

40:59

like, OK, well, we want really admire

41:01

TurboPak's work. Like, I still am a

41:04

big fan of Tobias and think the

41:06

guys, you know, like really next level

41:08

on bundler design. And I think a

41:10

lot of my teammates would agree that,

41:12

yeah, he's, you know, like. the epitome

41:14

of building bundle burst. So

41:16

I think it was just

41:18

like a really good opportunity. One,

41:20

we do admire the work that

41:22

they're doing over there. The

41:25

guy behind it, obviously, we're very

41:27

happy with his prior art since

41:29

we built our version of his

41:31

design. So essentially,

41:35

how does this become like a rising tide to

41:37

lift all boats? We're happy to pass more

41:39

of next tests and try to get this thing

41:41

into an upstreamable position. if

41:45

we can also have a greater impact that

41:47

solves some common problems we're having. So

41:50

it's kind of like, okay, well, we don't really use the

41:52

next plugin, but it would be really great for RSPAC

41:54

to be able to prove that it can build that. Obviously, that's

41:57

a getting kind of like a

41:59

informal bluffing on, hey, RSPAC is

42:01

good enough to we'll let it

42:03

run on here. I think it

42:05

was a big milestone for the

42:07

project just to hit. But

42:10

I think as well, one of

42:12

my colleagues had said that regardless

42:14

of any competition that might be

42:16

between the two build tools, the

42:18

fundamental layers are there's so much

42:20

more value to drive out of

42:22

working together to fix those, even

42:24

if we're at odds with the

42:26

top end build tool. An

42:29

example was FWC used to have

42:31

a kernel panic when you would

42:33

have a chunk over 100 megs.

42:35

Now, that's probably not a case

42:37

a lot of people run into,

42:39

but when you run into it,

42:42

you know, you're kind of dead in the water. And

42:44

so these are kind of things where we're like,

42:46

okay, well, we'd love to be able to fix

42:48

this, but we need to kind of be able

42:50

to collaborate a bit more. And so I think

42:52

this just created a really good atmosphere where, yeah,

42:55

we don't, you know, we're happy to kind

42:57

of help upstream, upstream this back end, think it'd

42:59

be great for the project, but we'd also

43:01

love to like not just, you know, Take

43:03

the RS next stuff kind of sink

43:05

a bunch of manpower into it just to

43:08

get it on the next JS Like

43:10

you know again, we don't use it so

43:12

there's really not much use for us

43:14

But we doesn't mean we wouldn't have loved

43:16

to see it get in there and

43:18

also the way that it's done is really

43:20

great But I think I think the

43:22

the next RS pack is really just kind

43:24

of like a nice gateway piece of

43:26

like cool Drew this we can now but

43:28

like you know It's we

43:30

now are supported next 15 .3. And

43:32

I think like the main thing is,

43:34

but we are going to be working

43:36

on shared problems that impact us both.

43:38

So like some big ones already, I

43:40

would say largely around SWC again. I

43:42

think since the past

43:45

few months that we've been

43:47

like collaborating, we've seen

43:49

the like performance improve like

43:51

just various like reliability

43:53

and performance improvements of SWC

43:55

like significantly. like

43:57

improve essentially and that's exactly what we

43:59

want is uh you know if we know

44:01

how to write the Rust code and

44:03

you know what you want it done then

44:06

perfect is there a way that we

44:08

can kind of work together on some of

44:10

these things so really you know I

44:12

think that that's that's primarily how it came

44:14

around is like hey would you be

44:16

you could we upstream this think it'd be

44:18

a great like community option I think

44:20

like the motivation behind it as well is

44:22

just you you have a situation where

44:24

There's everybody who wants to go and use

44:26

Starbopack, but a lot of the people

44:28

who are on Webpack are usually the big

44:31

like, you know, whoever stuff on a

44:33

Webpack build is going to be somebody who's

44:35

worth like a lot of money, like

44:37

company wise, because that means that they've created

44:39

this massive monster and it's not something

44:41

that you can just rip out in a

44:43

couple of days and pop something new

44:45

in. So if you're really coupled to these

44:47

build solutions. I feel like in

44:49

Next, it was also challenging because you

44:51

don't have an option. TurboPak with all the

44:53

love, it's getting all the speed and

44:55

WebPak can't get any quicker. And

44:58

so those users just don't get brought along.

45:00

So it kind of is counterintuitive

45:02

to like connect good DX thing

45:04

that it tries to promote is

45:06

like, hey, it's nice to work

45:08

with. But then it's like, oh, well, it's

45:10

nice to work with only if you're in the club. But

45:13

the web pack can't be fixed. So

45:15

your best move is to move the web

45:17

pack. And that's not a very nice

45:19

thing to hear from like someone who relies

45:21

on it. So I think this was

45:23

a really good way where it's like, cool,

45:26

people who can't migrate yet, perfect. Hey,

45:28

and if you prefer the web pack style

45:30

convention, like maybe you want Federation or

45:32

things like that, here's this solution that at

45:34

least now is going to be like

45:36

fast or comparably fast to what you could

45:38

you could get. So

45:40

yeah, you know, I think it really throws

45:42

the lifeline to anybody who can't move. They

45:44

can now get a nice DX improvement. We

45:47

get a lot more, you know, eyeballs looking

45:49

at it. And obviously we get like the

45:51

best battle test that we could want, which

45:53

is against that. Yeah, it's

45:55

cool to see more and more like

45:57

shared foundations popping up between these projects.

45:59

And it just lifts all the projects

46:01

up. I think I think the big

46:03

the big thing there is like there's

46:06

a surprisingly few people who. actually

46:08

like, you know, that own

46:10

a lot of these libraries or

46:13

something, like the clusters of

46:15

devs are really small. So it's

46:17

really, really helpful when there's

46:19

an opportunity to like work together

46:21

because, you know, especially

46:23

in Rust compared to

46:25

JavaScript, it doesn't feel like

46:27

you have the same like vast JS

46:29

devs everywhere. Like when you go to

46:32

conferences and stuff like that, like Rust

46:34

isn't quite there yet. So I do

46:36

think it's probably best for those

46:38

working in the language to try and

46:40

Work together if you're solving a shared issue

46:42

because really there's not as much manpower

46:44

to stretch like you would have on npm.

46:47

So Before we wrap up, I think

46:49

we should touch on a new

46:51

project from bite dance links It looks

46:53

like it's a react native Competitor.

46:55

I think I saw some CSS in

46:57

the docs So could you explain

46:59

to us what it is and like

47:01

is it like a native renderer?

47:04

Is it like a web -based thing?

47:06

What's going on there? Yeah,

47:08

so links is quite quite

47:10

interesting so so it

47:12

was so originally it was

47:14

built at bite dance

47:16

and then tiktok is the

47:18

one who's essentially the

47:20

funder and the like main

47:22

open sorcerer of it

47:24

currently and I think the

47:26

reason that we have

47:28

links is So so I

47:30

guess a one scenario

47:33

is like remember when Facebook

47:35

wrote react And what

47:37

was their first use case? It

47:39

was the like button. They

47:42

wanted to swap out a like button

47:44

in PHP somewhere. Now, I

47:47

believe that that is

47:49

essentially kind of like the

47:51

reason that we use

47:53

something like links was, okay,

47:56

well, we have a component that's maybe

47:58

not worth writing in Swift or C.

48:01

And bringing in React

48:03

Native is potentially like

48:05

too much overkill for

48:07

this thing. So we

48:09

need a lightweight solution that's

48:11

relatively low friction. And then

48:13

a big thing here is

48:15

like everything here is web.

48:17

Like it all is looks

48:19

web or is kind of, you

48:22

know, how do you make the web

48:24

type experience show up in things that

48:26

aren't necessarily normal web? because

48:29

I think just in China, everything's a lot

48:31

more client -side rendered. So there's a lot more

48:33

mentality around, okay, this is like how we kind

48:36

of work. But

48:38

it also just makes it familiar. So, yeah,

48:41

so links, some things that

48:43

were, okay, so the first thing

48:45

is, so links is actually

48:47

agnostic. So it's not like React

48:49

Native, but it has

48:51

React links, which is essentially bindings

48:53

to links that give you

48:55

JSX. And so I think under

48:57

the hood, it's technically using

48:59

pre -act. But essentially, here's the

49:01

lightweight react bindings to this. But you

49:03

can also do it with spelled. I

49:05

think you could do it to view

49:07

as well. And then I know I

49:09

just saw they announced they're working on

49:11

a vanilla one, where, hey, you don't

49:13

need any kind of UI framework, and

49:15

you could just use vanilla .js. So

49:18

is it web? Kind

49:21

of. But there's a custom renderer built

49:23

into it. So a similar kind of thing

49:25

where we actually render it down. So

49:28

things like, you know, I think you've seen,

49:30

we have like really good performance on

49:32

the virtual lists scrolling, or like doing all

49:34

the weird, you know, carousel things that

49:36

are easy to do on a web, but

49:38

really hard to do in native. Like

49:41

a lot of that stuff is also kind of

49:43

baked into it. But

49:45

yeah, like even when you, so

49:47

when you style CSS, I believe

49:49

that is converted. Yeah, that gets

49:51

converted into like the native equivalent.

49:54

So it would be the same

49:56

as like, you know, I've never

49:58

used much of React Native, so

50:00

I don't know much of the

50:02

styling semantics of it, but essentially

50:04

it's saying, okay, read this from

50:06

your CSS and make that happen

50:08

and create the final like rendered

50:11

element style correctly. We don't support

50:13

all CSS selectors, obviously, but we

50:15

support like a wide range of

50:17

them. But I think ultimately the...

50:19

that we were after was we

50:21

need a, you know, a native

50:23

solution that's fast, that's lightweight, that

50:25

we can sprinkle into views that

50:28

don't need all the effort or

50:30

all like the hard work that

50:32

goes into like making say the

50:34

mainline experience. So, you

50:36

know, I think like on TikTok, they

50:38

were saying like the TikTok app is

50:40

native, but the TikTok shop is links

50:42

or something like that. I'm not sure

50:44

if it was the shop, maybe it's

50:47

the studio. I have to go back

50:49

and read the blog post. I don't

50:51

work for TikToks. I don't actually know.

50:53

But essentially, it's this idea of you

50:55

have things that need to run super,

50:57

super well, and you'll write those in

50:59

native code. And then you have other

51:01

things that are like, it's not, you

51:03

don't need that much out of them

51:06

where a good kind of native web

51:08

feeling solution would be perfect to inject

51:10

these things, like banners or certain pages

51:12

that are, you know, out in the

51:14

flow, but maybe your main video scroller,

51:16

keep that in C. So

51:19

I think that was a lot of

51:21

what it was used for, like surgical

51:23

ways to make a app, have

51:25

more features in app

51:28

without necessarily having to

51:30

commit to all or

51:32

none type of scenario.

51:36

So yeah, so I think that was

51:38

kind of some of the main reasons

51:40

that we had done it. It was

51:42

very like... like you know surgically in

51:44

fact of existing apps we needed something

51:47

that worked cross platform because we have

51:49

to deal with like a lot more

51:51

devices as well so um so we

51:53

wanted you know something that truly works

51:55

on everything because we have so many

51:57

like hard i think you know we

51:59

even have like pico which is like

52:01

uh vr headsets and stuff like that

52:03

so you're thinking about i need a

52:05

cross platform solution the potential of

52:07

the platforms you're up for consideration are

52:09

beyond just like oh well it needs

52:12

to work on like a phone and

52:14

a desktop or something. So

52:17

I think that's where a lot of it

52:19

came in. Now it is still like in

52:21

its early days and all of that but

52:23

it has been really exciting to see like

52:25

what they're doing and I'm you know I

52:27

think they would love to collaborate with like

52:29

existing community I'm sure they

52:31

would love to collaborate with

52:33

React Native Group and stuff like

52:35

that on similar kind of

52:37

thing. Hey, is there any kind

52:39

of shared foundations that could

52:41

be helpful to lift native app

52:43

dev in general? But

52:45

if you have any other

52:48

specific questions in there, I kind

52:50

of got off on a

52:52

tangent. But that was generally what

52:54

Lynx was brought to do

52:56

in its current form is... Drop

52:58

in there. What I would love to

53:00

see is something like a router. I

53:02

think that's like a missing part But

53:04

I also understand like why it's a

53:06

missing part because we're not like making

53:08

your your normal like router app where

53:10

hey, everything is react native and it's

53:12

all expo or whatever it's more Like,

53:14

we have a app that's built for

53:16

this purpose, but this thing doesn't need

53:18

to be in the same language, because

53:20

it's not as mission -critical. Like, the

53:22

manpower to write it and see isn't

53:24

necessary. We could do it better if

53:26

we wrote it in a more web -friendly

53:28

language. And then that's also a lot

53:30

more portable across a variety of platforms.

53:33

Cool. Well, it sounds like you guys are

53:35

working on just so many different cool

53:37

things like Eat. We're out of time now,

53:39

but we didn't even talk about all

53:41

the different RS family members and all the

53:43

different permutations that you guys have come

53:45

out with. So it's exciting to watch

53:47

from the outside looking in. And thank you

53:49

for building all these tools and for coming on.

53:52

Yeah, yeah, it was great. It was great. Come on and

53:54

chat. Yeah. Thanks again, Zach,

53:57

for coming on. It was

53:59

awesome. Last time we talked you. to

54:01

you about all the module federation work

54:03

you've been doing, and great this time

54:05

to catch up on what the current

54:07

state of our spec is. It's

54:09

cool that you're breathing new life into

54:11

the Webpack ecosystem. It's such an important

54:13

ecosystem, and it's such a

54:15

broad ecosystem. So it's great

54:17

to see. It's something that you don't want

54:20

to see die just because times have changed.

54:22

And that was a big thing. It would

54:24

be really nice to just keep it alive

54:26

because there's so many good things on there.

54:28

it just needs to run quicker. I

54:31

would say like, I know we didn't get to

54:33

the R stack stuff, but I think like in

54:35

general, what we're just planning to do with our

54:37

thing, with what we've got is like, okay, as

54:40

you can see, we're bringing out a

54:42

lot of pillars of the infrastructure that we

54:44

would need. You know, that we're going

54:46

to be bringing out tests. We already brought

54:48

out library builds, like, you know, unbundled,

54:50

tree -shakeable NPM package builds. We have RS

54:53

build, which is the recommended way to use

54:55

it, which is essentially RVT, if you

54:57

were to say, our stacks build engine and

54:59

ours builds the V of the world. But

55:03

I think probably a lot of

55:05

this is going to be how do

55:07

we fill out that ecosystem to

55:09

provide kind of because this is from

55:11

our own internal unified infrastructure kind

55:13

of approach for everything. It just makes

55:15

sense to build like this. But

55:17

I think also it's something I would

55:19

greatly appreciate in the open source space

55:21

to say, hey, here's like a full

55:23

suite of tools. that I don't

55:25

have to buy into all or none,

55:28

but if I do want more, they're happy.

55:30

Like, you know that it's designed to

55:32

work together. And I think that's something we

55:34

still struggle with in, like, ecosystem

55:36

is. The pieces can

55:38

be glued together, but it's not necessarily,

55:40

like, one -shop thing. Here's testing. Here's

55:42

documentation. Here's

55:44

bundlers. Here's, you know, frameworks.

55:47

You know, all the other bits and

55:50

pieces. Library authoring. So it'd be

55:52

really nice to have a single pipeline

55:54

for building your packages, your apps,

55:56

and everything else. So again,

55:58

I think ecosystem as well. users who want

56:00

to use this, we want to make the ecosystem

56:02

a bit more welcoming and bigger. And

56:04

And I think that's also another key

56:06

factor in the future bundler wars is going to

56:08

be, well, well, what kit does it

56:11

come with? It really matter if the tool

56:13

is good, the whole bot needs to kind of

56:15

be there as well. Yeah, there seems like

56:17

there's a few different groups trying to hash out

56:19

that battle, so I wish you guys luck. Oh

56:22

oh yeah. Anyway, yeah, so

56:24

thank you for having me on. It was

56:26

good to catch up after such a long

56:28

time.

Unlock more with Podchaser Pro

  • Audience Insights
  • Contact Information
  • Demographics
  • Charts
  • Sponsor History
  • and More!
Pro Features