interactive terminal in the browser
A fully functional terminal in your browser.
How does this work?
On the backend:
- A Flask server is running
- The Flask server uses flask-socketio, a websocket library for Flask and socketio
- A pty ("pseudo-terminal") is spawned that runs bash.
- You can think of a pty as a way to serialize/deserialize a terminal session. The Python docs describe it as "starting another process and being able to write to and read from its controlling terminal programmatically".
On the frontend:
- Xterm.js is used to render Xterm output data in the browser.
- This means escape codes used by terminals to control the cursor location, color, and other options can be passed directly to Xterm.js and Xterm.js will faithfully render them as a terminal would.
- Output from the pty process on the backend is fed into it.
- Input from the browser is passed via websocket to the pty's input
The real purpose of this is to show a basic proof of concept on how to bring Xterm.js, Python, Flask, and Websockets together to run a pty in the browser.
This is a
- starting point to build your own web app with a terminal
- learning tool to understand what a
ptyis, and how to use one in Python
- way to see Flask and Flask-SocketIO in action
- way to play around with Xterm.js in a meaningful environment
Run pyxtermjs with no commitment in an ephemeral environment with pipx
pipx run pyxtermjs # install and run in ephemeral environment
Clone this repository, enter the
pyxtermjs directory, create a virtual environment (
python3 -m venv venv), activate it (
source venv/bin/activate) then run
pip install -r requirements.txt python -m pyxtermjs
>> pyxtermjs --help usage: pyxtermjs [-h] [-p PORT] [--debug] [--version] [--command COMMAND] [--cmd-args CMD_ARGS] A fully functional terminal in your browser. https://github.com/cs01/pyxterm.js optional arguments: -h, --help show this help message and exit -p PORT, --port PORT port to run server on (default: 5000) --debug debug the server (default: False) --version print version and exit (default: False) --command COMMAND Command to run in the terminal (default: bash) --cmd-args CMD_ARGS arguments to pass to command (i.e. --cmd-args='arg1 arg2 --flag') (default: )
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size pyxtermjs-0.4.0.1-py3-none-any.whl (6.9 kB)||File type Wheel||Python version py3||Upload date||Hashes View|
|Filename, size pyxtermjs-0.4.0.1.tar.gz (6.4 kB)||File type Source||Python version None||Upload date||Hashes View|
Hashes for pyxtermjs-0.4.0.1-py3-none-any.whl