16077 Commits

Author SHA1 Message Date
ghostty-vouch[bot]
e0c71dd41b Update VOUCHED list (#12453)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/11882#discussioncomment-16712859)
from @mitchellh.

Vouch: @mpatankar6

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-25 16:45:08 +00:00
ghostty-vouch[bot]
0e707ba3f6 Update VOUCHED list (#12452)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/11975#discussioncomment-16712831)
from @mitchellh.

Vouch: @rightaditya

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-25 16:43:11 +00:00
ghostty-vouch[bot]
51590ad7f1 Update VOUCHED list (#12451)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/11993#discussioncomment-16712826)
from @mitchellh.

Vouch: @VoidNV

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-25 16:42:24 +00:00
Mitchell Hashimoto
69452b5c6f Sync middle-click paste with copy-on-select (#12443)
Implements the behavior from #9788.

Today, middle-click paste always reads from the selection clipboard (or
the
system clipboard on platforms without a selection clipboard). With this
change
it follows `copy-on-select`:

- `true`: selection clipboard (unchanged)
- `clipboard`: system clipboard
- `false`: selection clipboard (also unchanged, preserves traditional
X11
  middle-click behavior)

The idea is symmetry: if `copy-on-select = clipboard` writes selections
to the
system clipboard, middle-click should come back from there too.

Also updated the config doc comment, which previously claimed
middle-click
"will always use the selection clipboard".

### Testing

`zig build test` passes locally (macOS, Zig 0.15.2).

Built and runtime-tested via the fork's CI:
https://github.com/007hacky007/ghostty/actions/runs/24707475544 - I'm
running the resulting binary daily and the three `copy-on-select` modes
behave as described above.
2026-04-25 09:39:12 -07:00
Mitchell Hashimoto
2dee1f1a3f Update VOUCHED list (#12445)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/12263#discussioncomment-16712767)
from @mitchellh.

Vouch: @thoutbeckers
2026-04-25 09:36:41 -07:00
ghostty-vouch[bot]
ee81a6e1c6 Update VOUCHED list (#12450)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/12108#discussioncomment-16712799)
from @mitchellh.

Vouch: @lebdron

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-25 16:36:12 +00:00
ghostty-vouch[bot]
4c046efbb1 Update VOUCHED list (#12449)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/12141#discussioncomment-16712795)
from @mitchellh.

Vouch: @AkimioJR

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-25 16:35:39 +00:00
ghostty-vouch[bot]
e0d0fbe0ad Update VOUCHED list (#12448)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/12169#discussioncomment-16712790)
from @mitchellh.

Vouch: @knu

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-25 16:34:38 +00:00
ghostty-vouch[bot]
8c3db43c86 Update VOUCHED list (#12446)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/12272#discussioncomment-16712769)
from @mitchellh.

Vouch: @dkinzler

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-25 16:31:04 +00:00
github-actions[bot]
e72774f2ab Update VOUCHED list
https://github.com/ghostty-org/ghostty/discussions/12263#discussioncomment-DC_kwDOHFhdAs4A_wQ_
2026-04-25 16:30:38 +00:00
ghostty-vouch[bot]
fc7a064e80 Update VOUCHED list (#12444)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/12305#discussioncomment-16712760)
from @mitchellh.

Vouch: @aaron-ang

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-25 16:29:37 +00:00
ghostty-vouch[bot]
119f3875d4 Update VOUCHED list (#12442)
Triggered by
[comment](https://github.com/ghostty-org/ghostty/issues/12435#issuecomment-4320055303)
from @mitchellh.

Vouch: @ZuBB

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-25 16:26:24 +00:00
ghostty-vouch[bot]
667d467e24 Update VOUCHED list (#12441)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/11987#discussioncomment-16712733)
from @mitchellh.

Vouch: @nouritsu

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-25 16:25:26 +00:00
ghostty-vouch[bot]
c21ba8d826 Update VOUCHED list (#12440)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/11632#discussioncomment-16712730)
from @mitchellh.

Vouch: @ajiblock

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-25 16:24:52 +00:00
Mitchell Hashimoto
8e2a13cb60 gtk/SurfaceScrolledWindow: wrap root child with another Adw.Bin (#12426)
Due to a known Gtk issue, the scrolled_window at the root of the
template is free-ed twice on dispose. This causes crashes when used with
GNOME 49 platform (Gtk 4.20, libadwaita 1.8.5).

Workaround this issue by wrapping the root child in another Adw.Bin,
similar to widgets like ResizeOverlay.

LLM was used to perform discovery against a manually recorded Valgrind
trace, and helped tracking down known fixes for this problem. The
comment in code was taken from another instance in the repository.

Fixes https://github.com/ghostty-org/ghostty/discussions/12306

Assisted-by: OpenAI GPT-5.4
2026-04-25 09:22:59 -07:00
ghostty-vouch[bot]
b3d4f51ca7 Update VOUCHED list (#12439)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/12347#discussioncomment-16712718)
from @mitchellh.

Vouch: @rjwittams

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-25 16:22:38 +00:00
ghostty-vouch[bot]
74045cc5d8 Update VOUCHED list (#12438)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/12354#discussioncomment-16712711)
from @mitchellh.

Vouch: @007hacky007

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-25 16:21:57 +00:00
ghostty-vouch[bot]
98fb58b326 Update VOUCHED list (#12437)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/12295#discussioncomment-16712704)
from @mitchellh.

Vouch: @dobbylee

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-25 16:20:20 +00:00
Leorize
560b7ba8e8 gtk/SurfaceScrolledWindow: wrap root child with another Adw.Bin
Due to a known Gtk issue, the scrolled_window at the root of the
template is free-ed twice on dispose. This causes crashes when used with
GNOME 49 platform (Gtk 4.20, libadwaita 1.8.5).

Workaround this issue by wrapping the root child in another Adw.Bin,
similar to widgets like ResizeOverlay.

LLM was used to perform discovery against a manually recorded Valgrind
trace, and helped tracking down known fixes for this problem.

Fixes https://github.com/ghostty-org/ghostty/discussions/12306

Assisted-by: OpenAI GPT-5.4
2026-04-25 09:18:21 -07:00
Mitchell Hashimoto
98d14aa66b flatpak: update runtime to GNOME 50 (#12428)
Notable dependency changes:

- GTK: `4.20.4` -> `4.22.2`
- libadwaita: `1.8.5` -> `1.9.0`
2026-04-25 09:15:20 -07:00
dobbylee
fa141a7262 Fix Korean IME committed text handling for arrow keys 2026-04-26 00:59:45 +09:00
ghostty-vouch[bot]
c47a8091f1 Update VOUCHED list (#12436)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/12409#discussioncomment-16712208)
from @00-kat.

Vouch: @jmr

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-25 14:51:36 +00:00
Jesse Rosenstock
28f4676b5d core: Acquire renderer state mutex before calling processLinks
Holding the renderer state mutex is a documented precondition of
`processLinks`, but `mouseButtonCallback` previously called
the function without the mutex.

This creates a race with the I/O thread's `processOutput`, which can
prune scrollback pages while `processLinks` is reading them, resulting
in a use-after-free segfault.  See
https://github.com/ghostty-org/ghostty/discussions/12409 (Linux: crash
while selecting text).

57b5e1e250/src/Surface.zig (L4354-L4355)

57b5e1e250/src/Surface.zig (L3822-L3824)

995e4e375 (os: open) changed the body of `processLinks` to be
non-trivial and documented the precondition, but the lock was not held
at the call site.
2026-04-25 16:36:45 +02:00
Vasyl Zuziak
85dc4b1842 surface: respect semantic prompt boundaries for links
Link detection currently expands the clicked location to a full line
before running the configured regexes. When semantic prompt markers
are present, this can cause prompt text and neighboring content to be
matched together even though they are distinct semantic regions.

Use semantic prompt boundaries when selecting the text to inspect for
link matching. This keeps prompt text separate from the content beside
it and avoids folding prompt text into double-click link/path
selection.

Add a regression test that models a prompt and command on the same
line and verifies the prompt region and input region remain separate.
2026-04-25 15:46:25 +02:00
Leorize
6fb86a819e flatpak: update runtime to GNOME 50 2026-04-25 00:17:39 -07:00
ghostty-vouch[bot]
57b5e1e250 Update VOUCHED list (#12425)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/12308#discussioncomment-16709130)
from @jcollie.

Vouch: @alaviss

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-25 05:45:32 +00:00
Mitchell Hashimoto
4ceeba4851 config: use Config to check key binding instead of App (#12415)
Previously `ghostty_app_key_is_binding` (unlike Surface) is just using
`config.keybind` to check whether a KeyEvent is in the set or not.

After this, I can add unit tests for keybinding more easily with dummy
configs.

I didn't find any usages of this in GTK, so it shouldn't affect
anything. ci will see if this is the case:)
2026-04-24 14:51:22 -07:00
Mitchell Hashimoto
d35f02d83c build: respect config.emit_xcframework for building libghostty-vt.xcframework on Darwin (#12267)
This fixes a hardcoded build issue on macOS where Zig unconditionally
forces xcodebuild -create-xcframework to run during compilation, even
when the caller explicitly specifies that they only want the raw
standard C objects/headers (-Demit-lib-vt).
2026-04-24 13:48:51 -07:00
Mitchell Hashimoto
5f892b691b ci: fix 2026-04-24 13:39:45 -07:00
Mitchell Hashimoto
33fc2aac97 cleanups 2026-04-24 13:22:49 -07:00
0xDVC
44a2d8740a build: gate lib-vt xcframework on emit-xcframework with xcodebuild detection 2026-04-24 13:21:43 -07:00
0xDVC
caad13e232 chore(fmt): zig fmt build.zig to pass test 2026-04-24 13:21:43 -07:00
N E I L O H E N E
4e2e765fd4 Merge branch 'main' into fix/xcframework-macos-dependency 2026-04-24 13:21:43 -07:00
0xDVC
38e8e54f98 build: make libghostty-vt xcframework emission explicit via -Demit-lib-vt-xcframework 2026-04-24 13:21:43 -07:00
0xDVC
4204dec94a build: respect config.emit_xcframework for building libghostty-vt.xcframework on Darwin
This fixes a hardcoded build issue on macOS where Zig unconditionally forces xcodebuild -create-xcframework to run during compilation, even when the caller explicitly specifies that they only want the raw standard C objects/headers (-Demit-lib-vt).

The Bug:
Around line 155 in build.zig, the libghostty-vt xcframework was being packaged unconditionally for Darwin builds. This caused developers (and wrappers like go-libghostty) attempting to natively build the vt library locally using only the minimal macOS Command Line Tools to experience an immediate crash, as xcodebuild -create-xcframework strictly demands a full Xcode application installation.

The Fix:
Guarded the GhosttyLibVt xcframework creation step with config.emit_xcframework. Because src/build/Config.zig intuitively forces emit_xcframework to default to false whenever emit_lib_vt is invoked, this structurally allows lightweight macOS builds to safely skip the xcodebuild invocation while still correctly compiling the standard .a object library files.
2026-04-24 13:21:43 -07:00
Mitchell Hashimoto
2ed382a155 libghostty: enable cross-compiling macOS from Linux/Windows (#12417)
This allows libghostty-vt to be cross-compiled for macOS from non-macOS
platforms. I've updated pkg/apple-sdk to fallback to Zig's embedded
macOS headers if the macOS SDK is not found. Additionally,
CombineArchivesStep has been updated to use Linux tooling on Linux. CI
updated to test this.
2026-04-24 13:19:11 -07:00
Mitchell Hashimoto
6b69ea0517 libghostty: enable cross-compiling macOS from Linux/Windows
This allows libghostty-vt to be cross-compiled for macOS from non-macOS
platforms. I've updated pkg/apple-sdk to fallback to Zig's embedded
macOS headers if the macOS SDK is not found.

Additionally, CombineArchivesStep has been updated to use Linux
tooling on Linux.
2026-04-24 13:04:38 -07:00
ghostty-vouch[bot]
eee1018988 Update VOUCHED list (#12418)
Triggered by
[comment](https://github.com/ghostty-org/ghostty/issues/11461#issuecomment-4315618982)
from @jcollie.

Vouch: @seyoungjeong

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-24 19:05:30 +00:00
Lukas
7c91cef28d config: use Config to check key binding instead of App
Previously `ghostty_app_key_is_binding` (unlike Surface) is just using `config.keybind` to check whether a KeyEvent is in the set or not.

After this, I can add unit tests for keybinding more easily, with dummy configs.
2026-04-24 18:26:56 +02:00
trag1c
48ccec182a ci: fix vouch-check-issue to checkout the template file (#12412) 2026-04-24 14:08:53 +02:00
trag1c
2f067e14f1 ci: fix vouch-check-issue to checkout the template file 2026-04-24 13:48:06 +02:00
Mitchell Hashimoto
b0d359cbbd more zon2nix update for improved 0.16 compatibility (#12405) 2026-04-23 21:50:26 -07:00
Mitchell Hashimoto
5f43437576 pkg/highway: no libc requirement (#12402)
This uses a custom fork Google Highway that removes all libc usage. For
most, it was logging and we can just remove it. For detection, we moved
this to an extern func implemented in Zig built using the Zig standard
library so we can avoid libc.

# Benchmark Results

All benchmarks use 50 MB pre-generated inputs (`ghostty-gen +utf8
--seed=42`)
built and run with `-Doptimize=ReleaseFast` on Apple Silicon
(aarch64-macos).

## Input Descriptions

| Input | Description |
|:------|:------------|
| ascii-only | 1-byte sequences only, printable ASCII |
| 2byte-only | 2-byte sequences only (Latin/Cyrillic/etc.) |
| 3byte-only | 3-byte sequences only (CJK/BMP) |
| 4byte-only | 4-byte sequences only (emoji/supplementary planes) |
| mixed-equal | Equal weight across all 4 lengths |
| mostly-ascii | ~80% ASCII, ~20% multibyte |
| cjk-heavy | ~80% 3-byte, ~20% other |
| 10pct-invalid | Equal-weight mix with 10% malformed sequences |

## Terminal Parser (byte-by-byte DFA, no SIMD)

| Input | Mean [ms] | Min [ms] | Max [ms] | Relative |
|:------|----------:|---------:|---------:|---------:|
| ascii-only | 46.3 ± 0.8 | 45.4 | 48.1 | 1.00 |
| 2byte-only | 59.1 ± 1.2 | 57.8 | 62.7 | 1.28 ± 0.03 |
| 3byte-only | 65.4 ± 2.1 | 64.1 | 78.6 | 1.41 ± 0.05 |
| 4byte-only | 59.3 ± 1.3 | 57.2 | 63.5 | 1.28 ± 0.04 |
| mixed-equal | 180.7 ± 0.7 | 179.5 | 182.3 | 3.90 ± 0.07 |
| mostly-ascii | 59.3 ± 1.0 | 57.3 | 61.1 | 1.28 ± 0.03 |
| cjk-heavy | 142.4 ± 2.0 | 140.4 | 149.9 | 3.08 ± 0.07 |
| 10pct-invalid | 180.2 ± 1.5 | 178.4 | 184.9 | 3.89 ± 0.08 |

## Terminal Stream (SIMD UTF-8 decode + terminal handling)

| Input | Mean [ms] | Min [ms] | Max [ms] | Relative |
|:------|----------:|---------:|---------:|---------:|
| ascii-only | 377.0 ± 8.7 | 357.1 | 386.4 | 2.42 ± 0.08 |
| 2byte-only | 664.5 ± 4.0 | 656.9 | 672.6 | 4.27 ± 0.11 |
| 3byte-only | 233.5 ± 0.9 | 231.1 | 234.8 | 1.50 ± 0.04 |
| 4byte-only | 155.5 ± 4.0 | 149.6 | 161.3 | 1.00 |
| mixed-equal | 467.0 ± 3.4 | 461.8 | 473.9 | 3.00 ± 0.08 |
| mostly-ascii | 470.8 ± 7.2 | 459.6 | 482.8 | 3.03 ± 0.09 |
| cjk-heavy | 338.4 ± 2.4 | 334.3 | 341.7 | 2.18 ± 0.06 |
| 10pct-invalid | 635.1 ± 3.5 | 630.5 | 640.8 | 4.08 ± 0.11 |

## Branch Comparison: `main` vs `fixed`

### Terminal Parser

| Input | main [ms] | fixed [ms] | Δ |
|:------|----------:|-----------:|:--|
| ascii-only | 46.9 ± 0.7 | 47.3 ± 0.9 | ~same |
| 2byte-only | 59.0 ± 0.5 | 59.1 ± 1.2 | ~same |
| 3byte-only | 65.9 ± 2.1 | 65.4 ± 2.1 | ~same |
| 4byte-only | 58.8 ± 0.5 | 59.3 ± 1.3 | ~same |
| mixed-equal | 182.5 ± 0.9 | 180.7 ± 0.7 | fixed 1% faster |
| mostly-ascii | 59.0 ± 0.5 | 59.3 ± 1.0 | ~same |
| cjk-heavy | 144.1 ± 1.7 | 142.4 ± 2.0 | ~same |
| 10pct-invalid | 181.7 ± 1.0 | 180.2 ± 1.5 | ~same |

### Terminal Stream

| Input | main [ms] | fixed [ms] | Δ |
|:------|----------:|-----------:|:--|
| ascii-only | 388.4 ± 8.8 | 383.1 ± 7.6 | ~same |
| 2byte-only | 687.7 ± 4.8 | 672.9 ± 2.6 | fixed 2% faster |
| 3byte-only | 235.5 ± 1.2 | 236.3 ± 2.5 | ~same |
| 4byte-only | 166.2 ± 2.9 | 159.9 ± 3.1 | fixed 4% faster |
| mixed-equal | 481.8 ± 3.3 | 480.7 ± 6.3 | ~same |
| mostly-ascii | 483.8 ± 6.7 | 475.9 ± 4.3 | ~same |
| cjk-heavy | 341.7 ± 3.1 | 341.6 ± 2.0 | ~same |
| 10pct-invalid | 647.6 ± 3.3 | 640.4 ± 3.4 | ~same |

No regressions in either benchmark. Fixed branch is equal or slightly
faster
across all inputs.

## Reproduction

```bash
# Generate inputs (do NOT regenerate when comparing branches)
for profile in \
  "--weight-one=1 --weight-two=0 --weight-three=0 --weight-four=0 --ascii-printable-only=true" \
  "--weight-one=0 --weight-two=1 --weight-three=0 --weight-four=0" \
  "--weight-one=0 --weight-two=0 --weight-three=1 --weight-four=0" \
  "--weight-one=0 --weight-two=0 --weight-three=0 --weight-four=1" \
  "--weight-one=1 --weight-two=1 --weight-three=1 --weight-four=1" \
  "--weight-one=10 --weight-two=1 --weight-three=1 --weight-four=0.5 --ascii-printable-only=true" \
  "--weight-one=1 --weight-two=0.5 --weight-three=10 --weight-four=0.5" \
  "--weight-one=1 --weight-two=1 --weight-three=1 --weight-four=1 --invalid-rate=0.1"; do
  ghostty-gen +utf8 --seed=42 $profile | head -c 50000000 > /tmp/ghostty-bench-data/<name>.dat
done

# Build
zig build -Demit-bench -Doptimize=ReleaseFast -Demit-macos-app=false

# Run
hyperfine --warmup 3 --min-runs 10 \
  './zig-out/bin/ghostty-bench +terminal-stream --data=<path>'
```
2026-04-23 21:50:10 -07:00
Mitchell Hashimoto
bf3047b9b2 benchmark: isolate parser hot loop from code-layout shifts
Extract the tight per-byte parsing loop from TerminalParser.step into
a separate noinline function (parseAll). This eliminates a ~20%
benchmark regression that appeared after the highway vendor changes
despite zero changes to the parser source code.

The root cause: the parser benchmark processes 50 MB of input through
a byte-at-a-time DFA loop that is highly sensitive to instruction
cache-line placement on Apple Silicon. The M-series cores fetch
aligned 16-byte blocks; when the loop head lands near the end of a
64-byte cache line (offset 60), only one instruction fits in the
first fetch versus four when aligned to offset 48. This causes ~29%
more cycles for identical instruction counts.

Previously the loop was inlined into the large step() function, so
any code change anywhere in the binary (like the highway vendor
restructuring) could shift the loop across a cache-line boundary.
By making parseAll noinline, the loop gets its own function placement
that is stable regardless of surrounding code changes.
2026-04-23 21:36:39 -07:00
Mitchell Hashimoto
00dfd67bee pkg/highway: replace resolveTargetQuery with direct CPU detection
The previous runtime_detect.zig called std.zig.system.resolveTargetQuery
which pulled in the entire Zig target/CPU model table infrastructure for
every architecture (~4,000 symbols, ~175 KB of data tables, ~130 KB of
code). This bloated the binary by ~500 KB and shifted code layout enough
to cause a measurable icache/branch-predictor regression in unrelated
hot paths like the terminal parser (~20% more cycles for identical
instruction counts).

Replace with minimal, direct CPU feature detection per architecture:
CPUID + XGETBV inline assembly on x86, sysctlbyname on Darwin AArch64,
and getauxval/prctl via std.os.linux (direct syscalls, no libc) on
Linux for AArch64, PPC, S390x, RISC-V, and LoongArch.

Split into per-architecture files under src/detect/ for
maintainability.
2026-04-23 21:23:12 -07:00
Mitchell Hashimoto
3c0b976d07 pkg/highway: requires libc headers 2026-04-23 20:48:25 -07:00
Jeffrey C. Ollie
055922faaa more zon2nix update for improved 0.16 compatibility 2026-04-23 22:32:53 -05:00
Mitchell Hashimoto
f3f9af6129 pkg/highway: vendor and modify to remain all libc usage 2026-04-23 20:28:43 -07:00
Mitchell Hashimoto
bdb164a6e5 pkg/highway: expand detection to all platforms not just darwin 2026-04-23 15:28:59 -07:00
Mitchell Hashimoto
c642e3104b pkg/highway: Darwin builds don't rely on Apple headers
This uses a custom fork of `hwy/targtes.cpp` that uses an extern
function written in Zig to use Zig's standard CPU detection to avoid
a dependency on Apple SDK headers.

This is on the path to removing Apple SDK requirements to build 
libghostty-vt, but will require a lot more work outside of this. The goal 
is to get this out of our external dependencies first and then we can
work on removing the internal side.
2026-04-23 15:05:38 -07:00