Off ProtocolEpisode 1

A Thousand PRs in Two Weeks

Hosted by Jim Ray and Alex Garnett with Daniel Roe, Matias Capeletto, and Zeu

Show notes

In January Daniel Roe, JavaScript engineer and lead dev of the Nuxt project, posed a provocation to Bluesky, asking: what are your frustrations with JavaScript packaging? The response was swift and overwhelming; two days later he had a working prototype of something new. Two weeks later, over 1,000 issues and PRs had landed from over 100 contributors. NPMX, a fast and fully featured client for the npm registry, had landed with social features powered by atproto.

Jim and Alex livestreamed with Daniel and other core contributors Matias Capeletto and Zeu about how a project moves fast without falling apart. How did they make design decisions with so many contributions coming from seemingly every direction? Why did they shut down the Discord for a full week — just before launch! — and take a vacation? And why did they decide to also host their own PDS, which gives developers a way to register an atproto identity separate from Bluesky?

Plus news from around the Atmosphere: the new atproto.com docs, Bluesky CTO Paul Frazee’s post on practical decentralization, protocol head Daniel Holmgren’s permissioned data series, some new Standard Site reader apps, and what Streamplace is doing about content-addressable media.

Links and references

  • npmx — community-led alternative to npm, built on atproto
  • Permissioned data diary — Daniel Holmgren’s blog series as he works through the design of permissioned data
▸Transcript

This transcript was generated automatically and may contain transcription errors.

Jim Ray: And we’re live, Alex. Welcome to this one. This is your first one of these, actually.

Alex Garnett: It is my first office hours, Jim. Thank you for having me. I did have to kidnap Paul and put him in the trunk of my car.

Jim Ray: Excellent.

Alex Garnett: We’re trying a new thing here, you know, at Bluesky PBC. It’s Trunk Kidnappings. And so that’s our first one.

Jim Ray: It’s good to start with the top. You know, you’ve got to identify who the biggest badass in the company is, and then that’s the one you throw in your truck. So.

Alex Garnett: that’s right. It helps to disrupt their organizational structure.

Jim Ray: Yeah, absolutely. Absolutely. DevRel’s taken over. So we have special guests this time, and I’m not even introducing them yet. It’s maybe a bit of an open secret as to who our various special guests are, but I’m super excited to talk to them. We’re gonna bring them on in just a minute, but before we do I wanted to do kind of a rundown of the news this week. And there’s been a lot of news. Alex, why don’t we start with your I feel like this is your baby. So why don’t you tell us about launching the new atproto.com?

Alex Garnett: I cannot believe there has not been an office hours already since we got the site launched. I think that’s.

Jim Ray: like it was a month ago.

Alex Garnett: A terrific whirlwind it’s been and just how much we’re moving right now and moving the atmosphere along and moving the documentation along and all the above. We got the new atproto.com launched Tuesday of last week. We’ve already gotten about 30 other PRs in since then. Most recently this morning I expanded our list of community SDKs, which you can find from the sidebar right on atproto.com. But these are our new docs. These are our brand new docs for the whole of the protocol they incorporate a lot more top-level information than previously existed outside of the Bluesky docs and outside of the atmosphere conference talks from last time. So we’ve got a lot more of that guiding introductory content where you can really get the feel for what you can do with this platform.

You can learn about all of our core primitives. And then we get you building. We’ve got six new tutorials talking about auth and not auth. We’ve got a nice overview of all of our different stack components and how readily you can self-host each of them and why you might want to do that. In general, it’s got a lot more of an overview of the atmosphere of all the existing protocol features. And I’m excited to just keep adding more and more as we go. It’s been a really fun couple of weeks seeing the response to that and seeing how much more accurate LLMs are already becoming as they read more of our docs and as they surface more README’s from across the atmosphere.

Because being able to just provide those links, you know, robots work like humans do, right? And being able to get more of that context up front is a really important thing too.

Jim Ray: And a fun fact for everyone watching, when you and I were interviewing for this job, it was like our interview test was like, what would you do with a theoretical new website someday? It’s pretty amazing to see it live. It’s also really great to see all of the contributions. I think day one, you had something like 30 PRs or something like that, right?

Alex Garnett: It was like 15 or 20 the day one after launch, and I think the remaining five or ten have come in the rough week after that. But yeah, a lot of those were keeping me honest and being like, hey, let’s make sure this localization nav works and the others were like, hey, let’s make sure we clarify what self-hosting a relay is like. Let’s make sure we surface all these really cool community-run relays. So that’s been awesome. Really appreciate the engagement and plan to keep it going.

Jim Ray: And you push an update today that was just showcasing some of our community SDKs, which folks seem to be a fan of.

Alex Garnett: Yeah, excellent. That was overdue. We were only listing the Python community SDK up until now, and there are a lot more that are at a pretty high level of maturity, I personally love being able to scroll down a page and just see, you know, like Rust, Dart, Elixir, Swift. Like that looks really nice. from a support point of view, from a proving out the community point of view, and just being able to add all those different logos feels really good and it shows how many people are maintaining their roots into the atmosphere on their own and doing a really great job of it.

Jim Ray: And there’s even a PHP library for the SICOs out there. Let’s move on there to we had a great post from our fearless leader who is currently in the back of Alex’s trunk all about practical decentralization. I think the response from folks was really great on that one. Paul was kind of picking up from a little bit of discourse, which sometimes we get ourselves pulled into, but you know, the thing that I really liked about that post was how much it talked about one of the things I love the most about working on AT Protocol is that it is a very practical approach. It’s not always, you know, we don’t always do like the most optimal decentralization thing because we realized that, you know, in order to optimize for usage, it has to be something that people use.

