[00:00.00] Well friends, it's the last interview show of the year, and it's a good one for those [00:12.16] who are new. [00:13.16] We feature the hackers, the leaders, and those reinventing the terminal. [00:16.92] Yes, today we're joined by Mitchell Hashimoto. [00:20.20] Mitchell co-founded HashiCorp, took it all the way to IPO, exited in 2023, and now he's [00:26.24] working on a terminal emulator called Ghosty. [00:29.60] Ghosty is set to 1.0 this month, so we sit down with him and talk through all the details. [00:34.48] A very big thank you to our friends and our partners over at Fly. [00:38.72] Yes, Fly is the home of changelog.com. [00:42.12] It is the public cloud for developers like us, like you, who ship, and you can learn [00:46.44] more at fly.io. [00:48.60] Okay, let's Ghosty. [00:53.20] What's up, nerds? [00:58.64] I'm here with Curt Mackie, co-founder and CEO of Fly. [01:02.64] You know we love Fly. [01:03.64] So, Curt, I want to talk to you about the magic of the cloud. [01:06.52] You have thoughts on this, right? [01:08.48] Right. [01:09.48] I think it's valuable to understand the magic behind the cloud because you can build better [01:12.84] features for users, basically, if you understand that. [01:15.68] You can do a lot of stuff, particularly now that people are doing LLM stuff, but you can [01:19.84] do a lot of stuff if you get that and can be creative with it. [01:22.96] So when you say clouds aren't magic because you're building a public cloud for developers [01:28.08] and you go on to explain exactly how it works, what does that mean to you? [01:32.48] In some ways, it means these all came from somewhere, like there was a simpler time before [01:36.56] clouds where we'd get a server at Rack Shack and we'd SSH or Telnet into it even and put [01:42.66] files somewhere and run the web servers ourselves to serve them up to users. [01:47.64] Clouds are not magic on top of that. [01:49.32] They're just more complicated ways of doing those same things in a way that meets the [01:53.08] needs of a lot of people instead of just one. [01:55.44] One of the things I think that people miss out on, and a lot of this is actually because [01:59.56] AWS and GCP have created such big black box abstractions, like Lambda's really black boxy. [02:05.82] You can't like pick apart Lambda and see how it works from the outside. [02:08.32] You have to sort of just use what's there, but the reality is like Lambda is not all [02:11.80] that complicated. [02:12.80] It's just a modern way to launch little VMs and serve some requests from them and let [02:17.60] them like kind of pause and resume and free up like physical compute time. [02:22.76] The interesting thing about understanding how clouds work is it lets you build kind [02:25.96] of features for your users you'd ever would expect it. [02:28.36] And our canonical version of this for us is that like when we looked at how we wanted [02:32.04] to isolate user code, we decided to just expose this machines concept, which is a much lower [02:36.78] level abstraction of Lambda that you could use to build Lambda on top of. [02:40.28] And what machines are is just these VMs that are designed to start really fast, are designed [02:45.32] to stop and then restart really fast, are designed to suspend sort of like your laptop [02:49.20] does when it closes and resume really fast when you tell them to. [02:52.70] And what we found is that giving people those parameters actually there's like new apps [02:56.52] being built that couldn't be built before, specifically because we went so low level [03:01.12] and made such a minimal abstraction on top of generally like Linux kernel features. [03:07.00] A lot of our platform is actually just exposing a nice UX around Linux kernel features, which [03:11.72] I think is kind of interesting, but like you still need to understand what they're doing [03:15.08] to get the most use out of them. [03:16.80] Very cool. [03:17.80] So experience the magic of Fly and get told the secrets of Fly because that's what they [03:23.70] want you to do. [03:24.70] They want to share all the secrets behind the magic of the Fly cloud, the cloud for [03:28.34] productive developers, the cloud for developers who ship. [03:31.86] Learn more and get started for free at fly.io. [03:34.86] Again, fly.io. [03:47.80] We're here with Mitchell Hashimoto. [04:06.46] Mitchell, it's been literally forever in literally sense how Adam says it literally, how I use [04:12.50] it, but how he used it literally forever. [04:14.38] Welcome back, man. [04:15.38] Welcome to the show. [04:16.38] Thank you. [04:17.38] It's been 10 years since the last show. [04:19.14] And then the first time, the only other time I was on, I think it's been like 13, 14 years. [04:23.66] It's wild. [04:24.66] I still remember the day that you posted Vagrant onto Hacker News. [04:26.98] I think the first time. [04:27.98] I remember that day. [04:29.18] That was 2010. [04:30.18] I don't know, but yeah. [04:31.18] I don't know. [04:32.18] I don't know which day it is either. [04:34.70] But yeah, I remember that because I was like, oh, this solves one of my problems I have [04:37.70] in life. [04:38.70] And I was very excited. [04:39.70] As was the rest of us. [04:40.70] Right. [04:41.70] I mean, Vagrant was a huge hit right away. [04:42.70] Thank you. [04:43.70] Thank you so much. [04:44.70] But nowadays, Ghosty. [04:45.70] Is that how you say it? [04:46.70] Or is it Ghosty-T-Y? [04:47.70] No, I say Ghosty. [04:48.70] I say Ghosty. [04:49.70] Okay. [04:50.70] That's the first controversy I had in my head because I was calling it Ghosty-T-Y, and then [04:53.78] I was like, I've met people just say this Ghosty. [04:55.98] What do you think, Adam? [04:56.98] Yeah. [04:57.98] I would say Ghosty, but I can see why you would say Ghosty-T-Y, but that would just, [05:02.84] it's like H-T-T-P, like why complicate things? [05:06.66] Well, I have trouble because I speak faster. [05:10.10] I have to slow down to say H-T-T-P, I have to be very intentional to get it right. [05:13.86] Because I'm like, H-T-T-P, it's not good. [05:16.78] So why would I say Ghosty-T-T-Y? [05:19.54] For the uninitiated, Ghosty is Mitchell's new project. [05:22.04] It is a terminal, a terminal emulator. [05:25.94] I don't know what the technical term is. [05:27.06] Mitchell, I'm sure you know every little detail. [05:30.14] Terminal emulator, terminal, what is it? [05:32.30] If you want to be pedantic, terminal emulator, but you really don't have to be. [05:36.34] I think to most people, terminal would make the most sense. [05:39.18] Yeah. [05:40.18] Why a terminal, man? [05:41.66] Reinventing the wheel, so to speak. [05:43.56] That's usually the first thing I get asked. [05:45.46] Yeah. [05:46.46] I mean, I think the important thing to know is I didn't set out a couple things, I guess. [05:51.46] I didn't set out like knowing I wanted to work on a terminal emulator, and second, even [05:56.06] when I decided, hey, I want to work on this, I didn't think anyone would actually care. [06:02.38] But the why really goes back to, I wanted to post HashiCorp sort of get back into different [06:09.38] categories of programming that I hadn't had the time to work in and felt a little rusty. [06:16.82] No pun intended. [06:20.28] For me, that meant non-infrastructure, non-server side, desktop side, software, using a GPU, [06:28.46] something I never used. [06:29.46] Well, we're at HashiCorp, at least not too much. [06:32.22] Graphics programming, just everything, the polar opposite of what you could think of [06:36.98] what I've been doing. [06:37.98] I wanted to get back and play around with it. [06:39.94] And I poked around at a few things, but felt that a terminal emulator was a good combination [06:47.22] of those things I wanted to play around with. [06:49.68] And as I sort of spent more time doing that, recognized, hey, I think terminal emulators [06:56.98] can actually be a lot better. [06:58.58] And I think there's like an opportunity here to do something that people really love. [07:02.98] And that turned into a much more serious thing, I guess. [07:06.14] Yeah, the terminal's been played with a little bit recently, you got Warp, I believe there's [07:10.62] Wave. [07:11.62] Those are like the two most recent attempts at a terminal of the future, so to speak. [07:17.22] You obviously got Terminal.app, which I watched briefly some of your talk and you scoffed [07:22.66] at the speed of Terminal, Mitchell. [07:27.00] It's not even the speed. [07:28.00] I'm not a big fan of the built-in one, but yeah. [07:31.02] Gotcha. [07:32.02] Yeah, I think that one thing I've always said about terminals is that I think if you compare [07:38.98] them conceptually to a web browser, then it starts to make a lot more sense about why [07:45.50] I care about terminals. [07:46.86] And what I mean by that is the web browser has, for better or worse, I don't think it's [07:52.30] controversial to say that it's one sort of the graphical interface ecosystem of the world. [08:00.58] If someone's building a graphical interface today, 9 out of 10 times, probably more than [08:04.46] 9 out of 10 times, they're using a web technology, whether it's actually in the browser or Electron [08:10.34] or whatever it is. [08:12.22] And I think there's still a good place for text-based interfaces, and the terminal has [08:18.58] always been the place for text-based interfaces. [08:21.42] And sometimes the terminal lives in a browser, if you're using a web-based text editor and [08:26.78] stuff. [08:27.78] And I think that if you look at web browsers, they get hundreds, maybe like a couple hundred [08:33.10] if you're being conservative, new features and innovations every year. [08:36.34] And if you look at a terminal, they get, I don't know, you can probably count on a couple [08:40.26] hands how many they get per year. [08:42.42] And I just don't think it's a very exciting, innovative platform for developers. [08:46.46] And I just sort of am wondering what happens if you do make it exciting, or does it become [08:52.06] exciting? [08:53.06] I don't know. [08:54.06] But for me, the worst case, if it doesn't become exciting, is we still use terminals [08:57.50] every day. [08:58.50] So at the very least, I think you've built a better terminal. [09:00.54] So yeah. [09:01.54] Well, two tools that I use every day as a working developer is a browser and a terminal. [09:07.58] And all of us on this call have been around the block a couple of times. [09:11.78] I mean, many people listening weren't there in 2010 when you first released Vagrant on [09:16.42] Hacker News. [09:17.42] And yet, the terminal is still adopted newly to this day by new technologists all around [09:22.30] the world. [09:23.30] So it's not going anywhere. [09:25.02] But I also have just been kind of happy with the way it works. [09:29.26] I mean, I'm kind of set in my ways. [09:30.90] And so I wasn't looking for ghosty necessarily. [09:34.74] But having tried it out, it sure is a nice terminal and you're just getting to 1.0. [09:39.98] So I know you've been working on it for a while. [09:42.58] Where did you start? [09:43.58] And how did you set out? [09:44.58] I mean, you have to kind of stake your claim. [09:45.86] Like this terminal is going to be different than terminal.app, for instance, in these [09:50.18] ways. [09:51.18] Yeah. [09:52.18] What were your initial goals? [09:53.18] Yeah. [09:54.18] So what I like to say, especially for the 1.0 release, what I'm trying to do is build [09:58.14] a terminal that is the best what I call existing terminal. [10:03.14] I'm not trying to innovate too much on what a terminal can do. [10:06.14] I'm just trying to make what terminals historically have done a very, very good experience. [10:12.06] And the way I'm sort of carving out what makes ghosty different for now and what, if any [10:18.18] of these are important to you, I think you would find a lot of joy in using ghosty is [10:23.50] I'm trying to build something that's fast and cross-platform and native. [10:31.30] And the ands in there are important because there's a lot of terminals out there that [10:35.18] are fast or or native or or cross-platform or but there's, I felt that I couldn't find [10:41.54] one that anded all three of those properties and ghosty does that in my opinion. [10:47.54] I mean, that's that's what I set out to do. [10:49.38] And so it's it's fast. [10:51.14] And when I say fast, I'm not trying to say it's the fastest, depending on the benchmark. [10:55.84] Sometimes it's the fastest, sometimes it's number two. [10:58.74] But importantly, it's very, very close to the fastest. [11:02.26] And I don't think you could ever argue it's not fast to say to say that cross-platform [11:07.14] it works for launch. [11:08.14] It'll work on Mac and Linux and native on Mac. [11:11.46] It's a native Mac application using Swift UI. [11:14.02] The UI is written in Swift on Linux. [11:16.90] There's no real definition of native, but it's a GTK based application and it'll feel, [11:22.74] you know, the way I describe it on Linux is if you use Alacrity or kitty or West term [11:27.98] or something, you'll immediately notice the difference between that and ghosty in terms [11:32.62] of how it integrates with your desktop environment. [11:35.30] How do terminal folks define fast? [11:37.50] Is it input lag? [11:38.66] Is it? [11:39.66] That's a great question, because actually, when people say this terminal or that terminal [11:43.38] is fast or slow, it actually really frustrates me because it's so complicated how you define [11:47.70] that. [11:48.70] Because fast doesn't mean anything if you just say fast, unless you're saying in every [11:51.56] category possible, which no terminal is. [11:53.66] And so, yeah, there's a few ways people tend to define fast. [11:58.32] One of the ways is simply how fast it could read files, you know, how fast text can go [12:04.22] through your terminal. [12:06.10] Some people say that's a useless metric. [12:07.66] I think it's super important because tailing logs and or accidentally catting a file is [12:14.26] stuff we do all the time. [12:16.58] And another one is something we call input latency. [12:19.58] Basically, when you press a letter on your keyboard, how long it takes for the photons [12:23.74] to appear on the screen. [12:25.94] Another one is sort of rendering speed. [12:28.62] What frame rate can you maintain while you're, say, scrolling through a Vim file or something? [12:33.74] And that's that's slightly different from the speed it can read. [12:36.22] And there's a couple more, but there's so many different dimensions here to speed. [12:40.66] And we've tried to really be, like I said, not necessarily the best, but in the inarguable [12:48.98] class of the best for every one of these categories. [12:53.02] What is it that you do to make it fast? [12:54.64] Like where does that begin? [12:56.14] When you consider speed and the different paradigms you can consider, what are the permutations [13:01.22] of that? [13:02.22] So there's there's again, because there's so many dimensions to speed, there's also [13:05.70] dimensions to how you do it. [13:07.26] And one of the ways is being a native application, taking advantage of things that are hard to [13:12.42] take advantage if you're not. [13:13.82] So, for example, we spent a lot of time coming down to really the instruction level architecture [13:19.94] of the program. [13:20.94] And if you're on a Mac computer and a new Apple Silicon Mac computer, we take advantage [13:26.10] of literal ARM instructions that aren't available elsewhere to make things faster. [13:31.46] Likewise, on Intel, I'm talking mostly about SIMD work to make read speeds and parsing [13:38.34] speeds very fast. [13:39.98] But from the rendering side, we use Metal directly on Mac OS, we use OpenGL on Linux. [13:45.82] The Metal part is really important on Mac OS, because there's very, very few terminals [13:50.64] that use Metal, iTerm supports Metal, but disables it if you use ligatures, for example. [13:56.26] I think that I don't, it's either number one or number two, like I think Ghostie is the [14:00.46] only terminal that has a pure Metal renderer that also supports ligatures. [14:04.66] And that's just important, because by using OpenGL on Metal, there is an overhead because [14:09.26] Apple does not natively support OpenGL. [14:12.10] So what it's doing is translating that to Metal. [14:14.80] So there is an overhead. [14:16.18] And you can actually notice that if we do like render speeds between Alacrity and Ghostie, [14:21.22] you get about a 10% frame rate difference on the same workload with Ghostie under basic [14:26.78] load, not even heavy load. [14:28.06] And so those are just a couple examples of the things that we're looking into. [14:33.34] I love this idea of, of the terminals of browser, we kind of touched on this a bit with like [14:38.38] two E's before and the text based interfaces and just the ease of that. [14:43.74] So obviously, version one is really getting the, the terminal as it is, that Ghostie out [14:51.50] there, that version one is out there. [14:52.50] Drop in replacement, right? [14:53.50] Right. [14:54.50] I do want to put an asterisk on that, though. [14:55.82] It's the terminal as it is, but supporting all of the most modern features that have [15:02.62] been created previously, and they're there. [15:05.86] I think that, you know, my bias, but Ghostie is the most feature rich in terms of terminal [15:11.14] specifications that, you know, in terms of kitty image protocol, that kitty defined, [15:16.58] and then some other things that are all over. [15:18.68] And we could talk about that later. [15:19.86] But even though it's the best existing, I think we bring together all of the most modern [15:24.62] things as well. [15:25.62] What I was trying to drive towards was this idea of the terminal as a platform, right? [15:30.30] Like it's been there, it's been a tool, as Jared said, it's a daily driver for me, for [15:35.70] him and for many of the developers out there. [15:38.66] But it's not always the, the platform for which you do things like Vim is a thing, obviously, [15:44.66] you got many of the tools you use on a daily, but I'm thinking like Htop, stuff like that. [15:49.50] In terms of this platform, this TUI platform is, are you thinking like beyond version one [15:54.74] is maybe more native ways to do TUIs kind of thing? [15:59.62] What are your thoughts on beyond this, this realm? [16:02.70] Yeah, I mean, I think that's, that's, that's, that's exactly right. [16:06.54] That's, that's the way I would look at it. [16:08.10] The question I've asked people is when they're not using a terminal for something, especially [16:13.78] if it's something that's very terminal-esque. [16:15.02] So for example, the people I like talking to the most right now are people that use [16:18.98] something like MacVim or NeoVim in a separate native application or something like that. [16:25.02] You know, I usually ask them, why aren't you using Vim in a terminal? [16:28.70] Like what's, you know, they're so close. [16:30.74] So why aren't you doing that? [16:31.74] And even going further than I will ask people that simply use VS code or, you know, a total [16:36.62] non-editor. [16:37.62] I mean, anything, what draws you to using a graphical interface over a terminal one? [16:42.76] And right now that answer is really easy in a lot of cases, there's really obvious reasons [16:47.30] why the terminal version is inferior. [16:50.42] And my goal is to look into how to improve that. [16:53.38] So concretely, for example, one of the things that people brought up with Vim is that in [16:59.30] a, in the terminal version, you can't drag and drop things like images or even things [17:04.38] like files to a certain extent. [17:05.46] You can't just like drag a file into Vim and have it open a new tab. [17:10.02] Going a little bit further, if you right-click in Vim in the native app, you'll get a native [17:14.18] context menu. [17:15.18] And if you right-click in the terminal, you get this like kind of funky block character [17:19.10] drawn one, and that doesn't feel great. [17:21.18] In the native Vim, you could have native tabs. [17:23.06] And so one of the things I'm actually looking into is how can you get a terminal program [17:26.46] to be able to use native tab widgets, even though it's driven by one program, but it's [17:31.86] showing up as multiple distinct tabs that you could pull out into separate windows and [17:35.32] stuff like that. [17:36.74] And I think even, you know, one of the more extreme ideas I have is that a community member [17:41.52] brought up is like, what if you actually had also had a browser, which, which seems weird [17:45.58] because I'm, I'm painting them as a dichotomy, but I don't think they're necessarily a dichotomy. [17:49.98] The argument was if you're browsing documentation, which is often in HTML, right now you have [17:54.86] to do a link that opens in a browser in the same way that you could just draw text in [17:58.82] a browser. [17:59.82] What if you could just embed a browser widget into part of your terminal UI so that the [18:04.42] documentation part just is, that happens to just be normal browser technology without, [18:09.58] so you could like live in this sort of platform for, for reasonable overlap, right? [18:14.82] I'm not trying to replace the browser, but just for a reasonable amount. [18:17.66] If you're, yeah, if you're like opening a PDF, like why does the PDF have to open in [18:22.02] a separate thing? [18:23.02] It opens directly in the browser. [18:24.14] Why can't a PDF open directly in a terminal? [18:26.62] Stuff like that. [18:27.62] I think anytime you eject to do something is at least worth asking the question, like [18:32.86] why does that have to happen? [18:34.54] Exactly. [18:35.54] And I don't think it's like why, and then I don't think every answer is we have to make [18:38.90] that work in a terminal. [18:40.12] I just like, I think the knowledge of knowing why and being critical about if you can maybe [18:47.50] extend the point at which you have to eject is a useful thought exercise. [18:51.74] So ghosty passed my sniff test immediately because there was two things I wanted and [18:57.02] the first one was TMUX. [18:58.02] So I was like, okay, can I drive this daily? [18:59.94] And I've only been on it for a couple of days, so I probably, there's probably warts and [19:04.14] road bumps that I haven't quite hit yet and I'll let you know next week. [19:06.98] But so far it's like, can I run TMUX? [19:09.66] Yes. [19:10.66] Okay. [19:11.66] Do I have to sign in to use it? [19:12.66] No. [19:13.66] Okay. [19:14.66] I'm good to go. [19:15.66] But TMUX is a weird thing because, you know, I've been using it for years, but really it's [19:19.10] kind of a hack, like a terminal multiplexer, like you think extending and making the terminal [19:25.30] better, like shouldn't that kind of functionality be part of terminals? [19:28.78] I don't know. [19:29.78] Your thoughts on that? [19:30.78] I think so. [19:31.78] So there are terminal people out there that I don't need to shame, but they are like sort [19:36.34] of militant about disliking multiplexers. [19:41.30] I'm not that person. [19:43.30] If you want to use the terminal multiplexer in Ghosty, I want to make it work. [19:46.70] However, I do think that terminal multiplexers make the terminal experience worse, but there's [19:53.86] no better option right now. [19:55.50] So it makes sense that you're using them. [19:57.30] So the reason I think a lot of people don't think about this as a terminal multiplexer [20:01.54] is itself a full fledged terminal where its UI is just text that's going to another graphical [20:09.38] terminal. [20:10.38] Like you're running multiple levels of terminals and one of the first places that causes issues [20:15.18] is there's features that Ghosty supports that because something like TMUX doesn't support, [20:21.42] you no longer get. [20:22.42] And a good example is, yeah, a great example is the graphics protocols. [20:26.86] Like we support graphics protocols, TMUX doesn't. [20:30.30] You just lost that because the terminal within the terminal has to understand first and since [20:35.34] it doesn't understand, it throws it away. [20:37.38] And so if we could get rid of that, then yeah. [20:40.66] And one of the things I am thinking is the ability, my dream is with things like tail [20:45.28] scale out there and making it so easy to do networking, private networking, I want to [20:50.50] be able to run basically like a Ghosty host instance on my home computer, run it against [20:55.88] your tail scale network, and then anywhere you go, reopen, reconnect, and it's your same [21:00.82] sessions, like TMUX, but instead of just the text, it's actually like all your old windows [21:05.78] and splits natively perfect the same size, pop back up, and you could close all of them [21:10.70] and it's all good because it's all remote and you own all your data, it's just running [21:14.98] on your own machine. [21:15.98] It's a tail scale, all that stuff like that is something I'm actively trying to do right [21:20.18] now. [21:21.18] And TMUX would just be dead to me. [21:22.18] It would just be dead to me. [21:23.18] Get out of your TMUX. [21:24.18] Get out of your TMUX. [21:25.18] Yeah, yeah. [21:26.18] I think the people behind TMUX and Zellige and stuff are great, but I think that philosophically [21:29.98] I would, I would love to see them disappear. [21:32.38] Not the people. [21:33.38] Not the people. [21:34.38] Not in reality, but philosophically. [21:35.38] Not the people, but the software, yes. [21:37.74] Rendered obsolete might be the better phrase. [21:41.24] Rendered obsolete. [21:42.24] I agree with that sentiment because I think, and I haven't had this conversation with them, [21:46.56] but to their credit, they probably are operating in a world they have to operate in, right? [21:51.70] They've chosen to go a different route, which is to innovate on the thing itself to make [21:55.94] it a platform versus obfuscate it into something, you know, by brute force basically. [22:01.82] Yeah. [22:02.82] Yeah. [22:03.82] And if I could get a little bit more nitty gritty, one of the things that I think Ghostie, [22:08.14] obviously the way I've talked about it, the way we focused on it has been the application, [22:10.98] but I think long-term what Ghostie actually becomes is what I call lib Ghostie, which [22:15.62] I'm really trying to build this cross-platform artifact, this library that you could build [22:21.10] terminal emulator applications on top of, so you don't have to reinvent the core of [22:25.34] understanding all of the terminal stuff. [22:28.72] You could just focus on sort of the UI part. [22:31.06] And that's not theoretical. [22:32.26] That's how the Mac Ghostie, that's how both Ghostie apps work. [22:34.82] They have a platform-specific UI that shares a common core, and that common core is actually [22:39.50] a C library. [22:40.68] I'm not ready to ship that as like a 1.0 yet, the actual core C library. [22:45.02] But because the UI is pluggable, the community, we've already talked about, there should be [22:50.26] a multiplexer like Tmux where the core is just lib Ghostie, and you just focus then [22:55.34] on the stuff above it. [22:57.78] And if you start doing that, we could do some sneaky things too, where if lib Ghostie detects [23:01.90] that it's running within Ghostie, it could just stop. [23:04.46] It could just pass through, and you no longer pay for that anymore. [23:08.54] But then the benefit of lib Ghostie existing for other terminals is you could get all the [23:12.56] modern features that Ghostie has without every developer having to reinvent that. [23:17.82] So I guess the point being is I'm trying to come at this multiplexer problem from different [23:22.86] angles because I think it would take time for them to truly be obsolete, yeah. [23:29.66] - You keep saying cross-platform. [23:31.50] How important is Windows in a cross-platform world, or in your world? [23:36.90] - In my personal world, it's not super important, but in the world of software, it's hugely [23:41.10] important. [23:42.10] And I could go back to Vagrant for this one. [23:43.62] I mean, when I really focused in, I actually, one thing I did back, probably the year after [23:48.54] we talked, back in 2013, is I bought a Windows PC, a ThinkPad, and I used Windows full-time [23:54.74] for a year, and that was because I really wanted to empathize with what the problems [23:59.06] were with Vagrant on Windows. [24:00.78] I didn't want to just get it working in a couple hours one evening and go away. [24:04.78] I really wanted to live in that ecosystem and understand. [24:08.22] And Windows got a lot better. [24:09.22] I made installers, things like that. [24:10.62] And the end result was that the Vagrant growth was absurdly huge, because the Windows software [24:16.06] development ecosystem is extremely large, and they have a lot of paper cuts that they're [24:21.06] dealing with. [24:22.06] And so I think the same thing with terminals. [24:23.82] I think that it's really important. [24:25.84] It's hard enough for sort of me as an individual to do Linux and Mac sort of as a side project, [24:30.66] so Windows didn't make it for 1.0, but it's something I really want to do for future releases. [24:37.90] I ask that because invariably somebody out there is thinking, like, "He keeps saying [24:41.78] cross-platform, but us Windows folks don't get any love." [24:45.62] And so. [24:46.62] Yet. [24:47.62] Yet, yet, yet. [24:48.62] Happy to hear that there is importance there. [24:50.58] Yeah. [24:51.58] Yeah. [24:52.58] And it's like some people have got it working through WSL, and, you know, you can run Ghosty [24:57.14] on Windows through that. [24:58.90] I just say it doesn't work, because to me, the Ghosty experience means that you're getting [25:03.74] a truly native build, and we don't have that for Windows yet. [25:07.46] It seems to me like building something to work well on a platform that you don't personally [25:12.22] use is like jobby job kind of stuff. [25:15.66] Like Ghosty is a passion project, something that you want to have fun doing. [25:20.94] I think we'll get into some of the technical philanthropy conversation later on in the [25:24.34] show. [25:25.34] I would like to at least hear your thoughts on that more. [25:26.54] For sure. [25:27.54] But what's your, I mean, do you, I guess, what's your ambitions with Ghosty? [25:31.94] Because you don't need to turn this into a business or anything. [25:35.38] And so do you want to be building in Windows support when you don't have to? [25:39.32] So my, yeah, I think the important part of the ambition point is that it's not financial. [25:46.10] The ambition behind Ghosty is really terminals are a really fundamental part of a software [25:52.58] developer's life, no matter what sort of ecosystem you're in, whether it's web technologies, [25:57.10] desktop, you know, et cetera, whether you're a student or professional, basically all these [26:01.06] dimensions. [26:02.06] Terminals are very important, and I don't see that going away. [26:04.90] And I sort of think like, what if I don't feel like people have focused very hard on [26:10.54] terminals and can I sort of be that person for a while for the steward for a while, improve [26:17.06] the ecosystem in some way and sort of build a community that could then sort of carry [26:22.62] that on later. [26:23.62] But yeah, the real, I guess, like to put it into one word, the real goal with Ghosty is [26:27.82] impact. [26:29.66] And to that end, I think that Windows support's important, but more importantly, that's why [26:35.22] LibGhosty is more important to me because I don't want Ghosty to be the one and only [26:39.86] terminal emulator application. [26:41.50] I don't want to build an iOS application, an Android application, or whatever future [26:45.06] platforms exist. [26:46.50] I want to enable others to do that without having to reinvent the core. [26:51.10] And so LibGhosty to me is like the actual impactful thing that's going to happen over [26:56.02] the long term and we could get into licensing later, but that's sort of part of the reason [27:00.42] why we ended up on the MIT license as well as I really just wanted, whether you're going [27:03.98] to be commercial or open source or whatever you wanted to do with LibGhosty, I really [27:08.94] just wanted to enable that impact no matter what. [27:11.94] I'm just reminded of Daniel Stenberg with curl, you know, libcurl is the reason why [27:16.94] curl, not to curl the command line, but curl the thing is everywhere. [27:23.26] It's because of libcurl more than it is because of the binary curl, although they're both [27:26.70] used a lot, but I mean, huge impact with libcurl. [27:30.02] So yeah, it's a great example. [27:31.34] I'm glad it doesn't have to be a business. [27:33.06] I was worried. [27:34.06] I was like, what does the, you know, do you want to build another HashiCorp here? [27:38.36] But probably not with this. [27:41.30] And I think it's to zoom out a little bit. [27:43.10] I think it's kind of cool of you, I suppose, to, you know, some would say, well, you don't [27:48.86] have to do anything, Mitchell, you can just go and fly as you do, right? [27:53.02] You don't have to satiate any of these technical chops you have, or you want to play around [27:57.98] in areas you've never had a chance to play around and you can just simply just go and [28:01.70] do something else. [28:02.70] But instead you're steeping yourself in an area where you really haven't had a chance [28:06.10] to do so, and it will be impactful. [28:09.30] I think the Wikipedia of the future for you will be so cool because you could have had [28:14.62] just walk away, do your thing, family, whatever, and congratulations on the recent addition [28:20.66] to your family, of course, but you don't have to do this. [28:24.34] You want to do this. [28:25.34] I mean, it's, to me, that's cool. [28:27.42] Thanks. [28:28.42] Thanks. [28:29.42] Yeah. [28:30.42] Yeah. [28:31.42] Whatever people write on Wikipedia, if there is anybody, anything, then fine. [28:34.14] But I think that, you know, part of the way I've described Ghostie is this idea of technical [28:39.34] philanthropy. [28:40.34] And, and one of the things I know about myself is, you know, like, I just love programming [28:45.38] and I love building and I knew that wasn't going to stop no matter sort of how much career [28:49.94] success I had or, or things like that. [28:52.84] And so my thinking was, if I'm going to spend time on the computer programming anyway, is [28:58.62] there a way to make that time meaningful? [29:01.36] And you know, I'm sure there's more directly meaningful ways that I could spend that time. [29:07.06] But you know, I felt that doing this broadly used category of software for free and, and [29:14.50] trying to make it good, I guess for, for a blunt term, just good is could be meaningful. [29:20.74] And so that's, that's, yeah, it's definitely a part time thing. [29:23.10] I don't spend 40 hours a week, I spend barely maybe 10 or 15 on this. [29:27.54] And it's just the way I could have fun and pursue my passion, but still feel like I'm [29:33.54] helping something. [29:44.54] Well friends, this is the last chance you have to get the 8Sleep Pod 4 Ultra in your [29:49.06] hands in your bedroom before Christmas. [29:52.30] Go to 8sleep.com/changelog and use the code changelog if you need to, to get $350 off [29:59.30] your very own Pod 4 Ultra. [30:02.06] I've never had better sleep. [30:03.10] I love this thing. [30:04.10] I sleep on it every single night. [30:06.26] My wife and I, we absolutely love what it does for our sleep. [30:09.22] So what exactly is the Pod? [30:12.26] Imagine a high tech mattress cover that you can easily add to any bed. [30:16.94] This isn't just any cover though, it's packed with sensors, heating and cooling elements. [30:20.94] It's all controlled by sophisticated AI algorithms, and it's all designed to give you better sleep. [30:27.06] It's like having a sleep lab, a smart thermostat, and a personal sleep coach all rolled into [30:32.62] a single device, and no wearables required. [30:36.90] It uses a network of sensors to track a wide variety of biometrics while you sleep, sleep [30:42.58] stages, heart rate variability, that's so important, respiratory rate, temperature, [30:47.70] and so much more. [30:48.70] The best part, it does all this without you having to wear any devices. [30:52.26] Again, no wearables. [30:54.30] And the accuracy rivals what you would get in a professional sleep lab. [30:59.06] The Pod uses precision temperature control to regulate your body's sleep cycles, it can [31:03.86] cool you down to a chilly 55 degrees Fahrenheit, or warm you up to 110 Fahrenheit, and it does [31:09.90] this separately for each side of the bed. [31:12.30] This means that you and your partner can each have your own ideal sleep temperature going [31:15.98] on. [31:16.98] And the really, really cool part is the Pod uses AI and machine learning to learn how [31:22.64] you sleep, to learn your sleep patterns over time, and it uses this data to automatically [31:27.42] adjust the temperature of your bed throughout the night to fine tune how you sleep, to give [31:31.62] you more REM sleep, to give you deeper sleep. [31:34.30] And that's the part I love most. [31:36.02] And all this functionality is accessible through their awesome mobile app. [31:39.58] You get detailed sleep analytics, trends over time, and even a daily sleep fitness score. [31:45.70] Again, go to 8sleep.com/changelog, use our code, changelog, get $350 off your very own [31:52.30] Pod for Ultra. [31:53.50] Do it now. [31:54.50] Sleep well for Christmas. [31:55.50] Again, 8sleep.com/changelog. [31:59.02] And also by our friends over at Wix, I've got just 30 seconds to tell you about Wix [32:03.70] Studio, the web platform for freelancers, agencies, and enterprises. [32:09.56] So here are a few things you can do in 30 seconds or less on Studio. [32:15.06] Number one, integrate, extend, and write custom scripts in a VS code based IDE. [32:20.50] Two, leverage zero setup dev, test, and production environments. [32:25.26] Three, ship faster with an AI code assistant. [32:28.62] And four, work with Wix headless APIs on any tech stack. [32:32.70] Wix Studio is for devs who build websites, sell apps, go headless, or manage clients. [32:37.82] Well, my time is up, but the list keeps going on. [32:40.94] Step into Wix Studio and see for yourself. [32:43.30] Go to wix.com/studio. [32:45.86] Once again, wix.com/studio. [32:52.74] Who's the we behind Ghosty? [32:54.26] I know that you are the obviously the inceptor of it, but who else? [32:58.26] There's a community. [32:59.26] How have you leveled up? [33:02.34] Who's involved? [33:03.34] Roles, responsibilities? [33:04.34] I have to say, I didn't get or somehow miss the email that you invited me personally and [33:10.34] Jared I'm sure too into this beta. [33:13.02] I went into the discord like any other community member. [33:15.90] Oh, you did. [33:16.90] I did. [33:17.90] I got you in there, dude. [33:18.90] I gave him your handle. [33:19.90] I had to prove to Tragic that I was me and that I wasn't just somebody saying, "Hey, [33:25.14] I'm at a podcast with Mitchell in like 30 minutes. [33:27.30] Can you please give me the..." [33:28.30] Yeah. [33:29.30] I was like, "Gosh, I haven't installed this thing yet. [33:30.30] I should play with it." [33:32.02] And I was like, I just got to getting that invite somehow because my GitHub is connected [33:36.70] to my personal email, not changelog's email for some reason, and I don't check that as [33:41.00] frequently as I do business stuff. [33:42.70] So I really should change that. [33:44.22] But anyways. [33:45.22] So there is a discord. [33:46.22] There's people in there that aren't Mitchell. [33:47.50] They're doing things. [33:48.50] Yeah. [33:49.50] And I don't know what it is now, but it's somewhere between 20 and 30,000 people. [33:53.54] And that's way too many people. [33:56.10] And so there's been a good volunteer community of moderators that work really hard because [34:02.82] it's also somewhat of a chaotic experience having 30,000 people in one text channel. [34:09.34] And so they work really hard and do a great job and not just contribute on that. [34:13.30] A couple of moderators maintain the discord bot that is used for a variety of things. [34:18.74] In addition to that, there's been a couple of hundred code contributors to Ghostie already. [34:24.26] And the thing that stood out to me the most about that was I went back and listened to [34:27.66] our 2012 Vagrant changelog episode a week ago since I was like, I wonder what I was [34:34.42] doing back then. [34:35.42] That really threw me back. [34:37.02] And the first thing I noticed is we were talking about how Vagrant passed something like some [34:41.00] number of stars, but I remember it had just passed something like a hundred contributors [34:45.86] and it was already two years old and pretty popular by the time we were talking. [34:50.18] And we were talking about how I was so amazed by that. [34:53.58] And I was thinking, wow, the software developer ecosystem has gotten so much bigger, obviously [34:58.70] due to some of my background, it attracts more people, but Ghostie in private beta has [35:02.88] more stars and almost double the contributors that Vagrant had after two years of being [35:07.18] a public project. [35:08.18] And so that was kind of like a mind blowing thing. [35:11.06] But that's, yeah, it's sort of built, the we is really the community in terms of people [35:14.86] that are, that are working, I guess, like even multiple hours a week on this. [35:19.38] It's probably just me, but yeah. [35:22.10] Just to close the loop, I have to share the levels of which I had to ensure, tragic, that [35:28.14] I was me. [35:29.14] A driver's license? [35:30.14] This is a DM in Discord. [35:32.30] There's a funny detail to that, I think, is that I thought for sure when I started working [35:38.34] on a terminal more seriously, that very few people, first of all, would care. [35:42.88] But of those very few that cared, I thought that demographically, it would skew to a more [35:48.82] mature audience. [35:50.72] But what I've discovered is that a lot more people care about terminal than I expect. [35:55.08] And predominantly of those people, it is young people. [36:00.00] When I say young people, I literally mean teenagers in school, a lot of teenagers in [36:04.74] school up to early 20s, early career type people. [36:09.82] And because of that, there's some shenanigans, I will say, within the Discord. [36:16.94] And so the monitor, the moderators are very sensitive. [36:20.38] There's been a lot of scams, a lot of phishing, a lot of stuff, just people just trying to [36:24.50] get into the beta. [36:25.50] And it's not that important, but I think when you're younger, you're a little more zealous [36:29.82] about these things. [36:31.90] And so the moderators, I think, are very hardened to when someone comes and says, "Oh, I know [36:37.58] Mitchell. [36:38.58] I need the beta." [36:39.58] That they're very suspicious. [36:40.58] So yeah. [36:41.58] Yeah. [36:42.58] I was like, "I'm about to plot with Mitchell. [36:43.58] Can somebody help me get in the beta, please?" [36:45.72] And so I ended up in DM with Tragic, and he says, "Hey, can I get some kind of confirmation [36:50.86] here that you're not impersonating anyone? [36:52.98] Felt random if we're actually about to talk to Mitchell, lol." [36:55.90] And so I was like, "Okay." [36:56.94] I opened up the Calendar app and screenshot of the Calendar invite on my calendar that [37:02.22] says we're about to talk. [37:03.22] And he's like, "Hmm, not good enough." [37:05.02] Really? [37:06.02] Basically. [37:07.02] I mean, he did the thinking emoji. [37:08.58] He's like, "Just to be 100% sure, can you follow me on GitHub for like 20 seconds and [37:12.90] then unfollow me? [37:13.90] Sorry for being excessive." [37:15.42] And so I followed Tragic for, and I'm still following him. [37:18.30] I'll just go ahead and leave it. [37:19.50] That's great. [37:20.50] That's hilarious. [37:21.50] So I had to go through a couple of hoops. [37:22.50] This is a real Insider's Club. [37:23.50] The hoops will all disappear soon. [37:24.50] Well, once I got into GitHub, it said you had the invite there. [37:26.74] So I was like, once I was actually there, it was like, "Hey, by the way, GitHub is telling [37:30.34] me this, Mitchell invited you last week. [37:33.66] You're an idiot. [37:34.66] You didn't have to do all this." [37:35.66] So there you go. [37:36.66] I'm surprised you didn't get banned, honestly. [37:39.74] Usually those types of things pop up and there's sort of like, because there's like 10 moderators [37:44.30] or less, I think there's like seven moderators and 25,000 people. [37:48.66] Most of the time when stuff like that starts happening, moderators are just like, "I don't [37:52.14] have time for this." [37:53.14] And they just ban you from the server. [37:54.82] Well, he didn't. [37:55.82] They were very nice. [37:56.82] Chadwick was nice. [37:58.74] And that's the loop close. [38:00.82] But the question to get to this point was really, who's behind Ghosty? [38:05.02] I mean, obviously you started it. [38:07.18] What's the plan for community? [38:08.18] Do you have a governance model? [38:09.74] Like how sophisticated and planned out have you gone with Ghosty? [38:15.28] Not as much as I would like due to time constraints, but it's something I'll keep thinking about. [38:19.38] So for the 1.0 public launch, it'll just really be me and my side project. [38:25.36] It's really my project type of thing. [38:27.26] A lot of community in terms of contributions, discord, moderators, love all those people. [38:33.54] But I think that like longer term, I am interested in some sort of governance model because I [38:39.54] don't think I'm going to be working on a terminal the rest of my life. [38:42.70] And I do want this to be impactful. [38:44.02] So that's something I've definitely thought about. [38:46.38] The beta testers have been involved in this discussion we've had for almost a year based [38:51.62] on project sustainability. [38:53.92] Because even though it's not something I want to pursue any financial gain for, I would [38:59.18] like it to be sustainable for others. [39:01.58] And so we've talked about, can we set up whether it's, is it sponsorships? [39:05.90] Is it this? [39:06.90] Is it that? [39:07.90] In order to, I don't want any of that, but in order to pay the infrastructure costs and [39:10.82] also potentially in the future pay contributors as well. [39:15.06] And so that's something that we're just talking about and we're not 100% sure about, but that's [39:20.26] sort of the extent to which I've been thinking about this so far. [39:23.62] It makes sense. [39:24.62] I mean, so no BDFL, temporarily BDFL. [39:27.96] Yeah. [39:28.96] I mean, yeah, for now it is definitely a BDF model for now, but yeah, BDFL for now. [39:34.08] Gotcha. [39:35.08] BDFL FN. [39:36.08] There you go. [39:37.08] How long have you been working on it? [39:38.68] So the first commit was actually March or April, 2022, but it's very deceiving because [39:45.56] I was still full-time working for HashiCorp and you could just tell through the commit [39:49.56] history. [39:50.56] I worked on it here and there. [39:51.92] There was like a three month period where I didn't do a single thing. [39:54.46] And then, you know, it was very, very on and off because it was really just me playing [39:58.26] around with technologies. [39:59.98] I think I got a little bit more serious probably last about over a year, a little over a year [40:04.94] ago. [40:05.94] Yeah. [40:06.94] Did you ever consider post Hashi, like, you know, farming or something? [40:10.46] This is a cliche, but just not doing software for a while, trying something completely different. [40:15.08] I mean, we know you fly planes, but that's more of a hobby, right? [40:17.62] I do fly planes. [40:18.62] I do. [40:19.62] Yeah. [40:20.62] That is a hobby. [40:21.62] But I didn't get all pessimistic like a lot of people get. [40:25.02] I still love technology and I think that technology is getting better and I think that there's [40:29.46] a lot that could be done with it still. [40:31.06] So I knew that I was going to stick around and do something. [40:35.24] The important thing I did post HashiCorp was when I really formally really left, like wasn't [40:40.94] getting any sort of paycheck or anything and had to get health care on my own and all that [40:44.38] sort of stuff. [40:45.38] When I really left, my daughter was about two and a half months old. [40:49.78] And so one thing I really wanted to do was just be able to spend a ton of time with her. [40:53.14] So for the majority of this year, and that's a big part of why I didn't publicly release [40:56.68] Ghosty right away. [40:57.68] For the majority of this year, I've been, I've been home and only working during naps [41:03.30] or at night or whatever. [41:05.92] Every time my daughter's been awake, I've been with her and it's only been within the [41:10.26] past month or so where that started to change a little bit as she's about 15 months now. [41:15.74] She has more things that she's going to and stuff, and so I've been able to carve out [41:19.96] more like dedicated, even though she's awake, like working hours. [41:23.62] And so I think I did spend that time, but on the other side, you know, I, I'm not someone [41:28.82] that can't work. [41:29.82] I love working and my family knows I love working. [41:32.64] And so finding that time, showing, being able to, as my daughter gets older to like see [41:38.84] her dad working, you know, that's important to me. [41:41.70] And so that's, that's all part of it. [41:44.14] What are you doing dad? [41:45.98] Just writing some software over here. [41:48.54] She's got a, I know there's no video element to this, but I have all these stickers, like [41:53.78] ghost stickers. [41:54.78] They're not finalized yet, but I just have so many of these things and, and she's at [41:59.62] the age where she loves stickers. [42:01.06] So I'll show for you, for you, you could see all these stickers. [42:04.42] There's about a dozen. [42:05.42] There's so many and, and she has all of them and there's ghost stickers all over our house. [42:09.34] And my wife jokes that she pointed it and goes, Oh, that's daddy's work. [42:13.54] Because for now it is daddy's work. [42:14.90] And so like, that's, uh, yeah, that's what it is. [42:18.02] That's cool, man. [42:19.02] I like, I love that you, I mean, to be in a position to take that time, you know, right. [42:24.02] I think even if I was in your position because I, my brain can't let something go, like even [42:31.10] if I don't need a financially gain from it, my brain won't let go of the problem set, [42:35.50] you know? [42:36.50] So I would find that kind of challenging, not so much to not give my necessary time [42:40.84] to my child that's newly born, but more so my brain, the separation of that. [42:45.78] You can't help that. [42:46.78] You can't help how your brain works. [42:48.34] If you can't let a problem go, necessarily, that would be my, my fear for me. [42:53.34] Like if I was in your position to be like, you know what, I, I can't stop my brain from [42:57.22] thinking about a problem set. [42:58.62] Oh yeah. [42:59.62] I mean, even when I wasn't really when, even when I was just doing go see, like literally [43:03.42] at night after the baby slept, I was actually doing it. [43:06.86] I require a lot less sleep than my wife. [43:09.42] And so I've always been like a six hour a night kind of guy. [43:13.04] And so I was actually, when she was an infant and waking up in the middle of the night, [43:18.32] I was just not going to sleep before she woke up that first time. [43:21.40] I was like, I will just work and then I will handle the baby and feed her the bottle and [43:25.72] put her back to sleep and then I'll go to bed after that. [43:28.24] And so that was like sometimes, you know, like midnight or something. [43:31.48] And I would sometimes run into my wife when she was awake, I'd run over to her and have [43:37.08] my phone out and, and I'd be like, look at this, look at this. [43:39.74] And she's like, Oh, do you have a, do you have a cute video of our daughter? [43:44.00] And you know, I'd show her the video and it would be like font rendering. [43:49.28] She was so disappointed. [43:52.68] I think if the, if there was a nerd snipe bingo card, like if we're playing bingo for [43:57.84] like how you would nerd snipe somebody and you had like, you know, prolific open source [44:03.50] maintainer who builds unicorn business and retires and then comes back to reinvent a [44:10.54] terminal and then chooses Zig as a programming language. [44:13.72] Like those are all things where it's like, I know why there's 25,000 people in that discord. [44:17.36] Like you have all of the different ingredients, which is really awesome. [44:22.24] And that's just a way of setting up a question about Zig. [44:24.28] Like, why did you go that route? [44:26.00] Because that's a, yeah, that's an interesting choice, interesting language and a burgeoning [44:29.92] one. [44:30.92] I mean, you, you could, uh, I, you could find a tweet I did, I think end of 2021, very early [44:35.96] 2022, where I talked about how I was interested in Zig, but I had no time to use it. [44:42.48] And it was always in the back of my mind of this interesting programming language. [44:46.16] And I think as important background to me, I, I was a professional paid C programmer [44:53.04] for a year or two of my life, somewhere between a year and two years of my life. [44:57.38] And I like low level system stuff. [44:59.62] I actually like C. And so I wanted to, it was very, HashiCorp was very close to getting [45:06.64] all the software written in C, by the way, that's very, it was very close. [45:10.36] It was between C and Go and Go one, but it was very close to C. And, um, I wanted to, [45:15.52] to get back to systems programming, but I, I recognized the warts that C had, and I was [45:19.84] looking for a better C and Zig to me always felt like that. [45:23.96] And years into using Zig, I feel the exact same way. [45:27.44] I feel better about it. [45:28.44] I love, it brings me joy every day to write Zig. [45:31.98] And, and so that's really it. [45:33.50] Um, you know, later on, I learned about the community. [45:35.82] I like the community, the sort of the founder of the Zig programming language, Andrew really, [45:42.06] we've now hung out in person multiple times, really awesome, like kind person and his technical [45:46.58] points of view are fantastic. [45:48.30] And, and so everything sort of came together where I'm just having a lot of fun. [45:52.02] Yeah. [45:53.02] And that's sort of how it, how it goes. [45:54.96] Did you try Go? [45:56.14] Did you try Rust? [45:57.14] Did you go straight to Zig or did you start writing it in C at first and then switched [46:00.86] to Zig? [46:01.86] How did it play out? [46:02.86] I knew Go wouldn't be a choice because my, I knew I wanted to do something that really, [46:07.22] I owned every single allocation and every single instruction that would ever be run [46:10.90] and having a active runtime that was running was never going to be, and a garbage collector [46:15.18] was never going to be an option. [46:16.76] The real plausible option there was Rust. [46:20.02] And, uh, I didn't try it with the terminal because by then I had already had enough experience [46:24.54] with Rust that I knew I didn't want to write Rust every day. [46:28.70] You know, the way I describe it is I philosophically and as a technical achievement, I have absolutely [46:33.18] nothing but respect and I'm impressed by Rust. [46:36.84] I think it's very impressive, but as a personal basis, it's very superficial. [46:41.78] I just, when I write and read Rust, I'm not having fun and I want to have fun. [46:47.46] And part of the joy is writing the code and you know, it's very much a stylistic choice. [46:52.82] I hate to put it in that perspective because I think engineers want some sort of concrete [46:57.50] objective reason of why one versus another is better. [47:01.38] It's really a vanilla versus strawberry ice cream flavor sort of thing for me. [47:07.30] It's they're both great. [47:09.16] They both are edible, you know, but I, but I choose one over the other and, um, that's, [47:15.46] that's really what it came down to for me. [47:16.86] Has any of your work affected Zig? [47:19.82] Like upstream as it built, fixed bugs, new, new features, requests? [47:24.86] I know you did some, you know, you've done some donations to the foundation, so you're [47:28.26] helping out in that way, but like, is there, is there a symbiosis here? [47:32.38] I think so. [47:33.38] I think so. [47:34.38] And I think, I think Andrew and people in the project would say the same thing. [47:36.62] So I mean, very directly before the project, I literally contributed to the compiler. [47:41.18] So there's that very direct personal relationship, but with the project, I mean, Zig's still [47:45.50] such a new burgeoning language that there aren't very many real world users. [47:50.58] And I think having this real world use case exposed a lot of not just bugs, but ergonomic [47:56.90] improvements and issues. [47:59.22] You know, one of the things that I think very, a very big thing, a couple of very big things [48:03.02] that popped up really immediately was the need for package management. [48:07.02] And then beyond that, which is now sort of solved and within Zig. [48:11.18] And beyond that, the need to enable system packagers, which are separate, like, you know, [48:17.98] one of the things I'm doing with Ghosty is I'm not doing any of the packaging. [48:20.82] I'm going to release the source, I'm going to do the Mac app because that's kind of, [48:24.30] you need to like kind of pay and sign in, blah, blah, blah. [48:27.10] But all the Linux stuff, if you want to Ubuntu apt package or RPM or Nix package, like I'm [48:31.98] not doing any of that. [48:32.98] And that's pretty classic, right? [48:34.30] Like open source, like packagers or other people. [48:37.18] But Zig is such a new thing that I knew that would be challenging for those people. [48:41.54] And so Andrew did a really good job of listening to my feedback, but other real world projects [48:46.70] and building in the system packaging mode and guidelines into Zig, where I feel pretty [48:52.18] good about when we go public that we're going to be in a place where hopefully Ghosty pops [48:56.46] into Debian repos and stuff pretty quickly. [48:59.72] But that's, I think, a good example of how things go. [49:03.58] And then just compiler stability, I mean, the Zig compiler moves super fast and I'll [49:07.78] regularly just say, Ghosty doesn't compile anymore. [49:11.10] Not because you made a breaking change, but because like something's actually broken. [49:15.10] And I believe they use Ghosty here and there as sort of a canary of whether the compiler [49:20.42] is stable. [49:21.42] Like can Ghosty build and run? [49:22.42] If Ghosty can build and run, then that's a pretty good, it's a pretty good sort of like [49:25.74] big integration test, right? [49:28.10] For the whole compiler. [49:29.10] Have there been any features that you've built or parts of Ghosty, whether it's because [49:33.30] of Zig or because of some other reason where it's like, this should be straightforward. [49:37.78] And then it was just a minefield of trouble or any particularly hairy technical problems [49:43.10] you've had to solve. [49:44.10] I have to laugh at that because the joke I always make about my work on Ghosty is that [49:49.30] what I really ended up building 70% of my time, I'm just building font rendering. [49:54.62] And the other 30% of my time is a terminal emulator. [49:57.18] So I think that the really big hairy thing is really font rendering. [50:01.42] It is a minefield and when I say font rendering, I don't mean just reading a font file and [50:06.50] drawing a glyph. [50:07.50] I mean, everything from Unicode handling, emoji, skin tone emoji, East Asian languages, [50:15.38] and then drawing them as well. [50:16.70] I mean, that whole path is a crazy mess. [50:21.46] And even just today, just total coincidence today, I tweeted about a bug I found with [50:26.78] skin tone emoji and that's just a coincidence, but my life has been dominated by font rendering. [50:33.98] But luckily, I found a lot of joy when I get it fixed, but I've been shocked by how much [50:39.88] time I spend thinking about it. [50:41.38] - And it's not in the past. [50:42.38] You're still working on it, right? [50:43.74] Because you just found a bug today. [50:45.10] - I thought it was in the past. [50:46.14] I always think it's in the past and here we are. [50:47.98] - You think it's done and then there's another bug. [50:50.46] - But today, it's done today. [50:51.66] We're good. [50:52.66] Now it's in the past. [50:53.66] - For today at least. [50:54.66] Yeah. [50:55.66] I mean, what in particular is so stinking hairy about it? [51:01.30] Because different environments render out differently or what makes it so fraught? [51:06.08] - There's a lot of layers and it is to some artistic, right? [51:10.82] The way fonts look and stuff. [51:12.74] And there's not a pixel perfect specification that says that given this font and these characters, [51:20.94] whatever, this is how it looks. [51:22.86] It really is mathematical with a lot of wiggle room in terms of how much anti-aliasing you [51:29.26] use, the spacing, where it floats on the line. [51:33.78] There's a lot of wiggle room. [51:35.12] And so I think in addition to sort of the core technical challenges of so many different [51:40.78] phases of fonts, there's also people that just come up and say, "It doesn't look good. [51:47.22] Nothing's wrong. [51:48.22] I just don't like the way it looks." [51:49.34] And then you kind of have to dig into why that is. [51:53.70] And Ghostie provides a ton of knobs for those people to get fonts looking the way you want. [51:58.74] And then our gold standard has basically been we want our fonts to look like Mac default. [52:02.86] So like text edit, honestly, is our gold standard. [52:05.16] The way text looks in text edit is the way it's going to look in Ghostie by default. [52:09.42] So yeah, that's been that. [52:10.42] But I think also just finding all the layers I never thought about. [52:14.74] So I think the first one that shocked me that I had never considered as an engineer was [52:20.70] how do you pick a default font? [52:23.02] You have a monospace application. [52:24.94] In a web browser, you say font family monospace, and the web browser picks it for you. [52:29.62] Right. [52:30.62] Like a fallback. [52:31.62] Yeah. [52:32.62] That doesn't exist at the OS level, right? [52:34.22] You have a list. [52:35.22] It doesn't. [52:36.22] No. [52:37.22] You have a list of fonts. [52:38.22] They have different properties. [52:39.22] Some are monospace and not. [52:40.22] That's an easy one to just break down. [52:41.26] But within the monospace, now you have a bunch of different ones, and how do you choose which [52:45.58] one you want to use? [52:47.06] And it has to be deterministic, because if they launch their terminal every time and [52:50.18] you choose a different monospace font, it's going to be a problem. [52:53.10] And so yeah, it doesn't exist. [52:54.26] And so that was the first thing where I was like, why am I thinking about this? [52:59.50] Because it feels like something the OS should do for me. [53:01.98] And so that was sort of the first challenge. [53:04.66] And then... [53:05.66] What does Ternal.app do? [53:06.66] I don't know how they do it, but they tend to use... [53:09.66] I think they probably hardcode it. [53:11.66] Menlo. [53:12.66] Menlo. [53:13.66] Yeah. [53:14.66] Is it Menlo? [53:15.66] Yeah. [53:16.66] I think they just use the Apple usual one. [53:19.14] So Apple's kind of easy because Apple does... [53:21.22] And they solve some of that problem. [53:22.34] They have those... [53:24.30] Even in the web, they have some specific OS Sans and Monoface. [53:28.50] Yeah. [53:29.50] And you could always... [53:30.50] Apple's easy because there's so much homogeneity across the platforms that you could kind of [53:35.54] just say, I'm going to do whatever Apple does. [53:38.02] Linux is the really hard one. [53:39.94] Yeah. [53:40.94] Okay. [53:41.94] So what do you do? [53:42.94] Basically, I look for, obviously, monospace font. [53:46.70] That's an easy one. [53:47.70] And then I look for one that has ASCII characters. [53:50.86] And then I look for one that has more ASCII characters than anyone else. [53:54.62] And then, you know, I sort of just apply the scoring algorithm to it. [53:59.02] If it has emoji within it, it's even better because it's likely the font designer made [54:02.86] them work together. [54:03.86] So I tend to score things with more glyphs in it higher. [54:07.82] If it has more faces. [54:08.86] So if it has italic and bold as well, then it gets scored higher than something that [54:12.90] only has a regular. [54:14.50] So yeah, you just apply all this scoring to it and hope for the best. [54:19.14] And so far, the beta community has felt pretty good about it. [54:24.54] Did you consider just getting opinionated and just packaging your favorite one and saying [54:28.54] like, this is ghost, he's default, is this? [54:30.26] I do. [54:31.26] I do actually. [54:32.90] I do as well. [54:33.90] I do as well. [54:34.98] If I don't find basically a font that I'm satisfied with, then we fall back to using [54:39.06] the packaged font, which is JetBrains Mono with nerd fonts already applied. [54:43.46] Great choice. [54:44.46] Thank you. [54:45.46] Thank you. [54:46.46] It's all of the defaults of ghosty for the most part are the ones that I would use. [54:49.62] And so, yeah. [54:50.86] But yeah, so we do that as well because there are in particular a really problematic area [54:56.06] of Linux is there's a lot of installations of Linux that don't have emojis, for example. [55:00.14] And so we we package an emoji font so that emojis just work out of the box again. [55:04.58] These are things that don't happen on closed Apple computers, but on Linux we have to think [55:09.82] quite a lot about. [55:10.82] Yeah. [55:11.82] I ran into that because we have this little node server that basically fires up Chromium [55:16.88] and loads some stuff into a browser and then things screenshots it. [55:20.76] And we want to use emoji in there because it's like, you know, promotions for our shows [55:24.06] and stuff. [55:25.06] And I developed the whole thing here on my Mac and everything was great and I deployed [55:27.90] it to fly and it's just using Ubuntu that just doesn't have emoji. [55:33.22] And so it's like falling back to some weird Unicode thing. [55:35.42] I have to actually like install an emoji font pack in the Dockerfile or whatever just to [55:41.02] get to actually have an emoji in that remote Chromium browser. [55:44.58] Pain in the butt, man. [55:46.42] Linux pain in the butt. [55:47.42] Yeah. [55:48.42] I mean, and stylistically the sort of unburdened licensed emoji fonts I don't personally love. [55:54.12] Like I don't think they look that good. [55:56.22] Yeah, same. [55:57.44] So I wish that Apple would license their Apple emoji so that it could be used cross-platform, [56:03.58] but you can't. [56:04.98] Like legally you can't. [56:06.10] There's people online obviously who have pulled it out. [56:08.10] You can find them. [56:09.10] Yes. [56:10.10] Yeah. [56:11.10] So you could find it. [56:12.10] But, you know, as a distributor of software. [56:13.10] Yeah. [56:14.10] I cannot. [56:15.10] Can't do that. [56:16.10] No. [56:17.10] Totally. [56:18.10] It's a UI dash monospace is what you do in the cascade of the CSS font stack. [56:23.90] One of my favorite things I tell people when they ask more and more about fonts is the [56:28.12] best source of figuring out how to do anything is web browsers. [56:33.04] Every, independently, every person I've run into that's done a lot of text work has landed [56:38.20] on, oh yeah, I read Firefox and Chromium source code and blink and like all these different [56:43.56] things like, and that is true of ghosty as well. [56:46.72] Like whenever anyone has been like, I want to support this feature. [56:50.32] And I think, how do you make that work? [56:53.44] You find the answer. [56:54.44] Cause web browsers have sold it and they've their cross platform and things like that. [56:58.44] Yeah. [56:59.44] Not bad ideas to, I mean, to have a, a default, you know, string essentially you can set that [57:06.14] says give me the, the OS is native version of the monospace font. [57:10.78] Give me that. [57:11.78] Right. [57:12.78] Yeah. [57:13.78] Nice. [57:14.78] So what I've experienced from ghosty is a Demos works, be no sign in and see config. [57:20.52] So this is where most people go. [57:21.52] Right. [57:22.52] And they're like, okay, configure this thing. [57:23.84] So if 70% of your time is font rendering, my guess is like the other 30% is mostly configuration [57:28.32] because holy cow, there's a whole bunch of configuration things, everything you could [57:31.96] possibly imagine. [57:33.08] And there's not really, and maybe this will change between where we are, which is private [57:36.68] beta and 1.0, or maybe this is 1.1. [57:39.28] I don't know. [57:40.28] But like, there's no config built into the Mac app. [57:43.32] It just opens up text edit on your, you know, dot your slash ghosty slash dot configure, [57:49.24] whatever it is, the file thoughts on that. [57:51.68] I'm sure this is a huge part of your work is like configuration, right? [57:54.60] Yeah. [57:55.60] I, I mean, depending on the audience here, I mean, I think my thoughts on configuration [58:00.36] are going to be loved or hated. [58:02.72] I've, I've, I've created a good duopoly of people that, uh, either love like HCL with [58:08.96] Terraform or, or think that I've, I've crapped on the entire industry with this thing that [58:15.86] people have to do every day. [58:16.86] You know, it's one or the other. [58:19.24] And you know, no further comment on that, but I think because of that, I think there's [58:24.40] a lot of experience I have with configuration. [58:25.84] Vagrant was Ruby, Packer was, has JSON and, and, and supported JSON and then now supports [58:31.40] HCL and Terraform is HCL. [58:33.48] I sort of got done the spectrum. [58:35.82] And so I was coming into this a little with some experience and opinion and ghosties primary. [58:42.68] So it's configuration file is a custom text-based non-programming format. [58:46.76] There's no conditionals. [58:47.92] It's just key equals value straight down. [58:50.76] People have described it as very, very any like, but, but there's no categories like [58:54.84] any, you know, it's just key equals value. [58:56.92] The principle why behind that, and I suspect I'm going to have to keep defending this over [59:00.88] and over, but the principle why behind it is that the config file and the command line [59:06.60] arguments are equivalent. [59:09.28] So anything, any key equals value you could set in the file, you could do dash dash key [59:13.80] equals value on the command line and they perfectly match. [59:16.82] So if you know how to do the CLI, you could do the config file and vice versa. [59:20.12] And that's a very important property I want to keep. [59:22.56] I think it's very educational, friendly to a tool. [59:26.64] And then the other reason is because it, I could parse it, validate it and load it in [59:32.28] a single forward pass. [59:33.70] So this was more of a performance thing, but I don't need to maintain an abstract syntax [59:37.84] tree like you might have to with a YAML or something. [59:40.36] I could have an array of bytes, you know, conceptually an array of bytes read one at [59:44.76] a time. [59:45.76] So I only have to keep a small, you know, fixed size back buffer, move forward and I [59:50.36] could parse the config. [59:51.36] And it is, it is definitely a detail that's probably not super important, but because [59:54.80] of that ghosty has the fastest config parser and you have to read the config every time [59:59.44] you start ghosty. [60:00.44] And so it's, it's something that I didn't want to waste startup time on. [60:03.28] And so that's a big reason why I chose that format as well. [60:06.84] But yeah, I mean, I, I really haven't gotten any from the people who have actually used [60:10.24] ghosty. [60:11.24] I haven't gotten any pushback on it. [60:13.14] It's hard to dislike. [60:14.14] I mean, the only thing you might want is like conditionals and things like that. [60:18.12] And I just think philosophically I tell those people, you should be using Wes term or something [60:22.84] that supports Lua. [60:23.92] Like that's, that's not something I'm never, I'm never going to make initializing or runtime [60:28.76] loading files, evaluating code, part of the startup path of my terminal emulator. [60:33.08] Like it's not going to happen. [60:34.08] So yeah. [60:35.08] Does that have implications for plugins, extensions, et cetera? [60:38.04] Like, or is there, is there plans for that? [60:40.68] Does that exist? [60:41.68] It has implications. [60:44.04] I'm not sure exactly for what yet. [60:46.82] I mean, I think the one that popped up first was people wanted a different theme for light [60:52.78] versus dark mode. [60:54.22] And so that was sort of the first conditional thing that popped up. [60:57.46] We solved it in a different way. [60:59.22] You can just specify a light and dark theme as separate config options, pretty straightforward. [61:04.82] But there's other ones too. [61:06.16] So I think the one that's looming right now that actually hits me is that I want different [61:11.38] key bindings between Mac OS and Linux. [61:13.62] I'm somebody that spends a pretty 50/50 time between Mac OS and Linux. [61:17.86] And so I want the key bindings to be slightly different. [61:20.34] And cause you know, there's no command character when I use, when I use Linux. [61:24.52] And so there's workarounds for that, that are, that really aren't very ugly. [61:28.42] We have a, we have the ability to load additional config files only if they exist and not error, [61:34.30] basically only warn if they don't log, if they don't exist. [61:36.80] And so you could actually create, you know, Mac config, Linux config and have it not exist [61:40.98] on that platform. [61:41.98] And that solves that problem to some extent. [61:43.98] But I do want to solve that in a, in a less duct tapey way. [61:48.34] And so there's implications, but I think that my view generally on, I don't want to get [61:55.24] too abstract here, but my view generally on problems is that constraints are good. [62:00.06] And so I think we've defined our constraints, which is that I want to forward pass single, [62:04.66] you know, parsable thing. [62:06.38] I want it to be fast. [62:07.98] I want it to be isomorphic with the command line interface and config file. [62:12.06] And I think those constraints are set in stone. [62:13.98] And if you, if you have some fundamental constraints, then, then you could actually start a discussion [62:18.50] of how you solve it. [62:19.50] I think that generally speaking about, about software in the industry that I see is too [62:25.04] many people are choosing the most generic thing without constraint as the answer. [62:30.66] Like I'm just going to let you write arbitrary code to do this. [62:33.78] Or I'm like this, this is the do anything machine. [62:36.70] It's like, I feel better about constraints. [62:39.22] So that's just a philosophical tangent. [62:41.98] Yeah. [62:42.98] What about things that's as simple as, and I'm going to compare against warp for now, [62:48.78] because I use warp on the daily and I did sign in. [62:52.86] I was not happy about it. [62:54.50] You don't have to anymore, but we joined warp back when you, when you had to, it's too late. [63:01.02] It's like the we're fans of warp. [63:02.58] We're not haters of warp by any means. [63:04.02] I am. [63:05.02] I am as well. [63:06.02] That was one of our, one of our main points of advice with warp was like, don't make a [63:11.22] sign and I guess you don't anymore. [63:13.34] So I didn't know that, but I'm signed in and I'm me. [63:16.92] One thing I do like though, is that whenever I, and I'm on a Mac, so whenever I like type [63:21.26] something out onto the terminal and if I want to like select it to erase it, it's command [63:27.62] shift and then the back arrow, like I would in a text editor. [63:31.50] Yes. [63:32.50] I do like those kinds of features. [63:33.50] And then when I do that, when I compare the same experience in ghosty, I can't do that. [63:38.06] It starts typing like these and stuff like that. [63:40.58] Yeah. [63:41.58] Yeah. [63:42.58] Like different characters. [63:43.58] So I don't know if that's like a direct mapping or maybe it's, it's not mature yet enough [63:46.74] and it's on your plan, your roadmap, but those kinds of things I think really make that first [63:50.62] experience, you know, key that I can just treat the command line like a text editor. [63:55.94] That's what I hate about terminal app and other terms. [63:57.94] You got to like do special things to make it like a text editor where you can jump around [64:02.70] the text and do different things to be speedy. [64:05.78] And now I'm hitting backspace and stuff like that and this is not cool. [64:08.86] Yeah. [64:09.86] Yeah. [64:10.86] I mean, I, I think you're exactly right. [64:11.86] I think, I think what Warp did with that is very good. [64:14.50] You know, I don't, I don't even know if Warp's open source or anything. [64:16.62] I don't know how they did that specifically. [64:18.98] I know I have ideas. [64:20.10] I know how I would do it if I did it, but I don't know how they specifically did it, [64:23.42] but that is something. [64:24.66] So I guess there's two answers to that. [64:26.58] One is it is on our roadmap to a certain extent in the sense that a Mac, I assume you're on [64:32.30] a Mac if you're using Warp, Mac has a bunch of standard text. [64:36.26] I think Apple calls them actions and they're, they're named things like select previous [64:41.02] paragraph, select next paragraph. [64:42.50] They have like names. [64:43.66] One of the open issues on GoSee right now is to implement those actions and just do [64:48.54] them in some way. [64:50.86] And I say, so, so then part two is in some way, the challenge is that the thing that's [64:56.30] actually doing the text editing is the shell and not the terminal. [65:00.78] And this gets into a layering thing that I think an everyday person doesn't care about. [65:05.94] And I want them to not have to care about it. [65:07.94] I'm just talking as an, I don't care about it. [65:09.54] Yeah. [65:10.54] Yeah. [65:11.54] I'm just talking as an implementer. [65:12.54] I'm just saying why this is being funny. [65:13.54] No, it's all good. [65:14.54] Most people don't care about it. [65:15.74] But for me as an implementer, it's what makes my life hard because it's really not my problem [65:22.70] that I could easily solve. [65:23.98] Because what a terminal emulator does is you enter characters, we encode them as some events [65:27.90] and we send them to the shell. [65:29.10] We're actually not editing that prompt, right? [65:31.62] The shell is editing the prompt and the shell is moving. [65:33.88] When you hit back arrow, I'm not even moving the cursor. [65:36.78] I'm sending a back arrow to the shell and the shell is sending a message back to me [65:40.50] saying move the cursor left by one, but it could do anything it wants. [65:44.42] In the same way that when you hit the up arrow, it's not telling me to move the cursor up. [65:47.96] It's telling me paint this text, which is history that I don't know anything about, [65:51.42] the shell knows about. [65:52.56] And so it's hard for me to solve because we don't own that text input. [65:57.46] There's very hacky things that ghosty and other terminals do. [66:01.58] If you shift click somewhere into the prompt, the cursor moves there. [66:06.58] I think it's shift click or shift command click. [66:08.70] I don't even remember off the top of my head. [66:10.66] And when someone suggested ghostly support that, I gave them this answer of like, I can't [66:13.82] do that. [66:14.82] They said, oh, other terminals support it. [66:15.86] And so I went and looked and I was like, how do these other terminals do it? [66:18.66] They actually synthesize arrow keys is how they do it. [66:22.58] They guess. [66:23.58] They guess. [66:24.74] You clicked one row up and four cells to the left. [66:27.26] I'm going to send you one up arrow and four left arrows and hope your cursor gets there. [66:32.38] And it leads to all sorts of weird stuff. [66:34.42] So if you like, you could do this in ghosty, you could, you could do it in other terminals [66:38.14] where if you click up too many times, history will start showing up because it's sending [66:42.02] up arrows and history is actually showing up instead. [66:44.58] And that that's a terrible experience. [66:46.58] And so this is a long rambly way to say, it's not my problem, but I do want to solve it. [66:51.90] I do want to help make it easier. [66:53.06] And this is one of the areas where I want a terminal to provide better tooling to shells [66:57.54] so that we could actually do this in a very user friendly way. [67:01.02] So a great reason to get Warp to be open source, because the user experience with using Warp [67:06.42] at the terminal level from an entry level and editing level of what's going into the [67:10.74] prompt is bar none. [67:13.10] It's solid. [67:14.10] Like I like it. [67:15.10] It's fast on that front. [67:16.10] It's fun to use. [67:17.10] The community suggested this as an option as a configuration option. [67:19.46] And I could solve it by separating out where the prompt is and where the output is. [67:23.34] And I think that's what Warp does. [67:24.94] You know, your, your, your prompt input is like a totally separate box from where the [67:28.94] output goes. [67:30.06] And in that way, I could just defer sending stuff to the shell. [67:33.38] You know, I could actually own the input fully. [67:35.46] And only when you sort of hit enter or hit tab or hit certain control characters, I could [67:39.26] actually flush it out to the shell and be like, okay, what's the deal? [67:42.54] And sync backup. [67:43.94] It's not a, I'm not trying to over trivialize that problem or anything. [67:46.50] It's, it's, I think what Warp did is really good there. [67:48.90] That that's, that's how I could solve it. [67:50.62] But it would feel distinctly different for people that actually want a prompt that starts, [67:55.30] you know, marching down your screen. [67:57.02] Yeah. [67:58.02] Well, here's what happened though, is when I fired up Ghosty for the first time and started [68:00.46] playing with it, this happened, this scenario where I'm like trying to manipulate the text [68:04.34] I'm going to enter into the prompt. [68:06.54] And then I'm like, okay, now I know, I know config is my next step because I got to make [68:10.12] Dracula my theme. [68:11.12] That's like the first thing I did. [68:12.12] I mean, okay, how do I theme this thing? [68:13.98] And so when I Vim and then I put the path into the config file and I entered it or I [68:19.06] edited it and I saved it, it yelled at me and said it couldn't make the thing. [68:22.58] I don't know why. [68:23.88] So I had to like touch the file first and then go edit it, which is not normal for Vim [68:27.14] because you can usually just Vim to a path and it creates itself. [68:30.82] Directory maybe didn't exist. [68:31.82] I think so. [68:32.82] I have a config directory, but not a Ghosty directory. [68:34.68] So maybe it was the Ghosty directory not living. [68:37.36] So I had to touch it first and then go in and edit with Vim. [68:40.58] Right. [68:41.58] So is that new Mac OS stuff where it needs permission for all kinds of stuff? [68:44.66] Like first time you run it? [68:45.66] I don't think so. [68:46.66] Okay. [68:47.66] But then I try to, you know, manipulate the text and just try to like mess with it. [68:50.98] And then I was like, well, now I have to add config. [68:52.62] And so I'm back in the documentation trying to think, well, I've got to add my own key [68:56.22] mapping so I can have this jumping around. [68:58.70] And I imagine that somewhere in the docs I would find it. [69:01.66] But you know, 20 minutes later we had this phone call. [69:04.22] So I didn't have enough. [69:05.22] You didn't get there yet. [69:06.22] I haven't gotten there yet. [69:07.22] That's all. [69:08.22] So here I am ranting. [69:09.22] I think this is kind of crucial behavior though. [69:10.78] That's why I'm, it's such a simple thing, but I think everyone's going to have a version [69:14.04] of my problem. [69:15.04] Right. [69:16.04] When they first fired up, they're going to have some version of, you know, input manipulation [69:20.06] that's, it's very important. [69:22.46] And it's part of like your speed as a, as a developer on the terminal is like how you [69:26.66] can manipulate what you put in. [69:28.62] And that takes time where I have to like rejigger my brain or add config, which I don't mind [69:34.18] doing. [69:35.18] It's just a matter of like not knowing what to do at the gate. [69:37.42] Yeah. [69:38.42] I completely agree. [69:39.42] I think that's actually one of the last remaining discussion points before the 1.0 is, is some [69:42.88] of these defaults that we want to set in that sense. [69:45.90] Because the, the trade off between these defaults is that if we put those key bindings as defaults [69:50.66] of those behaviors as defaults, then things like TUI programs can't map them because you're [69:56.22] taking over them. [69:57.22] And so do you want to actually, you know, like it's, we're talking about whether that's [70:00.60] important or not, or if it's more important that by default people expect, you know, what [70:04.82] you, what you just did. [70:05.82] And I think it's also important, like when I consider that as where people are coming [70:09.34] from, like if you're coming from terminal on app or iTerm or something, then this is [70:14.14] likely to not really be an issue because we behave almost identical to those. [70:18.10] But if you're coming from like warp, then yeah, it's going to be a big issue. [70:21.50] And so I'm not super sure. [70:23.34] I mean, that discussion actually did lead to the, the, the sort of, I think, extreme [70:27.90] path, which we're not going to go down because it's too complicated of inspecting their machine [70:32.50] to be like, are you a Z shell user? [70:34.94] Were you a warp? [70:35.94] Is warp installed? [70:36.94] Like, should we behave more like warp on first startup? [70:38.62] Like, are we going to guess basically based on what you have? [70:41.78] And I'm not ready to go down that path yet. [70:43.90] We do it. [70:44.90] We do that for other things, but I'm not ready to go down that path for things like input [70:47.56] manipulation. [70:48.66] But it's unfortunately complicated, but I agree with you. [70:53.14] Yeah, I'm sure you do. [71:03.58] What's up friends. [71:04.58] I'm here in the breaks with David Shu, founder and CEO at Retool. [71:08.14] If you didn't know, Retool is the fastest way to build internal software. [71:13.14] So David, we're here to talk about Retool. [71:14.74] I love Retool. [71:15.74] You know, that I've been a fan of yours for years, but I'm on the outside and you're clearly [71:20.42] on the inside, right? [71:21.42] You're on the inside, right? [71:22.42] I think so. [71:23.42] Yeah, I'd say so. [71:24.42] Okay, cool. [71:25.42] So given that you're on the inside and I'm not on the inside, who is using Retool and [71:30.54] why are they using Retool? [71:32.66] Yeah. [71:33.66] So the primary reason someone uses Retool is typically they are a backend engineer who's [71:38.58] looking to build some sort of internal tool and it involves the front end. [71:42.86] And backend engineers typically don't care too much for the front end. [71:45.74] They might not know React, Redux all that well. [71:48.22] And they say, "Hey, I just want a simple button, simple form on top of my database or API. [71:52.68] Why is it so hard?" [71:53.68] And so that's kind of the core concept behind Retool is front end web development has gotten [71:57.68] so difficult in the past 5, 10, 20 years. [72:02.28] It's so complicated today. [72:03.88] Put together a simple form with a submit button, have to submit to an API. [72:07.42] You have to worry, for example, about, oh, you know, when you press the submit button, [72:10.62] you got to debounce it or maybe you got to disable it when it's, you know, is fetching [72:13.82] is true. [72:14.82] And then when it comes back, you got to enable the button again or there's an error, you [72:18.22] got to display the error message. [72:19.42] There's so much crap down with building a simple form like that, and Retool takes that [72:23.70] all away. [72:24.70] And so really, I think the core reason why someone would use Retool is they just don't [72:28.10] want to build any more internal tools and want to save some time. [72:30.74] Yeah, clearly the front end has gotten complex. [72:33.22] No doubt about that. [72:34.22] I think even front enders would agree with that sentiment. [72:36.58] And then you have backend folks that already have access to everything, API keys, production [72:41.46] database, servers, whatever. [72:44.14] But then to just stand up Retool, to me, seems like the next real easy button because you [72:49.46] can just remove the entire front end layer complexity. [72:52.82] You're not trying to take it away, you're just trying to augment it. [72:56.58] You're trying to give developers a given interface, that's Retool, build out your own admin, your [73:03.54] own view to a Google Sheet or to the production database, all inside Retool. [73:08.94] Let Retool be the front end to the already existing backend. [73:12.94] Is that about right? [73:13.94] Yeah, that is exactly right. [73:16.50] The way we think about it is we want to abstract away things that a developer should not need [73:22.90] to focus on, such that developer can focus on what is truly specific or unique to their [73:27.40] business. [73:28.40] And so the vision of what we want to build is something like an AWS, actually, where [73:33.58] I think AWS really fundamentally transformed the infrastructure layer. [73:37.14] Back in the day, developers spend all their time thinking about how do I go rack servers? [73:42.30] How do I go manage cooling, manage power supplies? [73:44.98] How do I upgrade my database without it going down? [73:48.42] How do I change out the hard drive while still being online? [73:52.10] All these problems. [73:53.26] And they're not problems anymore because nowadays, when you want to upgrade your database, just [73:56.18] go to RDS, press a few buttons. [73:57.82] And so what AWS did to the infrastructure layer is what we want to do to the application [74:02.22] layer, specifically on the front end today. [74:04.78] And for me, that's pretty exciting because as a developer myself, I'm not really honestly [74:10.22] that interested, for example, in managing infrastructure in a nuts and bolts way. [74:14.66] Now, I would much rather be like, hey, you know, I want an S3 bucket, boom, there's an [74:17.70] S3 bucket. [74:18.70] I want a database, boom, there's a database. [74:19.70] And similarly, on the front end or in the application layer, there is so much crap people [74:24.74] have to do today when it comes to building a simple CRUD application. [74:28.18] It's like, you know, you probably have to install 10, 15, maybe even 20 different libraries. [74:32.26] You probably don't know what most libraries do. [74:34.22] It's really complicated. [74:35.22] To load a simple form, you know, you're probably downloading almost like a megabyte or two [74:39.18] of JavaScript. [74:40.18] It's just so much crap to build a simple form. [74:43.02] And so that's kind of the idea behind Retool is could it be a lot simpler? [74:46.34] Could we just make it so much faster? [74:48.54] Could you go from nothing to a form on top of your database or API in two minutes? [74:52.42] Well, we think so. [74:53.42] Yeah, I think so, too. [74:54.78] So listeners, Retool is built for scale. [74:58.30] It's built for enterprise. [74:59.78] It's built for everyone. [75:00.78] And Retool is built for developers. [75:03.22] That's you. [75:04.22] You can self-host it. [75:05.22] It's built for the cloud, custom SSO, audit log, SOC 2, type 2, professional services. [75:10.74] Starting with Retool is simple, fast, and of course, it's free if you want to try it [75:14.54] right now. [75:15.54] So go to Retool.com/changelog. [75:19.78] That's R-E-T-O-O-L.com/changelog. [75:30.34] This goes against the Unix philosophy, but is this an argument for integration, owning [75:36.74] more of the stack? [75:38.40] Because it's not your problem, but it is your problem. [75:41.06] And it's like, of course, you don't want to pick what shell people use, but is this like [75:45.46] now we need the ghosty shell or something? [75:47.06] Because you can solve that problem. [75:48.70] You could have ghosty be more than just a TTY. [75:51.78] I fight the nerd snipe every day of my life to write a shell. [75:57.22] That's something I'm holding strong. [75:58.22] When are you going to give in, man? [75:59.22] Come on. [76:00.22] When are you going to give in? [76:01.22] I'm holding strong. [76:02.22] Because there's so many bug reports, so many that I get that I am like, this is a shell [76:06.94] bug, not my bug. [76:08.42] But then I do think, I don't just dismiss it, I do think, can I, as a terminal emulator, [76:14.34] mitigate this bug? [76:15.58] But ultimately, this is not my bug. [76:17.62] And so yeah, it's frustrating. [76:20.74] It's also frustrating because all the cool new post 1.0 features we want to build that [76:24.86] we kind of touched on, it's going to be blocked on downstream adoption. [76:29.02] It's like any web browser comes out with a feature, it doesn't matter until a website [76:32.90] implements it. [76:33.90] And so that's going to happen here too. [76:35.42] But if we have, I've joked around building a ghosty shell that only works in the ghosty [76:40.42] terminal emulator. [76:41.42] So it's kind of crap because you would never use it remotely. [76:43.96] But it's more of a tech demo of like, this is what shells could be if they implement [76:48.18] all the capabilities of ghosty. [76:50.30] It's kind of like Chrome web experience, web experiments. [76:53.22] We need the ghosty terminal experiments to like, where people visit it. [76:57.22] And with the Chrome one, like I would visit it and be like, holy crap, a browser could [77:00.86] do this. [77:02.14] And then it changed my whole perception of a browser, like sometimes years before any [77:07.10] website behaved similarly. [77:09.58] And I have talked with folks about doing the same thing for terminals. [77:15.18] This TUI works best in ghosty, you know. [77:18.28] That's already happening. [77:19.28] I think more than people expect. [77:21.94] I would, I would say right now, like NeoVim works best in ghosty and it works, it degrades [77:27.62] great for other, for other things. [77:30.38] But there, I think almost the entire NeoVim maintainership is in the ghosty beta. [77:35.82] And it's a collaboration between us implementing something and NeoVim shipping it like two [77:40.58] weeks later. [77:41.86] And most people have no idea because unless you're in ghosty, a feature detects it. [77:45.58] Those things don't turn on. [77:46.82] That's crazy. [77:47.98] So if you're using NeoVim, you want to be using ghosty and maybe vice versa. [77:52.50] I'm biased, but yeah, I think so. [77:53.90] I mean, I think it's, are you a NeoVim user? [77:56.10] I am a NeoVim user and I don't know, I don't know how many of the actual NeoVim maintainers [78:00.14] actually use ghosty. [78:02.18] They all have access. [78:03.18] I don't know how many actually use it, but I know that more than one mains ghosty all [78:08.94] the time. [78:09.94] And so, yeah, it's something that NeoVim is always going to work in there and we're going [78:14.50] to, we're going to work really hard to make it, to make it a great experience. [78:18.66] Do you pay attention to DHH by any chance? [78:21.26] Here and there. [78:22.26] If it's loud enough. [78:23.26] Sometimes you can't help yourself but pay attention. [78:26.50] Well, not so much his voice and his words, but on YouTube he's given demos of Kamal and [78:31.62] other things. [78:32.62] And I think you always get to see his terminal and his text editor and stuff like that. [78:36.18] And he's done some cool stuff. [78:37.18] I haven't paid attention to it deeply. [78:38.50] I just know it looks cool. [78:39.50] I'm not even sure what he's, you know, my back of the brain to do is like, go investigate [78:44.78] what he's doing. [78:45.78] Cause it looks cool. [78:46.78] Like whatever he's using, is it, you know, is it NeoVim? [78:49.22] Is it something else? [78:50.22] And then what I've seen too, in screenshots you've shared for ghosty look cool too. [78:55.34] And so I'm just curious because they look cool. [78:58.54] I might be making this up. [79:00.10] I can't fully remember. [79:01.10] I know I'm not the one. [79:02.10] Okay. [79:03.10] I'll start with what I know for sure. [79:04.10] Which is that I've gotten mentioned a lot on Twitter with DHH and others with people [79:10.94] telling him or asking him to look into ghosty. [79:13.82] That I know for sure. [79:14.82] That happens actually fairly regularly, probably due to this stuff that you're talking about. [79:18.34] What I don't know, what I can't remember is I thought he said that he only wants to use [79:23.68] software that is publicly available that everyone could use, which is a totally obviously good [79:28.64] take because he's shipping stuff that people want to use right away. [79:32.16] And I don't think he said that directly in response to ghosty. [79:34.24] I think it was just like a general thing where people sending him stuff to use. [79:37.50] But I imagine that that's, you know, a big thing holding him back if he even knows about [79:43.80] ghosty at all. [79:44.96] But I hope when it's public that he would at least give it a shake. [79:48.24] I've always said, even if you don't use it, I would just like to know why, why you don't [79:51.60] use it. [79:52.60] That's perfectly valuable information. [79:55.36] So yeah. [79:56.62] So to that point, we asked on X for people to add questions for you and it seemed like [80:01.60] the overwhelming question is the age old question is when is this going to be available to the [80:07.44] public? [80:08.44] Yeah. [80:09.44] When is 1.0 going to drop? [80:10.44] Yeah. [80:11.44] So we're recording this in December and I promised they would be released in December [80:14.48] and the plan, everything still looks good for December. [80:17.78] So sometime this month, I don't have a day, I really don't. [80:21.16] It's just sometime this month. [80:22.56] I think the software is in a pretty good place. [80:24.12] There was a few blockers that I had. [80:26.36] One of them was the icon that I wanted to, I wanted a fresh icon for the 1.0. [80:31.88] That's done. [80:32.88] I, I tweeted that out and it's in the beta builds already and that's all done. [80:37.40] Another one that I'm waiting on is sort of like web design and, and website docs work. [80:41.92] That one, you know, it's all volunteer. [80:43.20] I'm not the best at web technologies right now, especially front end. [80:46.32] So I have friends helping me with that and I don't want to pressure them. [80:50.92] It's the holiday season, things like that. [80:52.40] So like if, if the website doesn't get done in December, my plan is probably to publicly [80:56.68] release without it and just, just, you know, say that's coming later, probably make a bunch [81:00.56] of markdown files to kind of help people in the repo with docs. [81:04.00] But we'll see about that. [81:05.12] But I'd say that's the major thing blocking right now. [81:07.58] And then the third thing is sort of some, some amount of release management. [81:11.28] We have nightly builds right now, but I haven't actually written the, the GitHub action automation [81:16.08] stuff to, to tag and build like a numbered release. [81:20.42] And so I'll have to do that for the 1.0, and obviously that's not a huge blocker. [81:24.22] That's probably like a day of, of focus. [81:26.82] So we're still looking good for December. [81:28.78] You said the icon is in the beta builds. [81:30.90] That means what I have open is the, the plan to be released version, the, the icon, the [81:35.66] winking, winking ghost. [81:36.66] Do you see a winking ghost? [81:37.98] Yeah. [81:38.98] Yeah. [81:39.98] That's it. [81:40.98] I had to open terminal to app as well, just to sort of side by second. [81:42.58] I'm like, this looks, you know, as my son would say, we've been here before. [81:47.46] Yeah. [81:48.46] That's on purpose. [81:49.46] That's on purpose. [81:50.46] Yeah. [81:51.46] I like it. [81:52.46] It's a, it's an homage. [81:53.46] You can tell it's, you know, darn near the same, except for the thickness of the outside [81:56.46] border is a little bit thicker for ghosty. [81:59.54] And the background is bluish instead of black. [82:02.14] Yeah, obviously there's obvious differences. [82:03.50] I would say if you can open the terminal icon, then the 512 or thousand pixel version and [82:10.38] open the ghosty one in the 512. [82:12.62] One thing we did with the designer who did this is a well-known, really awesome designer. [82:17.46] I've been a fan for so long, so I was actually really excited to actually get an icon designed [82:21.74] by this person that I've been a fan for icons. [82:24.02] But one thing he does really well, which is very Apple-esque, is that the level of detail [82:28.02] in the icon differs based on the size of it. [82:30.30] So if you're looking at it in the dock versus, you know, the big version, it's different. [82:34.26] So looking at the big version and compare, because it's super an homage to terminal.app, [82:39.26] but we tried to add a level of depth and reality. [82:43.22] So things like the aluminum border has texture. [82:45.94] The pixels, you could see the individual pixels of the screen and they are warped because [82:49.90] the screen is curved. [82:51.42] There's a soft glow around the ghost, you know, things like that. [82:53.54] So yeah, I just want to call it out because he worked hard on it and I think it's cool. [82:59.06] And I think it's also shows sort of the level of detail that we've been thinking about with [83:02.82] this software. [83:03.82] I've got it open now. [83:04.82] The little dots, the little pixels are really cool, little subtle details. [83:09.30] What's the designer's name? [83:11.38] Michael, I don't know how to pronounce last name, Flarup. [83:15.06] His company is Pixel Resort, I think. [83:18.32] Yeah. [83:19.32] You could see his whole portfolio on that. [83:21.14] He's done hundreds and hundreds of icons over more than a decade and really big fan of his [83:26.18] work. [83:27.18] To this day, after decades using computers, I still nerd out on a really cool app icon. [83:33.34] I just, I love the beautiful app icons and like just the people that make them, you know, [83:38.02] so I don't know this guy, but I appreciate him and I'm sure I would love to go to his [83:41.50] website and look at all the things he's made. [83:43.06] A lot of good stuff. [83:44.06] I mean, it's eye candy, just pure eye candy. [83:46.54] And you know how hard it is to like do that well. [83:48.54] Yeah. [83:49.54] And he's still doing a little bit more work for Ghostie and I'll just hint, I mean, it's [83:53.26] going to be more than a hint. [83:54.38] I'll talk about what it is. [83:55.38] It won't be in for 1.0, but probably shortly afterward, we're making it so that the icon, [84:00.30] we're going to dynamically change the color to match your theme. [84:03.34] So on disk, it's always got to be sort of the default, but when it's running, Apple [84:07.90] provides APIs, we could add a custom image and we want to make it so that, you know, [84:12.62] the bluish color will actually be your actual background color and the text and the things [84:17.26] like that. [84:18.26] And it's just going to happen automatically. [84:19.26] Nice. [84:20.26] Yeah. [84:21.26] Yeah. [84:22.26] So how much Swift UI is in here? [84:23.26] How much? [84:24.26] A lot. [84:25.26] Like percentage of the code base? [84:26.26] I don't have it open in front of me, but I think something like 10% of the code base [84:28.62] is Swift right now, which is kind of scary. [84:31.78] Yeah. [84:32.78] And that's why I think that I've harped on this so much, but that's why I think libghostie [84:36.10] is so important because it shows the amount of work that goes into building, you know, [84:40.98] an end state app is how much code is required and stuff. [84:44.30] So yeah, I think there's a lot of Swift in there. [84:47.46] A lot of, a lot of apps, Apple specific functionality. [84:53.22] So you imagine over time that percentage goes down, I would imagine it would have to, as [84:57.58] you support other things, add stuff to the core, or do you think that the Swift, you'll [85:02.10] continue to sling Swift in the... [85:04.22] Well, I think we'll have, we'll always have like the sort of flagship implementation consumer [85:10.30] of ghostie, which will probably be like the ghostie Mac app and Linux app. [85:13.98] And so the Swift code will only increase, but I'm not sure percentage wise what that [85:18.82] looks like as the core functionality changes and stuff. [85:22.78] I'm really not sure. [85:23.78] What were your other major blockers before the 1.0, you know, you announced it was coming. [85:28.10] I think that was a couple of months ago, but what were things besides a rad icon update [85:33.30] that would like block it, the website you mentioned from failing to launch in December? [85:39.42] There was a number of features that, there was a certain amount of stability, obviously [85:42.86] stability is hard to quantify though. [85:44.46] It sort of is more of a feeling of when you get enough beta testers that aren't reporting [85:47.62] bugs. [85:48.62] That was sort of a vibe, but in terms of features, there was a list of features that we wanted [85:52.42] to implement and performance metrics we wanted to hit. [85:55.02] So just things like supporting image protocols and like ways to input and making sure I basically [86:01.54] went out and just looked at all the available functionality that terminals have and ask [86:06.22] myself whether it's important to have it. [86:08.46] And that was sort of a marker because that 1.0 goal was to be the best existing terminal. [86:14.26] You know, you kind of have to do most of what existing terminals do. [86:17.30] I drew the line at like terminal stuff, not like UI stuff, because there's a lot of terminals [86:22.14] out there that'll do like SSH libraries and double click and you could just go straight [86:26.38] in and things like that. [86:27.38] I sort of drew the line where when I say existing terminal, I mean the functionality below that [86:31.54] line. [86:32.54] But that was sort of the goal. [86:33.54] I mean, I think the one feature that was always, there's two things that were always to me [86:37.34] a release blocker that I've not given up on. [86:40.14] I've just like, you know, I've let go in terms of blocking the release, but we're going to [86:43.50] still do it. [86:44.62] One of them is a totally graphical configuration mechanism because for Mac and Linux users, [86:51.18] for the vast majority of users, they don't want to be editing a text file to doing their [86:55.38] configuration. [86:56.38] So we do want to build a native UI to manage your config and that's still coming and for [87:02.78] sure something we'll do. [87:04.34] And then the second thing, which is I think a really big deal, and I think a lot of people [87:07.66] will probably be not very happy about with the 1.0 is search. [87:12.34] I don't know if you noticed that yet, but command F doesn't work. [87:15.42] It doesn't do anything. [87:16.42] I have not noticed. [87:18.22] So surprisingly, we have something like 5,000 active beta testers right now. [87:23.02] Really surprisingly, it's not been a big issue. [87:25.74] I thought, I thought within the first month of beta testing, when we had 50 people that [87:30.86] people would say, oh, this is not usable because there's no search. [87:34.06] I don't use search in the terminal clearly because it hasn't been built yet, but I thought [87:38.06] that would really pop up and we're 5,000 people in and I think that issue, that issue by far [87:42.90] has the most upvotes. [87:43.90] It has something like 120 or 150 or something, but it hasn't stopped a considerable amount [87:50.34] of people from using it. [87:51.34] So that's what changed my view on let's just slip this post 1.0. [87:55.58] It's an important thing to add, but I think there's a huge number of people that'll still [87:59.26] get value without it. [88:00.26] So it is something like you'll see in the 1.0 release blog posts. [88:03.62] So I'm going to call it out directly because I don't want people to think I'm like trying [88:07.06] to, trying to make some, some message about not supporting search. [88:10.82] We'll support it eventually. [88:11.82] But yeah. [88:12.82] Well, I didn't notice that because I guess I don't use search either. [88:15.02] I just use control R, which is, yeah, I use TMUX and A2N and just the tools inside the [88:19.98] shell there. [88:20.98] So yeah. [88:21.98] So any TMUX user wouldn't, wouldn't notice because search doesn't work in any terminal [88:25.70] with TMUX. [88:26.70] Right. [88:27.70] Yeah. [88:28.70] Cool. [88:29.70] Is there anything else that you were expecting us to ask you about that we haven't, or that [88:32.18] you wanted us to, you're just waiting for it and we just haven't delivered it. [88:34.90] Waiting, waiting, waiting. [88:35.90] Um, but there was a question actually on, on X that I saw that I was like, no one's [88:40.70] actually ever asked. [88:41.70] And I never thought about before, before they asked it. [88:43.82] So was this the NeoVim one? [88:45.54] Yeah. [88:46.54] Yeah. [88:47.54] Yeah. [88:48.54] Yeah. [88:49.54] And I, he made me think, and I was like, that is an interesting question. [88:50.54] Let's give him a shout out. [88:51.54] I do have it. [88:52.54] Um, Mark Jakewith or Jackwith. [88:54.86] Are there any specific features besides speed that make NeoVim better and ghosty? [88:58.98] Is that the one you're talking about? [89:00.98] Yeah. [89:01.98] And I think it's a good question cause it's not, we have talked about how NeoVim is, is [89:05.26] good and ghosty, but I think more generally the question to me was like, what, what makes [89:09.94] a terminal interesting that, you know, that you wouldn't really notice, I guess, until [89:14.74] you actually used it. [89:15.74] And I, and I think that that's something that people don't realize a lot because I think [89:19.50] that the biggest one is there's so many terminal.app users, like serious, very online developers [89:26.10] that are using terminal.app. [89:28.22] And it's funny to me cause it's such a bad terminal and like, just to be very concrete [89:33.94] about that, like it's only supports, I think 256 colors. [89:39.26] And there's so many people out there that don't realize that terminals for over a decade [89:43.12] have supported 32 bit color. [89:45.34] And you don't realize that because all terminal programs, almost all terminal programs do [89:49.90] such a good job of gracefully degrading and just realizing what environment they're in [89:55.06] and working. [89:56.12] And so if you only ever ran something like NeoVim in terminal and app, it obviously works [90:00.56] great there. [90:01.62] You would only ever see 256 colors. [90:03.22] And then you run something in ghosty and suddenly you're like, wait, why does syntax highlight [90:07.58] highlighting look better or something like that? [90:09.22] It's because, you know, you're using full like RGB with some transparency and things [90:12.54] like start popping in. [90:14.16] And so, yeah, I mean, I think that one of the things that, that stands out immediately [90:19.18] is because ghosty supports modern like input protocols, for example, you could bind every [90:25.30] key. [90:26.30] And I think there's a ton of people I've talked to that don't realize you can't bind in every [90:29.94] key, not because they haven't tried it, but because they tried it, it didn't work and [90:32.90] decided, eh, that's just how it is. [90:35.10] I'm never going to do that again. [90:36.64] But realizing it's just because most terminals are built on like a 50 year old input stack. [90:41.54] But if you look at kitty or ghosty, I think Wes term also supports it. [90:46.46] Alacrity does not. [90:47.54] But if you look at, if you look at like those three, for example, then you can now bind [90:51.78] things like backspace and escape could be separate before, like when, if you bound escape [90:57.38] and you press backspace, it would trigger escape. [90:59.48] Now they could actually be distinguished and things like that. [91:01.78] And I think that that enables a lot more functionality and things like that. [91:06.22] So I guess my view is, is there's a lot of people out there I've talked to where it's [91:11.10] just like, I'm happy in terminal app and like, I'm happy they're happy. [91:14.28] But it's one of those things where I described it like a retina screen that Apple shipped. [91:18.74] Like you don't realize how good it is until you use it. [91:21.34] And I'm not even pitching ghosty here. [91:23.04] Like I'm pitching any modern terminal, like just give it a shot because I don't think [91:29.02] most people know what they're missing out on. [91:31.02] Yeah. [91:32.02] I concur with that. [91:33.02] Jared was, well, I think you, do you still use terminal Jared? [91:35.30] I do. [91:36.30] Okay. [91:37.30] So you can really speak to this well. [91:38.30] I'm speaking to you directly. [91:39.30] No, I'm, I'm happy to hear it. [91:41.02] It's because he has a different way of thinking. [91:42.98] He wants to use Mac. [91:44.28] I'm a minimalist, so I don't want to install unless I have a good reason to. [91:47.38] I'm not against, I use iTerm2 for a while and I was like, what is this doing for me? [91:50.90] And maybe it's because I've been ignorant as a bliss over here in the ignorant land [91:55.50] of 256. [91:56.86] I think tmux requires extra config in order to take advantage of some of these modern [92:01.22] things, which is unfortunate because they are detectable, but yeah, that might be part [92:06.18] of the reason too. [92:07.18] Yeah, possibly. [92:08.18] So I have good things to look forward to now that I'm using ghosty. [92:12.16] One thing I did notice, which I used to use way back in the day, I think on Linux and [92:15.90] I love is you got this, uh, I called it visor mode, you know, fly down from the top. [92:22.74] That's a cool thing. [92:23.74] I love that when I was in college cause I make everybody think I look cool and I was [92:26.94] like, you know, like what'd you, how'd you do that? [92:29.58] Yeah. [92:30.58] That's a cool feature. [92:31.58] That was definitely, I won't lie. [92:33.62] Part of implementing that feature was like the, I'll just say like marketing factor of [92:38.58] it. [92:39.58] Just like the cool factor for sure. [92:40.86] But, but you know, really also was how many people came and said like, they must have [92:47.70] that to use this terminal because I term supports it. [92:50.82] And I think I term is the only terminal that supports it. [92:53.02] I think so too. [92:54.02] I think that's the one thing I lost when I switched back. [92:55.74] I was like, I don't use it much anymore cause it was kind of a novelty, but it's cool. [93:00.06] And now that I got, now I'm back to it, I'm like, Ooh, I should use this now. [93:02.46] Can you map that to like a global hotkey so you don't have to be a, okay. [93:06.02] Yes you can. [93:07.02] And uh, yeah, there's, there's actually a couple of beta testers. [93:10.74] Close my mind that they are full time professional software engineers and they exclusively use [93:17.06] that as their terminal. [93:18.06] They don't use, they have no floating windows. [93:20.14] I'd love to watch them work. [93:21.46] I did too. [93:22.46] Yeah. [93:23.46] So they, they're coming from I term and they're like, I only have one terminal and, and, and [93:27.10] a ghosty language is called the quick terminal. [93:29.46] It's like, I only use the quick terminal. [93:30.94] So they're finding some really interesting bugs because it was like they're sort of getting [93:34.38] fixed now, but they're, they're using it so heavily, but I never imagined people would [93:38.26] use it without another floating window, which complicates like if you have three screens, [93:43.66] which screen does it float down from and like things like that, they're finding some good [93:46.38] stuff and uh, it's all, it's all going to, that's all going to get fixed before 1.0, [93:50.10] but it's, it's, it's very interesting how, how diverse the user base is out there. [93:55.50] Let's test your config knowledge, Mitchell. [93:58.46] I have the config open. [93:59.98] If I want to, I want to, I want to bind a key to this quick, what is it called? [94:05.02] Quick what? [94:06.02] Quick terminal? [94:07.02] Quick terminal. [94:08.02] So one, if you don't want to bind a key, it's in the menu. [94:10.10] So if you just want to see what it looked like, it's really right. [94:12.38] I've played there. [94:13.38] Yeah. [94:14.38] I've done that. [94:15.38] It's in a view. [94:16.38] I think. [94:17.38] Yeah. [94:18.38] View quick terminal. [94:19.38] That's not very practical as a way to use it. [94:20.38] It's more of a discovery mechanism. [94:21.38] Do you still want to know the config to bind? [94:23.78] Yes, I do. [94:24.78] That's why I asked. [94:25.78] Okay. [94:26.78] So key bind all one word, K-U-I-B-I-N-D equals space or no space, I don't care, equals. [94:32.90] And then let's just bind it to something dumb. [94:35.22] Let's just type the letter J colon. [94:37.26] Yeah. [94:38.26] We'll bind it to J for now. [94:39.26] You could replace that later. [94:40.26] J colon and then toggle underscore quick underscore terminal. [94:44.86] Okay. [94:46.26] And then save it and then hit, hit command, comma, that'll reload your config. [94:52.18] And then hit J. [94:53.18] I must have fat fingered it because my, my, oh wait, the config opened up or something. [94:57.82] You might hit command shift comma. [94:59.82] I think I might've done that. [95:01.46] Yeah. [95:02.46] Oh yeah. [95:03.46] Command shift comma is actually what you need. [95:04.46] Okay. [95:05.46] Command comma does open it. [95:06.46] Yeah. [95:07.46] I was like, what is this? [95:08.46] Yeah. [95:09.46] Oh, I fat fingered it. [95:10.46] Configuration errors. [95:11.46] Speaking of stealing from the browsers, I also just found your terminal inspector. [95:14.90] Yes. [95:15.90] Which is very much like in the spirit of DevTools, right? [95:17.98] Like inspect element, inspect terminal. [95:20.42] This is cool. [95:21.62] I'm surprised we actually, I was surprised I forgot to mention that. [95:24.90] Yeah. [95:25.90] I, I am going to age myself a bit here, especially given my discord community, but I remember [95:31.78] the pre inspector days and specifically I remember when Firebug launched. [95:36.34] Firebug maybe. [95:37.34] Yes. [95:38.34] Yes. [95:39.34] And I was at active rails developer, web developer when Firebug launched. [95:43.78] And yeah, overnight web development got so much better and I felt like you could do so [95:48.06] much more because of the visibility it gave you. [95:51.46] And the terminal inspector still has a long way to go to get there, but that's what I [95:55.46] was thinking of when I built that was like, I want this to be a text platform where people [95:59.14] could build applications. [96:00.14] And to do that, you need good debuggers and debugging tools. [96:04.22] And I felt that with a terminal inspector, similar to fire, we need that. [96:08.30] We need the fire bug of terminals. [96:09.78] And that was, that truly was the motivation for that. [96:12.38] Yeah. [96:13.38] Super cool. [96:14.38] Nice and simple. [96:15.38] DevTools has gotten very feature rich over the years when you fire it up in Chrome and [96:20.18] it's pretty complicated at this point. [96:21.50] I mean, there's courses on how to use DevTools. [96:23.46] I like, and Firebug was so simple. [96:25.46] I mean, it was game changing, but it was basic compared to what we have now. [96:28.38] And I like how straightforward and basic this is just to even just, I just grokked it immediately [96:34.02] even just as a non-developer on this thing. [96:36.36] It's just, it's sweet. [96:37.36] Yeah. [96:38.36] It's cool. [96:39.36] And I think it educates people more. [96:40.36] Sure. [96:41.36] Like, I don't know if, I don't know if this will be true about terminals, but I suspect [96:43.02] it will because with the, with the inspector I've had non, like non-developer friends find [96:49.34] that feature in browsers and just like click around. [96:53.02] And they've sort of mentioned to me like, Oh, I realized I could change the color of [96:56.70] this thing. [96:57.70] And that's how that works. [96:58.70] And, you know, it just sort of like some sort of education and I'm hoping that there's like [97:01.34] terminal people, users that aren't ever going to build a terminal application, but will [97:06.58] open that inspector and just kind of, you know, mess around and be like, Oh, that's [97:10.30] probably how that works in a terminal. [97:11.94] And yeah. [97:12.94] I'm stoked. [97:13.94] A new terminal option has arrived. [97:17.82] That's right. [97:18.92] The terminal option has arrived. [97:21.54] It's the and terminal. [97:22.54] There's no or's here. [97:23.54] That's right. [97:24.54] You get this and that and that. [97:27.02] Love the icon. [97:28.22] Love, love the icon work too. [97:30.06] Very good. [97:31.06] I love that license. [97:32.06] I mean, what's not to love about this? [97:33.06] I don't know. [97:34.06] I don't know. [97:35.06] That's why everyone's so excited. [97:36.06] Mitchell. [97:37.06] I guess that's the lack of availability. [97:38.06] Of course, if you're listening to this, it's probably out there unless you're listening [97:44.46] to this the day that we ship, because you know, this coming out mid-December, if you're [97:48.86] not listening to this, if you're, if it's late December, if it's January, go download [97:53.26] ghosty right now. [97:54.74] What will the URL be for ghosty? [97:57.54] It's going to be ghosty.org. [97:58.54] Okay. [97:59.54] I already, I already have it and that's what it'll be to match the GitHub org is ghosty [98:05.02] dash org. [98:06.02] So yeah. [98:07.02] Gotcha. [98:08.02] Let's replace the dash with a dot. [98:09.02] Well, you're doing it right, Mitchell. [98:10.46] I appreciate all this open sourcing it, the technical philanthropy, reinventing an awesome [98:17.02] terminal from the ground up. [98:18.78] I appreciate it. [98:19.78] I'm here for it. [98:20.78] You've gotten me out of terminal.app. [98:22.34] We'll see if I stick around. [98:23.34] I probably will, especially because I can, I can just like bring this quick terminal [98:27.26] down and impress all my friends again. [98:29.26] If my greatest, if my greatest social good is getting people out of terminal.app, then [98:34.14] I will die happy. [98:36.14] Impact, baby. [98:37.14] Impact. [98:38.14] Thank you very much. [98:39.14] Yeah. [98:40.14] I'm happy to be back. [98:41.14] Like I said, I listened to that episode from 2012 and uh, yeah, so it's funny to be here [98:46.78] what? [98:47.78] 13 years. [98:48.78] Like a time capsule. [98:49.78] Yeah, it is. [98:50.78] How wild is that? [98:51.78] It's cool. [98:52.78] I even sound, I even sound my, my, my wife was listening as I had it playing and she [98:56.10] said I sound like a child and I was a child. [98:58.22] So yeah, maybe I'll look back in 13 years and say I'm now a child right now, but, but [99:03.70] uh. [99:04.70] You've grown up man. [99:05.70] Hopefully. [99:06.70] It's crazy. [99:07.70] All right. [99:08.70] Thanks again. [99:09.70] Bye y'all. [99:10.70] So Ghosty for Christmas 1.0 coming soon, coming this month, but will it arrive before actual [99:17.10] Christmas day? [99:18.10] Will it be a present for all of us developers? [99:20.82] Maybe the better question is, will it become the terminal of 2025 for most of us? [99:26.90] That's the question. [99:27.90] I know for me it needs to have warp like input into the terminal. [99:32.34] I love that about warp personally, and I'm sure that Mitchell has great heights that [99:36.38] he'll reach with this. [99:37.66] Live Ghosty, potentially a shell, who knows, but I have to have warp like input into my [99:44.34] prompt. [99:45.34] I just love that about warp. [99:46.34] Okay. [99:47.34] Go to ghosty.org that's g-h-o-s-t-t-y dot o-r-g, but if that site isn't available yet, go to [99:56.54] the show notes. [99:57.54] We have links there for you and Ghosty 1.0 is coming soon. [100:01.26] Okay. [100:02.26] One more note. [100:03.26] It was so cool to catch up with Mitchell Hashimoto after all these years, after all this accomplishment [100:07.62] to have the history we had with him to go back to the beginning before HashiCorp, the [100:13.30] start of Vagrant, just the project, and to now see where he's gone and what he's doing [100:19.38] now. [100:20.38] To me, that's the coolest thing about this podcast. [100:22.18] I love that. [100:23.18] Okay. [100:24.18] So that's our interview show of the year. [100:26.66] Enjoy your holidays. [100:28.08] Enjoy your family. [100:29.44] Enjoy your time away. [100:30.94] Enjoy the hacking you're going to do if your plan is to take some time off and just get [100:34.70] some things done that's fun stuff, hobbies, tinkering, new side projects, whatever. [100:42.46] And we'll see you in Zulip throughout the break. [100:44.82] Go to changelog.com/community, join our Zulip, chat with us in real time. [100:51.26] There's a lot of people there, and I'm sure you'll dig it. [100:54.22] Big thanks to our friends and our partners over at fly.io. [100:58.02] We love Fly. [100:59.30] Give them some love this holiday season if you're launching a new app or taking some [101:02.90] of the production, fly.io. [101:06.46] And to our sleep science experts over at Eight Sleep with their Pod 4 Ultra, I love that [101:11.62] thing. [101:12.62] It is the coolest thing ever, eightsleep.com/changelog. [101:15.74] Get yours today. [101:16.74] 350 bucks off. [101:17.74] You can't beat that. [101:18.74] And to our friends over at Wix and Wix Studio, wix.com/studio. [101:24.82] And to our friends at Retool, retool.com. [101:28.32] We love Retool. [101:29.32] It's so cool. [101:30.32] And a big thank you to the beat freak in residence, Breakmaster Cylinder. [101:34.72] Those beats, banging, banging, banging. [101:37.06] Love you, BMC. [101:39.06] Okay friends, we'll see you this Friday for the last episode of the year for Changelog [101:44.02] and Friends, bringing you State of the Log 2024. [101:49.98] Lots of cool voicemails, lots of cool Breakmaster remixes. [101:53.64] And after that, we'll see you in 2025. [101:56.18] Thanks for listening. [102:26.18] Bye.