Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Hi all, I'm one of the maintainers of xterm.js, open to answer any questions!

Here's a little history on the project, some of which is already called out in other comments:

- Fabrice Bellard created jslinux[1].

- Christopher Jeffrey (@chjj) forked the terminal component into term.js[2], this eventually became unmaintained.

- Paris Kasidiaris (@parisk) forked it into xterm.js for use in SourceLair[3].

- I showed up around 2016 when investigating options for VS Code's integrated terminal and eventually joined as a maintainer, spending a good deal of my time at work on the project since then.

We currently have 5 active maintainers in the xterm.js team as well which I'd like to call out because the project has only come this far as a result of everyone's efforts.

[1]: https://bellard.org/jslinux/

[2]: https://github.com/chjj/term.js

[3]: https://www.sourcelair.com/

EDITS: Formatting



I just want to say thanks, I have been experimenting with using xterm.js to connect to terminal API in jupyter notebooks and it has worked really well, plug and play (even editors like vim were working without any extra effort).

Before that I was experimenting with using it as a custom shell for running commands inside a web application. In that use case it was a bit more challenging because I had never written to an actual tty before (ansi escape codes for coloring log files has been about the limit of my experience). For that use case I just really needed to send and receive text. I ended up using this library [ https://github.com/wavesoft/local-echo ] to smooth that process out until I could learn about how to do things properly.

Are any suggestions on:

1. where to learn about how ttys work to do things the right way, or

2. suggested libraries like local-echo that can wrap over some of the trickier bits of just getting text on the screen?

Thanks again for maintaining such a great & useful library!


1. https://invisible-island.net/xterm/ctlseqs/ctlseqs.html is my main reference for anything related to terminals, other than that my knowledge has built up mainly as a result of contributing to xterm.js.

2. The library you mention is the one I'm aware of, I have a WIP for building a basic shell in JS that I will probably open source eventually if I have the time.


+1

Xterm.js is really impressive in what it can do, but it was pretty tough to get started with as someone who just wanted to pipe shell input/output over HTTP requests to a server. I realize streamlining that usecase is probably out of scope for the Xterm team, but I think there's a space for either some tutorials or a higher-level wrapper library


TIL another project started by Fabrice Bellard (well for him it's just a side project for the real project JSLinux).


Whenever people say that the “10x developer” is a myth, I point them to Fabrice Bellard, who would easily be 100 times more productive than your average developer at pretty much any task you give him. The sheer diversity of problems he’s solved with extremely high quality software is astounding.


10x developers are about as rare as 10x strong people.

They exist but you probably don't ever meet one. And there could be a lot more 10x people but most don't commit to it.


True, he’s mind-bogglingly amazing. Also still probably not a helpful example to developing a sane working group or good office dynamics. He’s a unicorns unicorn.


First of all it is a wonderful project. It is included in VS Code and works flawlessly for me most of the time. Not to mention the countless web implementations around it

Maybe it's a pet peeve of mine but I do not understand how to select stuff when the Terminal application steals the select function.

Example: you open tmux with option "mouse on" - when you click and drag tmux "steals" the selecting function and makes it an internal selection/copy/paste feature. But if I happen to be connected via ssh or something I want the terminal emulator to ignore that stealing and let me select some text instead to my own clipboard. In most other terminal emulator there is some shortcut to do just that, I never understood if the option is present in xterm.js too.


VS Code has the terminal.integrated.macOptionClickForcesSelection setting which will let you to alt+drag to use xterm.js' selection as opposed to tmux's selection. On Linux and Windows I believe it's shift+drag.


I've actually been using xterm in my self baked full RDP suite using Node and WebRTC to control my PC(s) and raspberry pis remotely.

https://drive.google.com/file/d/1vkXp9Hm-9ID8eOrApjLFGFc-fOe...

Thank you for creating this!!!! I basically work full time in my oculus quest 2 thanks to this


I'm an educator and I to teach things like symmetric cryptography. I just used full virtual machines in class to demonstrate ccrypt to encrypt and decrypt files. Would xterm.js be a valid way to implement that kind of exercise to avoid relying on virtual machines? Do you know of any resources that would point me in the right direction for building educational exercises?


(Shameless but relevant example.) On https://CoCalc.com [1], you can create a project and click +New-->Terminal to get an *xerm.js based terminal*, then upload the ccrypt source code (download and upload the tarball from [2]), extract it, and build it in a few seconds via "./configure && make". You can then run it via "src/ccrypt". I'm also an educator, and created CoCalc mainly for teaching (it has course management functionality).

[1] https://cocalc.com/features/linux

[2] http://ccrypt.sourceforge.net/#downloading


Hi, I'm Dennis, and I've been working on my own browser based OS for a decade. You can check out the "web native" CLI at https://denix.xyz/shell.os. Replace "shell" with "desk" to get to a friendly gui. Then we can start talking about browser-based encryption techniques. For simple command line utilities, porting via WebAssembly is always a thought. The way Denix works in the CLI is that you have to import command libraries. There is a library called crypto with 2 commands that you can import by typing into the prompt: "import crypto". Entering that command should give you the commands "encrypt" and "decrypt" in your runtime environment. It's been maybe a couple of years since I worked on that stuff, but I just tested "encrypt" and it seemed to be working. A word of caution: Denix is very much a chrome thing.


xterm.js is only a frontend, you still need to plug it into a backend or write you own. A VM would probably be the way to go.


Thanks. I was curious because the demo on the homepage doesn't appear to be communicating with a backend. (The xterm.js code just seems to interact with https://xtermjs.org/js/demo.js.) So I guess this demo presented an experience that people should expect with xterm.js, but not necessarily the standard implementation.


You can check out the source for the demo at https://github.com/xtermjs/xtermjs.org/blob/master/js/demo.j..., I've actually started hacking up a more general mechanism for doing this since I've done it a few times but it's not OSS yet.

If you don't need to rely on ccrypt and just want to emulate teh experience of using it, you could have an on rails experience by forking the demo file and adapting the commands part.



Thank you and everyone else involved. I tried reading the source code of many terminal emulators, found them to be really difficult to understand. This project helped me understand terminals better.




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

Search: