Hacker News new | past | comments | ask | show | jobs | submit login
Tabby is a customizable cross-platform terminal app (tabby.sh)
98 points by thunderbong on March 12, 2023 | hide | past | favorite | 90 comments



I'm not sure what the state of terminals is on other platforms, but on macOS iTerm2 is excellent - having every feature under the sun and very good performance. If performance is a bottleneck then Alacritty is even faster, but I've never felt performance limited in iTerm.

This makes me skeptical about new non-native terminals. Usually the pitch is faster development so more features, but iTerm2 already being feature complete makes this unnecessary, and this isn't exactly a fast moving ecosystem. UX also isn't something that can really be competed on for a terminal app as the UX is typically dictated by the shell, tool, tmux, etc. By being non-native they also lose a significant performance advantage, even if some parts are ported to native code.

So while I think Electron makes sense for a lot of apps, I'm not convinced that it's got "product-market fit" for terminals.


I like the ligature support in Kitty.

Alacritty—I used it for a while but I didn’t really notice a performance advantage. I’m not sure what people are doing where terminal throughput really matters, and when Dan Luu did latency tests (admittedly, this was a while ago), Alacritty was middle of the pack.


Quite some time ago (~15 years?), I needed to repeatedly recompile SBCL from scratch, a process that produced multiple megabytes of output per second. I found that the gnome-terminal (which I was using at the time) increased compile time by ~4x relative to redirecting the output to /dev/null. Xterm only increased compile time by ~20%, but rxvt-unicode had no measurable overhead, so I switched over and only reconsidered when it became fashionable for CLI tools to use emoji in their output.


Stdout is frequently buffered slightly, but yeah, once you exceed it your `print(...)` line becomes blocking, and the execution moves to your terminal until it displays or discards it, freeing room in that buffer.

With large amounts of output, that can be a massive amount of time. As a really simple example, try `time dd if=/dev/random bs=1k count=1000` to print a megabyte of random data, vs `... > /dev/null`.


What about redirecting to a file? I would be worried that my eyeballs might not even be able to keep up with megabytes per second, so having the output in a file would seem more useful anyway.


You can enable ligatures in iTerm under Prefs > Profiles > Text. (Unfortunately ligatures are not supported by the Metal-based GPU renderer, which is faster than the legacy renderer.)


If you're on Wayland with properly set up GPU drivers, Alacritty was a top-tier performer on my benchmarks (sorry, didn't save them) but can be pathological in other scenarios.


Were you measuring throughput or latency? I’d expect to see good throughput measurements for Alacritty, I just think that only matters if something else has gone wrong (no terminal is slower than my eyeballs).


Honestly, the only reason I’d switch away from Kitty is because of the extremely annoying SSH behavior.

I respect the authors reasons, but practically it just sucks balls.


On Linux there are more good terminals than anyone could possibly need. I've tried a bunch - alacritty, kitty, foot, wezterm amongst others - and they all do more than I will ever need, and all do it well. I can't objectively choose between them to be honest so I've picked one arbitrarily (and I stay with it to avoid time-wasting). In any case terminals seem to me like pretty much a solved problem. If I were talented/knowledgeable enough to think I could make a really worthwhile software innovation, I'd pick something else to work on.


I’m always fascinated in what features people love about the terminal app they use. I use iTerm2, would love to hear from others what features they adore or rely on most from their terminal?


Maybe my needs are just too basic, but I've not found much reason to look beyond Apple Terminal, GNOME Terminal, etc. Probably the only feature those don't come with that I'd like is quake-style dropdown, but I don't find that worth the quirks that come with e.g. iTerm2.


True Color support is a big enough reason to switch from Terminal.app to iTerm2.app.

But beyond the cool Quake-style "hot key" overlay terminal that's always at the ready, once you start using other features of iTerm, you'll really appreciate all the amazing features it has!

For example:

- being able to press Cmd-Shift-E to quickly show/hide timestamp overlays for your entire scrollback

