As someone who uses iTerm2 daily to manage VPS servers and run local CLI tools, I thought I understood it well. But when a designer friend asked me what iTerm2 actually is, I found myself stumbling. The iTerm2 homepage calls it a “terminal emulator for macOS.” This sent me down a rabbit hole to clarify these foundational concepts.
Here is the breakdown of the relationship between Terminals, Shells, and Emulators:
1. The Terminal
Historically, a Terminal was a physical piece of hardware—a monitor and a keyboard—used to interact with a massive mainframe computer. Today, we use software to recreate that experience. A Virtual Terminal is an application that allows one machine to access another. iTerm2 is precisely this: a virtual terminal, or more accurately, a Terminal Emulator.
2. The Shell
The Shell is the actual program that provides the command-line interface. It acts as an interpreter, taking your typed commands and passing them to the operating system’s kernel. Common shells include bash, zsh, and fish. Each has its own features, syntax, and scripting language.
3. The Terminal Emulator
The Terminal Emulator is the wrapper. It is the software (like iTerm2, Alacritty, or the default Windows Terminal) that handles the graphical rendering, text selection, and window management. It hosts the shell and acts as the bridge for your input and output.
Modern Context: The “Web Shell”
Lately, I’ve been working on a project to access servers directly through a web browser. While we often colloquially call these “Web Shells,” they are technically Web Terminals. They provide a terminal-like UI in the browser which then connects to a real shell running on a remote server.
Understanding these distinctions helps us better appreciate the tools we use every day and communicate more clearly with our fellow developers and designers.