Alex Garnett: Yeah. You can solve problems in order is something that I think this organization and this community are really, really good at keeping in mind. Like what you solve for in terms of decentralization, what you solve for in terms of performance, what you solve for in terms of building out that social graph to a critical mass. Those are all different problems that have to get worked on, you know, in sequence or in parallel, and you have to do the right things to be able to build support at the right time. The reason I’m here, and I know we all talk about this all the time, the reason many of us are here is just because of the pragmatism in this ecosystem.

Like we’re all trying to go in the same direction. A lot of people here have a ton of experience from D web communities and content addressing going way, way, way, way back. The atmosphere community is just so sharp when it comes to like how do we make use of these decentralized authority protocols? What are we actually trying to achieve by this? And as much as sometimes I wake up Saturday morning and I’m like, why are we doing discourse again? It’s Saturday. What do you what do you mean you all have other jobs and this is your atmosphere day? Oh no, like I am just so impressed that like Paul was able to rise to this and get this drafted in a week and be able to capture so much of what I think we do so well here.

Jim Ray: Yeah, exactly. And you know, speaking of some of the other content that we’ve push been pushing out, great response to Daniel Holmgren’s permissioned diaries. So the permissioned data diaries. There it is. I knew there was another one. Really, really fantastic post. The thing that I love about that, the folks that be the thing that folks are picking up on is this is the biggest change to the protocol probably since inception, I’m guessing. Maybe sync was pretty big too, but certainly the biggest thing we’re going to be working on for the foreseeable future. And we want to make sure to get it right and get the community input. And I think folks are really feeling that.

And so and Daniel is like such a great thinker and such a great writer on all of this. And so he’s doing a great job of just kind of like walking us through. And the reality is it’s not as if we have figured all of this out and are just kind of like writing a series of posts to bring everyone along, but like we are we are actively working through these ideas as well. I think everybody on the team has their own proposal for how to permissioned data last time I checked.

Alex Garnett: Yeah, the whiteboarding session that turned into a white claw session at our last team offsite, I think, speaks to how many exciting differing opinions there are around trying to figure out permissioned data. But yeah, Daniel’s doing an incredible job. I like just laying out the argument from the dome, you know, like we’re not trying to solve for E2EE for DMs because there’s other people working in that space who are able to provide those guarantees, and that’s the most critical guarantee for there so let’s talk about what the actual hard cases are. Okay, they’re groups. Why are groups the hardest? Why does solving for groups get you all these other different use cases that you’re probably thinking about, right?

Whether it’s syndication, subscription models, gated content all these things that we know we want to get to, like let’s pick the best entry point to solving them and let’s go from there. And so I think even though, you know, people have been saying buckets for a long time with S3, I think we’re going to try to reclaim the idea of a bucket. And that’s going to be something that only we care about. I was thinking there’s already an R2 product, I think, that just re-implements S3, so we’d have to go to Q1, but that sounds kind of like conspiracy theorists. So maybe not that. I don’t want people thinking, you know, Bluesky’s all on Q one now.

That could be very alarming to people. So T four is a good idea.

Jim Ray: Or they expect it’s gonna be done by the end of March, which is our Q one too.

Alex Garnett: U5, it really depends. We can increment so many letters and numbers to try to carve out our own bucket space. And I think that’s the most important part of branding this.

Jim Ray: Yeah, absolutely. Absolutely. I do want to get to our special guests. There are a couple of other community things, so I’m just going to kind of rip through a few of our other bullet points here. Really exciting to see some standard.site readers happening. pckt.blog launched a reader. Leaflet launched a reader. There is a new-ish graph subscriptions lexicon that is part of the standard.site now so if I subscribe to something in pckt.blog then it will show up in my leaflet reader as well which is really cool. Skyreader Tim Disney, who has the absolute best name. He released Skyreader and he’s got some RSS support coming as well. So that’s pretty great. We’re seeing more PDS options happening day by day.

Again, pckt is doing some great work at pckt.cafe. So you can literally go, you don’t even have to have a Bluesky account now. And you can start blogging over on Pocketland. Eurosky’s got over a thousand users now, which is pretty cool. NPMX, which we’re going to talk a little bit more about here, they’re based in the EU and they have their own PDS as well. And then what else we got going on here? StreamPay Streamplace, which where we are right now. They’re working on some content addressable media, so we should we should be able to take down YouTube by the end of the year, I think. is what that says to me. You’re a media you’re a streaming media guy, Alex.

Any thoughts on what streamplace is doing with IPS IPFS and DASL and their content addressable media ideas?

Alex Garnett: Lots of thoughts. I was lucky enough to see Robin Berjon speak at FOSDEM, and he really has a great way to command a room with a series of like horrible wentworthy dazzle puns. I think Razzle DASL is like an official standard of some kind or will be soon. It’s just they really you set up the pins, he knocks them down. But Eli from Streamplace put out a really terrific blog post called how on the how streamplace works blog called Stupa and Muxil. Bringing video to content address systems that went out around this time last week, I think. And that talks all about the route they’re taking. for again like distributed authority pattern, right? So you can have, you know, video that has some kind of the guarantee of legitimacy.

But instead of being top down, which C2PA tried to prove out like over a decade ago, this is bottom up. This is bottom up in the same way that a lot of other atmospheric thinking is bottom up and it works because you get, you know, cryptographic deterministically variable, verifiable chunks of that video that you can then go and propagate. It’s super cool thinking. I like that it’s called Stupa and Muxil. Those are both very pronounceable acronyms. I was trying to think of what why I know what a stupa was. I think that’s some kind of like a Buddhist temple that that’s like it’s got like the round dome and I was trying to remember why I think I think I know it from like Age of Empires.

