Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Gate One is an HTML5-powered terminal emulator and SSH client
HTML JavaScript Python TeX CSS Makefile
branch: master

example_package/ Made it so that it will automatically insta…

…ll any .js or .css files found in the static directory instead of using the hard-coded example_package.js.

terminal.js:  Tweaked `GateOne.Terminal.newTerminal()` slightly to avoid having an exception show up in the JS console in the event that a terminal gets closed really quickly after being opened.
gateone_input.js:  Gate One now works properly in the beta version of Chrome/Chromium and will continue to work when that version becomes "Stable".  Note that this is caused by a backwards-incompatible change the Chrome devs had to make in order to support DOM Level 3 keyboard events (see below).  They still have a lot of work to do though :(
gateone_input.js:  Gate One will now take advantage of the DOM Level 3 `KeyboardEvent.key` attribute if it's available.  This will allow certain special keys to work properly when using keyboard layouts other than "US".  This currently works in Firefox and IE but has yet to be implemented in Chrome/Chromium.  See: and
NOTE:  If you wish that the Chrome devs would hurry up with their non-US keyboard layout support please "star" this issue:  Updated the "requires" variable to require Tornado version 4.0+.
gateone.js:  Fixed the bug reported in #512 (#512) where you could get a black screen after opening a new terminal.  Fixing this bug also fixed the grid view which wasn't working properly to switch to your selected workspace.
latest commit 086ceeeb7e
@liftoff authored
Failed to load latest commit information.
docker core/ Added a helpful log message to the `check_origin()` f…
gateone example_package/ Made it so that it will automatically insta…
onoff core/ Added a new 'multiprocessing_workers' setting/…
scripts core/ Added a helpful message to `killall()` to indicate tha…
terminal terminal.js: Added `GateOne.Terminal._trimmedScreen(screen)` which re…
termio terminal.js: Added `GateOne.Terminal._trimmedScreen(screen)` which re…
.gitignore Removed an accidental .directory file that wound up in the repo and a…
AGPLv3.txt Commit #1: The Gate One beta is about to go public.
INSTALL.txt terminal.js: Fixed the syntax error in `GateOne.Terminal.sharedTermin…
LICENSE.txt Updated copyright date. NOTE: Lots of tidying-up in this commit. Functions were moved around …
README.rst Suggest link to latest pexpect, outdated details
babel_gateone.cfg GATE ONE HAS NOW BEEN TRANSLATED (probably badly) into: German, Portu…
babel_gateone_js.cfg gateone.js: Added a (small) new module: GateOne.i18n. It provides fun… call when building RPMs to wrap lines in INSTALLED_FIL… It works again: It now automatically creates the 'gat…
setup.cfg changed path to gateone/docs/html. Without this bdist fails to build example_package/ Made it so that it will automatically insta…
stdeb.cfg Everywhere: Renamed ApplicationWebSocket.policies (the RUDict) to App…


About Gate One

Gate One is an HTML5 web-based terminal emulator and SSH client. Top features:

  • No browser plugins required! Say goodbye to the security problems of Java, Flash, and ActiveX.

  • Multi-user and multi-terminal: Hundreds of simultaneous users and terminals can be served from ho-hum hardware.

  • Advanced terminal emulation including support for 256 colors, fancy text styles, and more.

  • Supports capturing and displaying images and PDFs inline within terminals (see screenshots).

  • Type in your native language! Gate One supports Unicode, international keyboard layouts, and localized strings (internationalization or i18n).

  • Natural copy & paste: Highlight text and use your browser's native context menu. On Macs you can use ⌘-c and ⌘-v and on Linux desktops you can middle-click-to-paste. Shift-Insert works too!

  • Terminal sessions can be resumed even if the browser is closed or disconnected. They can also be resumed from a completely different computer. You'll never have to worry about the office VPN disconnecting again!

  • Supports server-side logging of user sessions via any combination of syslog, remote syslog, or directly to disk.

  • Gate One can be embedded into any web application. A few lines of JavaScript is all it takes! There's an interactive tutorial covering how to embed available in the tests directory (hello_embedded).

  • Many authentication mechanisms are supported: Anonymous, Kerberos (Single Sign-On with Active Directory!), PAM, Google Auth, and there's an OpenID-like WebSocket API for applications embedding Gate One (see the chat app in the tests directory for an example of how it works).

  • Gate One is easy to customize: Themes and plugins can add features or override just about anything. In fact, Gate One's SSH functionality is implemented entirely via a plugin.

  • Plugins can be written in any combination of Python, JavaScript, and CSS.

  • The Gate One server can be stopped & started without users losing their running terminal applications (even SSH sessions stay connected!).

  • The SSH plugin allows users to duplicate sessions without having to re-enter their username and password (it re-uses the existing SSH tunnel). It also supports key-based authentication and includes an SSH identity manager that supports RSA, DSA, ECDSA, and even X.509 certificates.

  • The SSH plugin also provides a library of functions that other plugins can use to seamlessly execute background operations on the currently-connected terminal. You can capture this output from JavaScript and do whatever you want with it.

  • The Bookmarks plugin lets you keep track of all of your hosts with support for tagging, sorting, and includes a super fast search. It was built to handle thousands of bookmarks and can be used with whatever URLs you want--it isn't limited to SSH!

  • The Logging plugin includes a Log Viewer that allows users to sort, view, and even export recordings of their terminal sessions to self-contained HTML files that can be shared. Demonstrating anything on the command line can be as simple as performing the task and clicking a button!

  • The Playback plugin allows users to rewind and play back their connected terminal sessions in real-time, just like a video! This can be done via the playback controls or by holding the shift key while scrolling.

  • The Convenience plugin adds many convenient capabilities:
    • IPv4 and IPv6 addresses become clickable elements that can perform a reverse DNS lookup.
    • The output of 'ls -l' is transformed into clickable elements that can perform user and group lookups, convert bytes into human-readable strings, and even tell you what the 'chmod equivalent' is of the permissions field (e.g. clicking on 'crw-rw-rw-' would tell you, "(Character Device) with permissions equivalent to 'chmod 0666'").
    • Automatic syntax highlighting of syslog messages.
  • The Example plugin demonstrates how to write your own plugins and shows off the SSH plugin's exec_remote_command() functionality.

  • Gate One works with Python 2.6+, Python 3, and even pypy!

  • The daemon that acts as the web server for Gate One is small and light enough to be included in embedded devices.


Gate One is dual licensed: AGPLv3 or Commercial Licensing. More information can be found at


The Grid View showing multiple terminals

Displaying images inline in a terminal

A demonstration of some of the Convenience plugin's capabilities

The Example plugin showing off the real-time load graph and the 'top' widget


The documentation for Gate One can be found here:

Also, all (this) documentation is in the "gateone/docs" directory. The HTML form is pre-built and ready-to-read.


Just press the ESC key on any page at to have Gate One drop down into view, Quake-style!

Other Notable Bits

Gate One's termio and terminal Python modules can be used together to automate, screen-scrape, and completely control terminal applications. The expect() function can be used as a replacement for pexpect that has some additional features and benefits:

  • It can be used asynchronously: It won't block which means it is perfect for executing commands from a web application.
  • It supports sophisticated decision trees and callbacks: You can completely re-define all patterns and callbacks on-the-fly based on whatever conditions you want.
Something went wrong with that request. Please try again.