Mitchell Hashimoto 1d5edb25b5 New Screen Storage
This rewrites the "screen" implementation. The immediate user-impacting highlights:

  * `time cat <large file>.txt` is ~25% faster
  * Fully loaded (full scrollback) memory usage is 25% smaller
  * Scrollback is now dynamically allocated. This lowers initial memory usage
  * Resize without reflow (common with full screen apps like vim) is now ~10% faster
  * Resize with text reflow is ~20% faster when the column count doesn't change
  * All resize operations now maintain the cursor position correctly in more cases

Besides those impacts, the goals of this rewrite was to lay the foundation for the screen state to performantly handle text shaping (ligatures) and grapheme clusters (unicode zero-width joiners, combination markers, etc.). This new structure will let us track dirty state on a row-by-row basis for better caching of GPU resources, eventually (not in this PR), which is particularly important for text shaping (ligatures).
2022-09-03 21:50:24 -07:00
2022-06-24 09:31:55 -07:00
dup
2022-07-14 21:31:10 -07:00
2022-08-17 13:57:21 -07:00
2022-04-04 15:24:12 -07:00
2022-09-01 22:05:42 -07:00
2022-09-03 21:40:03 -07:00
2022-08-28 10:09:39 -07:00
2022-04-04 15:53:09 -07:00
2022-08-17 13:57:21 -07:00
2022-08-28 10:09:39 -07:00
2022-08-28 10:09:39 -07:00
2022-08-23 10:23:02 -07:00
2022-07-14 14:24:21 -07:00
2022-03-29 09:06:39 -07:00
2022-08-29 20:26:02 -07:00

Logo
ghostty

GPU-accelerated terminal emulator pushing modern features.

About

ghostty is a cross-platform, GPU-accelerated terminal emulator that aims to push the boundaries of what is possible with a terminal emulator by exposing modern, opt-in features that enable CLI tool developers to build more feature rich, interactive applications.

There are a number of excellent terminal emulator options that exist today. The unique goal of ghostty is to have a platform for experimenting with modern, optional, non-standards-compliant features to enhance the capabilities of CLI applications. We aim to be the best in this category, and competitive in the rest.

While aiming for this ambitious goal, ghostty is a fully standards compliant terminal emulator that aims to remain compatible with all existing shells and software. You can use this as a drop-in replacement for your existing terminal emulator.

Project Status: Pre-Alpha. It now supports enough to be used day to day for my use case, but is still missing a lot of functionality.

Roadmap and Status

The high-level ambitious plan for the project, in order:

# Step Status
1 Standards-compliant terminal emulation ⚠️
2 Competitive rendering performance (not the fastest, but fast enough)
3 Basic customizability -- fonts, bg colors, etc.
4 Richer windowing features -- multi-window, tabbing, panes
5 Optimal rendering performance
N Fancy features (to be expanded upon later)

Standards-Compliant Terminal Emulation

I am able to use this terminal as a daily driver. I think that's good enough for a yellow status. There are a LOT of missing features for full standards compliance but the set that are regularly in use are working pretty well.

Competitive Rendering Performance

I want to automate the testing of this, but for now I've manually verified we can maintain 120fps cat-ing a 6MB file. In terms of raw draw speed, cat-ing a 6MB file is consistently faster on Linux using ghostty than any other terminal emulator currently.

On macOS, cat-ing the large file is acceptable performance but not optimal. I don't know why and need to look into it.

Developing Ghostty

Ghostty is built using both the Zig programming language as well as the Zig build system. At a minimum, Zig must be installed. For Nix users, a shell.nix is available which includes all the necessary dependencies pinned to exact versions.

Note: Zig nightly is required. Ghostty is built against the nightly releases of Zig. The latest released version (0.9.1 at the time of this edit) will NOT work. You can find binary releases of nightly builds on the Zig downloads page.

With Zig installed, a binary can be built using zig build:

$ zig build
...

$ zig-out/bin/ghostty

This will build a binary for the currently running system (if supported). You can cross compile by setting -Dtarget=<target-triple>. For example, zig build -Dtarget=aarch64-macos will build for Apple Silicon macOS. Note that not all targets supported by Zig are supported.

Other useful commands:

  • zig build test for running unit tests.
  • zig build run -Dconformance=<name> run a conformance test case from the conformance directory. The name is the name of the file. This runs in the current running terminal emulator so if you want to check the behavior of this project, you must run this command in ghostty.
Description
👻 Ghostty is a fast, feature-rich, and cross-platform terminal emulator that uses platform-native UI and GPU acceleration.
Readme MIT
Languages
Zig 80.7%
Swift 10.4%
C 6.2%
Shell 0.7%
C++ 0.5%
Other 1.2%