Top Related Projects
A cross-platform, OpenGL terminal emulator.
The new Windows Terminal and the original Windows console host, all in the same place!
If you live in the terminal, kitty is made for you! Cross-platform, fast, feature-rich, GPU based.
A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust
A terminal built on web technologies
tmux source code
Quick Overview
iTerm2 is a powerful and feature-rich terminal emulator for macOS. It provides a wide range of customization options, advanced functionality, and a user-friendly interface to enhance the terminal experience for developers, system administrators, and power users.
Pros
- Extensive Customization: iTerm2 offers a vast array of customization options, allowing users to personalize the terminal's appearance, behavior, and functionality to suit their preferences.
- Advanced Features: The terminal emulator includes features such as split-pane support, hotkey-triggered actions, and advanced search capabilities, improving productivity and workflow.
- Improved Usability: iTerm2 provides a clean and intuitive user interface, making it easier for users to navigate and perform tasks within the terminal.
- Active Development: The project is actively maintained and regularly updated, ensuring compatibility with the latest macOS versions and addressing user feedback and bug reports.
Cons
- macOS-Specific: iTerm2 is designed exclusively for macOS, limiting its availability and usage on other operating systems.
- Learning Curve: The extensive customization options and advanced features of iTerm2 may present a steeper learning curve for some users, especially those new to the terminal environment.
- Resource Consumption: Depending on the user's system configuration and the number of customizations, iTerm2 may consume more system resources compared to the default macOS Terminal application.
- Proprietary License: iTerm2 is released under a proprietary license, which may be a concern for users who prefer open-source software.
Getting Started
To get started with iTerm2, follow these steps:
- Download the latest version of iTerm2 from the official website: https://iterm2.com/downloads.html.
- Install the application by running the downloaded package.
- Launch iTerm2 from the Applications folder or by searching for it in Spotlight.
- Explore the various customization options available in the Preferences menu, such as setting the color scheme, adjusting the font, and configuring keyboard shortcuts.
- Familiarize yourself with the advanced features, such as split-pane support, hotkey-triggered actions, and the search functionality.
- Customize the terminal to your liking and enjoy the enhanced terminal experience.
Competitor Comparisons
A cross-platform, OpenGL terminal emulator.
Pros of Alacritty
- Faster performance due to GPU acceleration
- Cross-platform compatibility (Windows, macOS, Linux)
- Minimal resource usage and lightweight design
Cons of Alacritty
- Fewer built-in features and customization options
- Less user-friendly for beginners
- Limited support for complex terminal operations
Code Comparison
iTerm2 (Objective-C):
- (void)setBackgroundColor:(NSColor *)color {
_backgroundColor = color;
[self setNeedsDisplay:YES];
}
Alacritty (Rust):
pub fn set_background_color(&mut self, color: Rgb) {
self.colors.background = color;
self.dirty = true;
}
Both examples show methods for setting the background color, but iTerm2 uses Objective-C and Cocoa frameworks, while Alacritty employs Rust for better performance and cross-platform compatibility.
iTerm2 offers a more feature-rich experience with extensive customization options, ideal for power users on macOS. Alacritty, on the other hand, prioritizes speed and efficiency across multiple platforms, making it suitable for users who prefer a minimalist, high-performance terminal emulator.
The new Windows Terminal and the original Windows console host, all in the same place!
Pros of Terminal
- Cross-platform support (Windows, macOS, Linux)
- Deeper Windows integration and customization options
- Active development with frequent updates from Microsoft
Cons of Terminal
- Less extensive plugin ecosystem compared to iTerm2
- Fewer advanced features like split panes and search functionality
- Limited theming options compared to iTerm2's robust customization
Code Comparison
iTerm2 (Objective-C):
- (void)setSessionTitle:(NSString *)title
{
[_delegate sessionDidUpdateTitle:self];
[_screen setWindowTitle:title];
}
Terminal (C++):
void TerminalCore::SetWindowTitle(const std::wstring_view newTitle)
{
_title = newTitle;
_pfnTitleChanged(_title);
}
Both projects implement similar functionality for setting window titles, but use different programming languages and slightly different approaches. iTerm2 uses Objective-C and relies on delegate methods, while Terminal uses C++ and employs a callback function.
iTerm2 offers a more mature and feature-rich experience on macOS, with extensive customization options and a large plugin ecosystem. Terminal, on the other hand, provides a solid cross-platform solution with strong Windows integration, making it an excellent choice for users working across different operating systems.
If you live in the terminal, kitty is made for you! Cross-platform, fast, feature-rich, GPU based.
Pros of kitty
- Faster rendering due to GPU acceleration
- More customizable and extensible through configuration files
- Supports ligatures and advanced font features
Cons of kitty
- Steeper learning curve for configuration
- Less intuitive GUI for settings compared to iTerm2
- May have compatibility issues with some terminal applications
Code Comparison
kitty configuration example:
font_family Fira Code
font_size 12.0
cursor_shape beam
background_opacity 0.9
iTerm2 configuration example (via preferences plist):
<key>Normal Font</key>
<string>FiraCode-Regular 12</string>
<key>Cursor Type</key>
<integer>2</integer>
<key>Transparency</key>
<real>0.10000000000000001</real>
Both terminals offer extensive customization options, but kitty's configuration is more human-readable and easier to version control. iTerm2's settings are primarily managed through a GUI, which can be more user-friendly for beginners but less flexible for advanced users.
A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust
Pros of WezTerm
- Cross-platform support (Windows, macOS, Linux)
- Written in Rust, offering better performance and memory safety
- Extensive configuration options through Lua scripting
Cons of WezTerm
- Smaller community and ecosystem compared to iTerm2
- Less mature and potentially less stable than iTerm2
- Steeper learning curve for advanced customization
Code Comparison
iTerm2 (Objective-C):
- (void)setBackgroundColor:(NSColor *)color {
_backgroundColor = color;
[self setNeedsDisplay:YES];
}
WezTerm (Rust):
pub fn set_background_color(&mut self, color: RgbaColor) {
self.background_color = color;
self.needs_redraw = true;
}
Summary
WezTerm is a modern, cross-platform terminal emulator written in Rust, offering excellent performance and extensive customization through Lua scripting. However, it has a smaller community and ecosystem compared to iTerm2, which is more mature and widely used on macOS. iTerm2 benefits from a larger user base and longer development history, but is limited to macOS. The choice between the two depends on the user's specific needs, platform requirements, and preference for customization vs. stability.
A terminal built on web technologies
Pros of Hyper
- Built with web technologies (HTML, CSS, JavaScript), making it highly customizable and extensible
- Cross-platform support (Windows, macOS, Linux) with a consistent experience
- Active community with a large ecosystem of plugins and themes
Cons of Hyper
- Performance can be slower compared to native terminal emulators like iTerm2
- Less mature and may have fewer advanced features out of the box
- Higher resource usage due to Electron framework
Code Comparison
iTerm2 (Objective-C):
- (void)setBackgroundColor:(NSColor *)color {
_backgroundColor = color;
[self setNeedsDisplay:YES];
}
Hyper (JavaScript):
setBackgroundColor(color) {
this.backgroundColor = color;
this.forceUpdate();
}
Both examples show methods for setting the background color, but iTerm2 uses Objective-C while Hyper uses JavaScript, reflecting their different underlying technologies.
tmux source code
Pros of tmux
- Cross-platform compatibility (Linux, macOS, BSD)
- Lightweight and runs in terminal, no GUI overhead
- Persistent sessions survive network disconnects
Cons of tmux
- Steeper learning curve for new users
- Less intuitive mouse support and graphical features
- Limited built-in customization options without plugins
Code Comparison
tmux configuration example:
# ~/.tmux.conf
set -g mouse on
set -g status-bg black
set -g status-fg white
bind-key v split-window -h
bind-key s split-window -v
iTerm2 doesn't have a direct configuration file, but uses a GUI for preferences. However, it supports custom scripts:
# Custom iTerm2 Python script
import iterm2
async def main(connection):
app = await iterm2.async_get_app(connection)
window = app.current_terminal_window
await window.async_create_tab()
iterm2.run_until_complete(main)
Both tmux and iTerm2 offer powerful terminal multiplexing capabilities, but cater to different user preferences. tmux excels in lightweight, cross-platform functionality and session persistence, while iTerm2 provides a more user-friendly GUI experience with extensive customization options for macOS users.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
About
iTerm2 is a powerful terminal emulator for macOS that brings the terminal into the modern age with features you never knew you always wanted.
Key Features
- tmux Integration - Native iTerm2 windows/tabs replace tmux's text-based interface. Run tmux -CC and tmux windows become real macOS windows. Sessions persist through crashes, SSH disconnects, and even app upgrades. Collaborate by having two people attach to the same session.
- Shell Integration - Deep shell awareness that tracks commands, directories, hostnames, and usernames. Enables click-to-download files via SCP, drag-and-drop uploads, command history per host, recent directories by "frecency," and marks at each prompt.
- AI Chat - Built-in LLM chat window that can optionally interact with terminal contents. Link sessions to get context-aware help, run commands on your behalf, or explain output with annotations.
- Inline Images - Display images (including animated GIFs) directly in the terminal. Use imgcat to view photos, charts, or visual output without leaving your workflow.
- Automatic Profile Switching - Terminal appearance changes automatically based on hostname, username, directory, or running command. SSH to production? Background turns red. Different environments get different visual contexts.
- Dedicated Hotkey Windows - System-wide hotkey summons a terminal that slides down from the top of the screen (or any edge), even over fullscreen apps. Pin it or let it auto-hide.
- Session Restoration - Sessions run in long-lived server processes. If iTerm2 crashes or upgrades, your shells keep running. When iTerm2 restarts, it reconnects to your sessions exactly where you left off.
- Built-in Web Browser - Browser profiles integrate web browsing into iTerm2's window/tab/pane hierarchy. Copy mode, triggers, AI chat, and other terminal features work in browser sessions.
- Configurable Status Bar - Per-session status bar showing git branch, CPU/memory graphs, current directory, hostname, custom interpolated strings, or Python API components.
- Triggers - Regex patterns that fire actions when matched: highlight text, run commands, send notifications, open password manager, set marks, or invoke Python scripts.
- Smart Selection - Quad-click selects semantic objects (URLs, file paths, email addresses, quoted strings). Right-click for context actions. Cmd-click to open.
- Copy Mode - Vim-like keyboard selection. Navigate and select text without touching the mouse. Works with marks to jump between command prompts.
- Instant Replay - Scrub backward through terminal history to see exactly what was on screen at any moment, with timestamps. Perfect for catching fleeting errors.
- Python Scripting API - Full automation and customization via Python. Create custom status bar components, triggers, menu items, or entirely new features.
- Open Quickly - Cmd-Shift-O opens a search across all sessions by tab title, command, hostname, directory, or badge. Navigate large session collections instantly.
Installation
Download
Get the latest version from iterm2.com/downloads
For the bleeding edge without building, try the nightly build.
Build from Source
Note: Development builds may be less stable than official releases.
Prerequisites
- The most recent version of Xcode (with Command Line Tools). You can minimize suffering by using the same Xcode that is in the file
last-xcode-version. - Homebrew
- Rustup
Clone
git clone https://github.com/gnachman/iTerm2.git
Setup (first time)
make setup
This installs Homebrew dependencies (cmake, pkg-config, python3, etc.), SF Symbols, Rust cross-compilation support, downloads the Metal Toolchain, initializes submodules, and compiles third-party libraries (OpenSSL, libsixel, libgit2, Sparkle, etc.) inside a sandbox.
Re-run make paranoid-deps whenever your active Xcode version changes â the file last-xcode-version tracks which version was last used.
Build
make Development
Run
make run
Architecture
Builds target your native architecture by default. To produce a universal (arm64 + x86_64) binary:
UNIVERSAL=1 make Development
Code signing
Code signing is disabled by default to keep contributor builds simple. To enable it with the project's signing identity:
SIGNED=1 make Development
Building in Xcode
If you prefer building from Xcode instead of the command line:
-
Complete the Clone and Setup steps above.
-
Configure code signing with your team ID:
tools/set_team_id.sh YOUR_TEAM_IDThis script updates
DEVELOPMENT_TEAMin all Xcode project files (iTerm2 and its dependencies like Sparkle, SwiftyMarkdown, etc.) so code signing works with your identity.To find your team ID: Open Keychain Access, find your "Apple Development" or "Developer ID" certificate, and look for the 10-character string in parentheses (e.g., "H7V7XYVQ7D").
No Developer account? Skip this step and select "Sign to Run Locally" in Xcode's Signing & Capabilities tab.
-
Open
iTerm2.xcodeprojin Xcode. -
Edit Scheme (Cmd-<) and set Build Configuration to Development.
-
Press Cmd-R to build and run.
Development
Contributing
We welcome contributions! Please read our contribution guide before submitting pull requests.
Bug Reports & Issues
- File bugs: iterm2.com/bugs
- Issue tracker: GitLab Issues
Note: We use GitLab for issues because it provides better support for attachments.
Resources
| Resource | Link |
|---|---|
| Official Website | iterm2.com |
| Documentation | iterm2.com/documentation |
| Community | iTerm2 Discussions |
| Downloads | iterm2.com/downloads |
License
iTerm2 is distributed under the GPLv3 license.
Support
If you love iTerm2, consider:
- Starring this repository
- Spreading the word
- Sponsoring development
Made by George Nachman and contributors
Top Related Projects
A cross-platform, OpenGL terminal emulator.
The new Windows Terminal and the original Windows console host, all in the same place!
If you live in the terminal, kitty is made for you! Cross-platform, fast, feature-rich, GPU based.
A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust
A terminal built on web technologies
tmux source code
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot