TypeScript MIT

wetty

Terminal in browser over http/https. (Ajaxterm/Anyterm alternative, but much better)

B

butlerx

Dernière activité 29 sept. 2026
butlerx/wetty

5,4 k

étoiles

769

forks

12

issues ouvertes

ajaxtermanytermhacktoberfesthacktoberfest-acceptedterminalwettyxtermxterm-jsxtermjs

Ce README est souvent en anglais.

WeTTY = Web + TTY.

All Contributors

Documentation License: MIT

Terminal access in browser over http/https

WeTTY

Terminal over HTTP and https. WeTTY is an alternative to ajaxterm and anyterm but much better than them because WeTTY uses xterm.js which is a full fledged implementation of terminal emulation written entirely in JavaScript. WeTTY uses websockets rather than Ajax and hence better response time.

Prerequisites

  • node >=20
  • make
  • python
  • build-essential

Install

npm -g i wetty

Usage

$ wetty --help
Options:
  --help, -h              Print help message                            [boolean]
  --version               Show version number                           [boolean]
  --conf                  config file to load config from                [string]
  --ssl-key               path to SSL key                                [string]
  --ssl-cert              path to SSL certificate                        [string]
  --ssh-host              ssh server host                                [string]
  --ssh-port              ssh server port                                [number]
  --ssh-user              ssh user                                       [string]
  --title                 window title                                   [string]
  --ssh-auth              defaults to "password", you can use
                          "publickey,password" instead                   [string]
  --ssh-pass              ssh password                                   [string]
  --ssh-key               path to an optional client private key
                          (connection will be password-less and
                          insecure!)                                     [string]
  --ssh-config            Specifies an alternative ssh configuration
                          file. For further details see "-F" option in
                          ssh(1)                                         [string]
  --force-ssh             Connecting through ssh even if running as
                          root                                          [boolean]
  --known-hosts           path to known hosts file                       [string]
  --base, -b              base path to wetty                             [string]
  --port, -p              wetty listen port                              [number]
  --host                  wetty listen host                              [string]
  --socket                Make wetty listen on unix socket               [string]
  --command, -c           command to run in shell                        [string]
  --allow-iframe          Allow wetty to be embedded in an iframe,
                          defaults to allowing same origin              [boolean]
  --allow-remote-hosts    Allow wetty to use the host and port params
                          in a url as ssh destination                   [boolean]
  --allow-remote-command  Allow wetty to use the command and path
                          params in a url as command and working
                          directory on ssh host                         [boolean]
  --ping-interval         Milliseconds between Socket.IO heartbeat
                          pings sent to the client                       [number]
  --ping-timeout          Milliseconds to wait for a Socket.IO
                          heartbeat pong before considering the
                          connection dead                                [number]
  --allowed-origin        Required trusted browser origin allowed to
                          connect to Socket.IO. Repeat for multiple
                          origins; also accepts ALLOWEDORIGINS            [array]
  --log-level             set log level of wetty server                  [string]

Start WeTTY with an explicit trusted browser origin (required):

wetty --allowed-origin http://yourserver:3000

Open your browser on http://yourserver:3000 and you will be prompted to login. Or go to http://yourserver:3000/ssh/<username> to specify the user beforehand. For local use, configure http://localhost:3000 instead. Behind a reverse proxy, configure the public HTTPS origin, not the internal backend address. Origins never include the base path. Repeat --allowed-origin or set a comma-separated ALLOWEDORIGINS list to allow multiple origins.

If you run it as root it will launch /bin/login (where you can specify the user name), else it will launch ssh and connect by default to localhost. The SSH connection can be forced using the --force-ssh option.

If instead you wish to connect to a remote host you can specify the --ssh-host option, the SSH port using the --ssh-port option and the SSH user using the --ssh-user option.

Check out the Flags docs for a full list of flags

Docker container

To use WeTTY as a docker container, a docker image is available on docker hub. To run this image, use

docker run --rm -p 3000:3000 -e ALLOWEDORIGINS=http://localhost:3000 wettyoss/wetty --ssh-host=<YOUR-IP>

and you will be able to open a ssh session to the host given by YOUR-IP under the URL http://localhost:3000.

It is recommended to drive WeTTY behind a reverse proxy to have HTTPS security and possibly Let’s Encrypt support. Popular containers to achieve this are nginx-proxy and traefik. For traefik there is an example docker-compose file in the containers directory.

FAQ

Check out the docs

What browsers are supported?

WeTTY supports all browsers that xterm.js supports.

Author

👤 Cian Butler butlerx@notthe.cloud

Contributing ✨

Contributions, issues and feature requests are welcome!
Feel free to check issues page.

Please read the development docs for installing from source and running is dev node

Thanks goes to these wonderful people (emoji key):

Cian Butler
Cian Butler

💻 📖
Krishna Srinivas
Krishna Srinivas

💻
acalatrava
acalatrava

💻
Strubbl
Strubbl

💻
Oleg Kurapov
Oleg Kurapov

💻
Boyan Rabchev
Boyan Rabchev

💻
Jimmy
Jimmy

💻
Luca Milanesio
Luca Milanesio

💻
Anthony Jund
Anthony Jund

💻
mirtouf
mirtouf

💻
Bertrand Roussel
Bertrand Roussel

💻
Ben Letchford
Ben Letchford

💻
SouraDutta
SouraDutta

💻
Koushik M.L.N
Koushik M.L.N

💻
Imuli
Imuli

💻
perpen
perpen

💻
Nathan LeClaire
Nathan LeClaire

💻
Mihir Kumar
Mihir Kumar

💻
Chris Suszynski
Chris Suszynski

💻
Felix Bartels
Felix Bartels

💻
Jarrett Gilliam
Jarrett Gilliam

💻
Harry Lee
Harry Lee

💻
Andreas Klöckner
Andreas Klöckner

💻
DenisKramer
DenisKramer

💻
Vamshi K Ponnapalli
Vamshi K Ponnapalli

💻
Tri Nguyen
Tri Nguyen

📖
Felix Pojtinger
Felix Pojtinger

📖
Neale Pickett
Neale Pickett

💻
Matthew Piercey
Matthew Piercey

📖
Kasper Holbek Jensen
Kasper Holbek Jensen

📖
Farhan Khan
Farhan Khan

💻
Jurre Vriesen
Jurre Vriesen

💻
James Turnbull
James Turnbull

💻
Dean Shub
Dean Shub

💻
lozbrown
lozbrown

💻 💡
sergeir82
sergeir82

💻
Kyle Lucy
Kyle Lucy

💻
userdocs
userdocs

📖
Janos Kasza
Janos Kasza

💻
Grant Handy
Grant Handy

📖
Leszek Błażewski
Leszek Błażewski

💻 📦

This project follows the all-contributors specification. Contributions of any kind welcome!

Show your support

Give a ⭐️ if this project helped you!

📝 License

Copyright © 2019 Cian Butler butlerx@notthe.cloud.
This project is MIT licensed.


Projets similaires

A terminal for the web

TypeScriptconsoledevelopmentjavascript
Xxtermjs
21,2 k étoiles2 k

A terminal emulator for the web

TypeScript
Vvercel-labs
3,5 k étoiles161

Ghostty for the web with xterm.js API compatibility

TypeScriptbrowserghosttylibrary
Ccoder
2,9 k étoiles178