Git Product home page Git Product logo

node-pty's Introduction

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+ and the winpty library in older version.

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.

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.

ConnectNamedPipe failed: Windows error 232

This error can occur due to anti-virus software intercepting winpty from creating a pty. To workaround this you can exclude this file from your anti-virus scanning node-pty\build\Release\winpty-agent.exe

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).

node-pty's People

Contributors

alexr00 avatar chjj avatar coderaiser avatar daniel-abrecht avatar deepak1556 avatar dependabot[bot] avatar eugeny avatar hyoshioka0128 avatar implausible avatar ioquatix avatar ivankravets avatar jbenden avatar jerch avatar jeremyramin avatar joshwilsdon avatar kkocdko avatar lramos15 avatar marsup avatar nw avatar peters avatar rlidwka avatar rzhao271 avatar sbatten avatar squitchyt avatar the-ress avatar tootallnate avatar tyriar avatar zadjii-msft avatar zcbenz avatar zoeyr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

node-pty's Issues

Example how to use it in an Electron app

When I try to fork or spawn in an Electron app I get

Error: Could not call remote function 'fork'. Check that the function signature is correct. Underlying error: Path must be a string. Received [Function: callIntoRenderer]

Fix compiler warnings

..\src\win\pty.cc(70): warning C4311: 'type cast': pointer truncation from 'HANDLE' to 'int' [C:\Users\Daniel\Documents\dev\Tyriar\pty.js\build\pty.vcxproj]
..\src\win\pty.cc(70): warning C4302: 'type cast': truncation from 'HANDLE' to 'int' [C:\Users\Daniel\Documents\dev\Tyriar\pty.js\build\pty.vcxproj]
..\src\win\pty.cc(81): warning C4311: 'type cast': pointer truncation from 'HANDLE' to 'int' [C:\Users\Daniel\Documents\dev\Tyriar\pty.js\build\pty.vcxproj]
..\src\win\pty.cc(81): warning C4302: 'type cast': truncation from 'HANDLE' to 'int' [C:\Users\Daniel\Documents\dev\Tyriar\pty.js\build\pty.vcxproj]
..\src\win\pty.cc(354): warning C4311: 'type cast': pointer truncation from 'HANDLE' to 'int' [C:\Users\Daniel\Documents\dev\Tyriar\pty.js\build\pty.vcxproj]
..\src\win\pty.cc(354): warning C4302: 'type cast': truncation from 'HANDLE' to 'int' [C:\Users\Daniel\Documents\dev\Tyriar\pty.js\build\pty.vcxproj]

From #201

$ npm install

> [email protected] install /Users/technosophos/Code/ttystudio/node_modules/node-pty
> node scripts/install.js

  CXX(target) Release/obj.target/pty/src/unix/pty.o
../src/unix/pty.cc:154:25: warning: 'Utf8Value' is deprecated [-Wdeprecated-declarations]
  v8::String::Utf8Value file(info[0]->ToString());
                        ^
