TRANSCRIPTEnglish

I don’t really use libraries anymore

32m 6s6,968 words987 segmentsEnglish

FULL TRANSCRIPT

0:00

AI is changing software development fast

0:01

and as good as some of those changes

0:03

are, there are some that are bad and

0:04

interesting and worth talking about. One

0:06

of those changes is the role of the

0:08

library. I've been thinking about this a

0:10

lot because I build a lot of things and

0:12

I build them using a lot of different

0:13

libraries. I've even been meme'd on it

0:15

consistently for just npm installing

0:17

away my problems. And to be fair, that

0:19

is a real thing that we've seen in

0:20

ecosystems like npm. The fact that you

0:22

can just npm install something as simple

0:24

as a way to pad text on the left is a

0:27

bit weird. On one hand, it's cool that

0:29

these things that are reusable and

0:31

common can be shared in such a

0:32

convenient way. But on the other, it

0:34

definitely made us a bit lazier because

0:36

we could just grab a solution that we

0:38

barely understand and plug it into our

0:39

code. Kind of like we're doing with AI.

0:42

Weird, huh? I wonder how these things

0:45

will go together. Well, I'm not just

0:47

wondering. I'm living it myself. I've

0:49

been changing a lot of things in the

0:51

projects that I work in, including

0:52

things like removing libraries that no

0:54

longer really make sense or cause us

0:56

problems. And I'm finding that more

0:58

often than not, depending on the size of

1:00

the library, it's actually more

1:01

convenient to just rip it out and

1:03

rewrite it using prompts than it is to

1:05

try and massage around the library to

1:07

try and patch it or work around its

1:09

weird traits. In this case, there was a

1:12

library called Tkumi that we used for

1:14

rendering React components on the server

1:15

to generate PGs for the T3 chat wrapped

1:18

feature. And for some reason, we could

1:20

not get it to bundle in production at

1:22

all. And I kept fighting it for like 15

1:24

minutes, got annoyed, and just Vibe Code

1:27

rewrote the whole thing to be clientside

1:29

JavaScript instead. And I'm far from the

1:31

only person doing this. Anti-res, the

1:33

creator of Reddus, yes, that Reddus, is

1:36

starting to gut C++ libraries in favor

1:39

of rewritten vibecoded pure C

1:41

implementations. This PR removes 4,000

1:44

lines of code and only adds 400. And as

1:46

he says in the description, this code

1:47

was written by cloud code using opus 4.5

1:50

and tested carefully, both handested and

1:52

tested against the original

1:53

implementation in a synthetic way. Code

1:55

review was performed independently by

1:57

codeex gi 5.2. Very interesting to see.

2:01

And I have a feeling this trend is not

2:03

just going to continue, but it's going

2:05

to fundamentally change the way that our

2:07

projects look and most importantly the

2:09

way that our package JSONs look. It

2:10

seems like we're quickly entering a

2:12

world where these libraries are no

2:13

longer anywhere near as useful. But you

2:15

know what is useful? Today's sponsor.

2:17

I'm a big advocate for not wasting my

2:19

teammates's time. Which is why I think

2:20

it's really important to use a good AI

2:22

tool to help you with code review. Even

2:24

if you're not using AI to code, it is a

2:26

really helpful thing to have an AI check

2:28

your work. Which is why Code Rabbit has

2:30

been making my team move so much faster.

2:32

We've had it on for about a year now,

2:34

and my team won't let me turn it off or

2:36

move to anything else. They just really,

2:38

really like it. for the quality of the

2:40

reviews, for the types of things that it

2:41

catches, for how tunable it is just by

2:43

telling it, "Hey, I don't like that

2:45

thing." But honestly, I'm getting more

2:47

hyped about Code Rabbit because of all

2:48

the other cool stuff you can do with it.

2:50

Recently, I've been loving their CLI.

2:52

Yes, a vibe coding reviewing CLI. Think

2:55

Claude Code, but for telling you what

2:57

you did wrong. Sounds crazy until you

2:59

combine it with Claude Code. Yes,

3:02

really. All these agentic coding tools

3:04

can use Bash. So if you give them a tool

3:06

to review their code and tell it to use

3:08

that, it can output plain text that the

3:10

CLI can then use to fix things. And this

3:13

does actually increase the quality of

3:15

the output. I can't tell you how many

3:16

times I was running into the same loop

3:18

before where I would make an agent, make

3:20

changes, put up the pull request, wait

3:22

for a review from an AI code reviewer,

3:24

and then have to copy paste the feedback

3:26

back into my agent. This lets you trim

3:28

that out entirely and just get better

3:30

code out as soon as you ship. It also

3:33

integrates in your IDE, VS Code,

3:35

Windsurf, Cursor, and more. It's kind of

3:37

crazy to make changes on your computer

3:39

and just have a little thing pop up

3:41

saying, "Hey, are you sure about that?

3:42

That doesn't seem safe." It saves me so

3:45

much time and it's prevented many actual

3:47

bugs and outages from shipping on T3

3:49

chat. Try it free today at

3:50

soy.link/codrabbit.

3:52

This is going to be an interesting one

3:54