And you know, like that’s a very like, you know, like what why do I know what a stupa is? What does that come up in my life?

Jim Ray: It sounds like an Eastern European pastry to me, but.

Alex Garnett: Yeah, it’s like it’s like a real-time strategy building of some kind or other.

Jim Ray: Okay.

Alex Garnett: I should mention I ha I watched a lot of Gold Zone Olympic coverage in the last two weeks, and one of my favorite things about Scott Hanson is he has like best in show like energy where like a dog will walk out and he’s like how much do you think I can bench press so.

Jim Ray: nice.

Alex Garnett: you put me in front of a of a green screen and I just can’t help myself but yeah very excited about the thinking around stupa and muxel very excited for Streamplace. I think they’re really leading the way here in a way that is consistent with a lot of good thinking around how to address them.

Jim Ray: Well, we’ve got more things to get to, but we’re already we’ve already blown past where I wanted to be, and I really want to get to our special guests, so I’m actually going to bring them in now. And you might start to recognize some of these faces, those of you who’ve been paying attention. Hello, hello. Yeah, hello. So we’ve got Matias, we’ve got Daniel, and we’ve got Zeu. From the incredible NPMX project. And I could see the chat lighting up right now. So y’all are our special guests, first ever guests on the on the stream here. And so first of all, maybe we’ll just go around and have folks introduce themselves. Zeu, do you want to start us off?

Zeu: Yeah, hi. I’m Zeu. I guess I’m what do you call it? I’m technically a maintainer. I’m working with Bailey getting the atproto integration in on NPMX also just in generalized stream and I post a lot on Bluesky.

Jim Ray: And you were recently on Code TV.

Zeu: Yes, I was I did a live stream with Jason Lengstorf talking all about the AT Protocol, just in general, and also we did like a small code through trying to implement a small app on Astro. So that was very.

Jim Ray: fun. Excellent. Jason is going to be at AtmosphereConf. I should plug AtmosphereConf real quick. If you haven’t gotten your tickets for AtmosphereConf, I don’t even know why you’re on this stream. Turn us off and go get your tickets for AtmosphereConf right now. But Jason’s gonna be there and it’s gonna be awesome. So amazing. Thanks so much, Zeu. Matias, why don’t you tell us who you are?

Matias Capeletto: Hello. Yes, so I’m Matias, but online you may know me by patak.dev until yesterday and now patak.cat. Now I’m a Catalan. It seems. I need to I need to translate the blog post to Catalan so they don’t kick me out from the new TLD. Oh nice. It’s going to be fun. So yeah, I did a lot of things in my life, but like lately, these past five years, I have been involved in the open source frontend community, mainly as a maintainer of Vite. And then like we started Vitest with Anthony Fu also. And then with Daniel Roe we started Elk that was a client for Mastodon when we try to move from X to Mastodon.

And then we try to move to Bluesky. So and then we met a lot of very cool people from the community. And yeah, Daniel can start telling maybe the story about how npmx started after that. And now like I’m one of the stewards of the project.

Jim Ray: Amazing. And Daniel, why don’t you take us home?

Daniel Roe: So well I’m dialing in from the Highlands of Scotland, so hopefully the internet carries me. So I what that’s my story. I’m a full-time open source maintainer, which is extremely cool and definitely not what I at any point in my life before would have guessed I would be doing. I trained as a lawyer after thinking I would probably be a writer as a kid, I’ll write stories, I’ll be like the new Tolkien or C. S. Lewis. And then it became a studied law university, which was which was great. Then I took a totally different direction. I worked for a church for a year, I studied theology, I became a vicar, I had a church for five years, then I started an agency focusing on clear communication and somehow Pivoted that into a SAS, started helping out in open source.

You had no idea, Jim. You’re like, what is going on?

Jim Ray: We can’t have any more guests. Nobody can reach this bar. This is a.

Alex Garnett: Vicker.

Jim Ray: Are you a Vicker?

Daniel Roe: The and then and then for my next trick, I no, so it th then started contributing to open source, which is something I absolutely loved and wanted to do ever since I was a kid playing with Linux. I remember get like I got CDs they sent me like you could sign up for a free CDs like 20 Linux distros and just try them all out and swapped every few days, you know, for a new Linux distro. And the whole idea of being able actually to give back to people who give so much out that was such an incredible thing. I’ll tell you more about that later. I know this is just a brief intro and I am sort of slightly carried away.

Jim Ray: No, this is great. The chat is loving the live story. So you ‘re doing great.

Alex Garnett: We only want to hear about your first five Linux distros. So I want the whole biography. Mine was Mandrake, but you know, we’ll get.

Jim Ray: I didn’t see someone.

Daniel Roe: That’s been a while.

Alex Garnett: Andrake was cool. KDE won. Yeah.

Daniel Roe: Yeah. Yeah. KDE. KDE was very, very good. But now would you use KDE? I don’t know. I think GNOME is a little bit.

Alex Garnett: I agree. I’m not a KDE person these days. Are we just gonna alienate half the audience by saying I like GNOME three and four? This is.

Daniel Roe: we have potentially no option. It’s you know it’s.

Jim Ray: we’ll get into Emacs versus Vim here in a short bit.

Zeu: Vim is better. Putting my hat in the ring.

Jim Ray: Nice. Well so amazing introductions and I want to get to the npmx project and so Daniel maybe like Swoop into npmx a little bit. Tell us a little a bit about what in npmx is. Maybe we’ll just start there.

Daniel Roe: Sure, so npmx is a is a browser for the npm registry. So think of it a little bit like npmjs.com, but built on a different tech stack with some more features. and aiming to have a really a modern fast interface. And that’s what it is today probably.