/Users/technosophos/.node-gyp/10.3.0/include/node/v8.h:2821:5: note: 'Utf8Value' has been explicitly
      marked deprecated here
    V8_DEPRECATED("Use Isolate version",
    ^
/Users/technosophos/.node-gyp/10.3.0/include/node/v8config.h:321:29: note: expanded from macro
      'V8_DEPRECATED'
  declarator __attribute__((deprecated))
                            ^
../src/unix/pty.cc:165:27: warning: 'Utf8Value' is deprecated [-Wdeprecated-declarations]
    v8::String::Utf8Value arg(argv_->Get(Nan::New<v8::Integer>(i))->ToString());
                          ^
/Users/technosophos/.node-gyp/10.3.0/include/node/v8.h:2821:5: note: 'Utf8Value' has been explicitly
      marked deprecated here
    V8_DEPRECATED("Use Isolate version",
    ^
/Users/technosophos/.node-gyp/10.3.0/include/node/v8config.h:321:29: note: expanded from macro
      'V8_DEPRECATED'
  declarator __attribute__((deprecated))
                            ^
../src/unix/pty.cc:176:27: warning: 'Utf8Value' is deprecated [-Wdeprecated-declarations]
    v8::String::Utf8Value pair(env_->Get(Nan::New<v8::Integer>(i))->ToString());
                          ^
/Users/technosophos/.node-gyp/10.3.0/include/node/v8.h:2821:5: note: 'Utf8Value' has been explicitly
      marked deprecated here
    V8_DEPRECATED("Use Isolate version",
    ^
/Users/technosophos/.node-gyp/10.3.0/include/node/v8config.h:321:29: note: expanded from macro
      'V8_DEPRECATED'
  declarator __attribute__((deprecated))
                            ^
../src/unix/pty.cc:181:25: warning: 'Utf8Value' is deprecated [-Wdeprecated-declarations]
  v8::String::Utf8Value cwd_(info[3]->ToString());
                        ^
/Users/technosophos/.node-gyp/10.3.0/include/node/v8.h:2821:5: note: 'Utf8Value' has been explicitly
      marked deprecated here
    V8_DEPRECATED("Use Isolate version",
    ^
/Users/technosophos/.node-gyp/10.3.0/include/node/v8config.h:321:29: note: expanded from macro
      'V8_DEPRECATED'
  declarator __attribute__((deprecated))
                            ^
../src/unix/pty.cc:389:25: warning: 'Utf8Value' is deprecated [-Wdeprecated-declarations]
  v8::String::Utf8Value tty_(info[1]->ToString());
                        ^
/Users/technosophos/.node-gyp/10.3.0/include/node/v8.h:2821:5: note: 'Utf8Value' has been explicitly
      marked deprecated here
    V8_DEPRECATED("Use Isolate version",
    ^
/Users/technosophos/.node-gyp/10.3.0/include/node/v8config.h:321:29: note: expanded from macro
      'V8_DEPRECATED'
  declarator __attribute__((deprecated))
                            ^
../src/unix/pty.cc:489:21: warning: 'Call' is deprecated [-Wdeprecated-declarations]
  Nan::Callback(cb).Call(Nan::GetCurrentContext()->Global(), 2, argv);
                    ^
../../nan/nan.h:1595:3: note: 'Call' has been explicitly marked deprecated here
  NAN_DEPRECATED inline v8::Local<v8::Value>
  ^
../../nan/nan.h:98:40: note: expanded from macro 'NAN_DEPRECATED'
# define NAN_DEPRECATED __attribute__((deprecated))
                                       ^
6 warnings generated.
  SOLINK_MODULE(target) Release/pty.node

> [email protected] postinstall /Users/technosophos/Code/ttystudio/node_modules/node-pty
> node scripts/post-install.js

added 2 packages from 9 contributors and audited 4 packages in 3.166s
found 0 vulnerabilities
$  node -v 
v10.3.0

src/ appears in lib/?

This doesn't happen during dev but on Windows installing vscode's deps this is what the node-pty dir looks like:

image

Test and document debugging in README

This comment used to exist:

/*
* PtyOpen
* pty.open(dataPipe, cols, rows)
*
* If you need to debug winpty-agent.exe do the following:
* ======================================================
*
* 1) Install python 2.7
* 2) Install win32pipe
x86) http://sourceforge.net/projects/pywin32/files/pywin32/Build%20218/pywin32-218.win32-py2.7.exe/download
x64) http://sourceforge.net/projects/pywin32/files/pywin32/Build%20218/pywin32-218.win-amd64-py2.7.exe/download
* 3) Start deps/winpty/misc/DebugServer.py (Before you start node)
*
* Then you'll see output from winpty-agent.exe.
*
* Important part:
* ===============
* CreateProcess: success 8896 0 (Windows error code)
*
* Create test.js:
* ===============
*
* var pty = require('./');
*
* var term = pty.fork('cmd.exe', [], {
*   name: 'Windows Shell',
*	  cols: 80,
*	  rows: 30,
*	  cwd: process.env.HOME,
*	  env: process.env,
*	  debug: true
* });
*
* term.on('data', function(data) {
* 	console.log(data);
* });
*
*/

How to suppress input data from output listener

I see the all the input data got notified on the read listener method as below:

ptyProcess.on('data', function(data) {
console.log(data); // this line will print 'ls' which is a input data
});

ptyProcess.write('ls\r');

Is there a way to suppress the input data from output? And Is there a way to separate input and output?

Can't pass arguments to bash.exe

The argvToCommandLine method in pty_win.js causes stuff like bash.exe -c /usr/bin/zsh to be escaped weirdly, causing bash.exe to print -: invalid option

Interactive shell demo

Hello Tyriar,
I try to figure out how to handle user interactive shell commands within node.js.

I tried:

In cmd.exe

touch test1.js
touch test2.js
copy test1.js test2.js
test2.js überschreiben? (Ja/Nein/Alle): n
        0 Datei(en) kopiert.

With node-pty

var os = require('os');
var pty = require('node-pty');

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

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

ptyProcess.on('data', function(data) {
  console.log(data);
});

ptyProcess.write('copy test1.js test2.js\r'); 

Which does not output anything interactive shell text and user input. Can you point me to the right direction?

Fails to install on Alpine linux

I have node-pty working great on my Mac to make a web based terminal but I'm trying to install node-pty on Alpine linux container and it is failing with the error below. Any ideas as to why?

$ npm install --save node-pty

npm WARN package.json [email protected] No README data
npm WARN package.json [email protected] license should be a valid SPDX license expression
|
> [email protected] install /usr/src/node-red/node_modules/node-pty
> node scripts/install.js

make: Entering directory '/usr/src/node-red/node_modules/node-pty/build'
  CXX(target) Release/obj.target/pty/src/unix/pty.o
../src/unix/pty.cc: In function 'Nan::NAN_METHOD_RETURN_TYPE PtyFork(Nan::NAN_METHOD_ARGS_TYPE)':
../src/unix/pty.cc:233:9: error: 'struct termios' has no member named 'c_ispeed'
   term->c_ispeed = B38400;
         ^
../src/unix/pty.cc:234:9: error: 'struct termios' has no member named 'c_ospeed'
   term->c_ospeed = B38400;
         ^
pty.target.mk:96: recipe for target 'Release/obj.target/pty/src/unix/pty.o' failed
make: *** [Release/obj.target/pty/src/unix/pty.o] Error 1
make: Leaving directory '/usr/src/node-red/node_modules/node-pty/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:276:23)
gyp ERR! stack     at emitTwo (events.js:87:13)
gyp ERR! stack     at ChildProcess.emit (events.js:172:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:211:12)
gyp ERR! System Linux 4.7.3-coreos-r2
gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /usr/src/node-red/node_modules/node-pty
gyp ERR! node -v v4.7.0
gyp ERR! node-gyp -v v3.4.0
gyp ERR! not ok

> [email protected] postinstall /usr/src/node-red/node_modules/node-pty
> node scripts/post-install.js

[email protected] node_modules/node-pty
└── [email protected]
bash-4.3$

[Question] Is it possible to be notified when a command is executed

I would like to be able to know when a command has been executed. Consider doing

ptyProcess.write(`git status\r`);

Is it possible to be notified when the above command has been executed? I have an Electron app where commands are executed through the UI and need to take actions when the command is finished e.g routing

Windows build error: fatal error C1083: 'tracing/trace_event.h': No such file or directory

Hello.
I'm trying to npm install node-pty on windows 10 64 bit.
On my system i have installed: Nodejs 7.7.0, python27, Visualstudio 2015 Community.
I get the following build error.

  win_delay_load_hook.cc
C:\Users\luckcolors\.node-gyp\7.7.0\include\node\node.h(44): fatal error C1083: Non è possibile aprire il file inclusione: 'tracing/trace_event.h': No such file or di
rectory (compilazione del file di origine ..\src\win\pty.cc) [C:\Users\luckcolors\Desktop\black-screen\node_modules\node-pty\build\pty.vcxproj]

I hope you can help me. :)

Can't `pty.kill()` or `pty.destroy()` on Windows 10

Whenever I try to kill a pty process with pty.kill() or pty.destroy(), the whole parent process just crashes:

screen shot 2017-01-21 at 7 12 19 pm

The same happens inside Hyper:

screen shot 2017-01-21 at 7 12 19 pm

I wasn't able to get any relevant logs anywhere, not even on Event Viewer.

A try-catch is useless:

try {
  pty.kill();
} catch (err) {
  console.error(err);
}

The error never gets printed – the parent process just crashes.

If I pty._close(), everything works fine. I cannot reproduce this on macOS or Linux.

Any ideas? 😥

Is resize broken?

I didn't change any code, when moving from pty.js to node-pty, but have the following issue:

Atom Version: 1.12.6
Electron Version: 1.3.9
System: Mac OS X 10.12.3
Thrown From: script-runner package, v2.1.0

Stack Trace

Uncaught Error: Usage: pty.resize(fd, cols, rows)

At /Users/samuel/.atom/packages/script-runner/node_modules/node-pty/lib/unixTerminal.js:148

Error: Usage: pty.resize(fd, cols, rows)
    at Error (native)
    at UnixTerminal.resize (/Users/samuel/.atom/packages/script-runner/node_modules/node-pty/lib/unixTerminal.js:148:13)
    at /Users/samuel/.atom/packages/script-runner/lib/script-runner-process.coffee:110:14
    at Function.module.exports.Emitter.simpleDispatch (/Applications/User/Atom.app/Contents/Resources/app.asar/node_modules/event-kit/lib/emitter.js:25:14)
    at Emitter.module.exports.Emitter.emit (/Applications/User/Atom.app/Contents/Resources/app.asar/node_modules/event-kit/lib/emitter.js:129:28)
    at Terminal.<anonymous> (/Users/samuel/.atom/packages/script-runner/lib/script-runner-view.coffee:96:16)
    at Terminal.EventEmitter.emit (/Users/samuel/.atom/packages/script-runner/node_modules/xterm/lib/EventEmitter.js:45:16)
    at Terminal.resize (/Users/samuel/.atom/packages/script-runner/node_modules/xterm/lib/xterm.js:2654:10)
    at Object.exports.fit (/Users/samuel/.atom/packages/script-runner/node_modules/xterm/lib/addons/fit/fit.js:49:14)
    at Terminal.Xterm.fit (/Users/samuel/.atom/packages/script-runner/node_modules/xterm/lib/addons/fit/fit.js:55:24)
    at ScriptRunnerView.module.exports.ScriptRunnerView.outputResized (/Users/samuel/.atom/packages/script-runner/lib/script-runner-view.coffee:73:13)
    at /Users/samuel/.atom/packages/script-runner/lib/script-runner-view.coffee:32:56
    at callListenerProxy (/Users/samuel/.atom/packages/script-runner/node_modules/element-resize-detector/src/element-resize-detector.js:153:17)
    at utils.forEach (/Users/samuel/.atom/packages/script-runner/node_modules/element-resize-detector/src/collection-utils.js:14:22)
    at onResizeCallback (/Users/samuel/.atom/packages/script-runner/node_modules/element-resize-detector/src/element-resize-detector.js:152:13)
    at /Users/samuel/.atom/packages/script-runner/node_modules/element-resize-detector/src/detection-strategy/scroll.js:491:21
    at utils.forEach (/Users/samuel/.atom/packages/script-runner/node_modules/element-resize-detector/src/collection-utils.js:14:22)
    at notifyListenersIfNeeded (/Users/samuel/.atom/packages/script-runner/node_modules/element-resize-detector/src/detection-strategy/scroll.js:490:17)
    at /Users/samuel/.atom/packages/script-runner/node_modules/element-resize-detector/src/detection-strategy/scroll.js:458:25
    at Object.process (/Users/samuel/.atom/packages/script-runner/node_modules/batch-processor/src/batch-processor.js:124:17)
    at processBatch (/Users/samuel/.atom/packages/script-runner/node_modules/batch-processor/src/batch-processor.js:37:29)

Wrong pid on windows: Error: kill ESRCH

Every new started process gets wrong pid which is different from ones shown in task manager.
Could be reproduced with the demo of xterm.js.
Related to xterm.js issue.

> [email protected] start C:\Users\coderaiser\Documents\GitHub\xterm.js
> node demo/app

App listening to http://127.0.0.1:3000
Created terminal with PID: 928
Connected to terminal 928
internal/process.js:173
      throw errnoException(err, 'kill');
      ^

Error: kill ESRCH
    at exports._errnoException (util.js:1022:11)
    at process.kill (internal/process.js:173:13)
    at WebSocket.<anonymous> (C:\Users\coderaiser\Documents\GitHub\xterm.js\demo\app.js:72:13)
    at emitTwo (events.js:111:20)
    at WebSocket.emit (events.js:191:7)
    at WebSocket.cleanupWebsocketResources (C:\Users\coderaiser\Documents\GitHub\xterm.js\node_modules\ws\lib\WebSocket.js:950:8)
    at emitOne (events.js:101:20)
    at Socket.emit (events.js:188:7)
    at emitErrorNT (net.js:1281:8)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)

npm ERR! Windows_NT 10.0.14393
npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "start"
npm ERR! node v7.2.0
npm ERR! npm  v3.10.9
npm ERR! code ELIFECYCLE
npm ERR! [email protected] start: `node demo/app`
npm ERR! Exit status 1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.