The Changelog: Software Development, Open Source - We ain't afraid of no Ghostty! (Interview)

Episode Date: December 18, 2024

Mitchell Hashimoto joins the show to discuss Ghostty, the newest terminal in town. Mitchell co-founded HashiCorp, took it all the way to IPO, exited in 2023—and now he's working on a terminal emulat...or called Ghostty. Ghostty is set to 1.0 this month, so we sat down to talk through all the details.

Transcript
Discussion (0)
Starting point is 00:00:00 well friends is the last interview show of the year and it's a good one for those who are new we feature the hackers the leaders and those reinventing the terminal yes today we're joined by mitchell hashimoto mitchell co-founded hashii corp took it all the way to IPO, exited in 2023, and now he's working on a terminal emulator called Ghosty. Ghosty is set to 1.0 this month, so we sat down with him and talked through all the details. A very big thank you to our friends and our partners over at Fly. Yes, Fly is the home of changelog.com. It is the public cloud for developers like us, like you who ship, and you can learn more at fly.io. Okay, let's go, Steve.
Starting point is 00:00:57 What's up, nerds? I'm here with Kurt Mackey, co-founder and CEO of Fly. You know we love Fly. So, Kurt, I want to talk to you about the magic of the cloud. You have thoughts on this, right? Right. I think it's valuable to understand the magic behind a cloud because you can build better features for users, basically, if you understand that. You can do a lot of stuff,
Starting point is 00:01:17 particularly now that people are doing LLM stuff, but you can do a lot of stuff if you get that and can be creative with it. So when you say clouds aren't magic because you're building a public cloud for developers and you go on to explain exactly how it works, what does that mean to you? In some ways, it means these all came from somewhere. Like there was a simpler time before clouds where we'd get a server at Rackshack and we'd SSH or Telnet into it even and put files somewhere and run the web servers ourselves to serve them up to
Starting point is 00:01:46 users clouds are not magic on top of that they're just more complicated ways of doing those same things in a way that meets the needs of a lot of people instead of just one one of the things i think that people miss out on and a lot of this is actually because aws and gcp have created such big black box abstractions like lambda Lambda is really black boxy. You can't like pick apart Lambda and see how it works from the outside. You have to sort of just use what's there. But the reality is like Lambda is not all that complicated.
Starting point is 00:02:12 It's just a modern way to launch little VMs and serve some requests from them and let them like kind of pause and resume and free up like physical compute time. The interesting thing about understanding how clouds work is it lets you build kind of features for your users you never would expect it. And our canonical version of this for us
Starting point is 00:02:30 is that like when we looked at how we wanted to isolate user code, we decided to just expose this machines concept, which is a much lower level abstraction of Lambda that you could use to build Lambda on top of. And what machines are is just these VMs that are designed to start really fast or designed to stop and then restart really fast or designed to suspend sort of like your laptop does when it closes and resume really fast when you tell them to. And what we found is that giving people those primitive is actually there's like new apps being built that couldn't be built before.
Starting point is 00:02:58 Specifically because we went so low level and made such a minimal abstraction on top of generally like Linux kernel features. A lot of our platform is actually just exposing a nice UX around Linux kernel features, which I think is kind of interesting. But like you still need to understand what they're doing to get the most use out of them. Very cool. Okay, so experience the magic of Fly and get told the secrets of Fly because that's what they want you to do. They want to share all the secrets behind the magic of the Fly cloud, the cloud for
Starting point is 00:03:28 productive developers, the cloud for developers who ship. Learn more and get started for free at fly.io. Again, fly.io. so we're here with Mitchell Hashimoto. Mitchell, it's been literally forever in literally sense how Adam says it, literally. Not how I use it, but how he uses it. Literally forever. Welcome back, man. Welcome to the show.
Starting point is 00:04:15 Thank you. Yeah, it's been 10 years since the last show. And then the first time, the only other time I was on, I think it's been like 13, 14 years. It's wild. I still remember the day that you posted Vagrant onto Hacker News, I think, the first time time I was on, I think it's been like 13, 14 years. It's wild. I still remember the day that you posted Vagrant onto Hacker News, I think the first time. I remember that day. That was 2010. I don't know, but yeah. I don't know which day it is either, but yeah, I remember that because I was like, oh, this solves one of my problems I have in life. I was
Starting point is 00:04:38 very excited, as was the rest of us, right? I mean, Vagrant was a huge hit right away. Thank you. Thank you so much. But nowadays, ghosty. Is that how you say it? Ghosty or is it ghost TTY? No, I say ghosty. I say ghosty. That's the first controversy I had in my head because I was calling it ghost TTY.
Starting point is 00:04:53 And then I was like, I bet people just say this ghosty. What do you think, Adam? Yeah, I would say ghosty, but I can see why you would say ghost TTY. But that would just, it's like HTTP. Like, why complicate things well i have trouble because i speak faster i have to slow down to say http i have to be very intentional to get it right otherwise i'm like h it's not good so why would i say ghost tty for the uninitiated ghosties mitchell's new project it is is a terminal. A terminal emulator.
Starting point is 00:05:25 I don't know what the technical term is. Mitchell, I'm sure you know every little detail. Terminal emulator, terminal, what is it? If you want to be pedantic, terminal emulator. But you really don't have to be. I think to most people, terminal would make the most sense. Yeah. Why a terminal, man?
Starting point is 00:05:41 Reinventing the wheel, so to speak. That's usually the first thing I get asked. Yeah, I mean, I think the important thing to know is I didn't set out a couple things, I guess. I didn't set out knowing I wanted to work on a terminal emulator. And second, even when I decided, hey, I want to work on this, I didn't think anyone would actually care. But the why really goes back to I wanted to post HashiCorp sort of get back into
Starting point is 00:06:08 different categories of programming that I hadn't had the time to work in and felt a little rusty and no pun intended. And I, you know, for me, that meant, you know, non infrastructure, non server side, you know, desktop side, software using a GPU, something I never meant, you know, non-infrastructure, non-server side, you know, desktop side, software, using a GPU, something I never used, you know, while we were at HashiCorp, at least not too much. Graphics programming, you know, just everything, the polar opposite of what you could think of what I've been doing. I wanted to get back and play around with it. And I poked around at a few things, but felt that a terminal emulator was a good combination of those things I wanted to play around with. And as I sort of spent more time doing that, recognized, hey, I think terminal emulators can actually be a lot better. And I think there's like an opportunity here to do something that people really love.
Starting point is 00:07:02 And that turned into a much more serious thing, I guess. Yeah, the terminal's been played with a little bit recently. You've got Warp. I believe there's Wave. Those are like the two most recent attempts at a terminal of the future, so to speak. You've obviously got Terminal.app, which I watched briefly some of your talk
Starting point is 00:07:21 and you scoffed at the speed of Terminal, Mitchell. It's not even the speed. I'm not a big fan of the built-in one, but yeah. Gotcha. Yeah, I mean, I think that one thing I've always said about Terminals is that I think if you compare them conceptually to a web browser, then it starts to make a lot more sense about why I care about terminals. And what I mean by that is the web browser has for better or worse, just, I don't
Starting point is 00:07:52 think it's controversial to say that it's one sort of the graphical interface ecosystem of the world. Like if someone's building a graphical interface today, nine out of 10 times, probably more than nine out of 10 times, they're using a web technology, whether it's actually in the browser or electron or whatever it is. And I think there's still a good place for text based interfaces. And the terminal has always been the place for text based interfaces. And sometimes the terminal lives in a browser, you know, if you're using like a web based text editor and stuff. But I think that if you look at web browsers, they get hundreds, maybe like a couple hundred, if you're being conservative, new features and innovations every year. And if you look at a terminal, they get, I don't know, keep probably count on a couple hands how many they get per year. And I just don't think it's a very exciting, innovative platform for developers.
Starting point is 00:08:46 And I just sort of am wondering, what happens if you do make it exciting? Or does it become exciting? I don't know. And to me, the worst case, if it doesn't become exciting, is we still use terminals every day. So at the very least,
Starting point is 00:08:59 I think you've built a better terminal. So, yeah. Well, two tools that I use every day as a working developer is a browser and a terminal. And all yeah. Well, two tools that I use every day as a working developer is a browser and a terminal. And, you know, all of us on this call have been around the block a couple of times. I mean, many people listening weren't there in 2010 when you first released Vagrant on Hacker News. And yet, terminal is still adopted newly to this day by new technologists all around the
Starting point is 00:09:22 world. And so, it's not going anywhere. But I also have just been kind of happy with the way it works. I mean, I'm kind of set in my ways. And so I wasn't looking for Ghosty necessarily. But having tried it out, it sure is a nice terminal. And you're just getting to 1.0. So I know you've been working on it for a while. Where did you start and how did you set out? I mean, you have to kind of stake your claim.
Starting point is 00:09:45 Like this terminal is going to be different than terminal.app, for instance, in these ways. Yeah. Yeah, what were your initial goals? Yeah, so what I like to say, especially for the 1.0 release, what I'm trying to do is build a terminal that is the best, what I call existing terminal.
Starting point is 00:10:03 I'm not trying to innovate too much on what a terminal can do. I'm not trying to innovate too much on what a terminal can do. I'm just trying to make what terminals historically have done a very, very good experience. And the way I'm sort of carving out what makes Ghosty different for now and what, if any of these are important to you, I think you would find a lot of joy in using Ghosty is I'm trying to build something that's fast and cross-platform and native. And the ands in there are important because there's a lot of terminals out there that are fast or, or native or, or cross-platform or, but there's, I felt that I couldn't find one that anded all three of those properties.
Starting point is 00:10:47 And Ghosty does that, in my opinion. I mean, that's what I set out to do. And so it's fast. And when I say fast, I'm not trying to say it's the fastest, depending on the benchmark. Sometimes it's the fastest. Sometimes it's number two. But importantly, it's very, very close to the fastest. And I don't think you could ever argue it's not fast, to say that.
Starting point is 00:11:08 Cross-platform, it works for launch. It'll work on Mac and Linux. And native on Mac, it's a native Mac application using Swift UI. The UI is written in Swift. On Linux, there's no real definition of native, but it's a GTK-based application, and it'll feel, you know, the way I describe it on Linux is if you use
Starting point is 00:11:25 Alacrity or Kitty or Westerm or something, you'll immediately notice the difference between that and Ghosty in terms of how it integrates with your desktop environment. How do terminal folks define fast? Is it input lag? Is it? That's a great question because actually when people say this terminal or that terminal is fast or slow, it actually really frustrates me because it's so complicated how you define that. Because fast doesn't mean anything if you just say fast, unless you're saying in every category possible, which no terminal is. And so, yeah, there's a few ways people tend to define fast.
Starting point is 00:11:58 One of the ways is simply how fast it could read files, you know, how fast text can go through your terminal. Some people say that's a useless metric. I think it's super important because tailing logs and, or accidentally catting a file is stuff we do all the time. And, uh, another one is something we call input latency. Basically when you press a letter on your keyboard, how long it takes for the photons to appear on the screen. Another one is sort of rendering speed. What frame rate can you maintain while you're, say, scrolling through a Vim file or something? And that's slightly different from the speed it can read.
Starting point is 00:12:36 And there's a couple more, but there's so many different dimensions here to speed. And we've tried to really be, like I said, not necessarily the best, but in the inarguable class of the best for every one of these categories. What is it that you do to make it fast? Like, where does that begin? When you consider speed and the different paradigms you can consider, what are the permutations of that? Yeah, there's, again, because there's so many dimensions to speed, there's also dimensions to how you do it. And one of the ways is being a native application, taking advantage of things that are hard to take advantage of if you're not. So, for example, we spent a lot of time coming down to really the instruction level architecture of the program. And if you're on a Mac computer, a new Apple Silicon Mac computer, we take advantage of literal ARM instructions that aren't available elsewhere to make things faster. Likewise,
Starting point is 00:13:31 on Intel, I'm talking mostly about SIMD work to make read speeds and parsing speeds very fast. But from the rendering side, we use Metal directly on macOS. We use OpenGL on Linux. The Metal part is really important on macOS because there's very, very few terminals that use Metal. iTerm supports Metal, but disables it if you use ligatures, for example. I think that I don't...
Starting point is 00:13:58 It's either number one or number two. I think OC is the only terminal that has a pure Metal renderer that also supports ligatures. And that's just important because by using OpenGL on metal, there is an overhead because Apple does not natively support OpenGL. So what it's doing is translating that to metal. So there is an overhead. And you can actually notice that if you do like render speeds between Alacrity and Ghosty, you get about a 10% frame rate difference on the same workload with Ghosty under basic load, not even heavy load.
Starting point is 00:14:28 And so those are just a couple examples of the things that we're looking into. I love this idea of the terminals of browser. We kind of touched on this a bit with like 2Es before and the text-based interfaces and just the ease of that. So obviously version one is really getting the terminal as it is that Ghosty out there, that version one is out there. Drop-in replacement, right? Right.
Starting point is 00:14:53 I do want to put an asterisk on that, though. It's the terminal as it is, but supporting all of the most modern features that have been created previously. And I think that, you know, my bias, but Ghosty is the most feature-rich in terms of terminal specifications that, you know, in terms of Kitty image protocol
Starting point is 00:15:14 that Kitty defined and some other things that are all over. And we could talk about that later, but even though it's the best existing, I think we bring together all of the most modern things as well. What I was trying to drive towards was this idea of the terminal as a platform. It's been there. It's been a tool.
Starting point is 00:15:32 As Jared said, it's a daily driver for me, for him, and for many of the developers out there. But it's not always the platform for which you do things. Vim is a thing, obviously. You've got many of the tools you use on a daily, but I'm thinking like H top stuff like that in terms of this platform, this two-way platform is, are you thinking like beyond version one is, uh, maybe more native ways to do two-ways kind of thing. What are your thoughts on beyond this, this realm? Yeah. I mean, I think that's, that's, that's, that's exactly right. That's, that's the way I would look at realm. Yeah, I mean, I think that's exactly right.
Starting point is 00:16:06 That's the way I would look at it. The question I've asked people is when they're not using a terminal for something, especially if it's something that's very terminal-esque. So for example, the people I like talking to the most right now are people that use something like MacVim or NeoVim in a separate native application
Starting point is 00:16:23 or something like that. I usually ask them, why aren't you using Vim in a separate native application or something like that, I usually ask them, why aren't you using Vim in a terminal? They're so close, so why aren't you doing that? And even going further then, I will ask people that simply use VS Code or a total non-editor, I mean, anything,
Starting point is 00:16:38 what draws you to using a graphical interface over a terminal one? And right now, that answer is really easy in a lot of cases. There's really obvious reasons why the terminal version is inferior. And my goal is to look into how to improve that. So concretely, for example, one of the things that people brought up with Vim is that in the terminal version, you can't drag and drop things like images
Starting point is 00:17:03 or even things like files to a certain extent. You can't just like drag a file into Vim and have it open a new tab. Going a little bit further, if you right click in Vim in the native app, you'll get a native context menu. And if you right click in the terminal, you get this like kind of funky block character drawn one and that doesn't feel great. In the native Vim, you could have native tabs. And so one of the things I'm actually looking into is how can you get a terminal program to be able to use native tab widgets, even though it's driven by one program, but it's showing up as multiple distinct tabs that you could pull out into separate windows and stuff like that. And I think even, you know, one of
Starting point is 00:17:38 the more extreme ideas I have is that a community member brought up is like, what if you actually had also had a browser, which, which seems weird because I'm painting them as a dichotomy, but I don't think they're necessarily a dichotomy. The argument was, if you're browsing documentation, which is often in HTML, right now you have to do a link that opens in a browser in the same way that you could just draw text in a browser. What if you could just embed a browser widget
Starting point is 00:18:01 into part of your terminal UI so that the documentation part just is, that happens to just be normal browser technology without, so you could like live in this sort of platform for, for reasonable overlap. Right. I'm not trying to replace the browser, but just for a reasonable amount. If you're, yeah, if you're like opening a PDF, like why does the PDF have to open in a separate thing? It opens directly in the browser. Why can't a PDF open directly in a terminal? Stuff like that. I think anytime you eject to do something,
Starting point is 00:18:30 it's at least worth asking the question, like why does that have to happen? Exactly. And I don't think it's like why in the, I don't think every answer is we have to make that work in a terminal. I just like, I think the knowledge of knowing why and being critical about if you can maybe
Starting point is 00:18:46 extend the point at which you have to eject is a useful thought exercise. So Ghosty passed my sniff test immediately because there was two things I wanted. And the first one was Tmux. So I was like, okay, can I drive this daily? And I've only been on it for a couple of days. So I probably, there's probably warts and road bumps that I haven't quite hit yet. And I'll let you know next week. But so far it's like, can I run Tmux?
Starting point is 00:19:08 Yes. Okay. Do I have to sign in to use it? No. Okay. I'm good to go. But Tmux is a weird thing because, you know, I've been using it for years, but really it's kind of a hack, like a terminal multiplexer, like you think extending and making the terminal better, like shouldn't
Starting point is 00:19:26 that kind of functionality be part of terminals? I don't know your thoughts on that. I think so. So there are terminal people out there that I don't need to shame, but they are like sort of militant about disliking multiplexers. I'm not that person. If you want to use a terminal multiplexer in Ghosty, I want to make it work. However, I do think that terminal multiplexers make the terminal experience worse, but there's no better option right now. So it makes sense that you're using them. So the reason I think a lot of people don't think about this is a terminal multiplexer is itself a full-fledged terminal where its ui is just text that's going to another graphical terminal like you're running multiple levels of terminals and
Starting point is 00:20:12 one of the first places that causes issues is there's features that ghosty supports that because something like tmux doesn't support you no longer get. And a good example is, yeah, great example is the graphics protocols. Like we support graphics protocols, Tmux doesn't, you just lost that because the terminal within the terminal has to understand first. And since it doesn't understand, it throws it away. And so if we could get rid of that, then, then yeah. And one of the things I am thinking is the ability, my dream is with is with things like Tailscale out there and making it so easy to do networking, private networking, I want to be able to run basically like a ghosty host instance
Starting point is 00:20:53 on my home computer, run it against your Tailscale network, and then anywhere you go, reopen, reconnect, and it's your same sessions like Tmux. But instead of just the text, it's actually like all your old windows and splits natively perfect the same size pop back up. Get out of here. And you could close all of them and it's all good because it's all remote.
Starting point is 00:21:12 And it's like, you know, you own all your data. It's just running on your own machine. It's a tail scale, all that stuff. Like that is something I'm actively trying to do right now. And Tmux would just be dead to me. It would just be dead to me, you know? Get out of here, Tmux. Yeah, yeah. I think the people behind Tmux and Zellige and stuff
Starting point is 00:21:27 are great, but I think that philosophically I would love to see them disappear. Not the people. Not in reality, but philosophically. Not the people, but the software, yes. Render it obsolete might be the better phrase. Render it obsolete. I agree with that sentiment because
Starting point is 00:21:43 I think, and I haven't had this conversation with them, but to their credit, they probably are operating in a world they have to operate in. You've chosen to go a different route, which is to innovate on the thing itself to make it a platform versus obfuscate it into something by brute force, basically. Yeah, and if I could get a little bit more nitty-gritty, one of the things that I think Ghosty, obviously the way I've talked about it, the way we've focused on it, has been the application, but I think long-term what Ghosty actually becomes is what I call lib-Ghosty, which I'm really trying to build this cross-platform
Starting point is 00:22:18 artifact, this library, that you could build terminal emulator applications on top of, so you don't have to reinvent the core of understanding all of the terminal stuff. You could just focus on sort of the UI part. And that's not theoretical. That's how both Ghosty apps work.
Starting point is 00:22:34 They have a platform-specific UI that shares a common core, and that common core is actually a C library. I'm not ready to ship that as like a 1.0 yet, the actual core C library. But because the UI is pluggable, the community we've already talked about, there should be a multiplexer like Tmux where the core is just lib ghosty ands that it's running within ghosty, it could just stop, it could just, it could just pass through and no longer, you no longer pay for that anymore. But then the benefit of lib ghosty existing for other terminals is you could get all the modern features that ghosty has without every developer having to reinvent that. So I guess I'm, the point being is I'm trying to come at this multiplexer problem from different angles because I think it would take time
Starting point is 00:23:25 for them to truly be obsolete. You keep saying cross-platform. How important is Windows in a cross-platform world or in your world? In my personal world, it's not super important, but in the world of software, it's hugely important. And I could go back to Vagrant for this one. I mean, when I really focused in, I actually, one thing I did back probably the year after we talked back in
Starting point is 00:23:49 2013 is I bought a Windows PC, a ThinkPad, and I used Windows full-time for a year. And that was because I really wanted to empathize with what the problems were with Vagrant on Windows. I didn't want to just get it working in a couple hours one evening and go away. I really wanted to live in that ecosystem and understand. And Windows got a lot better. I made installers, things like that. And the end result was that the vagrant growth was absurdly huge because the Windows software development ecosystem is extremely large and they have a lot of paper cuts that they're dealing with. And so I think the same thing with terminals. I think that it's really important. It's hard enough for sort of me as an individual
Starting point is 00:24:28 to do Linux and Mac sort of as a side project. So Windows didn't make it for 1.0, but it's something I really want to do for future releases. I ask that because invariably somebody out there is thinking like, he keeps saying cross-platform, but us Windows folks don't get any love. And so yet, yet,
Starting point is 00:24:47 yet, yet to hear that there's, there is importance there. Yeah. Yeah. And it's like, uh, some people have got it working through WSL and you know,
Starting point is 00:24:55 you can run ghosty on windows through that. I just say it doesn't work because to me, the ghosty experience means that you're getting a truly native build and we don't have that for Windows yet. It seems to me like building something to work well on a platform that you don't personally use is like jobby job kind of stuff. Like Ghostie is a passion project, something that you want to have fun doing. I think we'll get into some of the technical philanthropy conversation later on in the show. I'd like to at least hear your thoughts on that more. For sure. But what's your, I mean, do you, I guess, what's your ambitions with Ghosty? Because you don't need to turn this into a
Starting point is 00:25:33 business or anything. And so do you want to be building in window support when you don't have to? So my, yeah, I think the important part of the ambition point is that it's not financial. The ambition behind GoSee is really terminals are a really fundamental part of a software developer's life, no matter what sort of ecosystem you're in, whether it's web technologies, desktop, you know, etc. Whether you're a student, a professional, basically all these dimensions, terminals are very important. And I don't see that going away and i sort of think like what if i don't feel like people have focused very hard on terminals and can i sort of be that person for a while for the steward for a while improve the ecosystem in some way and sort of build a community that could then sort of carry that on later but yeah the real i guess like to put it into one word,
Starting point is 00:26:26 the real goal with Ghosty is impact. And to that end, I think that Windows support's important. But more importantly, that's why libghosty is more important to me because I don't want Ghosty to be the one and only terminal emulator application. I don't want to build an iOS application, an Android application, whatever future platforms exist. I want to enable others to do that without having to reinvent the core. And so libghostie to me is like the actual impactful thing that's going to happen over the long term. And we could get into licensing later. But that's sort of part of the reason why we ended
Starting point is 00:27:00 up on the MIT license as well as I really just wanted, whether you're going to be commercial or open source or whatever, whatever you wanted to do with lib ghost C, I really just wanted to enable that impact no matter what. I'm just reminded of Daniel Stenberg with curl, you know, lib curl is the reason why curl, not to curl the command line, but curl the thing is everywhere. It's because of lib curl more than it is because of the binary curl, although they're both used a lot, but I mean, huge impact with lib curl. So yeah, it's a great example. I'm glad it doesn't have to be a business. I was worried. I was like,
Starting point is 00:27:34 what is the, you know, do you want to build another HashiCorp here? But probably not with this. And I think it's to zoom out a little bit. I think it's kind of cool of you, I suppose, to, you know, some would say, well, you don't have to do anything, Mitchell. You can just go and fly as you do, right? You don't have to satiate any of these technical chops you have, or you want to play around in areas you've never had a chance to play around. And you can just simply just go and do something else. But instead, you're steeping yourself in an area where you really haven't had a chance to do so and it will be impactful i think the wikipedia of the
Starting point is 00:28:10 future for you will be so cool because you could have had just walk away do your thing family whatever right and congratulations on the recent addition to your family of course but you don't have to do this you want to do this i mean it's to me that's cool thanks thanks yeah i you know i don't whatever people write on wikipedia if there is anybody anything then then fine but i think that you know part of the way i've described ghosty is this idea of technical philanthropy and and one of the things i know about myself is you know like i just love programming and i love building and I knew that wasn't going to stop no matter sort of how much career success I had or things like that. meaningful. And, you know, I'm sure there's more directly meaningful ways that I could spend that time. But, you know, I felt that doing this broadly used category of software for free and,
Starting point is 00:29:14 and trying to make it good, I guess, for, for a blunt term, just good is, could be meaningful. And so that's, that's, yeah, it's definitely a part-time thing. I don't spend 40 hours a week. I spend barely maybe 10 or 15 on this and it's just the, the way I could have fun and pursue my passion, but still feel like I'm helping something. Well, friends, this is the last chance you have to get the 8Sleep Pod 4 Ultra in your hands in your bedroom before Christmas. Go to 8sleep.com slash changelog and use the code changelog if you need to to get $350 off your very own Pod 4 Ultra. I've never had better sleep. I love this thing. I sleep on it every single night.
Starting point is 00:30:06 My wife and I, we absolutely love what it does for our sleep. So what exactly is the Pod? Imagine a high-tech mattress cover that you can easily add to any bed. And this isn't just any cover though. It's packed with sensors, heating and cooling elements. It's all controlled by sophisticated AI algorithms, and it's all designed to give you better sleep. It's like having a sleep lab, a smart thermostat, and a personal sleep coach all rolled into a single device and no wearables required. It uses a network of sensors to track a wide variety of biometrics while you sleep, sleep stages, heart rate variability, that's so important, respiratory rate, temperature, and so much more. The best part, it does all this without you having
Starting point is 00:30:50 to wear any devices. Again, no wearables. And the accuracy rivals what you would get in a professional sleep lab. The pod uses precision temperature control to regulate your body's sleep cycles. It can cool you down to a chilly 55 degrees Fahrenheit or warm you up to 110 Fahrenheit. And it does this separately for each side of the bed. This means that you and your partner can each have your own ideal sleep temperature going on. And the really, really cool part is the pod uses AI and machine learning to learn how you sleep, to learn your sleep patterns over time. And it uses this data to automatically adjust the temperature of your bed throughout the night to fine-tune how you sleep,
Starting point is 00:31:31 to give you more REM sleep, to give you deeper sleep. And that's the part I love most. And all this functionality is accessible through their awesome mobile app. You get detailed sleep analytics, trends over time, and even a daily sleep fitness score. Again, go to 8sleep.com slash changelog. Use our code changelog. Get $350 off your very own Pod 4 Ultra.
Starting point is 00:31:53 Do it now. Sleep well for Christmas. Again, 8sleep.com slash changelog. And also by our friends over at Wix. I've got just 30 seconds to tell you about Wix Studio, the web platform for freelancers, agencies, and enterprises. So here are a few things you can do in 30 seconds or less on Studio. Number one, integrate, extend, and write custom scripts in a VS Code-based IDE. Two, leverage zero setup dev, test, and production environments.
Starting point is 00:32:27 Three, ship faster with an AI code assistant. And four, work with Wix headless APIs on any tech stack. Wix Studio is for devs who build websites, sell apps, go headless, or manage clients. Well, my time is up, but the list keeps going on. Step into Wix Studio and see for yourself. Go to wix.com slash studio. yourself go to wix.com studio once again wix.com studio who's the way behind ghosty I know that you are the obviously the inceptor of it but who else there's a community how have you level it up who's involved involved, roles, responsibilities.
Starting point is 00:33:10 I have to say, I didn't get or somehow miss the email that you invited me personally and Jared, I'm sure, too, into this beta. I went into the Discord like any other community member. Oh, you did. I did. I got you in there, dude. I gave him your handle. Well, I had to prove the tragic that I was me and that I wasn't just somebody saying, hey, I'm going to podcast with Mitchell in like
Starting point is 00:33:26 30 minutes can you please give me the gosh I haven't installed this thing yet I should play with it and I was like I just gapped getting that invite somehow because my GitHub is connected to my personal email not change email for some reason and I don't check that as frequently as I do business stuff
Starting point is 00:33:42 so I really should change that but anyways so there is a discord there's people in there that aren't Mitchell they're doing things And I don't check that as frequently as I do business stuff. So I really should change that. But anyways. So there is a Discord. There's people in there that aren't Mitchell. They're doing things. Yeah, the Discord is, I don't know what it is now, but it's somewhere between 20 and 30,000 people. And that's way too many people. And so there's been a good volunteer community of moderators that work really hard
Starting point is 00:34:02 because it's also somewhat of a chaotic experience having 30,000 people in one text channel. And so they work really hard and do a great job and not just contribute on that. A couple of the moderators maintain the Discord bot that is used for a variety of things. In addition to that, there's been a couple hundred code contributors to go see already. And the thing that stood out to me the most about that was I went back and listened to our 2012 Vagrant changelog episode a week ago. Since I was like, I wonder what I was doing back then. That really threw me back. And the first thing I noticed is we were talking about how Vagrant passed something like some number of stars.
Starting point is 00:34:41 But I remember it had just passed something like 100 contributors. And it was already two years old and pretty popular by the time we were talking. And we're talking about how I was so amazed by that. And I was thinking, wow, like the software developer ecosystem has gotten so much bigger. Obviously, due to some of my background, it attracts more people. But GoC and private beta has more stars and almost double the contributors that Vagrant had after two years of being a public project. And so that was kind of like a mind-blowing thing. But that's, yeah, it's sort of built. The we is really the community in terms of people that are working,
Starting point is 00:35:16 I guess, like even multiple hours a week on this. It's probably just me, but yeah. Just to close the loop, I have share the the levels of which i had to ensure tragic that i was me driver's license this is a dm in discord hey there's a funny detail to that i think is that i thought for sure when i started working on a terminal more seriously that very few people first of all would. But of those very few that cared, I thought that demographically, it would skew to a more mature audience. But what I've discovered is that a lot more people care about terminal aspect. And predominantly of those people, it is young people. When I say young people, I literally mean teenagers in school,
Starting point is 00:36:02 a lot of teenagers in school up to early twenties, early career type people. And because of that, there's some shenanigans, I will say within the discord. And so the monitor and the moderators are very sensitive. There's been a lot of scams, a lot of phishing, a lot of stuff, just people just trying to get into the beta. And it's not that important, but lot of phishing, a lot of stuff, just people just trying to get into the beta. And it's not that important, but I think when you're younger, you're a little more zealous about these things. And so the moderators, I think, are very hardened to when someone comes and says,
Starting point is 00:36:36 oh, I know Mitchell, I need the beta, that they're very suspicious. So, yeah. Yeah, I was like, I'm about to plot with Mitchell. Can somebody help me get the beta, please? And so I end in dm with tragic and he says hey can i get some kind of confirmation here that you're not impersonating anyone felt random if we're actually about to talk to mitchell lol yeah and so i was like okay i opened up the calendar app and screenshot of the calendar invite on my calendar that says we're about to talk and he's like hmm not good enough basically i mean he did the thinking emoji he's like just to be 100 sure can you follow me on
Starting point is 00:37:11 github for like 20 seconds and then unfollow me sorry for being excessive and so i followed tragic for i'm still following him i'll just go ahead and leave it that's great that's hilarious i had to go through a couple hoops a real insiders club the hoops will all disappear soon once i got into github it said you had the invite there. So I was like, once I was actually there, it was like, hey, by the way, GitHub is telling me this. Mitchell invited you last week. You're an idiot.
Starting point is 00:37:34 You didn't have to do all this. So there you go. I'm surprised you didn't get banned, honestly. Usually those types of things pop up, and because there's 10 moderators or less, I think there's seven moderators or less, I think there's like 7 moderators and 25,000 people. Most of the time when stuff like that starts happening,
Starting point is 00:37:50 moderators are just like, I don't have time for this and they just ban you from the server. Well, he didn't. They were very nice. Tragic was nice. And that's the loop closed. But the question to get to this point was really, who's behind Ghosty?
Starting point is 00:38:05 I mean, obviously you started it. What's the plan for community? Do you have a governance model? Like how sophisticated and planned out have you gone with Ghosty? Not as much as I would like due to time constraints, but it's something I'll keep thinking about. So for the 1.0 public launch,
Starting point is 00:38:21 it'll just really be me and my you know my side project it's really my project type thing a lot of community in terms of contribute contributions discord moderators love all those people and but i think that like longer term i am interested in some sort of governance model because i don't think i'm going to be working on a terminal the rest of my life so and i do want this to be impactful so So that's something I've definitely thought about. The beta testers have been involved in this discussion we've had for almost a year, basically on project sustainability, because even though it's not something I want to pursue any financial gain for, I would like it to be sustainable for others. And so we've talked about, can we set up, whether it's, is it sponsorships,
Starting point is 00:39:05 is it this, is it that, in order to, I don't want any of that, but in order to pay the infrastructure costs and also potentially in the future pay contributors as well. And so that's something that we're just talking about and we're not 100% sure about, but that's sort of the extent to which I've been thinking about this so far. Makes sense. I mean, so no BDFL, uh, temporarily BDFL. Yeah.
Starting point is 00:39:28 I mean, yeah, for now it is definitely a BDFL model for now, but yeah, yeah. BDFL for now. Gotcha. BDFL FN. There you go.
Starting point is 00:39:37 How long have you been working on it? Uh, so the first commit was actually March or April, 2022, but it's very deceiving because I was still full time working for Hashi Corp. And you can just tell through the commit history. I worked on it here and there, there was like a three month period where I didn't do a single thing. And then, you know, it was very, very on and off, because it was really just me playing around with technologies. I think I got
Starting point is 00:40:00 a little bit more serious, probably last about over a year, a little over a year ago. Yeah. Did you ever consider post Hashi, like, you know, farming or something? This is a cliche, but just not doing software for a while,
Starting point is 00:40:13 trying something completely different. I mean, we know you fly planes, but that's more of a hobby, right? I do fly planes. I do. Yeah,
Starting point is 00:40:19 that is a hobby. But it's, I didn't get all pessimistic like a lot of people get. I still love technology and I think that technology is getting better and I think that there's a lot that could be done with it still so I knew that I was going to stick around and do something
Starting point is 00:40:34 the important thing I did post HashiCorp was when I really formally really left like wasn't getting any sort of paycheck or anything and had to get healthcare on my own and all that sort of stuff when I really left my daughter was about two and a half months old. And so one thing I really wanted to do was just be able to spend a ton of time with her. So
Starting point is 00:40:53 for the majority of this year, and that's a big part of why I didn't publicly release Ghostie right away. For the majority of this year, I've been I've been home and only working during naps or at night or whatever. Every time my daughter's been awake, I've been with her only working during naps or at night or whatever. Every time my daughter's been awake, I've been with her. And it's only been within the past month or so where that started to change a little bit. She's about 15 months now. She has more things that she's going to and stuff. And so I've been able to carve out more like dedicated, even though she's awake, like working hours.
Starting point is 00:41:23 And so I think I did spend that time, but on the other side, you know, I, I'm not someone that can't work. I love working and my family knows I love working. And so finding that time, um, showing, being able to, as my daughter gets older to like see her dad working, you know, that's important to me. And so, uh, that's, that's all part of it what are you doing dad just writing some software over here she's got uh i know there's no video element to this but i have all these stickers uh like ghost stickers they're not finalized yet but i just have so many of these things and uh and she's at the age where she loves stickers so i'll show for you nice for you you
Starting point is 00:42:02 can see all these stickers there's there's about a dozen there's so many and and she has all of them and there's ghost stickers all over our house and my wife jokes that she points at it and goes oh that's daddy's work because for now it is daddy's work and so like that's uh yeah that's what it is that's cool man i like i love that you i mean to be in a position to take that time, you know? Right. I think even if I was in your position because my brain can't let something go, like even if I don't need to financially gain from it, my brain won't let go of the problem set. So I would find that kind of challenging, not so much to not give my necessary time to my child that's newly born, but more so my brain. The separation of that. You can't help that. You can't help how your brain works. If you can't let a problem go necessarily, that would be my, my fear for me. Like if I was in your position to be like, you know what? I, I can't stop my
Starting point is 00:42:56 brain from thinking about a problem set. Oh yeah. I mean, even when I wasn't really, when, even when I was just doing go see, like literally at night after the baby slept, I was actually doing it. I require a lot less sleep than my wife. And so I've always been like a six hour a night kind of guy. And so I was actually when she was an infant and waking up in the middle of night, I was just not going to sleep before she woke up that first time I was like, I will just work and then I will handle the baby and feed her the bottle and put her back to sleep. And then I'll go to bed after that. And so that was like sometimes, you know, like midnight or something. And I would sometimes run into, uh, my wife when she was awake, I'd run over to her and have my phone out and, and I'd be like, look at this, look at this. And she's like, Oh, do you have a, do you have a cute video of our daughter?
Starting point is 00:43:43 And, um, you know, I'd show her the video and it would be like font rendering. And she was so disappointed. I think if there was a NerdSnipe bingo card, like if we're playing bingo for like how you would NerdSnipe somebody and you had like, you know, prolific open source maintainer
Starting point is 00:44:04 who builds unicorn business and retires and then comes back to reinvent a terminal and then chooses Zig as a programming language. Like, those are all things where it's like, I know why there's 25,000 people in that discord. Like, you have all of the different ingredients, which is really awesome. And that's just a way of setting up a question about Zig. Like, why did you go that route? Because that a yeah that's an interesting choice interesting language and a burgeoning one yeah you you could uh i i you could find a tweet i did i think end of 2021 very early 2022 where i talked about how i was interested in zig but i had no time to to use it and it was always in the back of my mind of this interesting programming language.
Starting point is 00:44:46 And I think as an important background to me, I was a professional paid C programmer for a year or two of my life, somewhere between a year and two years of my life. And I like low-level system stuff. I actually like C.
Starting point is 00:45:02 And so I wanted to... HashiCorp was very close to getting all its software written in C, by the way. That's very... It was very close. It was between C and Go and Go 1, but it was very close to C. And I wanted to get back to systems programming, but I
Starting point is 00:45:17 recognized the warts that C had and I was looking for a better C. And Zig, to me, always felt like that. And years into using Zig, I feel the exact same way. I feel better about it. I love, it brings me joy every day to write Zig. And so that's really it. You know, later on, I learned about the community. I like the community, the sort of the founder of the Zig programming language, Andrew, really, we've now hung out in person multiple times, really awesome, like kind person, and his technical points of view are fantastic. And, and so everything sort of came together where I'm just having a lot of fun. Yeah, that's sort of how it how it goes.
Starting point is 00:45:54 Did you try Go? Did you try Rust? Did you go straight to Zig? Or did you start writing it in C at first and then switch to Zig? How did it play out? I knew Go wouldn't be a choice because I knew I wanted to do something that really, I owned every single allocation and every single instruction that would ever be run. And having an active runtime that was running was never going to be and a garbage collector was never going to be an option. The real plausible option there was Rust.
Starting point is 00:46:19 And I didn't try it with the terminal because by then I had already had enough experience with Rust that I knew I didn't want to write Rust terminal because by then I had already had enough experience with Rust that I knew I didn't want to write Rust every day. You know, the way I describe it is I philosophically and as a technical achievement, I have absolutely nothing but respect and I'm impressed by Rust. I think it's very impressive. But as a personal basis, it's very superficial. I just when I write and read Rust, I'm not having fun and I want to have fun. And part of the joy is writing the code. And, you know, it's very much a stylistic choice.
Starting point is 00:46:51 I hate to put it in that perspective because I think engineers want some sort of concrete objective reason of why one versus another is better. It's really a vanilla versus strawberry ice cream flavor sort of thing for me. It's, they're both great. They both are edible, you know, but I, but I choose one over the other. And, um, that's, that's really what it came down to for me. Has any of your work affected Zig, like upstream? Has it built fixed bugs, new, new features, requests? I know you did some, you know, you've done some donations to the foundation, so you're helping out in that way. But like, is there a symbiosis here?
Starting point is 00:47:32 I think so. I think so. And I think Andrew and people on the project would say the same thing. So I mean, very directly before the project, I literally contributed to the compiler. So there's that very direct personal relationship. But with the project, I mean, Zig's still such a new versioning language that there aren't very many
Starting point is 00:47:48 real-world users. And I think having this real-world use case exposed a lot of, not just bugs, but ergonomic improvements and issues. You know, one of the things
Starting point is 00:47:59 that I think a very big thing, a couple of very big things that popped up really immediately was the need for package management and then beyond that, which is now sort of solved and within Zig, and beyond that, the need to enable system packagers,
Starting point is 00:48:16 which are separate. One of the things I'm doing with Ghosty is I'm not doing any of the packaging. I'm going to release the source. I'm going to do the Mac app because you need to pay and sign in, blah, blah, blah. But all the Linux stuff, if you want an Ubuntu apt package or RPM or Nix package, I'm not doing any of that. And that's pretty classic, right? Open source, like Packagers or other people. But Zig is such a new thing that I
Starting point is 00:48:39 knew that would be challenging for those people. And so Andrew did a really great job of listening to my feedback, but other real world projects and building in the system packaging mode and guidelines into Zig, where I feel pretty good about when we go public that we're going to be in a place where hopefully Ghosty pops into Debian repos and stuff pretty quickly. But that's, I think, a good example of how things go. And then just compiler stability. I mean, the ZIG compiler moves super fast, and I'll regularly just say, Ghosty doesn't compile anymore.
Starting point is 00:49:10 Not because you made a breaking change, but because something's actually broken. And I believe they use Ghosty here and there as sort of a canary of whether the compiler is stable. Like, can Ghosty build and run? If Ghosty can build and run, then that's a pretty good, it's a pretty good sort of like big integration test, right?
Starting point is 00:49:27 For the whole compiler. Have there been any features that you've built or parts of Ghosty, whether it's because of Zig or because of some other reason where it's like, this should be straightforward.
Starting point is 00:49:37 And then it was just a minefield of trouble or any particularly hairy technical problems you've had to solve. I have to laugh at that because the joke I always make about my work on Ghosty is that what I really ended up building, 70% of my time, I'm just building font rendering.
Starting point is 00:49:54 And the other 30% of my time is a terminal emulator. So I think that the really big hairy thing is really font rendering. It is a minefield. And when I say font rendering, I don't mean just reading a font file and drawing a glyph. I mean everything from Unicode handling,
Starting point is 00:50:10 emoji, skin tone emoji, East Asian languages, and then drawing them as well. I mean that whole path is a crazy mess. And even just today, just total coincidence today, I tweeted about a bug I found with skin tone emoji. And that's just a coincidence, but it's my, my life has been dominated by font
Starting point is 00:50:32 rendering. Um, but luckily I found a lot of joy when I get, when I get it fixed, but I've been shocked by how much time I spend thinking about it. And it's not in the past. You're still working on it, right? Because you just found a bug today. I thought it was in the past. I always think it's in the past, but here we are. You think it's done and then there's another bug. But today it's done today. We're good. Now it's in the past. For today at least, yeah. What, I mean, what in particular is so stinking hairy about it? Like because different environments render out differently or what makes it so fraught? There's a lot of layers. And it is to some artistic, right, the way fonts look and stuff. And there's not a, there's not a pixel perfect specification that says that given this font and
Starting point is 00:51:20 these characters, whatever, this is how it looks. It really is mathematical with a lot of wiggle room in terms of how much anti-aliasing you use, the spacing, where it floats on the line. There's a lot of wiggle room. And so I think in addition to sort of the core technical challenges of so many different phases of fonts, there's also people that just come up and say, it doesn't look good.
Starting point is 00:51:46 Nothing's wrong. It just, I just don't like the way it looks. And then you have to like, you kind of have to dig into why that is. And ghosty provides a ton of knobs for those people to get fonts looking the way you want. And then our,
Starting point is 00:51:59 our gold standard has basically been, we want our fonts to look like Mac default. So like text edit, honestly is our, is our gold standard. The way text looks in text edit is the way it's going to look in ghost like Mac default. So like TextEdit, honestly, is our gold standard. The way text looks in TextEdit is the way it's going to look in Ghosty by default. So yeah, that's been that. But I think also just finding
Starting point is 00:52:12 all the layers I never thought about. So I think the first one that shocked me that I had never considered as an engineer was how do you pick a default font? You have a monospace application. In a web browser, you say font family monospace and the web browser picks it for you.
Starting point is 00:52:29 Right, like a fallback. Yeah, that doesn't exist at the OS level, right? You have a list. It doesn't. No, you have a list of fonts. They have different properties. Some are monospace and not. That's an easy one to just break down.
Starting point is 00:52:41 But within the monospace, now you have a bunch of different ones. How do you choose which one you want to use and it has to be deterministic because if they launch their terminal every time and you choose a different monospace font it's going to be a problem and so yeah it doesn't exist and so like that was the first thing where i was like why am i thinking about this uh because yeah it feels like something the os should do for me and so that was that was sort of the first challenge. And then... What does Turnall that app do? I don't know how they do it, but they
Starting point is 00:53:07 tend to use... I think they probably hard-code it. Menlo. Menlo, yeah. Is it Menlo? Yeah. I think they just use the Apple usual one. So Apple's kind of easy because Apple does... Yeah, they solve some of that problem. They have those...
Starting point is 00:53:23 Even in the web, they have some specific OS, Sans and Monoface. Yeah, and you could always... Apple's easy because there's so much homogeneity across the platforms that you could kind of just say, I'm going to do whatever Apple does.
Starting point is 00:53:37 Linux is the really hard one. Okay. So what do you do? Basically, I look for, obviously, Monospace font. That's an easy one? Basically, I look for, obviously, monospace font. That's an easy one. And then I look for one that has ASCII characters. And then I look for one that has more ASCII characters than anyone else.
Starting point is 00:53:58 And then, you know, I sort of just apply the scoring algorithm to it. If it has emoji within it, it's even better because it's likely the font designer made them work together. So I tend to score things with more glyphs in it higher if it has more faces. So if it has italic and bold as well, then it gets scored higher than something that only has a regular. So yeah, you just apply all this scoring to it and hope for the best. And so far, the beta community has felt pretty good about it. Did you consider just getting opinionated
Starting point is 00:54:26 and just packaging your favorite one and saying like this is Ghosty's default? I do. I do actually. I do as well. So if I don't find basically a font that I'm satisfied with, then we fall back to using the packaged font, which is JetBrains Mono with nerd
Starting point is 00:54:42 fonts already applied. Great choice. Thank you. Thank you. All of the defaults of Ghosty for the most part are the ones that I would use. And so, yeah, but yeah, so we do that as well because there are, in particular, a really problematic area of Linux is there's a lot of installations of Linux
Starting point is 00:54:57 that don't have emojis, for example. And so we package an emoji font so that emojis just work out of the box. Again, these are things that don't happen on closed Apple computers, but on the right, we have to think quite a lot about, yeah. I ran into that
Starting point is 00:55:12 because we have this little node server that basically fires up Chromium and loads some stuff into a browser and then screenshots it. And we want to use emoji in there because it's like promotions for our shows and stuff. And I developed the whole thing here on my Mac and everything was great and i deployed it to fly and it's just using ubuntu that just doesn't have emoji and so it's like falling back to some weird
Starting point is 00:55:34 unicode thing i have to actually like install an emoji font pack in the docker file or whatever just to get to actually have an emoji in that remote chromium browser paying the butt man linux paying the buck yeah i mean and stylistically the sort of unburdened licensed emoji fonts i don't personally love like i i don't think they look that good yeah same so i wish that apple would license their apple emoji so that it could be used cross-platform but you can't like legally you can't there's people online obviously who But you can't. Like legally, you can't. There's people online, obviously, who have pulled it out. You can find them, yes.
Starting point is 00:56:09 Yeah, so you could find it. But as a distributor of software, I cannot. Can't do that. No, totally. It's UI-monospace is what you do in the cascade of the CSS font stack. One of my favorite things I tell people when they ask more and more about fonts is the best source of figuring out how to do anything
Starting point is 00:56:30 is web browsers. Independently, every person I've run into that's done a lot of text work has landed on, oh yeah, I read Firefox and Chromium source code and Blink and all these different things. And that is true of, of ghosty as well. Like whenever anyone has been like,
Starting point is 00:56:48 I want to support this feature. And I think, how do you make that work? You find the answer. Cause web browsers have solved it and they've, they're cross platform and things like that. Yeah. Not bad ideas to,
Starting point is 00:57:00 I mean, to have a, a default, you know, string, essentially you can set that says give me the the os's native version of the monospace font give me that right yeah nice so what i've experienced from ghosty is a tmos works b no sign in and c config so this is where most people go
Starting point is 00:57:21 right it's like okay how do i configure this thing so if 70 of your time is font rendering my guess is like the other 30 is mostly configuration because yeah holy cow there's a whole bunch of configuration things everything you could possibly imagine and there's not really and maybe this will change between where we are which is private beta and 1.0 or maybe this is 1.1 i don't know but like there's no config built into the Mac app. It just opens up TextEdit on your, you know, dot, your slash go see slash dot configure, whatever it is, the file. Thoughts on that? I'm sure this is a huge part of your work is like configuration, right? Yeah, I mean, depending on the audience here,
Starting point is 00:57:58 I mean, I think my thoughts on configuration are going to be loved or hated. I've created a good duopoly of people that either love HCL with Terraform or think that I've crapped on the entire industry with this thing that people have to do every day. It's one or the other. No further comment on that, but I think because of that,
Starting point is 00:58:23 there's a lot of experience I have with configuration. Vagrant was Ruby, Packer has JSON and supported JSON, and then now supports HCL, and then Terraform is HCL. I sort of got done the spectrum, and so I was coming into this a little with some experience and opinion, and Ghosty's primary, so its configuration file is a custom text-based non-programming format. There's no conditionals.
Starting point is 00:58:47 It's just key equals value straight down. People have described it as very any-like, but there's no categories like any. It's just key equals value. The principle why behind that, and I suspect I'm going to have to keep defending this over and over, but the principle why behind it is that the config file and the command line arguments are equivalent. So anything, any key equals value you could set in the file,
Starting point is 00:59:12 you could do dash dash key equals value on the command line, and they perfectly match. So if you know how to do the CLI, you could do the config file and vice versa, and that's a very important property I want to keep. I think it's very educational friendly to a tool. And then the other reason is because I could parse it,
Starting point is 00:59:30 validate it, and load it in a single forward pass. So this was more of a performance thing, but I don't need to maintain an abstract syntax tree like you might have to with a YAML or something. I could have an array of bytes, conceptually an array of bytes, read one at a time. I only have to keep a small, fixed-size back buffer, move forward, and I could parse the config.
Starting point is 00:59:51 And it is definitely a detail that's probably not super important, but because of that, Ghosty has the fastest config parser. And you have to read the config every time you start Ghosty. And so it's something that I didn't want to waste startup time on. And so that's a big reason why I chose that format as well. But yeah, I mean, I, I really haven't gotten any from the people who have actually used go see, I haven't gotten any pushback on it. It's hard to dislike. I mean, the only thing you might want is like conditionals and things like that. And, and I just think philosophically, I tell, you know, those people, you should be using Western or something that
Starting point is 01:00:23 supports Lua. Like that's not something, I'm never going to make initializing or runtime loading files, evaluating code part of the startup path of my terminal emulator. Like it's not going to happen. So yeah. Does that have implications for plugins, extensions, et cetera?
Starting point is 01:00:38 Like, are there plans for that? Does that exist? It has implications. I'm not sure exactly for what yet. I mean, I think the one that popped up first was people wanted a different theme for light versus dark mode.
Starting point is 01:00:54 And so that was sort of the first conditional thing that popped up. We solved it in a different way. You can just specify a light and dark theme as separate config options. Pretty straightforward. But there's other ones too. So I think the one that's looming right now that actually hits me is that I want different key bindings
Starting point is 01:01:12 between macOS and Linux. I'm somebody that spends a pretty 50-50 time between macOS and Linux. And so I want the key bindings to be slightly different because there's no command character when I use Linux. And so there's workarounds for that that really aren't very ugly. We have the ability to load additional config files
Starting point is 01:01:31 only if they exist and not error, basically only warn if they don't, log if they don't exist. And so you could actually create Mac config, Linux config, and have it not exist on that platform and that solves that problem to some extent. But I do want to solve that in a less duct tapey way. And so there's implications. But I think that my view generally
Starting point is 01:01:53 on, I don't want to get too abstract here, but my view generally on problems is that constraints are good. And so I think we've defined our constraints, which is that I want a forward pass, single, you know, parsable thing. I want it to be fast. I want it to be isomorphic with the command line interface and config file. And I think those constraints are set in stone. And if you have some fundamental constraints, then you could actually start a discussion
Starting point is 01:02:18 of how you solve it. I think that generally speaking about software in the industry that I see is too many people are choosing the most generic thing without constraint as the answer. Like, I'm just going to let you write arbitrary code to do this. Or I'm like, this is the do anything machine. It's like, I feel better about constraints.
Starting point is 01:02:39 So that's just a philosophical tangent. Yeah. What about things that's as simple as, and I'm going to compare against Warp for now because I use Warp on the daily. And I did sign in. I was not happy about it. You don't have to anymore.
Starting point is 01:02:55 We joined Warp back when you had to. It's too late. We're fans of Warp. We're not haters of Warp by any means. I am as well. That was one of our main points of advice with Warp was like, don't make a sign. And I guess you don't anymore.
Starting point is 01:03:13 Yeah, I didn't know that. But I'm signed in and I'm me. One thing I do like though is that whenever I... And I'm on a Mac. So whenever I type something out onto the terminal, and if I want to select it to erase it, it's command shift and then the back arrow like I would in a text editor. Yes. I do like those kind of features.
Starting point is 01:03:33 And then when I do that, when I compare the same experience in Ghosty, I can't do that. It starts typing like these and stuff like that. Yeah. Like different characters. So I don't know if that's like a direct mapping or maybe it's it's not mature yet enough and it's on your plan your roadmap but those kind of things i think really make that first experience yep you know key that i can just treat the command line like a text editor that's what i hate about terminal app and other terms you gotta like do
Starting point is 01:03:58 special things to make it like a text editor where you can jump around the text and do different things to be speedy. And now I'm hitting backspace and stuff like that. And this is not cool. Yeah. Yeah. I mean, I, I, I think you're exactly right. I think, I think what warp did with that is very good.
Starting point is 01:04:14 You know, I, I don't, I don't even know if warp's open source or anything. I don't know how they did that specifically. I know I have ideas. I know how I would do it if I did it, but I don't know how they specifically did it, but that is something. So I guess there's two answers to that. One is it is on our roadmap to a certain extent in the sense that Mac, I assume you're on a Mac if you're using Warp.
Starting point is 01:04:33 Mac has a bunch of standard text. I think Apple calls them actions and they're named things like select previous paragraph, select next paragraph. They have like names. One of the open issues on GoSee right now is to implement those actions and just do them in some way. And I say, so then part two is in some way. The challenge is that the thing that's actually doing the text editing is the shell and not the terminal. And this gets into a layering thing that I think an everyday person doesn't care about and
Starting point is 01:05:05 i i want them to not have to care about it i'm just talking as i don't care about it yeah yeah i'm just talking as an implementer i'm just saying why this i'm being funny no it's all good most people don't care about it but for me as an implementer it's what makes my life hard because it's really not my problem that i could easily solve because what a terminal emulator does is you enter characters, we encode them as some events and we send them to the shell. We're actually not editing that prompt, right? The shell is editing the prompt and the shell is moving. When you hit back arrow, I'm not even moving the cursor. I'm sending a back arrow to the shell and the shell is sending a message back to me saying, move the cursor left by one, but it could do anything it
Starting point is 01:05:43 wants. In the same way that when you hit the up arrow, it's not telling me to move the cursor up. It's telling me, paint this text, which is history that I don't know anything about, the shell knows about. And so it's hard for me to solve because we don't own that text input. There's very hacky things that Ghosty and other terminals do.
Starting point is 01:06:00 If you shift click somewhere into the prompt, the cursor moves there. I think it's shift clicked or shift command clicked. I don't even remember off the top of my head. And when someone suggested ghostly support that, I gave them this answer of like, I can't do that. They said, oh, other terminals support it. And so I went and looked and I was like, how do these other terminals do it? They actually synthesize arrow keys is how they do it. They guess. You clicked one row up and four cells to the left. I'm going to send you one up arrow and four left arrows and hope your cursor gets there.
Starting point is 01:06:32 It leads to all sorts of weird stuff. You could do this in Ghosty. You could do it in other terminals where if you click up too many times, history will start showing up because it's sending up arrows and history is actually showing up instead. That's a terrible experience. This this is a long rambly way to say it's not my problem but i do want to solve it i do want to help make it easier and this is one of the areas
Starting point is 01:06:54 where i want a terminal to provide better tooling to shells so that we could actually do this in a very user-friendly way it's a great reason get Warp to be open source because the user experience with using Warp at the terminal level from an entry level and editing level of what's going into the prompt is bar none. It's solid. Like, I like it. It's fast on that front. It's fun to use.
Starting point is 01:07:16 The community suggested this as an option, as a configuration option. I could solve it by separating out where the prompt is and where the output is. And I think that's what Warp does. You know, your prompt input is like a totally separate is and where the output is. And I think that's what Warp does. Your prompt input is like a totally separate box from where the output goes. And in that way, I could just defer sending stuff to the shell. I could actually own the input fully, and only
Starting point is 01:07:35 when you hit enter or hit tab or hit certain control characters, I could actually flush it out to the shell and be like, okay, what's the deal? And sync back up. I'm not trying to over-trivialize that problem or anything. I think what Warp did is really good there, but that's how I could solve it, but it would feel distinctly
Starting point is 01:07:51 different for people that actually want a prompt that starts, you know, marching down your screen. Well, here's what happened, though. When I fired up Ghosty for the first time and started playing with it, this happened, this scenario where I'm trying to manipulate the text I'm going to enter into the prompt. And then I'm like, okay, now I know how to configure my next step because I've going to start playing with it. This happened, this scenario where I'm like trying to manipulate the text I'm going to enter into the prompt. And then I'm like, okay, now I know how I know config is my next step because I got
Starting point is 01:08:09 to make Dracula my theme. That's like the first thing I did. I'm like, okay, how do I theme this thing? And so when I Vim and then I put the path into the config file and I entered it or I edited it and I saved it, it yelled at me and said it couldn't make the thing. I don't know why. So I had to like touch the file first and then go edit it, which is not normal for Vim, because you can usually just
Starting point is 01:08:27 Vim to a path and it creates itself. The directory maybe didn't exist? I think so. I have a config directory, but not a ghosty directory. So maybe it was the ghosty directory not living. So I had to touch it first and then go in and edit with Vim. Right. Is some of that the new macOS stuff where it needs permission for all kinds
Starting point is 01:08:43 of stuff? Like first time you run it? I don't think so. like first time you run it i don't think so okay but then i try to you know manipulate the text and just try to like mess with it and i was like well now i have to add config and so i'm back in the documentation trying to think yeah well i've got to add my own key mapping so i can have this jumping around and i imagine yeah that somewhere in the docs i would find it but you know 20 minutes later we had this phone call so so I didn't have enough. You didn't get there yet. I haven't gotten there yet to solve that problem. So here I am ranting.
Starting point is 01:09:08 I think this is kind of crucial behavior, though. That's why I'm – it's such a simple thing, but I think everyone's going to have a version of my problem. When they first fire it up, they're going to have some version of input manipulation that's very important. And it's part of your speed as a developer on the terminal is how you can manipulate what you put in. And that takes time where I have to rejigger my brain or add config, which I don't mind doing.
Starting point is 01:09:34 It's just a matter of not knowing what to do out the gate. Yeah, I completely agree. It's actually one of the last remaining discussion points before the 1.0 is some of these defaults that we want to set in that sense. Because the trade-off between these defaults is that if we put those key bindings as defaults or those behaviors as defaults, then things like TUI programs can't map them because
Starting point is 01:09:56 you're taking over them. And so do you want to actually, you know, like we're talking about whether that's important or not, or if it's more important that by default people expect, you know, what you just did. And I think it's also important, like, when I consider that it's where people are coming from, like, if you're coming from terminal on app, or I term or something, then this is likely to not really be an issue, because we behave almost identical to those. But if you're coming from like warp, then yeah, it's going to be a big issue. And so I'm not super sure. I mean, that discussion actually did lead to the sort of, I think, extreme path, which we're not going to go down because it's too complicated
Starting point is 01:10:30 of inspecting their machine to be like, are you a ZShell user? Were you a warp? Is warp installed? Like, should we behave more like warp on first startup? Like, are we going to guess basically based on what you have? And I'm not ready to go down that path yet. We do that for other things, but I'm not ready to go down that path for things like input manipulation. But it's unfortunately complicated. But I agree with you. Yeah, I'm sure you do.
Starting point is 01:11:03 What's up, friends? I'm here in the breaks with David Hsu, founder and CEO at Retool. If you didn't know, Retool is the fastest way to build internal software. So, David, we're here to talk about Retool. I love Retool. You know that. I've been a fan of yours for years, but I'm on the outside and you're clearly on the inside, right? You're on the inside, right?
Starting point is 01:11:22 I think so. Yeah, I'd say so. Okay, cool. So, given that you're on the inside and I'm not on the inside, who? You're on the inside, right? I think so. Yeah, I'd say so. Okay, cool. So given that you're on the inside and I'm not on the inside, who is using Retool and why are they using Retool? Yeah. So the primary reason someone uses Retool is typically they are a backend engineer who's looking to build some sort of internal tool and it involves the front end. And backend engineers typically don't care too much for the front end. They might not know React, Redux all that well. And they say, hey, I just want a simple button, simple form on top of my database or API. Why is it so hard? And so
Starting point is 01:11:53 that's kind of the core concept behind Retool is front end web development has gotten so difficult in the past 5, 10, 20 years. It's so complicated today. Put together a simple form with a submit button, have to submit to an API. You have to worry, for example, about, oh, you know, when you press the submit button, you got to bounce it or you got to disable it when it's, you know, is fetching is true. And then when it comes back, you got to enable the button to get or there's an error, you got to display the error message. There's so much crap now with building a simple form like that. And Retool takes that all away. And so really, I think the core reason why someone would use Retool is they just don't want to build any more internal tools. I want to save some time. Yeah, clearly the front end has gotten complex,
Starting point is 01:12:33 no doubt about that. I think even front enders would agree with that sentiment. And then you have back end folks that already have access to everything, API keys, production database, servers, whatever. But then to just stand up retool to me seems like the next real easy button because you can just remove the entire front end layer complexity you're not trying to take it away you're just trying to augment it you're trying to give developers a given interface that's retool build out your own, your own view to a Google Sheet or to the production database. All inside Retool. Let Retool be the front end to the already existing back end.
Starting point is 01:13:12 Is that about right? Yeah, that is exactly right. The way we think about it is we want to abstract away things that a developer should not need to focus on. Such that the developer can focus on what is truly specific or unique to their business. And so the vision of what we want to build is something like an AWS, actually, where I think AWS really fundamentally transformed the infrastructure layer. Back in the day, developers spent all their time thinking about how do I go rack servers? How do I go manage cooling, manage power supplies? How do I upgrade my database without it going down? How do I change out the hard drive while still being online? All these problems. And they're not problems anymore, because nowadays, when you want to upgrade your database, just specifically on the front end today. And for me, that's pretty exciting
Starting point is 01:14:06 because as a developer myself, I'm not really honestly that interested, for example, in managing infrastructure in a nuts and bolts way. Now, I would much rather be like, hey, you know, I want S3 bucket, boom, there's an S3 bucket. I want a database, boom, there's a database.
Starting point is 01:14:19 And similarly on the front end or in the application layer, there is so much crap people have to do today when it comes to building a simple CRUD application. It's like, you know, you probably have to install 10, 15, maybe even 20 different libraries. You probably don't know what most libraries do. It's really complicated to load a simple form. You know, you're probably downloading almost like a megabyte or two of JavaScript. It's so much crap to build a simple form.
Starting point is 01:14:43 And so that's kind of the idea behind Retool is could it be a lot simpler? Could we just make it so much faster? Could you go from nothing to a form on top of your database or API in two minutes? Well, we think so. Yeah, I think so too. So listeners, Retool is built for scale. It's built for enterprise.
Starting point is 01:14:59 It's built for everyone. And Retool is built for developers. That's you. You can self-host it. You can run in the it. You can run in the cloud and custom SSO, audit logs, SOC 2, Type 2, professional services. Starting with Retool is simple, fast, and of course, it's free if you want to try it right now. So go to retool.com slash changelog. That's R-E-T-O-O-L dot com slash changelog.
Starting point is 01:15:31 This goes against the Unix philosophy, but is this an argument for integration? You know, owning more of the stack? Because, you know, it's not your problem, but it is your problem. And it's like, of course, you don't want to pick what shell people use, but like, is this like, now we need the ghosty shell or something because you can solve that problem you know you could have ghosty be more than just a tty i i i fight the nerd snipe every day of my life to write a show
Starting point is 01:15:55 i i that's that's something i'm holding when you're gonna give in man come on when you're gonna give it i'm holding strong because there's so many bug reports, so many that I get that I am like, this is a shell bug, not my bug. But then, you know, I do think, I do, I don't just dismiss it. I do think, can I, as a terminal emulator, mitigate this bug? But ultimately, this is not my bug.
Starting point is 01:16:17 And so, yeah, it's a lot, it's frustrating. It's also frustrating because, you know, all the cool new post 1.0 features we want to build that we kind of touched on, like, it's going to be blocked on downstream adoption, right? It's like any, you know, web browser comes out with a feature, it doesn't matter until a website implements it. And so
Starting point is 01:16:33 that's going to happen here too. But if we have, I've joked around building a ghosty shell that only works in the ghosty terminal emitter. So it's kind of crap because you would never use it remotely. But like it's more of a tech demo of like like this is what shells could be if they implement all the capabilities of ghost it's kind of like chrome web experience web experiments like we need the ghosty terminal experiments to like where people visit it and with the chrome one like i would visit it and be like
Starting point is 01:16:59 holy crap a browser could do this right and then it changed my whole perception of a browser, like sometimes years before any website behaved similarly. And I have talked with folks about doing the same thing for terminals. This 2E works best in Ghosty. That's already happening. I think more
Starting point is 01:17:20 than people expect. I would say right now, like NeoVim works best in Ghosty and it works, it degrades great for other things. But I think almost the entire NeoVim maintainership is in the Ghosty beta and it's a collaboration
Starting point is 01:17:37 between us implementing something and NeoVim shipping it like two weeks later. And most people have no idea because unless you're in Ghosty, a feature detects it. Those things don't turn on. That's crazy. So if you're using NeoVim,
Starting point is 01:17:50 you want to be using Ghosty and maybe vice versa. I'm biased, but yeah, I think so. I mean, I think it's- Are you a NeoVim user? I am a NeoVim user. And I don't know how many of the actual NeoVim maintainers
Starting point is 01:18:00 actually use Ghosty. They all have access. I don't know how many actually use it. But I know that more than one mains Ghosty. They all have access. I don't know how many actually use it, but I know that more than one mains Ghosty all the time. And so, yeah, it's something that NeoVM's always going to work in there and we're going to work really hard
Starting point is 01:18:15 to make it a great experience. Do you pay attention to DHH by any chance? Here and there. If it's loud enough. Sometimes you can't help yourself, but pay attention. Well, not so much his voice and his words,
Starting point is 01:18:28 but on YouTube, he's given demos of Kamal and other things. And I think you always get to see his terminal and his text editor and stuff like that. Yeah. And he's done some cool stuff. I haven't paid attention to it deeply. I just know it looks cool.
Starting point is 01:18:39 I'm not even sure what he's, you know, my back of the brain to do is like, go investigate what he's doing. Cause it looks cool. Like whatever he's using, is it, you know my back of the brain to do is like go investigate what he's doing because it looks cool like whatever he's using is it yeah you know is it neovim is it something else and what i've seen too in screenshots you've shared for ghosty look cool too and so i'm just curious because i look cool i might be making this up i can't fully remember i know i'm not the one okay i'll start with what i know for sure I'm not making up, which is that I've gotten mentioned a lot on Twitter with DHH and others
Starting point is 01:19:08 with people telling him or asking him to look into Ghostie. That I know for sure. That happens actually fairly regularly, probably due to the stuff that you're talking about. What I don't know, what I can't remember, is I thought he said that he only wants to use software that is publicly available that everyone could use, which is a totally, obviously good take
Starting point is 01:19:28 because he's shipping stuff that people want to use right away. And I don't think he said that directly in response to Ghosty. I think it was just like a general thing where people sending him stuff to use. But I imagine that that's a big thing holding him back if he even knows about Ghosty at all.
Starting point is 01:19:44 But I hope when it's public that he would at least give it a shake. I've always said, even if you don't use it, I would just like to know why, why you don't use it. And that's perfectly valuable information. So, yeah. So to that point, we asked on X for people to add questions for you and it seemed like the overwhelming question is the age old question is when is this going to be available to the public? When is 1.0 going to drop? Yeah. So we're recording
Starting point is 01:20:11 this in December and I promised they would be released in December and the plan, everything still looks good for December. So sometime this month, I don't have a day. I really don't. Uh, it's just sometime this month. I think the software is in a pretty good place. There was a few blockers that I had. One of them was the icon that I wanted to, I wanted a fresh icon for the 1.0. That's done. I tweeted that out and it's in the beta builds already and that's all done.
Starting point is 01:20:37 Another one that I'm waiting on is sort of like web design and website docs work. That one, you know, it's all volunteer. I'm not the best at web technologies right now, especially front end. So I have friends helping me with that and I don't want to pressure them. It's the holiday season, things like that. Like if, if the website doesn't get done in December, my plan is probably to publicly release without it and just, just, you know, say that's coming later, probably make a bunch of markdown files to kind of help people in the repo with
Starting point is 01:21:02 docs. But we'll see about that. But I'd say that's the major thing blocking right now. And then the third thing is sort of some amount of release management. We have nightly builds right now, but I haven't actually written the GitHub action automation stuff to tag and build like a numbered release. And so I'll have to do that for the 1.0. And obviously, that's not a huge blocker. That's probably like a day of focus. So we're still looking good for December. You said the icon is in the beta build. So that means what I have open is the plan to be released version, the icon? The winking ghost.
Starting point is 01:21:36 Do you see a winking ghost? Yeah, yeah, that's it. I had to open terminal.app as well just to sort of side by side because I'm like, this looks as my son would say, we've been here before. Yeah, that's on purpose. I like it. It's an homage. You can tell it's
Starting point is 01:21:53 darn near the same, except for the thickness of the outside border is a little bit thicker for Ghosty. And the background is bluish instead of blackish. Yeah, obviously. There's obvious differences. I would say, if you can, open the terminal icon, then the 512 or 1000 pixel version
Starting point is 01:22:10 and open the ghosty one in the 512. One thing we did with the designer who did this is a well-known, really awesome designer. I've been a fan for so long, so I was actually really excited to actually get an icon designed by this person that I've been a fan for the icons. But one thing he does really well,
Starting point is 01:22:25 which is very Apple-esque, is that the level of detail in the icon differs based on the size of it. So if you're looking at it in the dock versus the big version, it's different. So look at the big version and compare because it's super an homage to terminal.app, but we tried to add a level of depth and reality.
Starting point is 01:22:43 So things like the aluminum border has texture, the pixels, you could see the individual pixels of the screen and they were warped because the screen is curved. There's a soft glow around the ghost, you know, things like that. So yeah, I just want to call it out because he worked hard on it
Starting point is 01:22:57 and I think it's cool. And I think it also shows sort of the level of detail that we've been thinking about with this software. I've got it open now. The little dots, the little pixels are really cool. Little subtle details. What's the designer's name? Michael, I don't know how to pronounce the last name, Flairup.
Starting point is 01:23:14 His company is Pixel Resort, I think. Yeah, you could see his whole portfolio on that. He's done hundreds and hundreds of icons over more than a decade and really big fan of his work. To this day, after decades using computers, I still nerd out on a really cool app icon. I love the beautiful app icons and just the people that make them. I don't know this guy, but I appreciate him and I'm sure I would love to go to his website and look at all the things he's made. A lot of good stuff. Just eye candy, just pure eye candy.
Starting point is 01:23:46 And you know how hard it is to do that well. Yeah, and he's still doing a little bit more work for Ghosty. And I'll just hint, I mean, it's going to be more than a hint. I'll talk about what it is. It won't be in for 1.0, but probably shortly afterward. We're making it so that the icon, we're going to dynamically change the color to match your theme. So on disk, it's always got to be sort of the default.
Starting point is 01:24:06 But when it's running, Apple provides APIs where you could add a custom image. And we want to make it so that the bluish color will actually be your actual background color and the text and things like that. And it's just going to happen automatically. Nice. Yeah, yeah.
Starting point is 01:24:20 So how much SwiftUI is in here? How much percentage of the code base? I don't have it open in front of How much? A lot. Like, percentage of the code base? I don't have it open in front of me, but I think something like 10% of the code base is Swift right now, which is kind of scary. Yeah, and that's why I think that, I've harped on this so much, but that's why I think libghosty is so important,
Starting point is 01:24:36 because it shows the amount of work that goes into building an end state app, is how much code is required and stuff. So yeah, I think there's a lot of Swift in there, a lot of Apple-specific functionality. So you imagine over time that percentage goes down, I would imagine it would have to as you support other things, add stuff to the core, or do you think that the Swift,
Starting point is 01:25:01 you'll continue to sling Swift in the... Well, I think we'll always have the sort of flagship implementation consumer of Ghosty, which will probably be like the Ghosty Mac app and Linux app. And so the Swift code will only increase, but I'm not sure percentage-wise what that looks like as the core functionality changes and stuff. I'm really not sure. What were your other major bloggers before the 1.0? You announced it was coming, I think that was a couple months ago.
Starting point is 01:25:29 But what were things besides a rad icon update that would block it, the website you mentioned, from failing to launch in December? There was a number of features. There was a certain amount of stability, obviously. Stability is hard to quantify, though. It's more of a feeling of when you get enough beta testers that aren't reporting bugs. That was sort of a vibe. But in terms of features, there was a list of features
Starting point is 01:25:51 that we wanted to implement and performance metrics we wanted to hit. So just things like supporting image protocols and like ways to input and making sure I basically went out and just looked at all the available functionality that terminals have and asked myself whether it's important to have it. And that was sort of a marker because that 1.0 goal was to be the best existing terminal. You know, you kind of have to do most of what existing terminals do. I drew the line at like terminal stuff, not like UI stuff, because there's a lot of terminals out there that'll do SSH libraries and double click and you can just go straight in and things like that. I sort of drew the line where when I say
Starting point is 01:26:29 existing terminal, I mean the functionality below that line. That was sort of the goal. I think the one feature that was always, there's two things that were always to me a release blocker that I've not given up on. I've just like, you know, I've let go in terms of blocking the release but we're going to still do it. One of them is a totally graphical configuration mechanism because for Mac and Linux users, for the vast majority of users,
Starting point is 01:26:52 they don't want to be editing a text file to doing their configuration. So we do want to build a native UI to manage your config, and that's still coming, and for sure something will do. And then the second thing which is i think a really big deal and i think a lot of people will probably be not very happy about with the 1.0 is search i don't know if you noticed that yet but command f doesn't work it doesn't do anything i have not noticed so surprisingly we have something like 5 000 active beta testers
Starting point is 01:27:22 right now really surprisingly it's not been a big issue. I thought within the first month of beta testing when we had 50 people that people would say, oh, this is not usable because there's no search. I don't use search in the terminal, clearly, because it hasn't been built yet. But I thought that would really pop up. And we're 5,000 people in.
Starting point is 01:27:41 And I think that issue by far has the most upvotes. It has something like 120 or 150 or something, but you know, it hasn't stopped a considerable amount of people from using it. And so that's what changed my view on let's just slip this post 1.0. It's an important thing to add, but I think there's a huge number of people that will still get value without it. So it is something like you'll see in the 1.0 release blog posts. So I'm going to call it out directly because I don't want people to think I'm like trying to make some message about not supporting search. We'll support it eventually, but yeah. Well, I didn't notice that because I guess I don't use search either.
Starting point is 01:28:15 I just use Control-R, which is, yeah, I use Tmux and A2N and just the tools inside the shell there. Yeah, so any Tmux user wouldn't notice because search doesn't work in any terminal with tmux right yeah cool what what else is anything that you were expecting us to ask you about that we haven't or that you wanted us to you're just waiting for it we just haven't delivered waiting waiting waiting um but there was a question actually on on x that i saw that i was like no one's actually ever asked and i never thought about before before they asked it so was this the neoven one yeah yeah yeah yeah and i he thought about before, before they asked it. So was this the NeoVim one? Yeah,
Starting point is 01:28:45 yeah, yeah, yeah. And I, he made me think and I was like, that is an interesting question. Let's give him a shout out. I do have it.
Starting point is 01:28:52 Mark, Jake with or Jack with, are there any specific features besides speed that make NeoVim better and ghosty? Is that the one you're talking about? Yeah. And I think it's a good question because it's not, we have talked about how NeoVim is,
Starting point is 01:29:10 is good and ghosty, but I think more generally the question to me was like what what makes a terminal interesting that you know that you wouldn't really notice I guess until you actually used it and and I think that that's something that people don't realize a lot because I think the biggest one is there's so many terminal.app users, like serious, very online developers that are using terminal.app. And it's funny to me because it's such a bad terminal. And like, just to be very concrete about that, like it's only supports, I think 256 colors. And there's so many people out there that don't realize that terminals for over a decade have supported 32-bit color. And you don't realize it because almost all terminal programs do such a good job of gracefully degrading and just realizing what environment they're in and working. And so, if you only ever ran something like NeoVim in Terminal app, it obviously works great there,
Starting point is 01:30:01 you would only ever see 256 colors. And then you run something in ghostly and suddenly you're like wait why does syntax highlighting look better or something like that it's because you know you're using full like rgb with some transparency and things like start popping in and so yeah i mean i think that one of the things that that stands out immediately is because ghostly supports modern like input protocols for example, you could bind every key. And I think there's a ton of people I've talked to that don't realize you can't bind every key, not because they haven't tried it, but because they tried it, it didn't work,
Starting point is 01:30:32 and decided, eh, that's just how it is. I'm never going to do that again. But realizing it's just because most terminals are built on a 50-year-old input stack. But if you look at Kitty or GoC, I think Westerm also supports it. Alacrity does not. But if you look at those three, for example,
Starting point is 01:30:50 then you can now bind things like Backspace and Escape could be separate. Before, if you bound Escape and you pressed Backspace, it would trigger Escape. Now they could actually be distinguished and things like that. And I think that that enables a lot more functionality and things like that. And I think that that enables a lot more functionality and things like that. So I guess my view is, is there's a lot of people out there
Starting point is 01:31:09 I've talked to where it's just like, I'm happy in terminal app and like, I'm happy they're happy, but it's one of those things where I described it like a retina screen that Apple shipped. Like you don't realize how good it is until you use it. And I'm not even pitching ghosty here. Like I'm pitching any modern terminal, like just give it a shot because I don't think most people know what they're missing out on. Yeah. I concur with that. Jared was, well, I think you, do you still use terminal, Jared? I do. Okay. So you can really speak to this well. I'm speaking to you directly.
Starting point is 01:31:39 No, I'm, I'm happy to hear it. It's because he has a different way of thinking. He wants to use Mac. I'm a minimalist, so I don't want to install unless I have a good reason to. I'm not against. I used iTerm2 for a while, and I was like, what is this doing for me? And maybe it's because I've been ignorance is bliss over here in the ignorant land of 256. I think Tmux requires extra config in order to take advantage of some of these modern things, which is unfortunate because they are detectable.
Starting point is 01:32:04 But yeah, that might be part of the reason too. Yeah, possibly. So I have good things to look forward to now that I'm using Ghosty. One thing I did notice, which I used to use way back in the day, I think on Linux and I love, is you got this, I call it visor mode.
Starting point is 01:32:19 You know, it's like fly down from the top. That's a cool thing. I love that when I was in college because I make everybody think I look cool. And I was like, you know, like, how'd you do that? Yeah. That's a cool feature. That was definitely, I won't lie, part of implementing that feature
Starting point is 01:32:34 was like the, I'll just say like marketing factor of it, just like the cool factor for sure. But, you know, really also was how many people came and said like they must have that to use this terminal because iterm supports it and i think iterm is the only terminal that supports it i think so too i think that's the one thing i lost when i switched back i was like i don't use it much anymore because it was kind of a novelty yeah but it's cool and now that i got now i'm back to it i'm like oh i should use this now can you map that to like a global hotkey so you don't have to be okay yes you can and uh yeah there's there's actually a
Starting point is 01:33:08 couple beta testers blows my mind that they are full-time professional software engineers and they exclusively use that as their terminal they don't use they have no floating windows i'd love to watch them work i did too yeah so they they're coming from iTerm and they're like, I only have one terminal. And in ghosty language, it's called the quick terminal. It's like, I only use the quick terminal. So they're finding some really interesting bugs because it was like, they're sort of getting fixed now, but they're using it so heavily. But I never imagined people would use it without another floating window, which complicates
Starting point is 01:33:41 like if you have three screens, which screen does it float down from and things like that. They're finding some good stuff. That's all going to get fixed before 1.0. But it's very interesting how diverse the user base is out there. Let's test your config knowledge, Mitchell. I have the config open.
Starting point is 01:34:00 If I want to bind a key to this quick, what is it called? Quick what? Quick terminal? Quick terminal. How do I do it? One, if you don't want to bind a key to this quick, what is it called? Quick what? Quick terminal? Quick terminal. How do I do it? Okay, well, one, if you don't want to bind a key, it's in the menu. So if you just want to see what it looked like, it's in the menu.
Starting point is 01:34:11 Oh, really? Right. Yeah, I played there. Yeah, I've done that. It's in Vue, I think. Yeah, Vue quick terminal. That's not very practical as a way to use it. It's more of a discovery mechanism.
Starting point is 01:34:21 Do you still want to know the config to bind? Yes, I do. That's why I asked. Okay, so keybind, all one word, K-U-I-B-I-N-D equals, space or no space, I don't care, equals, and then let's just bind it to something dumb. Let's just type the letter J, colon.
Starting point is 01:34:37 Yeah, we'll bind it to J for now. You could replace that later. J, colon, and then toggle underscore quick underscore terminal. And then save it, and then toggle underscore quick underscore terminal. Okay. And then save it. And then hit command comma that'll reload your config. And then hit J.
Starting point is 01:34:53 I must have fat fingered it because my oh wait, the config opened up or something. You might hit command shift comma. I think I might have done that. Yeah. Oh yeah, command shift comma is actually what you need to reload. Command comma does open it. Yeah, I was like, what is this?
Starting point is 01:35:07 Yeah. Oh, I fat fingered it. Configuration errors. Speaking of stealing from the browsers, I also just found your terminal inspector. Yes. Which is very much like in the spirit of dev tools, right? Like inspect element, inspect terminal.
Starting point is 01:35:20 This is cool. I'm surprised I forgot to mention that. Yeah, I am going to age myself a bit here, especially given my Discord community, terminal this is cool i'm surprised we actually i'm surprised i forgot to mention that yeah i i am gonna age myself a bit here especially given my discord community but i remember the pre inspector days and specifically i remember when firebug launched firebug maybe yes yes and i was an active rails developer web developer when firebug launched. And yeah, overnight, web development got so much better. And I felt like you could do so much more because of the visibility it gave you.
Starting point is 01:35:51 And the terminal inspector still has a long way to go to get there. But that's what I was thinking of when I built that was like, I want this to be a text platform where people could build applications. And to do that, you need good debuggers
Starting point is 01:36:02 and debugging tools. And I felt that with a terminal inspector, similar to Fire, we need the Firebug of terminals. And that truly was the motivation for that. Yeah, super cool. Nice and simple. DevTools has gotten very feature-rich over the years when you fire it up in Chrome.
Starting point is 01:36:19 And it's pretty complicated at this point. I mean, there's courses on how to use DevTools. I like, and Firebug was so simple. I mean, it was game changing, but it was basic compared to what we have now. And I like how straightforward and basic this is. Just to even just, I just grokked it immediately, even just as a non-developer on this thing.
Starting point is 01:36:36 It's just, it's sweet. Yeah, it's cool. And I think it educates people more too. Like, I don't know if this will be true about terminals, but I suspect it will, because with the inspector, I've had non-developer friends find that feature in browsers and just click around, and they've mentioned to me, oh, I realize I could change the color of this thing,
Starting point is 01:36:57 and that's how that works. It's just some sort of education, and I'm hoping that there's terminal people, users, that aren't ever going to build a terminal application, but will open that inspector and just kind of, yeah, you know, mess around and be like, oh, that's probably how that works in a terminal. And yeah.
Starting point is 01:37:12 I'm stoked. A new terminal option has arrived. That's right. The terminal option has arrived. It's the and terminal. There's no ors here. That's right. You get this and that and that.
Starting point is 01:37:25 I love it. Love the icon. Love the icon work too. Very good. Love the MIT license. I mean, what's not to love about this? I don't know. I don't know. I don't know. That's why everyone's so excited, Mitchell. I guess the lack of availability. Of course,
Starting point is 01:37:41 if you're listening to this, it's probably out there unless you're listening to this the day that we ship because, you know, this is coming out mid-December., if you're listening to this, it's probably out there unless you're listening to this the day that we ship because this is coming out mid-December. If you're not listening to this, if it's late December, if it's January, go download Ghosty right now. What will the URL be for Ghosty? It's going to be
Starting point is 01:37:57 ghosty.org. I already have it and that's what it'll be to match the GitHub org is ghosty-org. Gotcha. Let's replace the dash with a dot. Well, you're doing it right, Mitchell. I appreciate all this, open sourcing it,
Starting point is 01:38:13 the technical philanthropy, reinventing an awesome terminal from the ground up. I appreciate it. I'm here for it. You've got me out of terminal.app. We'll see if I stick around. I probably will, especially because I can I can just like bring this quick terminal down
Starting point is 01:38:27 and impress all my friends again if my greatest if my greatest social good is getting people out of terminal.app then I will die happy
Starting point is 01:38:36 impact baby impact thank you very much yeah I'm happy to be back like I said I listened to that episode from 2012 and yeah
Starting point is 01:38:44 so it's funny to be here, what, 13 years later. Like a time capsule. Yeah. It is. How wild is that? It's cool. I even sound, my wife was listening as I had it playing.
Starting point is 01:38:55 And she said I sound like a child. And I was a child. So yeah, maybe I'll look back in 13 years and say I'm now a child right now. But you've grown up, man. Hopefully. It's crazy. All right. right now. But, but, uh, You've grown up, man. Hopefully. It's crazy. All right.
Starting point is 01:39:07 Thanks again. Bye y'all. So Ghostie for Christmas 1.0 coming soon, coming this month, but will it arrive before actual Christmas day? Will it be a present for all of us developers? Maybe the better question is, will it become the terminal of 2025 for most of us? That's the question. I know for me, it needs to have warp-like input into the terminal. I love that about warp personally.
Starting point is 01:39:34 And I'm sure that Mitchell has great heights that he'll reach with this. Live ghosty, potentially a shell. Who knows? But I have to have warp-like input into my prompt. I just love that about warp. Okay, 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 the show notes.
Starting point is 01:39:57 We have links there for you. And Ghosty 1.0 is coming soon. Okay, one more note. It was so cool to catch up with Mitchell Hashimoto after all these years, after all this accomplishment, to have the history we had with him, to go back to the beginning before HashiCorp, the start of Vagrant, just the project, and to now see where he's gone and what he's doing now. To me, that's the coolest thing about this podcast. I love that. Okay, last interview show of the year. Enjoy your holidays.
Starting point is 01:40:27 Enjoy your family. Enjoy your time away. Enjoy the hacking you're going to do if your plan is to take some time off and just get some things done. That's fun stuff, hobbies, tinkering, new side projects, whatever. And we'll see you in Zoloft throughout the break. Go to changelog.com slash community. Join our Zoloft, chat with us in real time. There's a lot of people there and I'm sure you'll dig it. Big thanks to our friends and our partners over at fly.io.
Starting point is 01:40:57 We love fly. Give them some love this holiday season. If you're launching a new app or taking some of the production fly.io and to our sleep science experts over at eight sleep with their pod for ultra i love that thing it is the coolest thing ever eight sleep.com slash changelog get yours today 350 bucks off you can't beat that and to our friends over at wix and wix studio wix.com slash studio. Into our friends at Retool, retool.com. We love Retool. It's so cool. And a big thank you to the Beat Freak in Residence Breakmaster Cylinder. Those beats, banging, banging, banging.
Starting point is 01:41:37 Love you, BMC. Okay, friends, we'll see you this Friday for the last episode of the year for Chainsaw Gun Friends, the last episode of the year for Change Talkin' Friends, bringing you State of the Log 2024. Lots of cool voicemails, lots of cool Breakmaster remixes. And after that, we'll see you in 2025. Thanks for listening. Thank you.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.