Jim Ray: Amazing. And Matias, how is it that this became such a collaborative project. I think one of the things that I am most impressed with is just the velocity of this project not just in terms of lines of code submitted, but the number of people that you’ve been able to bring on and on board, the number of PRs that you’re being able to submit to. And the thing that I love the most is that y’all took last week off. You like so rare for an ORP source project to just like we’re going to shut down for a week. You literally shut down the Discord. So maybe walk us through a little bit about how that part of it happened.

Matias Capeletto: Yeah. I would say first that we are already planning our two weeks vacation in the summer and we are going to talk with all our friends from other open source projects. And we are going to try to have like 10, 20 projects at the same time, take the vacation. So it’s going to be going to be fun. Like if you are like maintaining a project, come talk to us because we are taking we need to decide when. And yeah, so actually Daniel started the project and sent the first commits and two days afterwards there was already a working npmx dev browser that like this is very important because when you invite people, it is very important to have the structure to receive that collaboration.

So Daniel did this job and then he reached out to me. Like we already know each other from like Vite and Nuxt. There this like Vit collaborates with all the front-end projects. And so we work it a lot in that this with the Vite and Nuxt hat and then we work it together as a team for the first time in Elk. We really like to work with each other. So he reached out and said, okay, like do you want to like collaborate on this and this is how it starts like and we created a discord and then we say hi and then okay let’s invite everyone because the thing is that from the community of Vit and then how we started Vitest, it is basically the same.

We created a discord and it’s like we invite everyone and it’s all our friends, and we know it’s it this is why it starts so fast. We already have like 100 people that are working together, and we just move to another Discord because we need a new structure to talk about this new thing. But all the connections are already formed. And then normally what happened is that we get a lot more people that joined because the testing community was different from the building tool community we had in Vite. And then when we did Mastodon, we got people from standards and from ActivityPub and like that were joining. And then when we did this like we started like it will be cool to have likes because npmjs.com doesn’t have likes and then Zu appear and then we need to actually sync up to the sites and we don’t want to do infra.

So and like we would like to have like we like the kind of protocol that you’re developing. So like well, we need a PDS and then Bailey appear in the picture. So and the proto the protofox are they’re a really interesting bunch. Like I think that we share a lot of values from with this like all this indie as product developers and it was it has been so fun to work with them like that like the we created a social channel and they went there and like we went to do other things and when we look back, people were like liking packages and there was a lexicon and like and now there was a leaderboard and it’s valid winning and like I don’t I don’t know what is happening anymore there.

But yeah like I think that that we can let’s say we talk about that that particular part. But about like how the community grows is like it starts with already a community. and that’s that is form it already and then we keep finding friends that are normally like aligned with like aligned with us. So and we invited we did a very intentional job about not promoting the Discord. We didn’t like we talked a lot about npmx. First without mentioning the name. It was like there were there is this thing happening and like shaz DM us if you want to get involved. Then like we started saying npmx without sharing the URL. Then we started to share the URL without sharing the Discord.

Then we like, and it was like intentionally because we also care a lot about welcoming people and like allowing us time to properly grow this in a in a healthy way. So I shared a post, I can I can look for it later in the chat that we welcome six hundred people now. Like all of them one by one, like they were received by the community it’s not like that it’s the one person that that would be crazy, but like yeah, like there is like a welcoming team of like people that like well to welcome people and when you enter our Discord, like you are going to have someone need to talk and like ask questions and like try to guide you to collaborate if you want that.

Jim Ray: Yeah, amazing Zeu, maybe you want to talk a little bit about how you got involved and then what it was like building on atproto. I know that you’ve obviously got some experience, but maybe some of the decisions that went into building on atproto too.

Zeu: Yeah, so I mean as Patak said, like he was really the one that brought me on. We had a talk being like, hey, we’re making this NPMX thing. I think it would be really cool to add in social features. I’ve seen you post about the AT Protocol. I think it’s a good fit. And I took a look at it and I was like, this is definitely, this is like the perfect fit. Are you kidding me? You know, everyone talks about like making atproto atmosphere apps from scratch, but really like a good way to like grow the ecosystem is to have just like an already compelling application like NP NPMX, where the whole goal is just browsing the package registry as fast as possible and then adding a social layer on top of it.

And AT Protocol fits that build perfectly because it’s so easy to add in, you know, the likes, in integrating OAuth and all that. Like there’s not a lot of initial infrastructure like that we need to build necessarily to like get a lot of this stuff up. And yeah, and so like it just started up with me implementing OAuth. Eventually we thought, hey, I it would be really cool to get more users who might have not be on Bluesky. You know, tech Twitter is still thriving, you know. And a lot of them, they’re not going to move to Bluesky, but we could see their excitement on NP for NPMX. So what if we kind of stealthily add them to the atmosphere by hosting our own PDS?

And with those conversations popping up, I what do you call it? I talked to resident PDS guy Bailey, Bailey Townsend. And I was like, yo, can you help host a PDS for us? And now he’s all on board as well. So it’s not just me. It’s also Bailey, who’s really doing a lot of legwork, like props to him. And then there’s a bunch of people on the Discord right now, even. who are who are working on implementing blogs and comments I believe and I’m working on profiles and we’re gonna expand the likes system more possibly with like collections and sharing, you know, you know, kind of fuel the framework wars a little bit, you know.

But yeah, like it was just like a perfect storm of like, this is the a perfect opportunity to test out like how AT Protocol can just be added to an existing project. And it worked out pretty great. And it’s working it’s still working out. We’re still working on it. We still have more stuff.