- pressing Opt-Cmd-B to open the time-slider of the Instant Replay feature to go back and grab output from the terminal that's not in your scrollback because it was clobbered by `less` messing up your screen

- pressing Cmd-/ to highlight the active cursor

- pressing Opt-Cmd-M to set an annotation at the cursor so you can quickly jump through your scrollback to them with Opt-Shift-Cmd-↑ and Opt-Shift-Cmd-↓

- want to know when a long-running command finishes? Just press Opt-Cmd-A in that window or pane to set an alert and you'll get a macOS notification when the prompt appears (be sure to enable Shell Integration: https://iterm2.com/documentation-shell-integration.html)

the list goes on and on... like `vi`, iTerm rewards study of its capabilities.

No other terminal comes close...


What a fantastic bunch of features! What Linux terminal has a similar offering?


These tips are blowing my mind. Thank you!


Absolutely. The only major feature of iTerm2 that I use over the Apple Terminal feature set is the tmux integration, so that my tabs can exist on my server and my terminal is more of a thin-client.


> Probably the only feature those don't come with that I'd like is quake-style dropdown

I think that should be a window-manager feature anyway. Not sure about other platforms, but at least on desktop linux there are options to put any app into something like a quake dropdown.


> Probably the only feature those don't come with that I'd like is quake-style dropdown,

On Linux I use yakuake for that (was in the repo), added it to the startup applications for my desktop environment.

On my Macbook Air I didn't find anything suitable.



Lets reinvent the wheel but rather than having it round, lets make it square so its slower and less efficient, then we can slap our names on it and cross promote ourselves for higher paying web development jobs


But you see, the square wheels have the effect of a built in parking brake, no need for pesky wheel chocks or other mechanical systems.

For v2 we're investigating octagon wheels. So far early feedback is very promising, a much smoother ride and still the built in parking brake feature.


Yeah like terminals are perfect. The current state of terminals is more like an octagon wheel to me, it works but the edges are rough. Like, why is it so hard to copy the output of a command? Why can’t I just right click anywhere in the output and select « copy stdout », « copy stderr », « copy output »? Right now I have to scroll like a caveman, hoping my configured scroll back is high enough, and that I don’t select too far ahead


Yeah... xterm with a few tweaks (and some pruning) would still be best for me.


> Yeah... xterm with a few tweaks (and some pruning) would still be best for me.

Check https://github.com/csdvrx/CuteXterm for my bag of tricks :)

xterm offers the best emulation, period. The developer is reactive and maintain high quality standards. The only real issues for me are the lack of configurable shortcuts, and ligatures. wezterm is a good option if you need these, and don't depend on xterm perfect emulation.


It's really comments like yours that keep me going.


Quite a negative comment thread. Isn't the spirit of the site to find what's interesting in a new project rather than say it's already been done and assume the worst motivations of the developer? I for one am glad that people build tools such as terminal apps as free and open source.


Yeah, I use this thing and I'm quite happy with it, it replaced iTerm for me. It strikes the perfect balance in UI for me, not over-customizable with pointless options everywhere, yet not barebones. As for Electron, I've seen much worse offenders especially in the messaging space, this is fine in comparison.


Built on Electron? Hard pass. The scourge of the modern age.


Not to mention 100 MB for a terminal app. What in the world?

edit: just looked into the linked discussion: "The gzipped tar for this is 90MB. It's 265MB unzipped."

This is madness.


>This is madness.

Yeap, even Sparta would bow down to a 265 MB terminal app.


It's still trendy to hate on Electron?

Give it up. The ship has sailed.

I like native apps as much as anyone else but you've got to realise the absolute clusterfuck that is cross-platform development. Plus building rich GUIs is actually feasible when using tools that are actually meant to build rich GUIs (i.e. HTML/CSS/JS).


> tools that are actually meant to build rich GUIs (i.e. HTML/CSS/JS)

