Jquery.terminal
jQuery Terminal Emulator - JavaScript library for creating web-based terminals with custom commands
Install / Use
/learn @jcubic/Jquery.terminalREADME
JavaScript Library for Web Based Terminal Emulators
Summary
jQuery Terminal Emulator is a plugin for creating command line interpreters in your applications. It can automatically call JSON-RPC service when a user types commands or you can provide your own function in which you can parse user commands. It's ideal if you want to provide additional functionality for power users. It can also be used to debug your application.
You can use this JavaScript library to create a web based terminal on any website.
Because with this library you need to code all the commands yourself, you can call it fake terminal emulator. In contrast to library that will give you access to real terminal like online SSH. To have real online SSH I suggest to use xterm.js library.
Features:
-
You can create an interpreter for your JSON-RPC service with one line of code (just use url as first argument).
-
Support for authentication (you can provide functions when users enter login and password or if you use JSON-RPC it can automatically call login function on the server and pass token to all functions).
-
Stack of interpreters - you can create commands that trigger additional interpreters (eg. you can use couple of JSON-RPC service and run them when user type command)
-
Command Tree - you can use nested objects. Each command will invoke a function (own REPL), if the value is an object it will create a new interpreter and use the function from that object as commands. You can use as many nested object/commands as you like. If the value is a string it will create JSON-RPC service.
-
Support for command line history, it uses Local Storage if possible.
-
Support for tab completion.
-
Includes keyboard shortcut from bash like CTRL+A, CTRL+D, CTRL+E etc.
-
Bash reverse history search (CTRL+R / CTRL+G).
-
You can create and overwrite existing keyboard shortcuts.
-
Multiple terminals on one page (every terminal can have different commands, its own authentication function and its own command history).
-
It catches all exceptions and displays error messages in the terminal (you can see errors in your javascript and php code in terminal if they are in the interpreter function).
-
Using extended commands you can change working of the terminal without touching the front-end code (using echo method and terminal formatting like syntax). Read more in docs.
-
Easy way to change the style of the terminal (like color or cursor animation).
-
Chinese and Japanese character support.
-
You can use ASCII forms and collect information from users.
-
Animation (including typing effect and Canvas canvas adapter).
-
Support ANSI escapes codes.
-
Experimental mobile support, see open issues
Demo
You can test current version at this URL:
or if it doesn't use latest version (because of jsDelivr cache) you can force it with this URL:
And development version using:
You can use any version you want, everything what jsDelivr GH API accepts.
Installation
Include jQuery library, you can use cdn from https://jquery.com/download/
or use jsDelivr:
<script src="https://cdn.jsdelivr.net/npm/jquery"></script>
Then include js/jquery.terminal-2.45.2.min.js and css/jquery.terminal-2.45.2.min.css
You can grab the files from CDN:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.terminal/2.45.2/js/jquery.terminal.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/jquery.terminal/2.45.2/css/jquery.terminal.min.css" rel="stylesheet"/>
or
<script src="https://cdn.jsdelivr.net/npm/jquery.terminal@2.45.2/js/jquery.terminal.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jquery.terminal@2.45.2/css/jquery.terminal.min.css"/>
If you always want latest version, you can get it from unpkg without specifying version, it will redirect to the latest ones:
<script src="https://unpkg.com/jquery.terminal/js/jquery.terminal.min.js"></script>
<link href="https://unpkg.com/jquery.terminal/css/jquery.terminal.min.css" rel="stylesheet"/>
or jsDelivr that is bit faster:
<script src="https://cdn.jsdelivr.net/npm/jquery.terminal/js/jquery.terminal.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/jquery.terminal/css/jquery.terminal.min.css" rel="stylesheet"/>
Bleeding Edge Version
If you want to test bleeding edge, development version of jQuery Terminal. You can use those files:
<script src="https://cdn.jsdelivr.net/gh/jcubic/jquery.terminal@devel/js/jquery.terminal.min.js"></script>
<link href="https://cdn.jsdelivr.net/gh/jcubic/jquery.terminal@devel/css/jquery.terminal.min.css" rel="stylesheet"/>
but it's not refreshed as fast as rawgit was, because it's CDN and need to be propagated to different servers.
Keyboard key polyfill
NOTE: From version 1.0.0 if you want to support old browsers then you'll need to use key event property polyfill. You can check the support for it on can I use.
<script src="https://unpkg.com/js-polyfills/keyboard.js"></script>
or
<script src="https://cdn.jsdelivr.net/npm/js-polyfills/keyboard.js"></script>
Command Line
You can also install jQuery Terminal using command line, from bower repository:
bower install jquery.terminal
or npm registry:
npm install jquery.terminal
Example of usage
This is code that uses low level function, that gives you full control of the commands, just pass anything that the user types into a function.
jQuery(function($, undefined) {
$('#term_demo').terminal(function(command) {
if (command !== '') {
var result = window.eval(command);
if (result != undefined) {
this.echo(String(result));
}
}
}, {
greetings: 'Javascript Interpreter',
name: 'js_demo',
height: 200,
width: 450,
prompt: 'js> '
});
});
Here is a higher level call, using an object as an interpreter, By default the terminal will parse commands that a user types and replace number like strings with real numbers regex with regexes and process escape characters in double quoted strings.
$('body').terminal({
cat: function(width = 200, height = 300) {
return $(`<img src="https://placekitten.com/${width}/${height}">`);
},
title: function() {
return fetch('https://terminal.jcubic.pl')
.then(r => r.text())
.then(html => html.match(/<title>([^>]+)<\/title>/)[1]);
}
}, {
checkArity: false,
greetings: 'My Terminal\n'
});
And more advanced example:
jQuery(function($, undefined) {
$('#term_demo').terminal({
add: function(a, b) {
this.echo(a + b);
},
re: function(re, str) {
if (re instanceof RegExp && re.test(str)) {
this.echo(str + ' [[;green;]match]');
}
},
foo: 'foo.php',
bar: {
sub: function(a, b) {
this.echo(a - b);
}
}
}, {
height: 200,
width: 450,
prompt: 'demo> '
});
});
command add 2 2 will display 4 (not 22).
Command foo will change prompt to foo> and each new command will execute
json-rpc method from foo.php script.
command bar will change the prompt to bar> and if you type sub 10 2 it will display 8.
To exit from bar nested command you can type exit or press CTRL+D.
command re /^foo/ foo-bar will echo: "foo-bar match" where "match" will be green.
By default arguments are required but you can disable the check like this:
jQuery(function($, undefined) {
$('#term_demo').terminal({
add: function(...args) {
this.echo(args.reduce((a,b) => a + b));
}
}, {
checkArity: false
});
});
And add command will accept any number of argmen
Related Skills
node-connect
336.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.0kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
336.9kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.0kCommit, push, and open a PR
