xtermjs /xterm.js

A terminal for the web

★ 21,337⑂ 2,050
TypeScriptCreated 2014-03-24xtermjs.org/
21,337
stars
+20+20+78
2,050
forks
–
watchers
–
prs
–
issues
–
releases
–
discussions

README

Xterm.js is a frontend component that enables applications to bring fully-featured terminals to their users in the browser. It's used by popular projects such as VS Code (and its forks), Tabby and Hyper.

 Features

- Terminal apps just work: Xterm.js works with most terminal apps such as bash, vim, and tmux, including support for curses-based apps and mouse events.
- Performant: Xterm.js is really fast and includes an optional GPU-accelerated renderer.
- Rich Unicode support: Supports CJK, emojis, and IMEs.
- Self-contained: The core library has zero dependencies.
- Accessible: Screen reader mode and minimum contrast ratio support can be turned on.
- And much more: Links, theming, custom glyphs, addons, well documented API, etc.

 What xterm.js is not

- Xterm.js is not a terminal application that you can download and use on your computer.
- Xterm.js is not bash. Xterm.js can be connected to processes like bash and let you interact with them (provide input, receive output) through a library like node-pty.

 Getting Started

First, you need to install the module. We ship exclusively through npm, so you need that installed and then add @xterm/xterm as a dependency by running:

bash
npm install --save @xterm/xterm


The recommended way to load xterm.js with the ES module syntax, either using TypeScript or a modern JS tooling. Note that both CommonJS and ES module files are shipped with the npm package.

javascript
import { Terminal } from '@xterm/xterm';


Then instantiate a Terminal object, open it on an element and write to it:

javascript
const term = new Terminal();
term.open(document.getElementById('terminal'));
term.write('Hello from \x1B1;3;31mxterm.js\x1B[0m $ ')


Most use cases will hook up input and output to a pseudoterminal API such as [node-pty which will drive the terminal.

javascript
pty.onData(data = term.write(data));
term.onData(data = pty.write(data));


Then make sure to also include the css/xterm.css file, for example in HTML:

html



 Standalone example

Here is a complete standalone example in a HTML file:

html

  
    
      
      
    
    
      
      
        const term = new Terminal();
        term.open(document.getElementById('terminal'));
        term.write('Hello from \x1B1;3;31mxterm.js\x1B[0m $ ')
      
    
  


 Addons

Addons are separate modules that extend the Terminal by building on the [xterm.js API. To use an addon, you first need to install it in your project:

bash
npm install --save @xterm/addon-web-links


Then import the addon, instantiate it and call Terminal.loadAddon:

ts
import { Terminal } from '@xterm/xterm';
import { WebLinksAddon } from '@xterm/addon-web-links';

const terminal = new Terminal();
// Load WebLinksAddon on terminal, this is all that's needed to get web links
// working in the terminal.
terminal.loadAddon(new WebLinksAddon());


The xterm.js team maintains the following addons, but anyone can build them:

- @xterm/addon-attach: Attaches to a server running a process via a we

Snapshot: 2026-11-10T09:35:25Z · Data license Apache-2.0 · JSON