paradoxxxzero/butterfly
{ "createdAt": "2014-01-16T12:01:44Z", "defaultBranch": "master", "description": "A web terminal based on websocket and tornado", "fullName": "paradoxxxzero/butterfly", "homepage": "http://paradoxxxzero.github.io/2014/02/28/butterfly.html", "language": "CoffeeScript", "name": "butterfly", "pushedAt": "2020-05-25T04:55:13Z", "stargazersCount": 2907, "topics": [], "updatedAt": "2025-11-26T05:19:07Z", "url": "https://github.com/paradoxxxzero/butterfly"}ƸӜƷ butterfly 3.0
Section titled “ƸӜƷ butterfly 3.0”
Description
Section titled “Description”Butterfly is a xterm compatible terminal that runs in your browser.
Features
Section titled “Features”- xterm compatible (support a lot of unused features!)
- Native browser scroll and search
- Theming in css / sass (20 preset themes) endless possibilities!
- HTML in your terminal! cat images and use <table>
- Multiple sessions support (à la screen -x) to simultaneously access a terminal from several places on the planet!
- Secure authentication with X509 certificates!
- 16,777,216 colors support!
- Keyboard text selection!
- Desktop notifications on terminal output!
- Geolocation from browser!
- May work on firefox too!
Try it
Section titled “Try it”$ pip install butterfly$ pip install butterfly[themes] # If you want to use themes$ pip install butterfly[systemd] # If you want to use systemd$ butterflyA new tab should appear in your browser. Then type
$ butterfly helpTo get an overview of butterfly features.
Run it as a server
Section titled “Run it as a server”$ butterfly.server.py --host=myhost --port=57575Or with login prompt
$ butterfly.server.py --host=myhost --port=57575 --loginOr with PAM authentication (ROOT required)
# butterfly.server.py --host=myhost --port=57575 --login --pam_profile=sshdYou can change sshd to your preferred PAM profile.
The first time it will ask you to generate the certificates (see: here)
Run it with systemd (linux)
Section titled “Run it with systemd (linux)”Systemd provides a way to automatically activate daemons when needed (socket activation):
$ cd /etc/systemd/system$ curl -O https://raw.githubusercontent.com/paradoxxxzero/butterfly/master/butterfly.service$ curl -O https://raw.githubusercontent.com/paradoxxxzero/butterfly/master/butterfly.socket$ systemctl enable butterfly.socket$ systemctl start butterfly.socketDon’t forget to update the /etc/butterfly/butterfly.conf file with your server options (host, port, shell, …) and to install butterfly with the [systemd] flag.
Contribute
Section titled “Contribute”and make the world better (or just butterfly).
Don’t hesitate to fork the repository and start hacking on it, I am very open to pull requests.
If you don’t know what to do go to the github issues and pick one you like.
If you want to motivate me to continue working on this project you can tip me, see: http://paradoxxxzero.github.io/about/
Client side development use grunt and bower.
Credits
Section titled “Credits”The js part is based on term.js which is based on jslinux.
Author
Section titled “Author”License
Section titled “License”butterfly Copyright (C) 2015-2017 Florian Mounier
This program is free software: you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation, either version 3 of the License, or(at your option) any later version.
This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.
You should have received a copy of the GNU General Public Licensealong with this program. If not, see <http://www.gnu.org/licenses/>.Docker
Section titled “Docker”There is a docker repository created for this project that is set to automatically rebuild when there is a push into this repository: https://registry.hub.docker.com/u/garland/butterfly/
Example usage
Section titled “Example usage”Starting with login and password
docker run --env PASSWORD=password -d garland/butterfly --loginStarting with no password
docker run -d -p 57575:57575 garland/butterflyStarting with a different port
docker run -d -p 12345:12345 garland/butterfly --port=12345