{"id":13426904,"url":"https://github.com/jcubic/jquery.terminal","last_synced_at":"2025-05-15T00:04:00.793Z","repository":{"id":37602797,"uuid":"1406596","full_name":"jcubic/jquery.terminal","owner":"jcubic","description":"jQuery Terminal Emulator - JavaScript library for creating web-based terminals with custom commands","archived":false,"fork":false,"pushed_at":"2025-04-27T11:55:02.000Z","size":38537,"stargazers_count":3165,"open_issues_count":106,"forks_count":576,"subscribers_count":104,"default_branch":"master","last_synced_at":"2025-05-07T23:31:41.031Z","etag":null,"topics":["ansi-art","command-line","console","fake-termial-website","fake-terminal","fake-web-terminal","hactoberfest","interpreter","interpreters","javascript","jquery-plugin","jquery-terminal","json-rpc","parse-commands","shell","terminal","terminal-emulators","terminal-style-website","tui","web-terminal"],"latest_commit_sha":null,"homepage":"https://terminal.jcubic.pl","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jcubic.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":".github/support.svg","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"jcubic","patreon":null,"open_collective":null,"ko_fi":"jcubic","tidelift":null,"community_bridge":null,"custom":"https://www.paypal.me/jcubic"}},"created_at":"2011-02-24T12:58:32.000Z","updated_at":"2025-04-28T20:32:03.000Z","dependencies_parsed_at":"2024-01-13T22:53:36.227Z","dependency_job_id":"715c2bd5-9b32-45de-8687-61b4379961d9","html_url":"https://github.com/jcubic/jquery.terminal","commit_stats":{"total_commits":3292,"total_committers":42,"mean_commits":78.38095238095238,"dds":"0.029769137302551596","last_synced_commit":"54e6e8cde28c83a844a0fa5bc7fdde3b8e66abd6"},"previous_names":[],"tags_count":263,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcubic%2Fjquery.terminal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcubic%2Fjquery.terminal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcubic%2Fjquery.terminal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcubic%2Fjquery.terminal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jcubic","download_url":"https://codeload.github.com/jcubic/jquery.terminal/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253528958,"owners_count":21922634,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansi-art","command-line","console","fake-termial-website","fake-terminal","fake-web-terminal","hactoberfest","interpreter","interpreters","javascript","jquery-plugin","jquery-terminal","json-rpc","parse-commands","shell","terminal","terminal-emulators","terminal-style-website","tui","web-terminal"],"created_at":"2024-07-31T00:01:47.973Z","updated_at":"2025-05-15T00:04:00.697Z","avatar_url":"https://github.com/jcubic.png","language":"JavaScript","funding_links":["https://github.com/sponsors/jcubic","https://ko-fi.com/jcubic","https://www.paypal.me/jcubic"],"categories":["JavaScript","Uncategorized","Programming Languages"],"sub_categories":["Uncategorized","JavaScript"],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/jcubic/jquery.terminal/blob/master/assets/ascii_art.svg?raw=true\u0026ver=2.44.1\"\n       alt=\"ASCII Art that represent text jQuery Terminal - JavaScript Library for Web Based Terminal Emulators\" /\u003e\n\u003c/h1\u003e\n\n[JavaScript Library for Web Based Terminal Emulators](https://terminal.jcubic.pl)\n\n[![npm](https://img.shields.io/badge/npm-2.44.1-blue.svg)](https://www.npmjs.com/package/jquery.terminal)\n![bower](https://img.shields.io/badge/bower-2.44.1-yellow.svg)\n[![Build and test](https://github.com/jcubic/jquery.terminal/actions/workflows/build.yaml/badge.svg?branch=master\u0026event=push)](https://github.com/jcubic/jquery.terminal/actions/workflows/build.yaml)\n[![Coverage Status](https://coveralls.io/repos/github/jcubic/jquery.terminal/badge.svg?branch=master\u00260f20bf6eaa4edcca15f83f8bbf243c1e)](https://coveralls.io/github/jcubic/jquery.terminal?branch=master)\n![NPM Downloads](https://img.shields.io/npm/dm/jquery.terminal.svg?style=flat)\n[![jsDelivr Downloads](https://data.jsdelivr.com/v1/package/npm/jquery.terminal/badge?style=rounded\u0026n=1)](https://www.jsdelivr.com/package/npm/jquery.terminal)\n[![Paid Support](https://img.shields.io/badge/paid-support-354465.svg)](https://support.jcubic.pl/)\n[![LICENSE MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/jcubic/jquery.terminal/blob/master/LICENSE)\n\n### Summary\n\njQuery Terminal Emulator is a plugin for creating command line interpreters in\nyour applications. It can automatically call JSON-RPC service when a user types\ncommands or you can provide your own function in which you can parse user\ncommands. It's ideal if you want to provide additional functionality for power\nusers. It can also be used to debug your application.\n\nYou can use this JavaScript library to create a web based terminal on any website.\n\nBecause 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](https://github.com/xtermjs/xterm.js) library.\n\n### Features:\n\n* You can create an interpreter for your JSON-RPC service with one line\n  of code (just use url as first argument).\n\n* Support for authentication (you can provide functions when users enter\n  login and password or if you use JSON-RPC it can automatically call\n  login function on the server and pass token to all functions).\n\n* Stack of interpreters - you can create commands that trigger additional\n  interpreters (eg. you can use couple of JSON-RPC service and run them\n  when user type command)\n\n* Command Tree - you can use nested objects. Each command will invoke a\n  function (own REPL), if the value is an object it will create a new\n  interpreter and use the function from that object as commands. You can\n  use as many nested object/commands as you like. If the value is a string\n  it will create JSON-RPC service.\n\n* Support for command line history, it uses Local Storage if possible.\n\n* Support for tab completion.\n\n* Includes keyboard shortcut from bash like CTRL+A, CTRL+D, CTRL+E etc.\n\n* Bash reverse history search (CTRL+R / CTRL+G).\n\n* You can create and overwrite existing keyboard shortcuts.\n\n* Multiple terminals on one page (every terminal can have different\n  commands, its own authentication function and its own command history).\n\n* It catches all exceptions and displays error messages in the terminal\n  (you can see errors in your javascript and php code in terminal if they\n  are in the interpreter function).\n\n* Using extended commands you can change working of the terminal without\n  touching the front-end code (using echo method and terminal formatting\n  like syntax). Read more in\n  [docs](https://terminal.jcubic.pl/api_reference.php#extended_commands).\n\n* Easy way to change the style of the terminal (like color or cursor animation).\n\n* Chinese and Japanese character support.\n\n* You can use ASCII forms and collect information from users.\n\n* Animation (including typing effect and Canvas canvas adapter).\n\n* Support ANSI escapes codes.\n\n* Experimental mobile support, see [open issues](https://github.com/jcubic/jquery.terminal/labels/mobile)\n\n### Demo\n\nYou can test current version at this URL:\n\n* [https://jcubic.github.io/jquery.terminal/](https://jcubic.github.io/jquery.terminal/)\n\nor if it doesn't use latest version (because of jsDelivr cache) you can force it with this URL:\n\n* [https://jcubic.github.io/jquery.terminal/?ver=2.44.1](https://jcubic.github.io/jquery.terminal/?ver=2.44.1)\n\nAnd development version using:\n\n* [https://jcubic.github.io/jquery.terminal/?ver=devel](https://jcubic.github.io/jquery.terminal/?ver=devel)\n\nYou can use any version you want, everything what [jsDelivr GH API accepts](https://www.jsdelivr.com/?docs=gh).\n\n### Installation\n\nInclude jQuery library, you can use cdn from https://jquery.com/download/\n\nor use jsDelivr:\n\n```html\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/jquery\"\u003e\u003c/script\u003e\n\n```\n\nThen include js/jquery.terminal-2.44.1.min.js and css/jquery.terminal-2.44.1.min.css\n\nYou can grab the files from CDN:\n\n```html\n\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/jquery.terminal/2.44.1/js/jquery.terminal.min.js\"\u003e\u003c/script\u003e\n\u003clink href=\"https://cdnjs.cloudflare.com/ajax/libs/jquery.terminal/2.44.1/css/jquery.terminal.min.css\" rel=\"stylesheet\"/\u003e\n```\n\nor\n\n```html\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/jquery.terminal@2.44.1/js/jquery.terminal.min.js\"\u003e\u003c/script\u003e\n\u003clink rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/jquery.terminal@2.44.1/css/jquery.terminal.min.css\"/\u003e\n```\n\nIf you always want latest version, you can get it from [unpkg](https://unpkg.com/) without specifying version,\nit will redirect to the latest ones:\n\n\n```html\n\u003cscript src=\"https://unpkg.com/jquery.terminal/js/jquery.terminal.min.js\"\u003e\u003c/script\u003e\n\u003clink href=\"https://unpkg.com/jquery.terminal/css/jquery.terminal.min.css\" rel=\"stylesheet\"/\u003e\n```\n\nor jsDelivr that is bit faster:\n\n```html\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/jquery.terminal/js/jquery.terminal.min.js\"\u003e\u003c/script\u003e\n\u003clink href=\"https://cdn.jsdelivr.net/npm/jquery.terminal/css/jquery.terminal.min.css\" rel=\"stylesheet\"/\u003e\n```\n\n\n#### Bleeding Edge Version\n\nIf you want to test bleeding edge, development version of jQuery Terminal. You can use those files:\n\n```html\n\u003cscript src=\"https://cdn.jsdelivr.net/gh/jcubic/jquery.terminal@devel/js/jquery.terminal.min.js\"\u003e\u003c/script\u003e\n\u003clink href=\"https://cdn.jsdelivr.net/gh/jcubic/jquery.terminal@devel/css/jquery.terminal.min.css\" rel=\"stylesheet\"/\u003e\n```\n\nbut it's not refreshed as fast as rawgit was, because it's CDN and need to be propagated to different servers.\n\n#### Keyboard key polyfill\n\n**NOTE:** From version 1.0.0 if you want to support old browsers then you'll need to use [key event property polyfill](https://rawgit.com/inexorabletash/polyfill/master/keyboard.js). You can check the support for it on [can I use](https://caniuse.com/#feat=keyboardevent-key).\n\n```html\n\u003cscript src=\"https://unpkg.com/js-polyfills/keyboard.js\"\u003e\u003c/script\u003e\n```\n\nor\n\n```html\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/js-polyfills/keyboard.js\"\u003e\u003c/script\u003e\n```\n\n#### Command Line\n\n\nYou can also install jQuery Terminal using command line, from [bower repository](https://bower.io/):\n\n```\nbower install jquery.terminal\n```\n\nor [npm registry](https://www.npmjs.com/):\n\n```\nnpm install jquery.terminal\n```\n\n\n### Example of usage\n\nThis is code that uses low level function, that gives you full control of the commands,\njust pass anything that the user types into a function.\n\n```javascript\njQuery(function($, undefined) {\n    $('#term_demo').terminal(function(command) {\n        if (command !== '') {\n            var result = window.eval(command);\n            if (result != undefined) {\n                this.echo(String(result));\n            }\n        }\n    }, {\n        greetings: 'Javascript Interpreter',\n        name: 'js_demo',\n        height: 200,\n        width: 450,\n        prompt: 'js\u003e '\n    });\n});\n```\n\nHere is a higher level call, using an object as an interpreter, By default the terminal will\nparse commands that a user types and replace number like strings with real numbers\nregex with regexes and process escape characters in double quoted strings.\n\n```javascript\n$('body').terminal({\n    cat: function(width = 200, height = 300) {\n        return $(`\u003cimg src=\"https://placekitten.com/${width}/${height}\"\u003e`);\n    },\n    title: function() {\n        return fetch('https://terminal.jcubic.pl')\n            .then(r =\u003e r.text())\n            .then(html =\u003e html.match(/\u003ctitle\u003e([^\u003e]+)\u003c\\/title\u003e/)[1]);\n    }\n}, {\n    checkArity: false,\n    greetings: 'My Terminal\\n'\n});\n```\n\nAnd more advanced example:\n\n```javascript\njQuery(function($, undefined) {\n    $('#term_demo').terminal({\n        add: function(a, b) {\n            this.echo(a + b);\n        },\n        re: function(re, str) {\n           if (re instanceof RegExp \u0026\u0026 re.test(str)) {\n              this.echo(str + ' [[;green;]match]');\n           }\n        },\n        foo: 'foo.php',\n        bar: {\n            sub: function(a, b) {\n                this.echo(a - b);\n            }\n        }\n    }, {\n        height: 200,\n        width: 450,\n        prompt: 'demo\u003e '\n    });\n});\n```\n\ncommand `add 2 2` will display `4` (not `22`).\n\nCommand `foo` will change prompt to `foo\u003e` and each new command will execute\njson-rpc method from foo.php script.\n\ncommand `bar` will change the prompt to `bar\u003e ` and if you type `sub 10 2` it will display 8.\nTo exit from bar nested command you can type `exit` or press CTRL+D.\n\ncommand `re /^foo/ foo-bar` will echo: \"foo-bar match\" where \"match\" will be green.\n\nBy default arguments are required but you can disable the check like this:\n\n```javascript\njQuery(function($, undefined) {\n    $('#term_demo').terminal({\n        add: function(...args) {\n            this.echo(args.reduce((a,b) =\u003e a + b));\n        }\n    }, {\n       checkArity: false\n    });\n});\n```\n\nAnd add command will accept any number of argments and it will sum them up (if they are numbers).\n\nYou can create JSON-RPC interpreter with authentication in just one line:\n\n```javascript\n$('#term_demo').terminal('service.php', {login: true});\n```\n\nThe rest of the code can be on the server, so you can write fully working application,\nwithout any front-end, that can be tested in browser.\n\nFirst argument to terminal can also be array with objects strings and functions, with\none requirement, that only one function can be used as last fallback for commands that was\nnot found in RPC or in objects.\n\n```javascript\njQuery(function($, undefined) {\n    $('#term_demo').terminal([{\n        add: function(...args) {\n            this.echo(args.reduce((a,b) =\u003e a + b));\n        }\n    } 'foo.php', function(command) {\n       this.echo(\"You've typed \" + command, {formatters: false, exec: false});\n    }], {\n       checkArity: false\n    });\n});\n```\n\n\nMore examples [here](http://terminal.jcubic.pl/examples.php). You can also check\n[Full Documentation](http://terminal.jcubic.pl/api_reference.php) or\n[Getting Started Guide on Wiki](https://github.com/jcubic/jquery.terminal/wiki/Getting-Started).\n\n### Quick Start\n\nIf you want to start with jQuery Terminal you can look at those tutorials:\n\n* [How to create interactive terminal like website?](https://itnext.io/how-to-create-interactive-terminal-like-website-888bb0972288) (beginner level)\n* [How to Create an Interactive Terminal-Based Portfolio](https://www.freecodecamp.org/news/how-to-create-interactive-terminal-based-portfolio/) (intermediate level)\n\nThe first tutorial is have all the basics, even if you're new to programming and JavaScript. The\nsecond one explain everything but it assume that you know the basics. If you pick the second and and\nstuck you can reference the first one. It's worth checking the first one anyway.\n\nTL;DR: You can also use this [Terminal Website Template](https://github.com/jcubic/terminal-website-template).\n\n### Security\n\nBecause of security in version 1.20.0 links with protocols different than ftp or http(s) (it was\npossible to enter javascript protocol, that could lead to XSS if author of the app echo user input\nand save it in DB) was turn off by default. To enable it, you need to use `anyLinks: true` option.\n\nIn version 1.21.0 executing terminal methods using extendend commands `[[ terminal::clear() ]]` was\nalso disabled by default because attacker (depending on your application) could execute\n`terminal::echo` with raw option to enter any html and execute any javascript. To enable this\nfeature from this version you need to use `invokeMethods: true` option.\n\nThe features are safe to enable, if you don't save user input in DB and don't echo it back to\ndifferent users (like with chat application). It's also safe if you escape formatting before you\necho stuff.\n\nIf you don't save user input in DB but allow to echo back what user types and have enabled\n`execHash` options, you may have reflected XSS vulnerability if you enable this features. If you\nescape formatting this options are also safe.\n\n**NOTE**: To disable exec if you have `execHash` (or echo stuff from users with `invokeMethods: true`),\nyou can also set option `{exec: false}` to your `echo` call and use it only when you get\nvalues from server (not from DB indireclty from users). If you do this you will be able to echo stuff\nfrom users and execute terminal methods from server (this feature is mostly done just for that).\n\n### Contributors\n\nIf you want to contribute read [CONTRIBUTING.md](CONTRIBUTING.md) first. Here are project contributors:\n\n\u003c!-- CONTRIBUTORS-START --\u003e\n| [\u003cimg src=\"https://avatars.githubusercontent.com/u/280241?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eJakub T. Jankiewicz\u003c/sub\u003e](https://jakub.jankiewicz.org/)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=jcubic) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/49900772?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eRiccardo Mura\u003c/sub\u003e](https://github.com/cowuake)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=cowuake) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/19851053?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eJean-Michel Carrel\u003c/sub\u003e](https://github.com/Neyxo)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=Neyxo) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/1208327?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003ekid1412z\u003c/sub\u003e](https://github.com/kid1412z)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=kid1412z) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/4943440?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eMarcel Link\u003c/sub\u003e](https://github.com/ml1nk)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=ml1nk) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/6674275?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eSébastien Warin\u003c/sub\u003e](http://sebastien.warin.fr)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=sebastienwarin) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/8646106?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eChristopher John Ryan\u003c/sub\u003e](https://github.com/ChrisJohnRyan)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=ChrisJohnRyan) |\n| :---: | :---: | :---: | :---: | :---: | :---: | :---:  |\n| [\u003cimg src=\"https://avatars.githubusercontent.com/u/715580?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eJohan\u003c/sub\u003e](https://github.com/johanjordaan)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=johanjordaan) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/19733683?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eSnyk bot\u003c/sub\u003e](https://snyk.io)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=snyk-bot) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/273194?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eFlorian Schäfer\u003c/sub\u003e](https://github.com/fschaefer)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=fschaefer) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/375027?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eTomasz Ducin\u003c/sub\u003e](ducin.dev)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=ducin) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/26783539?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eQijia Liu\u003c/sub\u003e](https://github.com/eagleoflqj)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=eagleoflqj) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/1751242?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eIshan Ratnapala\u003c/sub\u003e](https://github.com/IshanRatnapala)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=IshanRatnapala) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/4673812?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eDavid Refoua\u003c/sub\u003e](http://www.Refoua.me)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=DRSDavidSoft) |\n| [\u003cimg src=\"https://avatars.githubusercontent.com/u/6078211?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eAntoine\u003c/sub\u003e](https://github.com/antoineol)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=antoineol) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/588573?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eyouurayy\u003c/sub\u003e](https://github.com/youurayy)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=youurayy) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/5696096?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eSteve Kirkegard\u003c/sub\u003e](https://www.linkedin.com/in/steve-kirkegard)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=stevekirks) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/179534?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003estereobooster\u003c/sub\u003e](https://stereobooster.com)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=stereobooster) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/282724?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eDev Kumar Gupta\u003c/sub\u003e](https://github.com/mrkaiser)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=mrkaiser) | [\u003cimg src=\"https://avatars.githubusercontent.com/in/29110?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003edependabot[bot]\u003c/sub\u003e](https://github.com/dependabot[bot])\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=dependabot[bot]) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/1573141?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003ecoderaiser\u003c/sub\u003e](http://coderaiser.github.io)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=coderaiser) |\n| [\u003cimg src=\"https://avatars.githubusercontent.com/u/1833930?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eYutong Luo\u003c/sub\u003e](https://yutongluo.com)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=yutongluo) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/139603?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eSteve Phillips\u003c/sub\u003e](https://tryingtobeawesome.com/)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=elimisteve) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/1263192?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eRobert W\u003c/sub\u003e](https://github.com/rbw)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=rbw) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/7055377?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eexit1\u003c/sub\u003e](https://github.com/exit1)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=exit1) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/27475?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eMateusz Paprocki\u003c/sub\u003e](https://github.com/mattpap)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=mattpap) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/74179?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eMartin v. Löwis\u003c/sub\u003e](https://github.com/loewis)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=loewis) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/28552977?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eKiddoV\u003c/sub\u003e](https://github.com/KiddoV)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=KiddoV) |\n| [\u003cimg src=\"https://avatars.githubusercontent.com/u/3868754?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eJon Steinich\u003c/sub\u003e](https://github.com/jsteinich)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=jsteinich) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/749175?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eJohn Jarvis\u003c/sub\u003e](http://www.jarv.org)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=jarv) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/15666417?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eJarry Shaw\u003c/sub\u003e](https://jarryshaw.me)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=JarryShaw) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/102739519?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003ejpaye\u003c/sub\u003e](https://github.com/jpaye)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=jpaye) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/137852?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eHraban\u003c/sub\u003e](https://br0g.0brg.net)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=hraban) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/9531780?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eHasan\u003c/sub\u003e](juanpota.to)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=JuanPotato) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/336727?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003efinlob\u003c/sub\u003e](https://github.com/finlob)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=finlob) |\n| [\u003cimg src=\"https://avatars.githubusercontent.com/u/79814820?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eEzinne Anne Emilia\u003c/sub\u003e](https://github.com/ezinneanne)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=ezinneanne) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/569896?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eAnton Vasilev\u003c/sub\u003e](https://github.com/avdes)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=avdes) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/406705?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eAbdelrahman Omran\u003c/sub\u003e](https://omranic.com)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=Omranic) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/32747235?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003e7twin\u003c/sub\u003e](https://github.com/7twin)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal/commits?author=7twin) |\n\u003c!-- CONTRIBUTORS-END --\u003e\n\n[jQuery Terminal Website](https://github.com/jcubic/jquery.terminal-www) contributors:\n\n\u003c!-- CONTRIBUTORS-WWW-START --\u003e\n| [\u003cimg src=\"https://avatars.githubusercontent.com/u/280241?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eJakub T. Jankiewicz\u003c/sub\u003e](https://jcu.bi)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal-www/commits?author=jcubic) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/79814820?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eEzinne Anne Emilia\u003c/sub\u003e](https://github.com/ezinneanne)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal-www/commits?author=ezinneanne) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/1004261?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eMarc Laporte\u003c/sub\u003e](https://wikisuite.org)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal-www/commits?author=marclaporte) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/31372?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eRich Morin\u003c/sub\u003e](https://github.com/RichMorin)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal-www/commits?author=RichMorin) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/14358086?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003e4s3ti\u003c/sub\u003e](https://4s3ti.net)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal-www/commits?author=4s3ti) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/26324569?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eDInesh51297\u003c/sub\u003e](https://github.com/DInesh51297)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal-www/commits?author=DInesh51297) | [\u003cimg src=\"https://avatars.githubusercontent.com/u/512317?v=4\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eLogan Rosen\u003c/sub\u003e](https://www.loganrosen.com/)\u003cbr\u003e[commits](https://github.com/jcubic/jquery.terminal-www/commits?author=loganrosen) |\n| :---: | :---: | :---: | :---: | :---: | :---: | :---:  |\n\u003c!-- CONTRIBUTORS-WWW-END --\u003e\n\n### Acknowledge\n\nProjects include with the source code:\n* [Storage plugin](https://sites.google.com/site/daveschindler/jquery-html5-storage-plugin) by Dave Schindler (MIT)\n* [jQuery Timers](http://jquery.offput.ca/every/) (WTFPL)\n* [Cross-Browser Split](http://blog.stevenlevithan.com/archives/cross-browser-split) by [Steven Levithan](http://stevenlevithan.com/) (MIT)\n* [jQuery Caret](https://github.com/accursoft/caret) by Gideon Sireling (3-BSD)\n* [sprintf.js](https://github.com/alexei/sprintf.js) by [Alexandru Mărășteanu](http://alexei.ro/) (3-BSD)\n* [node-ansiparser](https://github.com/netzkolchose/node-ansiparser) by Joerg Breitbart (MIT)\n* [emoji regex](https://github.com/mathiasbynens/emoji-regex) by Mathias Bynens (MIT)\n\nOther code used inside the project or inspired by:\n* [How to detect iPad and iPad OS version in iOS 13 and Up?](https://stackoverflow.com/a/57924983/387194s) (StackOverflow)\n* [How do I scroll to an element within an overflowed Div?](https://stackoverflow.com/a/18927969/387194) (StackOverflow)\n* [isInViewport](https://github.com/zeusdeux/isInViewport) by Mudit Ameta (MIT)\n* [Detecting and generating CSS animations in JavaScript](https://hacks.mozilla.org/2011/09/detecting-and-generating-css-animations-in-javascript/) by Chris Heilmann\n* [polyfill for `KeyboardEvent.prototype.key`](https://github.com/cvan/keyboardevent-key-polyfill/) by Christopher Robert Van Wiemeersch (CC0)\n* [wheel event detection](https://web.archive.org/web/20180523065743/https://developer.mozilla.org/en-US/docs/Web/Events/wheel) by MDN\n* [CodeMirror](https://codemirror.net/) by Marijn Haverbeke, was inspiration for some clipboard handling solutions.\n\nASNSI Art used by this project\n* [Dennis Ritchie by SanderFocus](https://sanderfocus.nl/)\n* [Regina Pacis by burps](https://16colo.rs/pack/fuel27/bs-pacis.ans)\n* [marble by Necrofiliac](https://16colo.rs/pack/fuel27/nf-marble.ans)\n\nPersonal thanks:\n* [T.J. Crowder](https://stackoverflow.com/users/157247/t-j-crowder) for helping with tracking_replace on [StackOveflow](https://stackoverflow.com/a/46756077/387194)\n* [@jerch](https://github.com/jerch) for helping with ANSI Parsing\n* [@cviejo](https://stackoverflow.com/users/1551349/cviejo) for [ASCII table algorithm fix](https://stackoverflow.com/a/35115703/387194)\n\nAlso thanks to:\n\n[![BrowserStack](https://user-images.githubusercontent.com/587740/39730261-9c65c4d8-522e-11e8-9f12-16b349377a35.png)](http://browserstack.com/)\n\nfor cross-device testing opportunity.\n\n### Paid Support\nYou can request paid support, you can find details at [support.jcubic.pl](https://support.jcubic.pl/).\n\n### Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=jcubic/jquery.terminal\u0026type=Date\u0026branch=master)](https://star-history.com/#jcubic/jquery.terminal\u0026Date)\n\n### License\n\nLicensed under [MIT](http://opensource.org/licenses/MIT) license\n\nCopyright (c) 2011-2024 [Jakub T. Jankiewicz](https://jcubic.pl/me)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjcubic%2Fjquery.terminal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjcubic%2Fjquery.terminal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjcubic%2Fjquery.terminal/lists"}