GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - microsoft/node-pty: Fork pseudoterminals in Node.JS

BranchesTags
Open more actions menu

Latest commit

 

History

1,435 Commits
1,435 Commits

Folders and files

NameName
Last commit message
Last commit date
.config
.config
 
 
.github
.github
 
 
.vscode
.vscode
 
 
examples
examples
 
 
fixtures
fixtures
 
 
pipelines
pipelines
 
 
scripts
scripts
 
 
src
src
 
 
test
test
 
 
third_party/conpty/1.25.260303002
third_party/conpty/1.25.260303002
 
 
typings
typings
 
 
.editorconfig
.editorconfig
 
 
.gitattributes
.gitattributes
 
 
.gitignore
.gitignore
 
 
CONTRIBUTING.md
CONTRIBUTING.md
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
SECURITY.md
SECURITY.md
 
 
binding.gyp
binding.gyp
 
 
eslint.config.js
eslint.config.js
 
 
package-lock.json
package-lock.json
 
 
package.json
package.json
 
 
publish.yml
publish.yml
 
 

Repository files navigation

node-pty

Build Status

forkpty(3) bindings for node.js. This allows you to fork processes with pseudoterminal file descriptors. It returns a terminal object which allows reads and writes.

This is useful for:

  • Writing a terminal emulator (eg. via xterm.js).
  • Getting certain programs to think you're a terminal, such as when you need a program to send you control sequences.

node-pty supports Linux, macOS and Windows. Windows support is possible by utilizing the Windows conpty API on Windows 1809+.

Note: Support for the winpty library has been removed. Windows 10 version 1809 (build 18309) or later is now required.

API

The full API for node-pty is contained within the TypeScript declaration file, use the branch/tag picker in GitHub (w) to navigate to the correct version of the API.

Example Usage

import * as os from 'node:os';
import * as pty from 'node-pty';

const shell = os.platform() === 'win32' ? 'powershell.exe' : 'bash';

const ptyProcess = pty.spawn(shell, [], {
  name: 'xterm-color',
  cols: 80,
  rows: 30,
  cwd: process.env.HOME,
  env: process.env
});

ptyProcess.onData((data) => {
  process.stdout.write(data);
});

ptyProcess.write('ls\r');
ptyProcess.resize(100, 40);
ptyProcess.write('ls\r');

Real-world Uses

node-pty powers many different terminal emulators, including:

  • Microsoft Visual Studio Code
  • Hyper
  • Upterm
  • Script Runner for Atom.
  • Theia
  • FreeMAN file manager
  • terminus - An Atom plugin for providing terminals inside your Atom workspace.
  • x-terminal - Also an Atom plugin that provides terminals inside your Atom workspace.
  • Termination - Also an Atom plugin that provides terminals inside your Atom workspace.
  • atom-xterm - Also an Atom plugin that provides terminals inside your Atom workspace.
  • electerm Terminal/SSH/SFTP client(Linux, macOS, Windows).
  • Extraterm
  • Wetty Browser based Terminal over HTTP and HTTPS
  • nomad
  • DockerStacks Local LAMP/LEMP stack using Docker
  • TeleType: cli tool that allows you to share your terminal online conveniently. Show off mad cli-fu, help a colleague, teach, or troubleshoot.
  • mesos-term: A web terminal for Apache Mesos. It allows to execute commands within containers.
  • Commas: A hackable terminal and command runner.
  • ENiGMA½ BBS Software: A modern BBS software with a nostalgic flair!
  • Tinkerun: A new way of running Tinker.
  • Tess: Hackable, simple and rapid terminal for the new era of technology 👍
  • NxShell: An easy to use new terminal for Windows/Linux/MacOS platform.
  • OpenSumi: A framework helps you quickly build Cloud or Desktop IDE products.
  • Enjoy Git: A modern Git client featuring an intuitive user interface, built with Electron, Vue 3, and TypeScript.
  • Logos: A Modern, Lightweight Code Editor, built with Electron, Vue 3, and TypeScript.

Do you use node-pty in your application as well? Please open a Pull Request to include it here. We would love to have it in our list.

Building

# Install dependencies and build C++
npm install
# Compile TypeScript -> JavaScript
npm run build

Dependencies

Node.JS 16 or Electron 19 is required to use node-pty. What version of node is supported is currently mostly bound to whatever version Visual Studio Code is using.

Linux (apt)

sudo apt install -y make python build-essential

macOS

Xcode is needed to compile the sources, this can be installed from the App Store.

Windows

npm install requires some tools to be present in the system like Python and C++ compiler. Windows users can easily install them by running the following command in PowerShell as administrator. For more information see https://github.com/felixrieseberg/windows-build-tools:

npm install --global --production windows-build-tools

The following are also needed:

  • Windows SDK - only the "Desktop C++ Apps" components are needed to be installed
  • Spectre-mitigated libraries - In order to avoid the build error "MSB8040: Spectre-mitigated libraries are required for this project", open the Visual Studio Installer, press the Modify button, navigate to the "Individual components" tab, search "Spectre", and install an option like "MSVC v143 - VS 2022 C++ x64/x86 Spectre-mitigated libs (Latest)" (the exact option to install will depend on your version of Visual Studio as well as your operating system architecture)

Debugging

The wiki contains instructions for debugging node-pty.

Security

All processes launched from node-pty will launch at the same permission level of the parent process. Take care particularly when using node-pty inside a server that's accessible on the internet. We recommend launching the pty inside a container to protect your host machine.

Thread Safety

Note that node-pty is not thread safe so running it across multiple worker threads in node.js could cause issues.

Flow Control

Automatic flow control can be enabled by either providing handleFlowControl = true in the constructor options or setting it later on:

const PAUSE = '\x13';   // XOFF
const RESUME = '\x11';  // XON

const ptyProcess = pty.spawn(shell, [], {handleFlowControl: true});

// flow control in action
ptyProcess.write(PAUSE);  // pty will block and pause the child program
...
ptyProcess.write(RESUME); // pty will enter flow mode and resume the child program

// temporarily disable/re-enable flow control
ptyProcess.handleFlowControl = false;
...
ptyProcess.handleFlowControl = true;

By default PAUSE and RESUME are XON/XOFF control codes (as shown above). To avoid conflicts in environments that use these control codes for different purposes the messages can be customized as flowControlPause: string and flowControlResume: string in the constructor options. PAUSE and RESUME are not passed to the underlying pseudoterminal if flow control is enabled.

Troubleshooting

Powershell gives error 8009001d

Internal Windows PowerShell error. Loading managed Windows PowerShell failed with error 8009001d.

This happens when PowerShell is launched with no SystemRoot environment variable present.

pty.js

This project is forked from chjj/pty.js with the primary goals being to provide better support for later Node.js versions and Windows.

License

Copyright (c) 2012-2015, Christopher Jeffrey (MIT License).
Copyright (c) 2016, Daniel Imms (MIT License).
Copyright (c) 2018, Microsoft Corporation (MIT License).

About

Fork pseudoterminals in Node.JS

Topics

conptyforkptyopenptypseudoterminalptyterminalwinpty

Resources

Readme
License

Code of conduct

Code of conduct

Contributing

Contributing

Security policy

Security policy
Activity
Custom properties

Stars

2.1k stars

Watchers

29 watching

Forks

350 forks
Report repository

Releases

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.