A terminal for a more modern age

Overview

GitHub All Releases     Matrix   Translate   Twitter


Downloads:


This README is also available in: Korean 简体中文


Tabby (formerly Terminus) is a highly configurable terminal emulator, SSH and serial client for Windows, macOS and Linux

  • Integrated SSH and Telnet client and connection manager
  • Integrated serial terminal
  • Theming and color schemes
  • Fully configurable shortcuts and multi-chord shortcuts
  • Split panes
  • Remembers your tabs
  • PowerShell (and PS Core), WSL, Git-Bash, Cygwin, MSYS2, Cmder and CMD support
  • Direct file transfer from/to SSH sessions via Zmodem
  • Full Unicode support including double-width characters
  • Doesn't choke on fast-flowing outputs
  • Proper shell experience on Windows including tab completion (via Clink)
  • Integrated encrypted container for SSH secrets and configuration
  • SSH, SFTP and Telnet client available as a web app (also self-hosted).

Contents

What Tabby is and isn't

  • Tabby is an alternative to Windows' standard terminal (conhost), PowerShell ISE, PuTTY, macOS Terminal.app and iTerm

  • Tabby is not a new shell or a MinGW or Cygwin replacement. Neither is it lightweight - if RAM usage is of importance, consider Conemu or Alacritty

Terminal features

  • A V220 terminal + various extensions
  • Multiple nested split panes
  • Tabs on any side of the window
  • Optional dockable window with a global spawn hotkey ("Quake console")
  • Progress detection
  • Notification on process completion
  • Bracketed paste, multiline paste warnings
  • Font ligatures
  • Custom shell profiles
  • Optional RMB paste and copy-on select (PuTTY style)

SSH Client

  • SSH2 client with a connection manager
  • X11 and port forwarding
  • Automatic jump host management
  • Agent forwarding (incl. Pageant and Windows native OpenSSH Agent)
  • Login scripts

Serial Terminal

  • Saved connections
  • Readline input support
  • Optional hex byte-by-byte input and hexdump output
  • Newline conversion
  • Automatic reconnection

Portable

Tabby will run as a portable app on Windows, if you create a data folder in the same location where Tabby.exe lives.

Plugins

Plugins and themes can be installed directly from the Settings view inside Tabby.

  • clickable-links - makes paths and URLs in the terminal clickable
  • docker - connect to Docker containers
  • title-control - allows modifying the title of the terminal tabs by providing a prefix, suffix, and/or strings to be removed
  • quick-cmds - quickly send commands to one or all terminal tabs
  • save-output - record terminal output into a file
  • sync-config - sync the config to Gist or Gitee
  • clippy - an example plugin which annoys you all the time
  • workspace-manager - allows creating custom workspace profiles based on the given config
  • search-in-browser - opens default system browser with a text selected from the Tabby's tab

Themes

Sponsors

packagecloud has provided free Debian/RPM repository hosting

Contributing

Pull requests and plugins are welcome!

See HACKING.md and API docs for information of how the project is laid out, and a very brief plugin development tutorial.


Thanks goes to these wonderful people (emoji key):


Russell Myers

💻

Austin Warren

💻

Felicia Hummel

💻

Mike MacCana

⚠️ 🎨

Yacine Kanzari

💻

BBJip

💻

Futagirl

🎨

Levin Rickert

💻

OJ Kwon

💻

domain

🔌 💻

James Brumond

🔌

Daniel Imms

💻 🔌 ⚠️

Florian Bachmann

💻

Michael Kühnel

💻 🎨

Tilmann Meyer

💻

PM Extra

🐛

Jonathan

💻

Hans Koch

💻

Dak Smyth

💻

Wang Zhi

💻

jack1142

💻

Howie Douglas

💻

Chris Kaczor

💻

Johannes Kadak

💻

LeSeulArtichaut

💻

Cyril Taylor

💻

nstefanou

💻 🔌

orin220444

💻

Gobius Dolhain

💻

Gwilherm Folliot

💻

Dmitry Pronin

💻

Jonathan Beverley

💻

Zenghai Liang

💻

Mateusz Tracz

💻

pinpin

💻

