HN user

sawka

234 karma

Founder at https://waveterm.dev

Posts4
Comments67
View on HN

Interesting take! By implementing our UI in React, we're hoping to make it significantly easier and more accessible to write cross-platform terminal extensions (and renderers / apps for different types of content). One of the interesting directions we're looking at is providing native web-based UI for terminal programs. Like a TUI library that renders to actual UI :)

Hah, we did not come up with the headline :). Really the vision for Wave is to have an out-of-the-box excellent terminal experience that's consistent across all of the machines that you log into. We also bring cool new features to the terminal like command blocks, output renderers, persistent sessions, and universal history (across all of your sessions, local and remote).

Wave is a terminal, so you're free to use any editor you'd like, including vim, emacs or ed. We just provide another option for users who don't find vim or emacs very intuitive. I've used emacs to code for over 25 years and have no problem using the CLI or text editors (and it seems like neither do you), but there is a learning curve to teaching intro CS students or semi-technical folks how to use vim on the CLI ("type escape colon w q enter to save")

agree in principle, but i will split some hairs here. if you type "ls" into your local terminal, there's an implicit agreement that it will run the remote "ls" program. the helper program facilitates that in the same way that any other terminal + ssh + shell combo does. it only runs commands in response to your activities in the terminal.

the helper program is completely open source (waveshell) it is similar to the shell scripts or additions to your rc files that other modern terminals might add when connecting to a remote machine to support advanced features. the helper does not need any additional permissions, does not open any ports, runs only for the duration of the connection, and communicates exclusively via stdout/stdin over your standard ssh connection.

i think the terminal can be much better than it is today. i quit my job and started working on this full time after making the prototype because i was convinced that universal history, inline rendering, and persistent sessions just needed to happen. that being said, building a new terminal is hard and requires direction and a full-time team. these things are expensive and venture money will help us bring this idea to life quickly.

i also want to point out that the main competitor in this space is also venture backed and is closed source. we need the money to keep up (with help from the OSS community) and make sure there is a great open alternative in the market.

zsh support and international character support are our top two issues right now. I know the intl chars can work, we just didn't do enough international testing before launch. sorry to hear that it didn't work out of the box for you (the big profile files are also on our radar).

Would love to get any suggestions for what people would like to see rendered inline in the terminal. Things like graphs, audio/video streams, filesystem view (that supports drag&drop from your local machine), graphviz, pdfs. Maybe a graphical way to view a JIRA or Github issue and add a comment? Visual diff? Let me know what you think?

I hear you. That is a problem with a lot of (bad) UIs and why I think people love text-UI (because it is harder to screw up). First, I don't want to get rid of the text UI -- you can always render your commands using the traditional terminal interface. We just want to provide an option to display the output in a richer way. I think Github does a good job of this. You can view a file with line numbers and annotations on the side, but copy/paste won't grab that content because of how the HTML is structured. We hope be similarly attentive to things like that (but of course it is still a WIP).

a couple that have come up a lot in my talks with devs who use the CLI, but don't necessary live in it are: copy/paste, dealing with tmux, getting disconnected, using 'vi' remotely, having to setup prompts/colors/aliases on every new remote machine, editing commands without using the mouse. I'm not saying there aren't ways to do all of this now (especially when you have a lot of experience), but there can be a steep learning curve for new devs.

All of the tty processing, networking, and stream processing is done in Go, so it is fast. There is obviously more performance work to do, but in some situations our model can actually be faster than other terminals. If you cat a 1GB file in Wave, it actually runs quickly because the frontend can drop frames, while the Go backend is buffering the stream (so to answer your question, JS is not in the hot path, only Golang is).

Waveterm 3 years ago

not yet, but it will. using electron will let us get there quickly, especially if we base support on WSL. honestly it is more of a problem with packaging and testing at this point vs some underlying incompatibility.

note that our windows port will be more like a replacement for PuTTY than a replacement for powershell (at least in the first version). so it will make it easier to log into and administer remote (linux) machines.

Waveterm 3 years ago

we don't have parity with tmux yet. in terms of scripting and screen splitting, tmux is better. but, we will get there for most of the features, and i hope we'll be able to deliver those features in a more user-friendly and accessible way to non-power users. by using web tech, we know it is (relatively) easy and possible.

imo, building these types of features into your terminal make a lot more sense than having them run on every remote machine. ever run tmux inside of tmux?

Waveterm 3 years ago

founder/creator here. unfortunately this got posted without us being able to provide the proper HN background information, but i'll try to respond here.

we are committed to open-source. we are committed to providing a free terminal (both free as in speech and free as in beer) to individual users. it doesn't cost us anything to have you run Wave locally, so we don't need to charge. plus if we did charge, open-source lets you fork it, remove the monetization code, and just run it anyway!

but, yes, we do plan on making money at some point. we plan on building out (completely optional, opt-in) team and enterprise features, like collaboration, sharing workspaces/tabs, sharing playbooks, shared history, multi-machine sync, and AI features. these would be paid upgrades. for us there is a clear line -- if you need an account and it touches the cloud, it is a paid. if it runs locally on your machine, using your own resources, it is free.

we plan to add this information to the project and the website!

Waveterm 3 years ago

Most terminal latency comes from the network overhead. We're running a golang process behind the electron app to do the underlying terminal integration. There is no lag as we can get sub-millisecond response times locally. In fact, because of that, cat-ing a 1GB file on Wave can actually run faster than on iTerm because golang buffers and processes the output and we just drop UI screen updates when we're behind.

Waveterm 3 years ago

I understand your concerns, but in this case venture backed means we have the resources to put full-time resources on it and push it forward quickly (as opposed to just being an interesting side project). We need an open source modern terminal alternative, otherwise this market will be taken over by closed source alternatives.