Back to Blog

A Look Inside Windows Terminal

Donnie Hale | February 22nd, 2021

A software developer’s preferred terminal in which to run command-line commands and scripts is a matter of personal preference. Longtime users of MS-DOS will remember (maybe not fondly) the “command.com” command shell. Due to its limitations, alternatives like 4DOS were developed. Unix/Linux users are used to the power and composability of shells such as kshbash, or zsh. In the course of a typical week, a software developer working in Windows 10 may find herself/himself running commands in cmd.exe, Windows PowerShell, git bash, the Azure Cloud shell, or a Windows Subsystem for Linux (WSL) shell.

To provide a more modern experience in these various tools and to introduce some uniformity in the user experience across shells, Microsoft has released a Microsoft Store app called Windows Terminal. The word “terminal” in the app’s name is significant in that it recognizes the distinction between a console, a shell, and a terminal. Windows Terminal is a user interface – the input and the display – that can be used for interacting with a wide variety of shells, such as those listed above.

Here are screenshots of different shells, each a tab within a single Windows Terminal window:

cmd.exe

Git Bash

Windows PowerShell

Ubuntu 20.04 in Windows Subsystem for Linux

Microsoft has extensive documentation for Windows Terminal. There are numerous features of Windows Terminal not detailed here, including screen-splitting; background images; custom actions; and more. Refer to the documentation.

To install Windows Terminal, go to the Microsoft Store, search for “Terminal”, and select “Install.”

An advantage of Windows Terminal being a Microsoft Store app is that it is updated separately from Windows updates. I originally installed version 1.0 but am now on version 1.5, without having to do explicit updates. You’ll also find that Windows Terminal is pretty good at recognizing certain shells, including PowerShell and WSL shells, automatically adding them to its list of available shells which you can launch.

Some other considerations in using Windows Terminal… First, while the preview version of Windows Terminal at the time of this article includes a configuration UI, the current production version requires editing a json file. This is not a large obstacle, as there are examples in the settings file that comes with Windows Terminal.  You can also find numerous additional examples online. Here is the section of json for the Git Bash shell from the screenshot above:

      {
        "guid": "{00000000-0000-0000-ba54-000000000002}",
        "acrylicOpacity": 0.9,
        "closeOnExit": true,
        "colorScheme": "One Half Dark",
        "commandline": "\"%PROGRAMFILES%\\Git\\usr\\bin\\bash.exe\" -i -l",
        "startingDirectory": "D:\\Src",
        "cursorColor": "#FFFFFF",
        "cursorShape": "bar",
        "background": "#440033",
        "fontFace": "Cascadia Mono",
        "fontSize": 11,
        "historySize": 9001,
        "icon": "%PROGRAMFILES%\\Git\\mingw64\\share\\git\\git-for-windows.ico",
        "name": "Git Bash",
        "padding": "0, 0, 0, 0",
        "snapOnInput": true,
        "startingDirectory": "%USERPROFILE%",
        "useAcrylic": false
      },

Second, in addition to Windows Terminal, the Microsoft team released a new font that Windows Terminal uses, Cascadia. Cascadia is a standard, monospaced Windows font which can be downloaded and used as the font in your favorite editors and IDEs.

Finally, there are times when we need to run commands with elevated privileges (i.e. as an administrator). The easiest way to do this with Windows Terminal is to pin Windows Terminal to your task bar. Right-click on the Windows Terminal taskbar icon and select “Run as administrator.” You will be presented with the usual confirmation to allow privilege elevation.

I encourage you to install Windows Terminal, configure it to your preferences, and evaluate whether it improves your productivity with fewer windows and more consistency across shells.