Takuro Onoda

💻

frauhottelmann

💻

Piotr Patalong

🎨

Clark Wang

💻

iamchating

💻

starxg

🔌

Alisue

🎨

Dominic Yin

💻

Brandon Rothweiler

🎨

Logic Machine

📖

cypherbits

📖

Matthew Davidson

💻

Alexander Wiedemann

💻

장보연

📖

zZ

💻

Aaron Davison

💻

Przemyslaw Kozik

🎨

Alfredo Arellano de la Fuente

💻

MH Kim

💻

Marmota

🎨

Ares Andrew

📖

George Korsnick

💵

Artem Smirnov

💵

Tim Kopplow

💵

mrthock

💵

Lukas Rottach

💵

This project follows the all-contributors specification. Contributions of any kind welcome!

Comments
  • Bump core-js from 3.21.1 to 3.27.1

    Bump core-js from 3.21.1 to 3.27.1

    Bumps core-js from 3.21.1 to 3.27.1.

    Changelog

    Sourced from core-js's changelog.

    3.27.1 - 2022.12.30
    • Fixed a Chakra-based MS Edge (18-) bug that unfreeze (O_o) frozen arrays used as WeakMap keys
    • Fixing of the previous bug also fixes some cases of String.dedent in MS Edge
    • Fixed dependencies of some entries
    3.27.0 - 2022.12.26
    • Iterator Helpers proposal:
      • Built-ins:
        • Iterator
          • Iterator.from
          • Iterator.prototype.drop
          • Iterator.prototype.every
          • Iterator.prototype.filter
          • Iterator.prototype.find
          • Iterator.prototype.flatMap
          • Iterator.prototype.forEach
          • Iterator.prototype.map
          • Iterator.prototype.reduce
          • Iterator.prototype.some
          • Iterator.prototype.take
          • Iterator.prototype.toArray
          • Iterator.prototype.toAsync
          • Iterator.prototype[@@toStringTag]
        • AsyncIterator
          • AsyncIterator.from
          • AsyncIterator.prototype.drop
          • AsyncIterator.prototype.every
          • AsyncIterator.prototype.filter
          • AsyncIterator.prototype.find
          • AsyncIterator.prototype.flatMap
          • AsyncIterator.prototype.forEach
          • AsyncIterator.prototype.map
          • AsyncIterator.prototype.reduce
          • AsyncIterator.prototype.some
          • AsyncIterator.prototype.take
          • AsyncIterator.prototype.toArray
          • AsyncIterator.prototype[@@toStringTag]
      • Moved to Stage 3, November 2022 TC39 meeting
      • Added /actual/ entries, unconditional forced replacement disabled for features that survived to Stage 3
      • .from accept strings, .flatMap throws on strings returned from the callback, proposal-iterator-helpers/244, proposal-iterator-helpers/250
      • .from and .flatMap throws on non-object iterators, proposal-iterator-helpers/253
    • Set methods proposal:
      • Built-ins:
        • Set.prototype.intersection
        • Set.prototype.union
        • Set.prototype.difference
        • Set.prototype.symmetricDifference
        • Set.prototype.isSubsetOf
        • Set.prototype.isSupersetOf
        • Set.prototype.isDisjointFrom

    ... (truncated)

    Commits
    • f44604e 3.27.1
    • 98995dc add some missed dependencies to entries
    • 10517de add all iterator helpers to (Async)Iterator.from entries for runtime
    • 0f4a279 some stylistic changes
    • da2e4f8 fix a Chakra-based MS Edge (18-) bug that unfreeze (O_o) frozen arrays used a...
    • 66c427f 3.27.0
    • c8322b0 allow gc disposed resources before disposing all resources of stack
    • 0d9478e add some comments
    • 68c9bf6 smoothed behavior of some conflicting proposals
    • 4cc298a fix a couple of tests
    • Additional commits viewable in compare view
    Maintainer changes

    This version was pushed to npm by zloirock, a new releaser for core-js since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 0
  • Bump core-js-pure from 3.21.1 to 3.27.1

    Bump core-js-pure from 3.21.1 to 3.27.1

    Bumps core-js-pure from 3.21.1 to 3.27.1.

    Changelog

    Sourced from core-js-pure's changelog.

    3.27.1 - 2022.12.30
    • Fixed a Chakra-based MS Edge (18-) bug that unfreeze (O_o) frozen arrays used as WeakMap keys
    • Fixing of the previous bug also fixes some cases of String.dedent in MS Edge
    • Fixed dependencies of some entries
    3.27.0 - 2022.12.26
    • Iterator Helpers proposal:
      • Built-ins:
        • Iterator
          • Iterator.from
          • Iterator.prototype.drop
          • Iterator.prototype.every
          • Iterator.prototype.filter
          • Iterator.prototype.find
          • Iterator.prototype.flatMap
          • Iterator.prototype.forEach
          • Iterator.prototype.map
          • Iterator.prototype.reduce
          • Iterator.prototype.some
          • Iterator.prototype.take
          • Iterator.prototype.toArray
          • Iterator.prototype.toAsync
          • Iterator.prototype[@@toStringTag]
        • AsyncIterator
          • AsyncIterator.from
          • AsyncIterator.prototype.drop
          • AsyncIterator.prototype.every
          • AsyncIterator.prototype.filter
          • AsyncIterator.prototype.find
          • AsyncIterator.prototype.flatMap
          • AsyncIterator.prototype.forEach
          • AsyncIterator.prototype.map
          • AsyncIterator.prototype.reduce
          • AsyncIterator.prototype.some
          • AsyncIterator.prototype.take
          • AsyncIterator.prototype.toArray
          • AsyncIterator.prototype[@@toStringTag]
      • Moved to Stage 3, November 2022 TC39 meeting
      • Added /actual/ entries, unconditional forced replacement disabled for features that survived to Stage 3
      • .from accept strings, .flatMap throws on strings returned from the callback, proposal-iterator-helpers/244, proposal-iterator-helpers/250
      • .from and .flatMap throws on non-object iterators, proposal-iterator-helpers/253
    • Set methods proposal:
      • Built-ins:
        • Set.prototype.intersection
        • Set.prototype.union
        • Set.prototype.difference
        • Set.prototype.symmetricDifference
        • Set.prototype.isSubsetOf
        • Set.prototype.isSupersetOf
        • Set.prototype.isDisjointFrom

    ... (truncated)

    Commits
    • f44604e 3.27.1
    • 66c427f 3.27.0
    • 0d9478e add some comments
    • 7f14d8b simplify some helpers
    • c28add7 extract aMap from Map helpers for better tree shaking
    • 8c85784 extract aSet from Set helpers for better tree shaking
    • f66a90c extract aWeakSet from WeakSet helpers for better tree shaking
    • 0af668f simplify helpers
    • 4c054a3 extract aWeakMap from WeakMap helpers for better tree shaking
    • aaf0be5 extract iterate from Map helpers for better tree shaking
    • Additional commits viewable in compare view
    Maintainer changes

    This version was pushed to npm by zloirock, a new releaser for core-js-pure since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 0
  • Bump axios from 0.27.2 to 1.2.2

    Bump axios from 0.27.2 to 1.2.2

    Bumps axios from 0.27.2 to 1.2.2.

    Release notes

    Sourced from axios's releases.

    1.2.2

    [1.2.2] - 2022-12-29

    Fixed

    • fix(ci): fix release script inputs #5392
    • fix(ci): prerelease scipts #5377
    • fix(ci): release scripts #5376
    • fix(ci): typescript tests #5375
    • fix: Brotli decompression #5353
    • fix: add missing HttpStatusCode #5345

    Chores

    • chore(ci): set conventional-changelog header config #5406
    • chore(ci): fix automatic contributors resolving #5403
    • chore(ci): improved logging for the contributors list generator #5398
    • chore(ci): fix release action #5397
    • chore(ci): fix version bump script by adding bump argument for target version #5393
    • chore(deps): bump decode-uri-component from 0.2.0 to 0.2.2 #5342
    • chore(ci): GitHub Actions Release script #5384
    • chore(ci): release scripts #5364

    Contributors to this release

    v1.2.1

    [1.2.1] - 2022-12-05

    Changed

    • feat(exports): export mergeConfig #5151

    Fixed

    • fix(CancelledError): include config #4922
    • fix(general): removing multiple/trailing/leading whitespace #5022
    • fix(headers): decompression for responses without Content-Length header #5306
    • fix(webWorker): exception to sending form data in web worker #5139

    Refactors

    • refactor(types): AxiosProgressEvent.event type to any #5308
    • refactor(types): add missing types for static AxiosError.from method #4956

    Chores

    • chore(docs): remove README link to non-existent upgrade guide #5307
    • chore(docs): typo in issue template name #5159

    Contributors to this release

    ... (truncated)

    Changelog

    Sourced from axios's changelog.

    [1.2.2] - 2022-12-29

    Fixed

    • fix(ci): fix release script inputs #5392
    • fix(ci): prerelease scipts #5377
    • fix(ci): release scripts #5376
    • fix(ci): typescript tests #5375
    • fix: Brotli decompression #5353
    • fix: add missing HttpStatusCode #5345

    Chores

    • chore(ci): set conventional-changelog header config #5406
    • chore(ci): fix automatic contributors resolving #5403
    • chore(ci): improved logging for the contributors list generator #5398
    • chore(ci): fix release action #5397
    • chore(ci): fix version bump script by adding bump argument for target version #5393
    • chore(deps): bump decode-uri-component from 0.2.0 to 0.2.2 #5342
    • chore(ci): GitHub Actions Release script #5384
    • chore(ci): release scripts #5364

    Contributors to this release

    [1.2.1] - 2022-12-05

    Changed

    • feat(exports): export mergeConfig #5151

    Fixed

    • fix(CancelledError): include config #4922
    • fix(general): removing multiple/trailing/leading whitespace #5022
    • fix(headers): decompression for responses without Content-Length header #5306
    • fix(webWorker): exception to sending form data in web worker #5139

    Refactors

    • refactor(types): AxiosProgressEvent.event type to any #5308
    • refactor(types): add missing types for static AxiosError.from method #4956

    Chores

    • chore(docs): remove README link to non-existent upgrade guide #5307
    • chore(docs): typo in issue template name #5159

    Contributors to this release

    ... (truncated)

    Commits
    • 8ea4324 chore(docs): added latest release notes
    • 45c4948 chore: build new version
    • 6f74cb1 chore(ci): set conventional-changelog header config; (#5406)
    • 8de391f chore(ci): fix automatic contributors resolving; (#5403)
    • 341f735 chore(ci): improved logging for the contributors list generator;
    • 46085e6 chore(ci): fix release action;
    • f12d01e chore(ci): fix version bump script by adding bump argument for target version;
    • 75217e6 fix(ci): fix release script inputs;
    • c1fc33c chore(deps): bump decode-uri-component from 0.2.0 to 0.2.2
    • 45b29db GitHub Actions Release script; (#5384)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 0
  • Scrolling up not possible

    Scrolling up not possible

    Version: 1.0.187 Platform: Windows x64 10.0.19042 Plugins: none Frontend: xterm

    Hi,

    I have problems with scrolling up in the window to see the STDOUT. There is no way to scroll, not with the mouse wheel nor with the scrollbar.

    Regards, Wolfgang

    opened by wkonz 0
  • broken tmux layout

    broken tmux layout

    Describe the problem: Special characters on tmux make my layout broken. I can't replicate this problem on putty or 'Termius', also in 'Konsole' and 'gnome-terminal' probelem not appears. Same problem on different versions of tmux and Debian.

    Tmux versions with problems:

    • tmux 2.8 ( Debian 10.4 )
    • tmux 2.3 ( Debian 8.11 )

    Screenshot ( with censored tmux content )

    To Reproduce: I using tabby instead of putty on my windows corporate laptop for connect to linux host from home.

    1. opening new terminal window with ssh connection to my workstation
    2. then attaching to existing tmux session 'tmux a -t my_session'
    3. special characters sometimes apeears and make my layout broken.
    4. detaching from tmux session and re-attaching don't solve problem
    5. then i close tabby tab and open same session again
    6. 'tmux a -t my_session' - problem disappears
    T: Bug 
    opened by krgrwrg 2
Releases(v1.0.187)
Terminal ui for discord with interactive terminal

dickord why No fucking clue i was bored or something. why does it look dogshit Try and find a node module that supports terminal functions like trauma

Hima 3 Nov 7, 2022
Sublime-like terminal-based text editor

slap ?? slap is a Sublime-like terminal-based text editor that strives to make editing from the terminal easier. It has: first-class mouse support (ev

slap 6.1k Jan 1, 2023
A terminal-to-gif recorder minus the headaches.

ttystudio A terminal-to-gif recorder minus the headaches. Record your terminal and compile it to a GIF or APNG without any external dependencies, bash

Christopher Jeffrey (JJ) 3.2k Dec 23, 2022
rtail(1) - Terminal output to the browser in seconds, using UNIX pipes.

rtail(1) Terminal output to the browser in seconds, using UNIX pipes. rtail is a command line utility that grabs every line in stdin and broadcasts it

Kilian Ciuffolo 1.6k Jan 6, 2023
Pipeable javascript. Quickly filter, map, and reduce from the terminal

Pipeable JavaScript - another utility like sed/awk/wc... but with JS! Quickly filter, map and reduce from the command line. Features a streaming API.

Daniel St. Jules 410 Dec 10, 2022
Translations with speech synthesis in your terminal as a node package

Normit Normit is an easy way to translate stuff in your terminal. You can check out its Ruby gem version termit. Installation npm install normit -g Us

Paweł Urbanek 234 Jan 1, 2023
Terminal recorder: Record your termial session into HTML

terminal-recorder Terminal recorder allows you to record your bash session, and export it to html so then you can share it with your friends. GitHub P

Cristian Cortez 104 Mar 3, 2022
Terminal task list

listr Terminal task list Install $ npm install --save listr Usage const execa = require('execa'); const Listr = require('listr'); const tasks = new

Sam Verschueren 3.1k Jan 3, 2023
📜 Create mutable log lines into the terminal, and give life to your logs!

Because Logging can be pretty and fun Installation $ npm install draftlog What it does It allows you to re-write a line of your log after being writt

Ivan Seidel 1.2k Dec 31, 2022
Display images in the terminal

terminal-image Display images in the terminal Works in any terminal that supports colors. In iTerm, the image will be displayed in full resolution, si

Sindre Sorhus 905 Dec 25, 2022
:rainbow: Beautiful color gradients in terminal output

gradient-string Beautiful color gradients in terminal output Install $ npm i gradient-string Usage const gradient = require('gradient-string'); cons

Boris K 864 Jan 3, 2023
Create clickable links in the terminal

terminal-link Create clickable links in the terminal Install $ npm install terminal-link Usage import terminalLink from 'terminal-link'; const link

Sindre Sorhus 539 Dec 31, 2022
Reliably get the terminal window size

term-size Reliably get the terminal window size Because process.stdout.columns doesn't exist when run non-interactively, for example, in a child proce

Sindre Sorhus 132 Oct 11, 2022
Truncate a string to a specific width in the terminal

cli-truncate Truncate a string to a specific width in the terminal Gracefully handles ANSI escapes. Like a string styled with chalk. It also supports

Sindre Sorhus 78 Oct 10, 2022
Execute shell commands in terminal

Execute shell commands in terminal

skanehira 9 Dec 11, 2021
Add a hungry turtle to your terminal and feed it every time you mistype 'npm' as 'nom'

Nom Does this ever happen to you? You happily code away on a project, navigating the command line like a pro, testing, error logging, installing packa

Meike Hankewicz 5 Apr 26, 2022
Just a minimal library to do some terminal stuff.

Termctl A simple library to do some basic terminal stuff. Usage const termctl = require("termctl"); Note: We have tested this on Linux Mint and Window

Biraj 4 Sep 28, 2021
DataENV is a cli tool that allows you to save data temporarily using your terminal.

DataEnv CLI Instllation npm install -g dataenv Usage Table of Contents LocalStorage npx dataenv save Parameters npx dataenv show Parameters npx dataen

PGamerX 2 Feb 5, 2022