because I found that there are a couple

3:55

different archetypes of people that have

3:58

opinions on this. Like think of the type

4:00

of person that makes fun of JavaScript

4:03

developers all of the time for

4:04

installing things like is odd or

4:07

leftpad. The people who are against

4:09

these packages have a real point. It's

4:12

outsourcing some level of competency.

4:14

Anyone should be able to write the

4:15

threeline of code function to pad things

4:17

on a string on the left of it. And is

4:19

odd is literally one line of code. Like

4:22

we're better than this. That said, there

4:25

is value in libraries, at least at a

4:28

slightly bigger size than these ones.

4:29

I'm tired of the meme here. And the

4:32

arguments against libraries like this

4:34

all make sense. Like outsourcing your

4:36

dependencies this way, is a risk because

4:38

now you have to worry about if the

4:39

dependency changes. Maybe somebody takes

4:41

over the package and is malicious and

4:42

publishes a bad change. Maybe there's a

4:44

major version that breaks the way you're

4:46

using it. Maybe you have all of these

4:48

things installed and now this huge

4:49

dependency chain is making it way harder

4:51

to know what is or isn't safe in your

4:52

app. There's a lot of things like this.

4:55

For the most part, the argument against

4:56

these libraries is that people who don't

4:58

really know what they're doing are the

5:00

users. And they also don't understand

5:01

the risk they're taking on when supply

5:03

chain attacks can happen, when

5:05

dependencies can change, just all the

5:07

things that could go wrong when your

5:08

package JSON looks like a glossery of

5:10

npm. And I've seen projects like this.

5:12

I've seen plenty of projects that look

5:13

like they just npm install whatever the

5:16

hell is in front of them rather than

5:18

actually trying to solve problems

5:20

themselves. What's always been

5:21

interesting to me is the people who

5:23

complain about these things tend to also

5:25

complain about AI code, which is weird

5:28

because in many ways AI code is kind of

5:30

the solution to this problem. The reason

5:32

people reach for libraries as to be

5:35

frank pathetic as is odd or leftpad is

5:38

because they don't know what they're

5:39

doing. Thereby they are increasing risk

5:41

in their codebase to get over the fact

5:43

that they don't know what they're doing.

5:44

and things like generating AI code

5:46

instead or tab completing the function

5:48

or just asking the chat next to your

5:50

code in the interface for help doing

5:52

this thing. Those are much less likely

5:54

to have those same problems. Would it be

5:56

better to just write the code yourself?

5:58

Maybe probably at the very least

6:00

understanding the code is important. But

6:02

if you look at the things that are wrong

6:04

with stuff like these packages, the

6:06

classic supply chain attack stuff, the

6:08

fact that it's not in your codebase, so

6:11

anything that goes wrong with it or

6:12

doesn't perform exactly as you expect it

6:14

to is now a problem that you have to

6:15

deal with. And of course, you don't

6:18

actually understand it. These are all

6:20

real problems and we are able to

6:22

eliminate multiple of these simply by

6:25

generating the code ourselves instead.

6:26

So for these smaller scale libraries,

6:29

yes, people probably shouldn't have been

6:30

using them in the first place, but AI as

6:33

a way to eliminate them from the lives

6:35

of less capable devs that don't actually

6:36

know what they're doing. The

6:37

stereotypical person who would install

6:39

is odd. AI code is a net win for them.

6:41

It will also make it harder to tell that

6:43

they are as bad as they are, which has

6:44

its own benefits and negatives, but at

6:46

the very least, AI replacing these types

6:49

of things is a good thing. And people

6:51

relying on packages instead of the two

6:53

lines of code they should write

6:54

themselves is not great. Moving this off

6:56

is cool. But then there are lots of

6:59

other libraries that are quite a bit

7:01

more annoying to deal with doing things

7:03

that are tough. Things like tkumi for

7:05

example or fast float in C++. These

7:09

libraries are in Rust and C++

7:10

respectively. Tkumi is actually a really

7:12

cool project. It makes a ton of sense

7:13

for a lot of things. Tacumi is as they

7:15

say here, it's a JSX to image. It's a

7:18

fast way to do rendering of React

7:20

components so that you get an image out.

7:22

really cool if you want to

7:24

programmatically generate images like

7:26

this or like this. It's very cool.

7:29

Problem is the bindings just were not

7:31

playing nice with our deployments on any

7:34

platform, especially on Verscell. I

7:36

spent a lot of time trying to fix it,

7:37

but whenever we shipped, it would build

7:39

fine, but it would error out all of our

7:42

instances and our production instance

7:43

for T3 chat went down for about 25

7:46

seconds when this officially shipped for

7:48

us. So, I immediately reverted the ship

7:50

and went and fought it a whole bunch

7:52

privately and concluded that I didn't

7:54

feel like it and it was easier for me to

7:56

work around the problem by vibe coding

7:58

my own solution. To be fair here, I also

8:00

have built things like this before that

8:02

render React in the browser, snapshot it

8:04

to a canvas, and then let you download

8:06

the image. It's not something I'm

8:07

unfamiliar with, but this library was

8:10

the better solution. Moving off of this

8:12