Alex Garnett: It seems like you’re managing an absolutely massive contributor volume at the same time in that Discord and like the amount of features you’re able to add with such a horizontal structure, I’m curious, you know, if you can speak to that at all, like how you’re managing the velocity you are from all the different contributions. It’s so impressive the.

Daniel Roe: the crazy thing is what it’s turned into and I mean so when NPMX was started, I was basically nerds nerd sniped. I had been wanting to build something that was a showcase for a fast website. There are a few floating around e-commerce stuff. And there was nothing really that was out there for Nuxt. So there was stuff for Next.js, there were some other websites and I was I was looking for this. I was thinking I need to do it. And then one day someone mentioned skills.sh and I tried it out. It was really fast, beautiful website. And I thought, do you know what? I’ll do this for NPM. But and I asked a few put a few posts on Bluesky.

People just kept on firing back with ideas. Oh, here is my friction. This is what I would want to be different. And I just started taking notes actually. Sort of filing them all the way in beans. If you haven’t used that flat file issue tracker I was just mentioning in the chat that I built the first version of npmx using it was such a good way of keeping track of stuff and as I was doing that, I started thinking this thing has space like to grow, to really get big. And that was what I texted Matias. But the first day. And then the second day, and then I had something. I had something that was actually usable and working, and you can go back and see what it was at that point.

But the fact is that it was never about the that initial version, the whole point of something like NPMX is that it is a tool for people, for us, for developers, which we can fix and make better. So I think you never feel so frustrated as when you’re using tools you have no power over. I think it’s why people hate Xcode. The HADX code, they can’t change it. It’s just what it is. But whenever you’re using a hackable thing, whether that’s Atom or VS Code or something else, and you can actually change it and make it better, you feel empowered and you get this virtuous circle of being able to improve your tools. And that is what NPMX is hopefully.

And people joined, and I will say, people would never have joined. Like it was it was Matias all the way that took it from like probably I would have had eight people would have been in the Discord and we would have been hacking away at it. But after those after I asked Matias that showed in suddenly dip channels were popping up here and there and everywhere. And yes, the problem was so many PRs were coming in. But honestly, I don’t feel I deserve a huge amount of credit for it because these PRs were all from great people, good developers, people with good instincts. And all doing the same thing that we wanted to do, which is why I went back to the beginning to tell the story, which is scratching our own itch, fixing the frictions and fixing the problems.

And if anything, there is a vision for NPMX, it is to fix those to make our life better as developers. So in many ways, it was just like allowing people to build the same thing that I would have built. like in their shoes. Like it this was not a difficult job at all. And it continues to be like that as well. Like you look across POs, they’re all being made with good taste by good people. And yes, there’s some tending that needs to happen and that’s why we’re getting more and more people to step up and be maintain the project and keep steering it in the right direction. So but it is sometimes crazy when you look at the numbers and see exactly how many PRs have been made and merged.

I’m not really sure I believe like whether the stats are true. At some point, I mean after we took a week’s break, there was maybe a bit of a different thing. But at some point we were thinking this possibly is some kind of record. I mean it was a lot. It was a lot of PS going through.

Alex Garnett: I’m used to open source projects where you have to say, you know, hey, this part of the project is harder to work on, right? If you don’t have the context, you know, this is more of a core team. Part of the stack. And there’s nothing wrong with that. But here’s where you can usually get PRs in. For you, you don’t have that separation at all. And that’s part of what’s so impressive. You don’t have the like the only the core team touches this. Like this takes a lot of onboarding. Everyone’s just sort of building and affixing as they go.

Jim Ray: You know, Daniel, you mentioned the taste and I you were specifically referring to the PRs and the folks that are contributing and things like that. But I think one of the things that really blows me away, and I was looking at the timestamp. that Matias he posted the original your original one and it was like January twenty third. That’s not that long ago. And but one thing that has really struck me about npmx is that it is clearly a well-designed web application. And I don’t just mean that in the superficial sense of it looks nice, which it very much does. It is a it’s a beautiful site. But all of the details that I would expect to be there are there and they’re handled really, really well.

When you log in the way that it handles the OAuth. the things that I can do in a logged in state are the things that I would expect to be able to do, like favorite packages and things like that. And I’m curious with so much philosophy, with so many people contributing, how do you as a team make those decisions? How do you decide what goes? How do you make this, you know, whether they are Design decisions, brand new, feature decisions. What does that look like when you are moving so quickly?

Daniel Roe: I mean I think I’m not the only one who can speak to this. Maybe Zeu could say some stuff as well. One thing I think is that in my observation, there doesn’t seem to be a lot of ego around. So people are very happy to discuss and people look to other experts and people don’t feel like they have to be you know, making the panel call. So I amazing stuff, you know Zeu and Bailey and others who are doing on atproto and we have some really talented UI people and accessibility experts. Coming in and you know, I think what you want to do is defer to people’s expertise and make sure that people have not only the responsibility for things but also the authority for them as well.

Like people should be set free. And it’s been really nice to see that that happening. I think that for a project like this at the early stage one of the things that Nuxt has is a lot of convention about how things work, which does help keep things in channels. And we’re now at the point where as we’re get beginning to grow, we now need to add additional graud rules like, okay, now we’re going to componentize everything, we’re going to make our own component library effectively. Every project at some point has its has to either use or have its own component library. And now we’re facing some challenges that we didn’t have at the very beginning because we are now getting to the point where we have to standardize some of these things.

And to be fair, we did flip flop back and forth on a couple of things, like churned. Like we did one thing we’re gonna have a pointer. No, we’re not gonna have a pointer on a button. And it was it was back and forth and that’s I think inevitable with something like this, but.

Zeu: Yeah. I mean I’ll speak as a like a first time like contributor to like a Nuxt project, you know. The community at the in the NPMX Discord is so welcoming. And I think part of the reason why the community is flourishing is because it like it’s so easy to contribute, you know, whether or not you have experience, right? So somebody like me who I have a goal in mind, but I don’t know much about Vue. I don’t know much about Nux. I have asked like on like one of the channels being like, hey, like how do I do this? in Nuxt because I know how to do this in Svelte, right? But like how do how do I translate, right?

What are the quirks? And people are so welcoming. Like I went to the Discord voice channel and I just like streamed myself coding and people just came in and helped me out. And that like helpful nature lets the cu developer community grow and it’s so inviting not only for like experienced open source commute contributors, but especially like first-time ones, right? Like this might be their first time ever contributing to open source. And I think it’s you know, it’s just really inviting. So.

Jim Ray: I’m seeing in the chats. First of all, I’m seeing just so much love for Bailey Townsend and I think PDS daddy is maybe my favorite description that’s come by so far. But because he is like the community’s PDS hoster for sure. And he’s always just so generous with his time as well, which is something that I could I can see in the community as well. But another thing I’m seeing is lots of people mentioning that you know this is their first open source contribution Zeu, you mentioned it was your first time working in Nuxt. I think a lot of people are also mentioning that this is the first time they’ve contributed to any open source project.

And I think that you know that community goes a long way. And I like I see that ethos all the time working from my vantage point, seeing how welcoming the community is to us here at Bluesky, but also, you know, to everyone else. It’s pretty awesome to see it.

Matias Capeletto: I think that one thing that is also important with this, like how we work in community in relating to this idea of velocity. Because it is completely different when you work maybe in a company that you have finite resources and then you have to arrange everything and like no, you’re not going to do a gant. Maybe you’ll do sprints and like you call it in different ways, but you will have people assigned to tasks, for example. And when you have now 600 already, and we are going to be like when we do the we can talk about the lunch later on, but like we expect like in a month we’re going to double and then like double again.

And the only way that this works is that you accept things that it they look that are like it shouldn’t be like that. It shouldn’t work. For example, redundancy so like when there is an issue, people will say to you, like, how do I like do I have to tell someone that I’m working on that issue? So other people will not, you know, like because you feel like I need to I need to assign to me so like other people will not do redundant work because if not we are going to like you know like be duplicating stuff and the idea is that you should do whatever you think is high priority for you. This is like the best way to go with it.

Obviously, there is like consensus forming. We are talking a lot. This is why this court is such a good tool for this. Also the repo, even social is a is a good tool for communication about like even priorities and things like that. And when you see an issue that you want to work, just go. You don’t have to do any comments, you don’t have to say that you’re working there you can, like, if you get stuck, you can go to chat and like talk about it, and you are going to get other people helping you, as Zeu was saying. And like the first one that finishes it, even if there are three people working on the same task, the first one that finish it and send the PR, maybe it’s going to send the PR like that that already is going to generate a notification for some people or is going to share it.

in the chat and then the other people will see ah I was also working on this and that should feel like oh I have knowledge of that part of the code I can help review that PR. So Daniel doesn’t have to review how many? Like 1,500. It will be inhuman. So like these other people that were also working on the same task can go and review and can make that better because they had like other points of view and so like then when Daniel see there is already like review it, approve it, and then Daniel goes and merge it. Put it in the merge cube. And this is why it scales.

Daniel Roe: One of one of the things that is I mean I this is totally the case. People often ask me, I also maintain Nuxt, by the way, if you didn’t if someone didn’t know they’re like what is this Nuxt thing that people are talking about? It’s a framework for all imposter gaps’ view. I spend most of my time doing that and but people often ask me, you know, well what is the roadmap? What a what a what a what a what is Nuxt going to have on its like release calendar next month? Like well clearly you’re operating from a different point of view because that’s not how a really community-driven open source project works. Because why do people contribute to an open source project?

No one is telling them that they have to do it. They’re not paid to do it. People do things because they want to do them. And when you’re motivated by what you want to do, then it’s not like, oh, I want to do X, but they’re telling me to do Y, so you know, I just gotta do that. Nope, that’s not how it works. That’s not how open source works. You’re you are solving you’re doing things for the joy of them you’re solving things because you want to solve them or you want to get rid of the pain or whatever. And that sort of self-motivation is totally different from a lot of commercial drivers for you know where you can sometimes feel like a cog in the machine and like that is not what it’s like in open source at least not in a community driven project and iteration is a good thing.

You know, you can build and you can fix. Like Bailey was mentioning in the chat just a moment ago, he sort of merged the likes button and the next morning it was different. There was loading states, there was stuff like that. That’s the idea you know, I will I sometimes feel it’s a bad habit that people will put PR up and I’ll just push some changes to it. I hope they don’t mind. Please, it’s just not a reflection on the PR, but the reflection is we’re m moving and I don’t mind if anyone does that to me either. Like we’re just constantly, hopefully getting better every step of the way. One of the things that I loved, Matias posted the other day.

I guess a lot of people have been thinking about vibe coding stuff, right? Vive coded clones of things. One or two have done the rounds where there’s clearly, you know, an agent has been given a job to clone X. Whatever. There was an article called what was it? Tests Are the New Moats. And Matias made the excellent point, which I totally agree with. That is utter Bonkers. That is not true. There is that is just rubbish. I mean total nonsense. Maybe for a commercial project, not for an open source one. The thing that’s the moat is the community. Anyone can copy the code. Anyone can copy a front end. Who cares? The thing that actually makes a project work is the people that make it up.

And if we somehow get reductionistic into thinking that code is what matters, we have desperately lost our way. Like you cannot replace the beating heart of a project because that’s much more important than any kind of set of Jira tickets or artificial constraints about what you’re trying to build.

Jim Ray: That’s amazing. I’m gonna pull quote that one wholesale. Such an incredible point. And I think that applies to a lot of the work that we’re doing. We’ve got about 15 minutes left, and I don’t want to immediately go into a negative direction here, but why not? I am curious, what are some of maybe the sharper edges that you ran into, particularly when developing on the protocol? And I’m asking from a very self-interested perspective, because I want to know. how Alex and I can make things easier and better for you. But would love to hear from all of you as you whether it was getting started. You know, I think you all started the project before we launched our new docs.

So if the answer was, you know, better docs, sorry. But I am I am kind of curious, like, you know, what are some of the edges that you might have run into with the protocol with you know the decision to do your own PDS hosting. Like, you know, I don’t I don’t I don’t want to invent things, but Zeu, maybe you’ve got perspective on that first.

Zeu: Yeah, yeah. So honestly, it the main like initial hurdle when it comes to integrating AT Protocol is OAuth. Hard to implement, not gonna lie. And you know, I mean as I said, I wasn’t in Nuxt, so you know, better docs was the solution. And what do you call it? I eventually just had to like work my way around, like make my own like Nuxt OAuth template. Like I lately I’ve been doing a lot of like OAuth templates because I feel like that’s like the first step, you know, when you when you’re making an atmosphere app. So just making that easier, I think I mean, I think it’s as easy as it can get, honestly. But yeah, there’s I mean there’s that.

I mean the whole PDS hosting thing, it’s less of it’s less of any like technical constraint per se, but more like being able to host our own users without reliant on any other third-party service. And like as I said earlier, you know, a lot of potential users of NPMX probably may not have a Bluesky account. So you know they won’t have a PDS to start off with. So we needed a way for them to sign up if they want to what do you call it, if they want to play with the social features. So yeah, I mean there’s not a lot of bad things to say about implementing AT Protocol. A lot of it right now.

You know, we use a lot of community tools, mainly constellation and slingshot from Fig, who’s making microcosm. Those two APIs, those two sites, incredibly helpful. Yeah, Bailey, in chat, Fig Proto. So true. What do you call it? Just those two sites are so useful as a developer where you don’t need an app view just yet, right? Like aggregating you know, we’re just aggregating likes and stuff. We don’t need a full-blown app view to you know crawl a relay or something along those lines. We could use a community tool like Constellation, like Slingshot to make things so much easier. I mean eventually I think we’re gonna move to an app view once things scale up, but that’s a that’s a future question.

Jim Ray: That is actually a really interesting architectural insight. And I do think that that is a path a lot of folks take. You know, they build something on constellation to kind of figure out what are the pieces that make sense? Where do where am I going to need to start building first? Y’all went down the PDS route. So, you know, that that seemed like rather than building the app view first, and it seems like it’s working for you.

Zeu: Yeah. Oh, also selfish note for me, Lex, the TypeScript thing, I put I put a post up on Bluesky. When you what do you call it? In the new docs, when you’re referring to the Lex thing being like, if you want to know more about Lex, read more on the readme. And it links to an internal package, so it’s four or fours. So.

Alex Garnett: already fixed. Thank you for raising it. I appreciate that. That one didn’t get updated before launch. Thank you.

Zeu: Thank you. Yeah, we’re using Lex now too. And then we imp integrated Lex with constellation and slingshot. So like the RPC calls, like we have those as lexicon definitions. And then we like just plug it into the Lex client. So now it’s all type safe. It’s pretty good. It’s really good.

Alex Garnett: Yeah, I’m really happy with Matthieu’s work there. It’s super impressive. And you’re touching on a lot of other, you know, things that I spent a lot of time thinking about, which are just how, you know encountering OAuth and just not being able to get around the fact that you have to implement OAuth, I think, is still a bit of a it’s uphill for a lot of developers. And that’s why half our tutorials right now are about OAuth. But I think we always want to get to a point where we can do more and more like drop-in you know, like mid-level frameworky stuff as we can. So you’ll see more in that department over this year, I think.

As far as microcosm, I love advocating for backlinks so very much. I think being able to see what you can do without needing to backfill the network is really, really powerful. I just absolutely adore Oliville’s work on that. And I hope we can continue to get that in front of more people.

Matias Capeletto: Nice. I can chip in with some things. I will save first some flowers. I think that what is currently we have you have now like with the protocol, it really works. So like we move it or data just in a call like with Bailey and we move it the NPMX dev account, we move it Daniels and ours, like and it’s all works and it’s like we log it in and everything is working and it’s amazing. It was a really nice moment. But also that that shows like it will make our life so much easier if you go and tell all the other services to adopt atproto and have already one identity. And like we don’t have to actually do a lot of the hoops that we were talking with Zeu and Bailey before this call, for example, how we are going to actually reference even like a resource that is not have a record in a proto when we need to maybe create a kind of like fake record for it and then reference that record.

And like that could be something that also we could discuss as a wider community, how we are going to do that because we are going to do a lot of that. Maybe like we can open this a conversation that is like bigger than NPMX because other projects will also need to do the same. But yeah, like if you can like do some call calls and like make everyone adopt atproto, that will make a lot a lot easier on life. And something like more realistic, we are like using the collaboration tools that we use as integrated as possible. So like we have doors everywhere. So in blue sk in Bluesky one, like when we post, like in Bluesky, we will have doors to our Discord, to our repo, and we will share links like across all the tools that we use.

