The Changelog: Software Development, Open Source - We ain't afraid of no Ghostty! (Interview)
Episode Date: December 18, 2024Mitchell 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)
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.
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,
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
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.
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
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.
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
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.
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
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.
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.
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?
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
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.
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
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
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.
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,
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
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.
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.
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.
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.
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
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.
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.
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,
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...
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.
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.
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
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.
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.
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
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,
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
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
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
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,
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
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?
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
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
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
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.
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
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
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
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.
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
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
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
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,
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,
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
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,
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
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,
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
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,
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.
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
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,
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.
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.
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.
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
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
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
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.
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,
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,
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,
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
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.
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,
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?
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,
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,
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.
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.
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
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,
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,
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
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
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.
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
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
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?
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
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.
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.
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
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.
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.
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.
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?
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
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
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,
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
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.
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?
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.
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.
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,
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
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
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.
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,
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
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.
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.
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
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...
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.
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.
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
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
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
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
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
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.
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
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,
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,
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
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,
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,
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.
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,
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,
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.
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
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?
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.
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
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
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
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
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.
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.
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.
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.
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
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.
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.
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
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
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.
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.
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
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.
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
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
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
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
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
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.
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.
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
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
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.
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?
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
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,
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.
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
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.
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.
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.
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.
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
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.
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
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
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
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
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,
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
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
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,
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.
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
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
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.
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
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.
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
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.
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
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
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,
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.
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
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.
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.
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.
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.
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,
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,
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.
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
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
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,
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
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.
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.
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,
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.
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,
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,
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,
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,
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
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.
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.
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.
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
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
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
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.
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.
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.
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.
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.
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?
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.
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.
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
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.
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.
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,
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.
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.
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,
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
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,
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
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
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
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.
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.
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.
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.
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.
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.
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.
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.