was a downgrade in terms of the

8:15

capabilities of the system, the

8:16

performance and the fact that we moved

8:18

this to the client instead of doing it

8:20

on the server like we had previously

8:22

wanted to. It also meant that if you

8:24

share a link to your wrapped that we

8:26

wouldn't have the image there. The image

8:27

had to be generated on client. So it had

8:29

its compromises. But as a developer that

8:31

understood these things, I could make

8:33

that decision up myself. I thought about

8:35

it thoroughly. I looked at the problems

8:37

we were having. I looked at the things

8:38

that were going wrong and I concluded

8:39

that it wasn't worth it for the benefits

8:41

we got when I could instead build my own

8:43

solution. I ended up having to spend a

8:45

lot of time going back and forth and

8:47

editing a lot of the code myself because

8:48

once you get into weird canvas

8:49

rasterization stuff, the usefulness of

8:52

AI agents can go down quite a bit. I

8:54

tried everything with this and they

8:55

could all get a vague React rendering in

8:58

a box that could be turned into a

9:00

picture mostly right. But once it came

9:02

to things like spacing, word wpping,

9:04

general layout stuff, and especially

9:06

like the aesthetics we wanted to add

9:07

behind the cards, it failed super hard

9:10

for all of that. And it is my

9:11

understanding that fast float came from

9:13

a similar place from our friend

9:14

Anti-Res. His goal here was to remove

9:17

one of the few C++ dependencies that is

9:19

required for building Reddus. This is in

9:21

order to simplify the build process.

9:23

Funny, not far from what I'm dealing

9:25

with. It turns out that bringing in

9:27

other people's code and expecting it to

9:29

operate in your codebase the same way

9:31

your code does is not realistic. And

9:34

it's one of the problems that we often

9:35

deal with with our environments. This is

9:37

why tools like Webpack are still around

9:39

in 2026. Because as frustrating and

9:42

annoying as they are to work with, there

9:44

are often dependencies that companies

9:45

are building on and around that expect

9:47

tools like Webpack to work a certain way

9:49

so that you could integrate them into

9:50

your codebase a certain way. A tool like

9:52

this fast float dep is expecting g++ to

9:55

be installed. Sadly, a lot of Linux

9:57

distributions don't have that installed

9:58

even when you set up basic build tools,

10:00

which means that Reddus can't be built

10:02

on those machines until you manually set

10:04

up G++. Previously, that made sense

10:06

because writing a float library was

10:08

annoying and difficult and rewriting it

10:10

in C was even more annoying and more

10:12

difficult. It's just this type of

10:13

tedious thing that is what we reached to

10:16

libraries for. And I want to put these

10:18

libraries in different categories.

10:20

There's libraries that go beyond your

10:22

knowledge. This is for people who don't

10:24

know what they're doing. This is stuff

10:25

like is odd or leftpad for people who do

10:28

know what they're doing but maybe just

10:30

don't want to fight it. For me, that's

10:31

something like Tkumi. I didn't want to

10:33

write Rust code to render things on the

10:35

back end. Not interesting to me. But

10:38

what it does was within my knowledge. So

10:40

there's certain libraries you're using

10:41

because what they're building is beyond

10:43

your knowledge. And to be clear, I want

10:45

to categorize this primarily as a thing

10:47

that happens to more beginner devs. But

10:49

then there is libraries you use because

10:51

re-implementing it your way would be

10:53

tedious. There are a lot of things that

10:55

fall into this. For me, I still don't

10:57

like writing my own state management

10:59

libraries in my React projects because

11:01

as much as I have opinions about state,

11:04

all of the little things you have to get

11:05

right are frustrating and I will always

11:07

prefer to work with an existing

11:08

solution, especially since so many of

11:10

them are so extensible, so rock solid,

11:12

and so performant. There's another piece

11:14

to consider here. Maintenance and

11:16

extensibility. You can build things in a

11:18

way that you'll maintain them yourselves

11:19

and they'll be very extensible, but the

11:21

chances you do that are very low. So if

11:24

you need a really powerful tool to

11:26

handle whatever you throw at it in the

11:28

future, like let's say you're building

11:29

an application for the web and in the

11:31

future you want to add login, you want

11:33

to add a blog, you want to add sessions

11:35

that can be invalidated more easily, you

11:38

want to add better SEO through server

11:39

rendering, all those types of things.

11:41

Maybe you build the app yourself using

11:44

vanilla React or you build your own

11:46

frameworks to build around this or you

11:48

can use a tool like Nex.js which has

11:50

decades of work put into it in order to

11:53

make all of those pieces more likely to

11:55

be there when you need them. Have I

11:57

regretted picking next for projects in

11:59

the past? Absolutely. But did I regret

12:00

it because it was missing functionality

12:02

that I needed? No. Next. JS as a

12:04

platform was very welcoming to all the

12:06

weird things I wanted to do to it.

12:08

Whereas now that I'm building more

12:10

things with traditional V plus React, I

12:12

don't have the ability to server render

12:14

the pages that I do want to, which is

12:16

very frustrating when I do want some SEO

12:17

on certain places or I want to have

12:19

static rendering for pages like my docs

12:21

page or maybe for my blog or the terms

12:23

of service on a site that I'm building.

12:25

That stuff is obnoxious to get right.

12:28

And having a tool like Nex.js that

12:29

allows us to go in whatever direction we

12:31

want to is really powerful. When I put

12:33

Nex.js JS in here. Am I saying that I

12:36

fully understand every detail of how it

12:37

works and I could build it myself if it

12:39

wasn't so tedious? No. But the things

12:41

I'm using in a given project, I probably

12:43

could do that for. So, Nex.js is still

12:46

the type of depth that would make sense

12:47

for a lot of my projects. That said,

12:49

there's a lot that it doesn't make sense

12:50

for, and I'm much more likely to throw

12:52

together my own solution now than I ever

12:54

was in the past. Things that were too

12:56

tedious to implement ourselves suddenly

12:58

make way more sense, though. And this is

13:00

where things get interesting. Let's try

13:02

to chart this out with complexity versus

13:04

your capability. Here's something like

13:06

is odd. It's obviously as little

13:09

complexity as possible. So, who would

13:12

ever possibly use this? Well, somebody

13:15

who's just learning how to code, like a

13:17

true beginner could absolutely see

13:19

themselves using something like is odd

13:21

because their capability is relatively

13:23

low and this library is relatively

13:26

appetizing as stupid as the problem it

13:28

is that it solves. So somebody who

13:30

doesn't really know what they're doing

13:30

reaching for this makes sense. So the

13:32

way I'm thinking of this is that on this

13:34

section, these are things you would pull

13:37

in code or depths for. And down here is

13:40

things you wouldn't dare do that for.

13:43

Because as your capability goes up, your

13:46

willingness to adopt some external

13:48

solution to a problem goes down based on

13:51

again how complex the problem is. If I

13:53

have something as complex as

13:55

synchronizing data across client and

13:56

server, I might foolishly think I can

13:58

build that myself, which I did with

14:01

Theo's awful sync engine that used to

14:04

power T3 chat. I thought I could do that

14:06

myself and that the solutions that

14:07

existed just weren't worth the adoption

14:10

cost. So I tried this myself and I went

14:12

to hell for it. So now I use Convex,

14:16

which is an external solution. It is a

14:17

service. It is a framework. It is a

14:19

library. It is a lot of things. But it

14:21

is effectively a database as well as a

14:23

compute platform for updating things in

14:25

the database. So now that I've

14:27

experienced this problem, my willingness

14:28

to adopt Convex has gone up a ton. And

14:31

there are other benefits too that Convex

14:32

by living in my codebase as actual

14:34

source code makes it much easier for

14:36

these same AI tools to make changes. I

14:38

know hardcore convex shell, sorry. I

14:40

love this project so much and there's a

14:42

reason that it comes up a lot. It really

14:44

really helps in this new world. So

14:46

what's very interesting here is I feel

14:48

like this has bent out a ton. Instead of

14:52

this being such a simple linear line,

14:54

the willingness to pull in depths has

14:56

changed fundamentally. Why would I pull

14:58

in a depth when I could use the

15:00

dependency as a reference point that I

15:02

can then prompt an agent to go build?

15:04

And this is where things are going to

15:06

start getting really interesting in my

15:08

opinion. An idea I've been thinking a

15:10

lot about is this quote from Sty Pete,

15:13

who I talked about in almost all my

15:14

videos recently. Pete's building a ton

15:16

of cool open source stuff using agents.

15:18

His stuff's getting adopted more and

15:20

more, which means he has to review more

15:22

and more PRs and requests, issues, all

15:24

these types of things. Here's his quote.

15:26

I don't like pull requests anymore. A

15:28

large chunk of code change doesn't tell

15:30

me much about the intent or why it was

15:32

done. I now prefer prompt requests. Just

15:35

share the prompt you ran or want to run.

15:37

If I think it's good, I'll run it myself

15:39

and merge it. This is an idea that's so

15:41

crazy. I'm probably going to do a

15:42

dedicated video on just it. But it also

15:45

shows a lot of what I'm talking about

15:47

here. Instead of seeing a library and

15:50

immediately npm installing it, what if

15:52

you see the library and the developer

15:53

experience it provides and then you tell

15:55

an agent to implement something like it

15:57

in your codebase instead of just blindly

15:59

installing Zustand, which I love and

16:01

will continue to install, especially

16:02

because its bundle size is so small and

16:04

it's very well documented and agents

16:05

understand it well. But hypothetically

16:07

speaking, if I liked this but didn't

16:09

want to use the package or I wanted

16:11

something that only included parts of

16:13

it, like I really want this but I don't

16:15

want the rest, I can copy this, hop into

16:17

my terminal or into whatever other tool

16:19

I use, paste it in and say make this

16:21

work this way. Don't bring in any

16:23

depths. It will implement the parts that

16:25

I want. This is one of the harshest

16:26

realities when you bring in a library.

16:28

There's a very very good chance the

16:30

library does a hell of a lot more than

16:32

you want it to. Funny enough, it's one

16:33

of the benefits of these tiny ones like

16:35