You had me until this part. If those 3 were meant to build rich GUIs we wouldn't have new JS frameworks and a load of bundling tools coming out every year. They were meant to give documents structure and style, that's it. We molded them into the monstrosity they are today.

The appeal is not that they're a pleasure making GUIs with, it's that you go through the nightmare once and it works everywhere, rather than going through 3 different nightmares.


Yeah and C was designed for writing operating systems on mini computers and now we've got c++, what's your point?


> tools that are actually meant to build rich GUIs (i.e. HTML/CSS/JS).

These were never meant to build rich UIs. They were meant to build a text page with a few images. That's it.

There's a reason why every single UI framework for these tools re-invents the same primitive controls like avatars and tabs.


That ship has sailed 15 years ago. Web is (unfortunately) the most flexible and feature-complete crossplatform GUI framework.


It is, of course, neither.

The most feature-complete and flexible GUI framework is one that is:

- flexible. The web is anything but. You can read, for example, how Figma struggled and how inflexible the web is here: https://www.figma.com/blog/building-a-professional-design-to...

- feature-complete. Once again, there's a reason all UI projects for this "most feature-complete framework" keep reinventing the most primitive controls. Because the web has none, and creating complex controls is a near-impossibility. Also, if it was feature complete, https://open-ui.org/ wouldn't exist.

If you are actually looking for a flexible feature-complete GUI framework, then it's Qt.


I'd give up arguing with people about it! I agree web tech is going to stay on the desktop, so I'm happy to let them whinge at the moon while I continue to use sofware on Linux I otherwise would have no access to.

And it's only going to get better. Tauri's promising. I don't know any more than the next punter what the future will be, but my own guess would be web tech getting more significant in desktop UIs, not less. The combinatorial explosion of multiple OSs plus fragmentation of UI toolkits on each desktop platform seems to make web UIs a likely continuing target of choice for many apps. No-one will stop using software they like or need because someone they will never meet dupes a sneer about it on the internet.


There are plenty native terminal ships sailing nearby, so feel free to dunk on the ugly one


> absolute clusterfuck that is cross-platform development

TCL/Tk


Without Electron (or electronalikes), very few of the (extremely useful to me) mainstream commercial apps would be available for the Linux desktop. Before Electron, indeed, they weren't.

That said, although I haven't tried Tabby so have a slightly open mind on that particular case, terminals seem like the wrong use for web tech. There's no shortage of native terminals on any platform.


I have been using VS code remote tunnels recently and used the terminal from there when connected. It's been surprisingly an ok experience. Perhaps not the fastest terminal on earth, but it'll work for most workflows


I'm not a routine VS Code user but agree it's good. Those guys know what they're doing. A slightly different case from a standalone terminal really.


Good. Keep Discord out of FOSS.


Is anyone else put off by infinitely customizable things? I used to love this stuff when I was a kid but now I just want things to work well out of the box.


Not only put off by, but I try and actively avoid them these days.

I know myself too well. If I put the options and flexibility in front of me, I _will_ make use of them. Every time I hit something that's broken, doesn't work how I'd prefer, or is even moderately annoying... down the rabbit hole.

As to hopefully not to kick off a flamewar, I'll just say up front I'm wrong, an idiot, and I feel very bad about myself as I should--

But that was what finally got me onto an iPhone after over a decade on Android. I started with the ADP1 with all the hope and promise that an open platform brings. I was writing and replacing software on my phone, putting together shell scripts integrated with other tooling to automate things, etc, etc.

At some point life was just too damn busy and I stepped back and looked at all the things I want to do, and what would create the most value in my life... and messing with my phone wasn't anywhere near the top of my list. I wanted things to just work well out of the box and my choices in that matter to be basically inconsequential (if I can replace the dialer, now I need to spend brain space optimizing my dialer experience).

So I went and grabbed a phone where stuff purportedly "just works", does so in a way where I really don't get a say (I just have to learn to live with it--and I have), and more importantly when it doesn't work... there's fuck all I can do about it anyway. When it doesn't work I don't stress about it and it doesn't take up any of my time because it's not something I could fix even if I wanted to.


When all the configuration options are gone, it’s interesting how many of these “critical” tweaks become unimportant. At the end of the day it doesn’t actually matter what side of the window the close/minimise buttons are. You just trust Apple/whoever to do it right and deal with whatever you get.


The opposite, and customization doesn't prevent things from "working well", but it does allow you to reach "working great"


Yes, I just want good defaults.


This is most people, which is why things like Gnome desktop are the default. They just work out of the box. Kids and unemployed people enjoy tinkering with arch Linux and i3 but the average person wants it to just work and be simple.


The previous discussion covers a lot of the experiences with this: https://news.ycombinator.com/item?id=29553767


Oof. That’s some toxic conversation.


I feel bad for people whose projects get shredded on HN, especially from a place of prejudice, like reflexive Electron hate.

But when I actually tried a bunch of Electron-based terminal emulators on Mac a few years ago... they all felt awful. They were slow in ways I did not realize terminal emulators even could be, and they often had extension ecosystems that were similarly slow and also buggy as hell.

Maybe things have improved a lot, or maybe Tabby is an exception. (I'd love to hear from longtime users of Tabby here.)


Electron is a decent fit for some products - I dont think a terminal emulator is one of them however.


> They were slow in ways I did not realize terminal emulators even could be

When I type in a normal terminal emulator (xterm, alacritty, anything!) it feels "fast." There is no perceptible lag whatsoever between pressing a key and the character showing up on the screen.

Then I switch to a tty, and realize there's somehow even less perceptible lag.

I'm afraid to try one that uses Electron.


I had a similar experience.

It doesn't help that Terminal.app is incredibly performant and stable. Even when I found a cross-platform terminal with a nice feature set, watching it jank around while some build spams 50k lines of output would quickly burst that bubble.


> watching it jank around while some build spams 50k lines of output

Add tmux to the equation and have some output like that simultaneously occuring in multiple visible windows within a single pane, and Terminal.app will also struggle, in my experience. To get a smooth experience on Mac, I had to use iTerm2 and enable the then-experimental GPU acceleration in the alpha version.

I like to have my 'window management' for terminal stuff happen inside the terminal, so that my keybindings can live in my dotfiles and apply portably across operating systems. It's a great setup for me in terms of usability and efficiency, but it's also one that relies on great terminal performance. I was surprised to discover how much I'd taken terminal performance for granted!


Assuming a new project will have the same flaws as previous Electron projects may be prejudicial. It is not reflexive hatred.


I meant 'hate' in the more casual, vernacular sense of being a 'hater' or 'hating on' something. I was thinking of dismissive naysayers, rather than anything associated with the intense, moralistic sense that the word 'hatred' still carries.

But totally, people who are skeptical about the use of Electron (perhaps only in some problem domains) are not necessarily being truly hateful towards anyone or anything.


What's toxic about it? Negative, sure, but it's not toxic to make a substantiated negative comment.


This whole notion of people suggesting the size of a binary or its memory footprint inherently makes it unappealing or inefficient is just plain wrong. But what's disgusting is lambasting an app without _any_ evidence whatsoever other than some completely useless and arbitrary metric. I see that conversation as wholly unfounded and just plain repulsive.

If you want to criticize someone's hard work, at least bring some supporting evidence.

This whole "my terminal app uses 250 kilobytes of disk space" means absolutely nothing and is just plain rude. By that logic, gedit is a full fledged development environment.


"Toxic" seems to have become a word you say when you don't like something, but you want to represent that it's inherently bad, rather than merely in your estimation.


Feel free to read my other comment, but by toxic I mean criticizing without any evidence whatsoever other than some preconceived notions about disk usage.


There’s a bit of ideological passion towards efficient computing and maybe that resulted in some hurty egos but I thought it was substantive.


Despite the negativity in the comments (and in the comments of the previous discussion), the architecture of Tabby seems like it would lend itself to implementing "modern" features like those in the "pricing TBD" Warp[0] terminal emulator for macOS.

[0] https://www.warp.dev


Warp looks cool but surely you can get that sort of autocomplete/“intellisense” (for the C# folk) in any terminal e.g. Konsole or iTerm and save some money


Proper multiline editing with full mouse support is the main thing I want that warp has that I haven’t been able find in any other terminal. No enough to make me switch to a proprietary terminal though.


> Proper multiline editing with full mouse support

ctrl+x cltr+e

Works on every terminal. Vim and EMACS do support the mouse, you can set your editor to a graphical one.


> ctrl+x cltr+e > Works on every terminal. Vim and EMACS do support the mouse, you can set your editor to a graphical one.

It didn't work on mine (iterm2 + zsh)! But in any case, I want multiline text input without losing the context of my terminal (so I can still see the command history and the output of previous commands, and can scroll back as necessary). The functionality I've seen before to drop one into a an editor (either TUI or GUI) doesn't allow for this.


If you haven't seen WezTerm, you should.


Lua config is game over, got no time for whatever config format somebody chose that I gotta write a script to properly respond to dark mode for


Or, you know, you could look at it. It's a single flat object format with just a few keys. The default is already pretty sane, too. The reason it's Lua is so that you have the option to use features like switching a value based on platform, etc.

I've set my WezTerm config once and have never needed to touch it since. It's been years. There's not a lot there.


Nice find, I'll check it out.


The multiple supported shells remind me a little bit of the Windows cmder app, which I recall being pretty decent: https://cmder.app/

But the cross platform aspect is really nice, even if in my experience using different terminal apps per platform hasn't been too big of an issue.

Maybe except for MobaXTerm feeling better than most Linux tabbed/split terminal offerings due to its usability and support for sending input to multiple remote sessions at the same time, RDP/VNC integration etc.: https://mobaxterm.mobatek.net/ (something like Remmina is on par with mRemoteNG, so nice but not quite there)

Still, it's nice to have many alternatives to choose from.


I think you can make a terminal app even more infinitely customizable by allowing the user to specify a real number that will be displayed in the title bar. Since the reals are uncountably infinite, I think that will be the most infinitely customizable terminal.


Sure reals are uncountably infinite, but they're (mostly) not specifiable. Even with Turing machines I'm are afraid you're limited to countable numbers, and on these measly finite state machines they call computers these days you're even worse off.


It's written in JavaScript and it uses electron.

Moving on.


This isn't an airport, you don't need to announce your departure.


Just use kitty or foot. Tabby is a kludge


I used warp and I really like it. I don't think any terminal can replace warp at least for macos.


This does seem useful as something you might embed in another website or as part of a service, an interesting use case would be to host something like this as an external facing application, with authentication and login functionality.

But I dont think it does any of that.


It looked very familiar... Until I looked at the logo, and realized that it was Terminus.


The next to last screenshot is a screenshot of Terminus! Right at the top left of the screenshot it's labeled, "Terminus".


I have used for a while. Good is cross platform I can use it on Windows and Linux. Bad is slow and compatible problem, like when I pasted some token when github pushing, always authenticaed error.


and another problem is when I use tail on Linux, after I scroll up for some screen error, then back to the end it will not show new output more. for compatability it not good as Tilix


What can this do that iTerm2 can't?


Heat your house with your CPU thanks to Electron.


One thing I think it has over iTerm2 is Broadcast across all terminals. It's fairly customizable. I prefer that over Tmux. I still use iterm2 as the daily driver, but have Tabby in my back pocket for moments I find it useful over iTerm2, which is rare, but not zero. I personally prefer iTerm2's password manager and regular expression triggers.


iTerm2 has had that for ages. I used it back in 2013


I'm looking for features like external terminal, mosh and ipv6 supports which will make a difference from other existing products. Otherwise it doesn't make much sense to migrate from excellent terminals/ssh clients like iterm, putty and mobaxterm.


typescript? no thanks.




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: