- Hyper 1 3 3 – Terminal Built On Web Technologies Ltd
- Hyper 1 3 3 – Terminal Built On Web Technologies Inc
- Hyper 1 3 3 – Terminal Built On Web Technologies Pvt.
Xterm.js is a front-end component written in TypeScript that lets applications bring fully-featured terminals to their users in the browser. It's used by popular projects such as VS Code, Hyper and Theia.
Hyper is one of the newer terminal emulators available. It's built with web technologies – JavaScript, HTML, CSS. Free and open source software. How to install the Hyper Linux Terminal on Ubuntu 16.04. Hyper Linux Terminal is a type of terminal application for Linux system. It' s primary focus is on speed, stabilty and development standards and connect to correct API for extension. It is very customizable. Hyper is written in JavaScript, HTML, and CSS so it can be customized to any style.
Features
- Terminal apps just work: Xterm.js works with most terminal apps such as
bash
,vim
andtmux
, this includes support for curses-based apps and mouse event support - Performant: Xterm.js is really fast, it even includes a GPU-accelerated renderer
- Rich unicode support: Supports CJK, emojis and IMEs
- Self-contained: Requires zero dependencies to work
- Accessible: Screen reader support can be turned on using the
screenReaderMode
option - And much more: Links, theming, addons, well documented API, etc.
Hyper 3 is finally out! The primary focus for thisrelease is performance.
The latest version includes several enhancements that make Hyperreally fast. For those of us who spend a significant amountof time on the command line, this release is a total game changer.
Download Hyper 3 to try it out, and read on to learn more aboutwhat's new.
Getting There
Looking back on this release, a pleasant surprise has been how littletime it took from 'let's make this thing faster' to'Holy shell! That's fast!'
Below, we visit some of the important changes that were shipped aspart of this release:
WebGL Renderer
The renderer is the piece of code that draws actual pixels on thescreen based on the state of the terminal. The original Hyper rendererwas based on the DOM. While that was a flexible approach thanks toCSS, it was also very slow.
Hyper 2 improved upon this by switching from hterm
toxterm.js
and using its canvas-based renderer. While thatmade Hyper 2 faster, for Hyper 3 we knew it was possible to delivereven faster performance by completely rewriting the renderer with WebGL. By fortunate coincidence, as we were still figuring things out, Daniel Imms (fromxterm.js
and VSCode
fame),just returned from a 'vacation'where he happened to be write a shiny new WebGL renderer.
Isn't the open source community just amazing? We immediately mergedDaniel's branch onto a test fork, and well, it ran circles aroundHyper 2. Thanks Daniel!
We are aware of a few minor limitations with using this renderer (e.gselection is always black-and-white, and you can't have more than 16terminals visible simultaneously) but the performance benefitsoutweigh them. The new renderer is still work-in-progress, so you canexpect further improvements in the near future.
IPC Batching
We also discovered that commands that were very verbose would causeHyper to temporarily choke for a few seconds. For example, runningfind ~
would cause Hyper to:
- Run painfully slow for ~5 seconds (at ~1 frame-per-second)
- Suddenly get faster (at ~15 frames-per-second) and finish printingeverything in ~10 seconds.
Digging within the CPU profile, we noticed that the 'renderer' processwas spending most of its time handling an overwhelming amount ofmessages coming in from the main process.
It is easy to see the difference between Hyper v2 and v3.The pink segments represent the time spent in processing IPC, instead of parsing or rendering.
Electron uses a multi-process architecture where each window runs onits own separate 'renderer' process. Additionally, there's oneNode.js-based 'main' process that communicates directly with theunderlying OS. In order for terminal data to be rendered by Hyper, itmust be passed from the main process to the renderer process using IPC(Inter-Process Communication).
Node's IPC, unfortunately, comes with a non-trivial amount ofoverhead.Messages are sent back and forth as JSON strings,which must be encoded on one side and decoded on the other. Also,receiving data through IPC is an async operation, and thus queued inV8's event loop. Yielding back to the event loop each time afterprocessing small messages makes matters further worse. This repeatedIPC caused thrashing when processing bursts of text (like runningcat
on a large file).
To mitigate this problem, we came up with a simple solution:batch data into larger chunks before sending them to the rendererprocess. IPC batching reduces the number of messages for verbose commandssignificantly and allows the renderer to focus on, well, rendering.
One important consideration was tobatch as much data as possible to reduce the IPC overhead, but notso much that we introduce perceivable latency. With this approach, the renderer process now spends most of its timedoing terminal emulation and rendering instead of processing IPCmessages. The outcome is a much smoother, and faster terminal.
On a similar vein, we are also testing a new approach todecide how much data is parsedbefore yielding to the renderer. The idea is to prevent skipped framesfor a more responsive terminal.
Electron V3
Hyper 3 bumps the underlying Electron from V1 to V3. We also testedV4, but a regression in the Canvas APIforced us to stay on V3. The upgrade brings in newer versions of V8and Node.js, and their corresponding bug fixes.
Faster Startup Time
Hyper 3 improves startup time by creating the firstpseudoterminal (pty) as soon as possible. A pty is a facilityprovided by operating systems to allow programs such as Hyper toemulate terminals.
In previous versions, Hyper would wait for the Chromium window toopen, send an 'I'm ready' message, and only then create thepty. Those two activities take a substantial amount of time, but couldbe done in parallel.
Hyper 3 starts initializing both at the same time. By the time thewindow says 'I'm ready', the pty is already warmed-up and ready to beconsumed. This gives Hyper 3 a decent boost in launch time (about150ms on Linux, potentially better on other platforms).
Emoji Support
If you're on MacOS, you can now pressCommand + Control + Space
to get an emoji popup and jazz up those commit messages.
More Themes on Hyper Store
Since Hyper 2, we have added many new themes into the Hyper Store. This meansit's now even easier to customise your Hyper experience to yourpersonality.
We have a detailed contribution page that explains how you can goabout enlisting your extension. We encourage all contribution and look forward to adding more themesand plugins from the community!
The Road Ahead
Terminals have existed since the 60s, and have been a powerful tool inour workflows. Their flexibility guarantees that they will remainrelevant for years to come. We're in for the long haul.
Hyper is a new kind of terminal, built on top of web technology, witha focus on extensibility. This opens new possibilities that can makethe CLI experience more productive (and fun)!
Hyper 1 3 3 – Terminal Built On Web Technologies Ltd
We're excited to keep improving Hyper, both in terms of performanceand capabilities — there's a lot to do. Hyper is completely opensource, and we welcome your involvement and contribution.
One important consideration was tobatch as much data as possible to reduce the IPC overhead, but notso much that we introduce perceivable latency. With this approach, the renderer process now spends most of its timedoing terminal emulation and rendering instead of processing IPCmessages. The outcome is a much smoother, and faster terminal.
On a similar vein, we are also testing a new approach todecide how much data is parsedbefore yielding to the renderer. The idea is to prevent skipped framesfor a more responsive terminal.
Electron V3
Hyper 3 bumps the underlying Electron from V1 to V3. We also testedV4, but a regression in the Canvas APIforced us to stay on V3. The upgrade brings in newer versions of V8and Node.js, and their corresponding bug fixes.
Faster Startup Time
Hyper 3 improves startup time by creating the firstpseudoterminal (pty) as soon as possible. A pty is a facilityprovided by operating systems to allow programs such as Hyper toemulate terminals.
In previous versions, Hyper would wait for the Chromium window toopen, send an 'I'm ready' message, and only then create thepty. Those two activities take a substantial amount of time, but couldbe done in parallel.
Hyper 3 starts initializing both at the same time. By the time thewindow says 'I'm ready', the pty is already warmed-up and ready to beconsumed. This gives Hyper 3 a decent boost in launch time (about150ms on Linux, potentially better on other platforms).
Emoji Support
If you're on MacOS, you can now pressCommand + Control + Space
to get an emoji popup and jazz up those commit messages.
More Themes on Hyper Store
Since Hyper 2, we have added many new themes into the Hyper Store. This meansit's now even easier to customise your Hyper experience to yourpersonality.
We have a detailed contribution page that explains how you can goabout enlisting your extension. We encourage all contribution and look forward to adding more themesand plugins from the community!
The Road Ahead
Terminals have existed since the 60s, and have been a powerful tool inour workflows. Their flexibility guarantees that they will remainrelevant for years to come. We're in for the long haul.
Hyper is a new kind of terminal, built on top of web technology, witha focus on extensibility. This opens new possibilities that can makethe CLI experience more productive (and fun)!
Hyper 1 3 3 – Terminal Built On Web Technologies Ltd
We're excited to keep improving Hyper, both in terms of performanceand capabilities — there's a lot to do. Hyper is completely opensource, and we welcome your involvement and contribution.
Acknowledgments
Hyper 1 3 3 – Terminal Built On Web Technologies Inc
We're genuinely thankful to the open source community. We're notsaying this only because we are building on top of an incredible setof open source libraries, but also because we find the helpful ethosof the community very touching.
Hyper 1 3 3 – Terminal Built On Web Technologies Pvt.
As soon as the xterm.js
team heard we were working on performance, they jumped right in andhelped us with feedback and several initiatives they had on theirside. We would like to extend huge thanks to Daniel Imms, @Jerch and Benjamin Staneck for theircontribution and feedback.