is odd and leftpad. These don't do jack

16:37

but libraries like this probably

16:39

bring a lot of things in that you don't

16:40

want. And then libraries like Next are

16:43

definitely bringing in a lot of things

16:44

that you probably don't want or need.

16:46

And this is now a calculation that has

16:48

fundamentally changed in our heads.

16:50

Previously, the math was pretty simple.

16:51

You multiplied how hard the problem was

16:53

with how bad you need a solution to it

16:55

with how risky it was to adopt that

16:56

external solution. This math's gotten

16:59

all wonky now because the risk now feels

17:02

much greater because any library,

17:04

especially after all the npm exploits

17:06

and things, every additional depth in

17:08

your dependency list feels scarier now.

17:11

How hard is this has gone down because

17:12

it's easier to implement and how badly

17:15

do we need it hasn't really changed, but

17:17

it feels like how hard has gone down and

17:20

the perceived risk has gone up. This

17:22

makes the math work out very, very

17:24

differently than it used to. I'm not the

17:26

only one saying this. There have been a

17:27

couple articles from both Simon and

17:28

Jeffrey about how libraries are kind of

17:31

dead now. There's the classic meme as

17:34

old as time, all modern infrastructure

17:37

versus a project some random guy in

17:39

Nebraska has been thanklessly

17:40

maintaining since 2003. And to be very,

17:42

very clear, you're not going to vibe

17:44

code an alternative to FFmpeg that is an

17:46

incredible [snorts] library that is

17:48

going to power things indefinitely into

17:50

the future. Open source by design is not

17:52

financially sustainable. Finding

17:53

reliable, well-defined funding sources

17:55

is exceptionally challenging. Projects

17:57

grow in size, many maintainers burn out

17:58

and find themselves unable to meet the

17:59

increasing demands for support and

18:01

maintenance. What's funny here is this

18:03

is getting even worse as a result of AI.

18:05

AI makes it easier to implement these

18:07

things yourself, but it also means a lot

18:08

of less experienced people are coming

18:10

into the field and are adopting these

18:12

things. I would guess, I'll go check,

18:14

but I would honestly guess these

18:16

libraries are probably being installed

18:17

more than ever, not less than ever,

18:19

simply because of the popularity of

18:22

coding going up as a result of these AI

18:24

tools. Let's see if my theory here is

18:25

right. Is odd has maintained roughly

18:28

where it was, but it is going back up

18:30

now after the Christmas slump. Yeah,

18:32

downloads have not gone down even though

18:34

the need to install this has gone down

18:35

because you can just vibe code an

18:36

alternative or hopefully you're

18:37

competent enough to know the one line of

18:39

code you want instead. Leftpad people

18:40

love downloading as a meme, so it will

18:42

always have these weird spikes. But as

18:44

you see here, the amount of actual

18:45

downloads does indeed appear to be going

18:47

up over time, which is weird and scary.

18:50

But again, that's because people are

18:52

writing more stuff than they ever have

18:54

before. What's even funnier in the case

18:55

of Leftpad is that this is now built

18:57

into JavaScript. There is a concept of

18:59

adding padding as a string function

19:01

that's built in and people are still

19:02

installing this. But when you have

19:03

enough more people who are building

19:05

stuff using AI that don't know what

19:07

they're doing, the likelihood they

19:08

install something like this is also

19:09

going up as a result. Something that's

19:10

important to think about when you're

19:11

adopting libraries is how much you can

19:13

shift it because you don't control it.

19:15

Remember, a library is a bundle of code

19:16

that lives somewhere else that you're

19:18

effectively pulling into your project.

19:20

It's one of the biggest benefits of vibe

19:21

coding alternatives because you can now

19:23

shift them in different directions when

19:24

they don't do what you need. So you have

19:26

to think when you adopt this thing, can

19:27

you influence it? Like can you change

19:29

how it works? And if you do need

19:30

something, can you convince people to

19:31

make those shifts for you? If no, you're

19:33

just a user of the thing. If yes, we

19:34

have more questions. Do you have the

19:36

capacity to contribute? Do you have the

19:37

time to go into this project, make

19:39

changes, file pull requests the way the

19:41

team wants, and communicate with them to

19:42

get them actually merged and shipped? If

19:44

no, you're a backer. You're just maybe

19:46

contributing money to it, but that's

19:47

about it. If yes, we have one more

19:49

question. Strategic importance. How

19:50

important is it for this thing to be

19:52

part of your project to work certain

19:53

ways? How important is this to your

19:54

business and what you're building? If

19:56

yes, you need to be a maintainer. If no,

19:57

you need to be a contributor. Roughly,

19:58

yes. But if you could throw this whole

20:00

thing away by just forking or building

20:02

an alternative, the value proposition

20:04

changes a lot. One fun example of this

20:06

is ink. Almost all of the coding CLIs we

20:09

are using right now originally started

20:12

based on top of ink. So what is ink? Ink

20:15

is react for CLI. It lets you write CLIs

20:18

using React components by providing a

20:20

bunch of primitives as a library. Kind

20:22

of how React Native works where it

20:24

provides components that let you render

20:25

to native platforms. Inc. provides

20:27

components that let you render to the

20:29

CLI. I still use this for a lot of the

20:30

command line apps that I'm vibe coding

20:32

because AI tools know React very well

20:34

and this library is well documented

20:36

enough and used enough that people seem

20:38

to understand it too. And to go back to

20:40

npm trends, we can take a look at how

20:42

popular ink is and see very clearly that

20:45

it has skyrocketed in popularity largely

20:48

due to these new tools. INC is really

20:50

cool. That said, ink has plenty of

20:52

problems of its own. The classic flicker

20:55

problem that exists in tools like cloud

20:56

code and is starting to finally be

20:58

resolved is largely blamed on ink. The

21:01

harsh reality is that ink isn't the

21:03

problem there. There's a whole world to

21:05

go into here of the different rendering

21:07

modes in the terminal using the standard

21:08

built-in buffer versus the alternative

21:10

buffer. And that's where a lot of the UX

21:12

differences come between a tool like

21:14

Claude Code and Codeex versus a tool

21:16

like what you see with Open Code. Open

21:18

Code isn't using the standard buffer, so

21:20

it's not going to behave the same way

21:21

your terminal does. and they have to

21:22

reimplement all of those things. That is

21:25

why these things are so different. That

21:27

said, ink is really powerful, but it has

21:29

its limitations around the way it uses

21:31

the buffer, around performance

21:32

expectations, around a lot of the

21:34

assumptions that it has, and most

21:36

importantly, the fact that it's just one

21:38

dude building it part-time who is busy

21:41

defending his country from another

21:42

country. I have the utmost respect for

21:44

Vimm and I totally understand why he

21:46

can't be making changes to this project

21:48

constantly, especially considering how

21:50

many multi-billion dollar companies are

21:52

leaning on it as heavily as they are.

21:54

That's why Cyny's largely taken over the

21:56

project.

21:58

Cyny's built a ton of awesome

22:00

including Kai, which is one of my

22:01

favorite fetch alternatives in

22:03

JavaScript and one of those things that

22:05

I was starting to install more that I

22:07

now rip. I should sponsor him. I will do

22:09

that after stream. You should, too. They

22:11

are working really hard to maintain this

22:13

library, especially now that it is more

22:14

essential than ever. That said, certain

22:17

companies that don't necessarily believe

22:19

as much in open source that are relying

22:20

on this heavily

22:22

claic, [cough]

22:25

sorry, I've been sick for a bit decided

22:27

that rather than contribute to this

22:29

library or do an open-source fork that

22:31

fixes their problems, they've instead

22:33

decided to just internally privately

22:36

rewrite it. And now Claude Code is using

22:38

their internal alternative to ink that

22:40

is closed source and private because

22:42

it's cheaper to do things that way. And

22:44

that's really what it comes down to. To

22:46

go back to this chart, Enthropic decided

22:49

that while they kind of have the

22:50

capacity to contribute, they don't feel

22:52

like doing it, but they didn't like

22:53

landing on the backer space. So they

22:55

decided to just build it themselves. And

22:57

now with cloud code internally, it's way

22:59

easier for them to build and maintain

23:00

that, which is a big part of why they do

23:02

it. their willingness to fork

23:04

dependencies and internally maintain

23:06

alternatives is a lot higher because

23:08

it's easier to do that. This is also why

23:10

they chose to buy bun because unlike the

23:12

ink dependency, bun is probably not

23:15

something you can vibe code your way

23:16

around. I know that Jared is using cloud

23:19

code to make a lot of changes to bun

23:20

now, but that is with a lot of effort

23:23

and bun is becoming more and more a core

23:25

dependency of cloud code as they're

23:27

trying to ship binaries that are native

23:29

single packages that could be easily

23:30

installed across platforms. Bun has

23:32

become more and more core to how the

23:35

project works. One way of thinking of

23:37

this is what is the relationship between

23:39

the library and your project. this is

23:41

your project and the library that you're

23:44

using is some small part inside of it

23:46

like I don't know leftpad maybe that

23:49

library is not something that you should

23:51

have as a library because what you're

23:53

doing when this is a library is

23:54

effectively taking this thing that isn't

23:57

yours and linking it in as a virtual

24:00

project inside because you don't have

24:02

the code you just have the package. So

24:04

for things like this or in the case that

24:06

we're talking about here, inc. If you

24:08

can't change this thing because it comes

24:09

in through a package, your decision to

24:12

kill all of this so that you can own it

24:14

makes sense. But if the dependency we're

24:16

talking about is a little higher level

24:18

like you know this, I would argue bun

24:22

effectively wraps cloud code the project

24:25

in a literal sense because bun is how

24:26

they bundle it, how they build it, how

24:28

they create the binary for it. It's also

24:30

where all of cloud code's code runs.

24:32

Cloud code is a JavaScript project that

24:34

has a bunch of dependencies that run

24:36

inside of bun. Bun is a higher level

24:38

external dep in this case. So bun being

24:41

something that they acquire and maintain

24:43

makes much more sense because if they

24:44

want to reduce the risk of all of their

24:46

dependencies, the one that wraps

24:48

everything is scary and they should

24:51

probably try to find some way to

24:52

maintain it. It makes sense that Bun was

24:54

acquired by Anthropic when you consider

24:56

the nature of how Bun works within their

24:59

projects and their work. Whereas inc

25:02

they see as easier to just rewrite. And

25:04

here's the harsh reality. We all need to

25:06

change how we think of it. It's very

25:08

strange world that we're living in now.

25:10

Anthropic is one of the first to realize

25:11

this and do the math and decide inc is

25:14

worth forking. Bun is worth buying. We

25:16

all need to think about this ourselves.

25:18

Which projects are worth forking, are

25:20

worth building our own alternatives to,

25:21

are worth funding and contributing to or

25:24

are worth avoiding because of the risk

25:25

profile. The way that we measure which

25:28

projects we rely on and which packages

25:29

and libraries and tools we build on top

25:31

of is fundamentally changing right now.

25:34

And it's important that you go through

25:36

your dependencies and think about this.

25:37

Is this library necessary? Is it holding

25:39

us back? This is also why I love

25:41

projects like shaden because shaden

25:43

doesn't encourage you to install a bunch

25:45

of npm packages that you don't have any

25:48

control of. It did used to encourage you

25:50

installing a ton of the radics packages

25:52

but even they are now burnt by that and

25:53

are starting to move to base UI. What's

25:55

cool with Shad CNN is when you set up

25:57

Shad CNN, it is doing such by copy

25:59

pasting all of that stuff into your

26:01

codebase directly. Shad CNN creates a

26:04

folder named components where all of the

26:06

files are there. On the topic of having

26:08

the code in your codebase, turns out AI

26:11

is way better at going through code

26:12

bases than it is at trying to find

26:14

things through hellish unorganized docs,

26:17

LLM's text files, and crappy MCPs that

26:20

load way too many tokens into your apps.

26:22

Then my channel manager and also fellow

26:23

YouTuber built this app BTCA which will

26:26

instead of doing that clone the whole

26:27

codebase and use the built-in tools in

26:30

your agent tooling things like GP and

26:32

other search tools to find how this code

26:34

works. This ends up being way more

26:36

reliable than the classic MCP solution

26:39

like context 7 that is trying to index

26:41

all of the data in the docs. Yeah, BTCA

26:43

is way more reliable because it actually

26:46

understands the code because it has the

26:48

real code. It turns out these AI tools

26:50

are way better at dealing with code than

26:51

they are at dealing with poorly

26:53

formatted documentation. So when the

26:54

code lives in your project, that's going

26:56

to be much better than a bunch of old

26:58

outdated Stack Overflow threads that

27:00

don't actually understand how things

27:02

work. But do you know what's better than

27:04

better context? Just having the context

27:06

in your codebase directly. The value of

27:08

having your code inside of the repo,

27:11

inside of the place where your agents

27:12

are already operating, is higher than

27:14

it's ever been, which greatly increases

27:16

the incentive to pull things in. It's

27:18

part of why Shadian is doing as well as

27:20

it is right now. It's why more and more

27:22

people are starting to do changes like

27:23

this and use tools like BTCA or drop

27:26

external libraries where they can

27:27

entirely. There's been a ton of progress

27:29

in the space. I like Simon Willis's

27:32

thoughts on this, too. He specifically

27:33

says that a lot of his open source

27:35

projects solve existing problems that

27:37

are frustratingly hard to figure out. He

27:39

also built Django the Python framework.

27:40

So he has experience here. He built his

27:43

S3 credentials package specifically

27:45

because getting read only and read write

27:47

credentials for S3 buckets was annoying.

27:49

Shadowed upload thing by the way and

27:50

that's big part of why we made it.

27:51

Getting S3 right is obnoxious. And

27:53

instead of having to figure out how to

27:54

do all of this properly through IM

27:56

policies, he built a package to make it

27:58

easier. But now modern LM are very good

28:00

at those same policies to the point that

28:01

if he needs to solve the problem today,

28:03

he doubts he would find it frustrating

28:04

enough to justify finding or creating a

28:06

library to do it. And I'm seeing this

28:07

too. I can't tell you how many times

28:09

I've shared something I'm working on and

28:11

a bunch of people say, "Why don't you

28:13

release it? Where's the code?" And I'll

28:14

instead just send them the prompt and

28:15

then they go add it themselves. I no

28:17

longer want source code. I want prompts.

28:20

I want examples of how they're using the

28:22

thing. I want to know what the value is

28:24

and why they made it so I can then go

28:26

make my own equivalent. There are lots

28:28

of projects that you can't do in one to

28:30

10 prompts, but there are a lot of

28:32

things you can. A lot of dependencies

28:33

that are so well understood, so well

28:35

documented, and so common that replacing

28:38

them with your own code suddenly makes a

28:40

lot of sense. It's kind of crazy when

28:41

you think about it. Previously, the

28:44

thing that made a library really useful

28:45

was that the problem was annoying, the

28:47

solution was simple, and the package was

28:50

popular, universal, maintained. These

28:54

this is roughly what would make one of

28:55

those packages worth installing. These

28:57

exact same characteristics make it

28:58

really easy to solve with AI. If the

29:01

problem is annoying, chances are there's

29:03

a lot of public documentation on the

29:05

problem. If the solution is simple,

29:07

there's probably a lot of documentation

29:08

of that solution that the agents have in

29:10

their training data. And if the package

29:12

is universal, popular, and

29:13

well-maintained, there's a very good

29:14

chance the agents and the LLMs we're

29:16

using have it all in their training data

29:18

and can replicate it meaningfully well,

29:20

relatively quick. The same things that

29:22

made one of these packages worth

29:24

installing now make the package worth

29:26

replacing. And that's a weird thing

29:28

that's going to have long-term side

29:29

effects as we keep changing how we

29:31

build. This is also a big part of why

29:33

we're not talking as much about new

29:35

libraries as we were in the past because

29:36

the incentive to bring in something new

29:38

that the agents might not know about is

29:40

a lot lower than the incentive to build

29:42

something the agent does know about cuz

29:43

it lives in your codebase. And this puts

29:45

us in a really weird place where I think

29:47

we're going to see people copy pasting

29:49

prompts instead of building actual

29:51

packages. As NC just put it in chat,

29:53

prompts are kind of becoming the new

29:54

library. I expect we'll see more and

29:56

more things like this. Matt PCO posted a

29:58

few days ago that bad agent MD files can

30:00

make your coding agent worse and cost

30:02

you tokens. Here's a prompt you can use

30:04

to clean it up, plus a full guide for

30:06

folks that want to learn. This is a

30:07

prompt you can go to his website, grab,

30:09

copy, paste into your terminal, and then

30:11

use to fix things. Here's the prompt. I

30:14

want you to refactor my agents MD file

30:16

to follow progressive disclosure

30:17

principles. Follow these steps. Find

30:19

contradiction. Identify any instructions

30:20

that conflict with each other. yada

30:21

yada. You know what? Let's try this.

30:24

Open a new terminal. Paste. Enter. Let's

30:27

see what it has to say. Contradictions

30:29

found. None detected. Your instructions

30:30

are internally consistent. The only

30:32

potential ambiguity is that I say use

30:33

TMP if the project already uses it.

30:34

Otherwise, use bun. But it's clear as

30:36

written. And then essentials. These are

30:37

things that should stay in the root.

30:39

Cool. It suggests that maybe my text

30:40

stack and TypeScript restrictions should

30:42

be put out, but they're so simple. I

30:44

don't think that's necessary. Always try

30:46

for concise, simple solutions. That's

30:47

funny because that I copied from a Matt

30:49

PCO thing. Redundant. That's the default

30:51

behavior. Sure it is, Claude. Sure, your

30:53

default is concise and simple solutions.

30:55

If a problem can be solved in a simpler

30:56

way, propose it. Redundant covered by

30:58

the above. I don't agree. I found that

31:00

this addition has actually been very,

31:01

very nice. If to do too much work at

31:03

once, stop and state that clearly. Too

31:05

vague. What threshold? I sure but this

31:08

is actually useful and if I had a bigger

31:10

cloud MD this would be very very helpful

31:13

in fact let's ask it in T3 chat to do

31:15

the same thing here it's actually

31:17

finding some useful stuff especially

31:20

comparing and contrasting my global

31:22

cloudmomd with the internal one like

31:24

this is a useful thing and now it's

31:26

asking questions about which things I

31:27

want to keep track of that's great this

31:29

is again valuable this could have been a

31:32

library he could have written a library

31:34

that I would run that would do a lot of

31:36

different things that would make these

31:38

comparisons that would run against some

31:39

agent he's hosting in the cloud and

31:40

charging money for. But instead, it's a

31:42

prompt you can copy paste into your

31:44

codebase and see what happens. That's

31:46

really cool and I suspect we'll be

31:47

seeing more and more of these things

31:49

going on in the future. I think I've

31:51

said all I have to say here. The world

31:52

is changing and in some ways it's scary,

31:54

but in others it's exciting. How do you

31:55

feel about this though? Are you going to

31:57

go uninstall all your npm packages or do

31:58

you think I'm just blowing smoke up of

32:00

Claude's ass? Let me know how you fail.

32:01

And until next time, peace nerds.

UNLOCK MORE

Sign up free to access premium features

INTERACTIVE VIEWER

Watch the video with synced subtitles, adjustable overlay, and full playback control.

SIGN UP FREE TO UNLOCK

AI SUMMARY

Get an instant AI-generated summary of the video content, key points, and takeaways.

SIGN UP FREE TO UNLOCK

TRANSLATE

Translate the transcript to 100+ languages with one click. Download in any format.

SIGN UP FREE TO UNLOCK

MIND MAP

Visualize the transcript as an interactive mind map. Understand structure at a glance.

SIGN UP FREE TO UNLOCK

CHAT WITH TRANSCRIPT

Ask questions about the video content. Get answers powered by AI directly from the transcript.

SIGN UP FREE TO UNLOCK

GET MORE FROM YOUR TRANSCRIPTS

Sign up for free and unlock interactive viewer, AI summaries, translations, mind maps, and more. No credit card required.