In the repo, we are going to reference chat, we are going to reference post. And inside the Discord in Oscar’s chat, we are all the time sharing Bluesky URLs. All the time. And like even like in that we have a share channel and like we are all the time, whatever we see, we share it because it is a it is a nice way to connect. And actually it is a tool to bring a discussion that is happening inside the community to like the wider, to other projects. Because this is a like Bluesky is our platform to talk with the more general protocol community. If we only talk in our Discord, we are only talking between us.

So we need these like connections to work as seamlessly as possible. And in this core in particular, sharing Bluesky URL was not working because of like write limiting that hopefully was improved. Like we talked about this like in like one day, Slack, Discord, I think like signal, like all this like it got better, but it’s still not there. Like when you share a URL, there is still times that in quoted post like the image will not appear or the video will not appear and we will have to share another URL just to make the expansion. So it doesn’t like it should look exactly the same in this chord as it look in the Bluesky app exactly the same like well not pixel level but like it should have all the information and I think that there is a discussion to have.

I know they are cost, and maybe this core can pay you. You put a number and they pay you. So like, but like I think this is worth the solving.

Alex Garnett: Yeah, I can speak to that a little bit, and I think you’re right to bring it up. I know Slack, for example, has their own unfurling they implement on their side. So Slack decides how they want to render a given link and fetch attributes and fetch rich media and so on. For a lot of the rest of the web, it’s just we provide the oEmbed implementation, right? And so like however a given post shows up when it’s embedded into a website. is gonna use our oEmbed. And there’s things that we can do to try to improve that. For example, like it’s still not possible to get video from a Bluesky post to just be in an oEmbed because of the video library we use and so we’re continuing to improve a lot of the surfaces and a lot of just like the defects around those things.

And we’ll keep that in mind, that it’s also something that you’re encountering for your work in Discord too.

Daniel Roe: I mean it is worth just putting in the other side, which is that because Bluesky they’re waving at you, Ned. Because Bluesky is an open an open protocol. We can do very cool stuff like when people do share that blue scale link in Discord, a bot adds little a Wamello bot. Check it out, check out Wamelo, puts a little blue heart next to it. And if anyone clicks that blue heart, and they will say, hey, do you want an OR with Bluesky? And if they do, then when they click that hard, it will actually like the post by them on Bluesky. So like people are interacting in Discord with the Bluesky post. And that’s pretty cool, right?

That’s something you could only build when you have a sort of open API web you can you know hey, anyone can write a like if you’re OAuth and have permission to do it. So that’s I think I think it’s that’s really amazing. And I will also say another thing in terms of flowers we I mean I didn’t share a single thing about npmx on Twitter. My Twitter account is suspended. I don’t know if Matias I know you’ve d your Twitter account has died a long time ago I think the success of NPMX is just it shows that the tw the developer community is on Bluesky. Or at least enough of the developed community is under the sky that what’s the term it has the juice and i think I feel like this is a safe space to say that.

But it’s totally true. Like there is no question about it. It’s not just that hey Bluesky is this great place for reaching atproto. No, Bluesky is a great place for reaching people who are not into atproto, but who are being but who are into JavaScript, TypeScript, building stuff for the web. Like it is, it is my people are here. It’s a good place to be.

Jim Ray: That’s amazing. So we just need to fix it off and get everybody using atproto. That’s the those are the two takeaways. I think Alex and I can handle that in probably Q2.

Matias Capeletto: I want to say something that is like it’s so good to do open source in an open source and open network, social network. So nice that you see something and you know like if something bothers you enough, you can do a PR. At least like for the communication between open source developers we shouldn’t accept like less than that.

Alex Garnett: True words. And it’s nice.

Jim Ray: Well, I think we’ve got a couple minutes left. And I just wanted to kind of open it up and first of all say thank you. Zeu, Daniel, Matias, thank you so much for joining us here. Thank you for NPMX. We are internally very excited about it. it. And Alex and I are particularly excited about it because we have a goal of getting more non-protocol developers building on atproto. And so you’ve basically done this like massive project for us that is just going to be so attractive. to the exact, exact developers that we are aiming squarely at. So thank you for that.

Matias Capeletto: Yeah. Thank you for your support too, because you have been there like from the beginning, like you saw the project pop and you were there, like how we can help you. And that is felt.

Jim Ray: Cool. Thank you. Thank you. That’s our job. Amazing. We did have some questions come in. I think we managed to get to most of the questions as they were coming in. And mostly I think all of the chat was mostly just saying how awesome Bailey is. But and tons of everybody is just so excited for NPMX. I think everybody has I have gone and favorited all of my favorite npm packages of which I have. Just a few. And so I think I was even the first one to favorite the new Lex package. So sorry, Matthieu, for getting on that one. I felt a little bad about that.

Alex Garnett: Can’t always be first.

Jim Ray: No, it’s true. Well, seriously, thank you all so much for showing up. Thanks for everybody in the chat. These are fun. We’re going to keep doing these for as long as people are going to keep showing up. I feel like the bi-weekly cadence. I’m a little bit behind on getting the recordings up. I have just I’ve run smack into a wall with YouTube of all places. So hopefully the streamplace folks get their the archiving piece in place. But so we’re gonna get these the recordings up. We’ve got them they’re all on my computer. And so just super, super grateful for everyone and all the response that we’ve been getting. These have been going really, really well.

So yeah, y’all keep showing up and we’ll keep doing them. Alex has got to go let Paul out of his car now.

Alex Garnett: Yeah. Keys right just top screen here. Thanks for joining everybody. This is a pleasure. Thanks for joining us late at night in Europe. And yeah, speak to y’all soon.

Matias Capeletto: Thanks a lot.

Jim Ray: Bye.

Matias Capeletto: bye.