Commit Graph

17194 Commits

Author SHA1 Message Date
Mitchell Hashimoto
0e0893adff libghostty: attacking wasm binary size (#13830)
This should release our ReleaseFast bundle from 1.1MB to ~800KB. 

The major win is disabling logging in ReleaseFast wasm builds (~200KB).

The next is removing aggressive inlining in paths that don't make sense
for performance. Verified with benchmarks on native to not affect
anything really.

The third was really dumb: `var buf: [4096]u32 = @splat(c)` in LLVM
releasefast for wasm was lowering to 4096 separate `i32.store`...
like... 30KB of code. Replacing this with a for loop reduced by 30KB and
made REP (a rare sequence) 11x faster lol.
2026-08-14 21:02:41 -07:00
ghostty-vouch[bot]
e84dd30155 Update VOUCHED list (#13829)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/13828#discussioncomment-18024891)
from @jcollie.

Vouch: @diego-moment

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-15 03:47:57 +00:00
Mitchell Hashimoto
51a4311ef1 terminal: clean up overzealous inlining 2026-08-14 20:44:25 -07:00
Mitchell Hashimoto
d61920d80e lib-vt: disable logging in wasm release builds 2026-08-14 20:26:06 -07:00
Mitchell Hashimoto
d760ee96e5 terminal: much faster wide-character reflow on resize (#13827)
Resizing a terminal whose buffer is heavy with wide characters (CJK,
emoji) is now 3-5x faster on the reflow path.

This was relatively simple work. We already have a bulk fast path for
same-style cells. We previously omitted ANY wide characters from this.
We relaxed this by making it work with complete wide pairs (wide
followed by spacer tail).

### Benchmarks

Resize dance (13 column resizes, 80 -> 40 -> 132 and back and forth
again) over a ~2,000-row scrollback buffer.

| Workload | Before | After | Speedup | 
|---|---|---|---|
| cjk | 0.938 | 0.296 | 3.2x | 
| emoji | 0.875 | 0.191 | 4.6x |
| mixed build-log | 0.306 | 0.155 | 2.0x |
| grapheme | 2.449 | 1.831 | 1.3x | 
| ascii-short | 0.115 | 0.117 | 1.0x |
| ascii-long | 0.109 | 0.112 | 1.0x |
| latin | 0.093 | 0.095 | 1.0x | 
| sgr-truecolor | 0.939 | 0.965 | 1.0x |

**AI usage:** Profiled, implemented, benchmarked, and written by Fable.
Plan validated by me before doing it, I wrote all the
comments/commits/blah.
2026-08-14 14:22:05 -07:00
Mitchell Hashimoto
88ed6bebf4 libghostty: much faster wide-character reflow on resize
Resizing a terminal whose buffer is heavy with wide characters (CJK,
emoji) is now 3-5x faster on the reflow path. 

This was relatively simple work. We already have a bulk fast path for
same-style cells. We previously omitted ANY wide characters from this.
We relaxed this by making it work with complete wide pairs (wide followed
by spacer tail).

### Benchmarks

Resize dance (13 column resizes, 80 -> 40 -> 132 and back and forth again) 
over a ~2,000-row scrollback buffer.

| Workload | Before | After | Speedup | 
|---|---|---|---|
| cjk | 0.938 | 0.296 | 3.2x | 
| emoji | 0.875 | 0.191 | 4.6x |
| mixed build-log | 0.306 | 0.155 | 2.0x |
| grapheme | 2.449 | 1.831 | 1.3x | 
| ascii-short | 0.115 | 0.117 | 1.0x |
| ascii-long | 0.109 | 0.112 | 1.0x |
| latin | 0.093 | 0.095 | 1.0x | 
| sgr-truecolor | 0.939 | 0.965 | 1.0x |

**AI usage:** Profiled, implemented, benchmarked, and written by Fable.
Plan validated by me before doing it, I wrote all the
comments/commits/blah.
2026-08-14 14:05:20 -07:00
Mitchell Hashimoto
6b22215c5d libghostty: much faster grapheme-heavy IO throughput (#13826)
Processing grapheme-heavy input (ZWJ sequences, emoji modifiers, flags,
combining marks) through is now almost 3x faster.

### Primary Change: PageList Capacity Projection

This workload was heavily bound by `PageList.increaseCapacity` because
pathological cases of single-dimensional growth cause repeated page
capacity doublings which get increasingly expensive because each time we
do a full allocation + clone.

So the major change is that for grapheme bytes in particular, when we
reach a capacity limit, we take the current usage for the current set of
rows and project it out to the remaining capacity of rows. Basically, we
assume that a similar workload will continue. So rather than doubling,
we're _guessing_ how much you're going to need.

In the real world, I'm not really sure if this matters at all. There are
no regressions on any regular corpus streams (asciinema, wikipedia
dumps, etc.).

### Other Changes

There are some other changes here, all found on the path to improving
grapheme IO throughput:

* The bitmap allocator now maintains `search_start` hint we update on
every allocation so that future free-scans are much faster. This is the
lowest possible place we don't have a full bitmap.

* For wasm32, we use an alternate hashing structure for small keys since
Wyhash's 64bit * 64bit multiplication is very very slow because wasm has
no widening instruction.

* Terminal `printSlice` now checks the fast path compatibility once up
front rather than on every fast-path attempt.

### Benchmarks

Data: ZWJ family/profession sequences, skin-tone modifiers, flags, and
combining marks streamed in 64 KiB chunks into an 80x24 terminal,
default modes.

| Benchmark | Before | After | Speedup |
|---|---|---|---|
| wasm, V8, 16 MiB stream | 52 MB/s | 151 MB/s | 2.9x | 
| native, terminal-stream, 64 MiB | 894 ms | 305 ms | 2.9x |

Sorry the native stuff is in ms, that's how our native `ghostty-bench`
does things versus the custom little V8 harness.

**AI usage:** Developed alongside Fable: profiling, implementation, and
benchmarks. All human language messages written myself. Validated
myself.
2026-08-14 13:18:18 -07:00
Mitchell Hashimoto
3d9b2b483c libghostty: much faster grapheme-heavy IO throughput
Processing grapheme-heavy input (ZWJ sequences, emoji modifiers, flags,
combining marks) through is now almost 3x faster.

### Primary Change: PageList Capacity Projection

This workload was heavily bound by `PageList.increaseCapacity` because
pathological cases of single-dimensional growth cause repeated page
capacity doublings which get increasingly expensive because each time we
do a full allocation + clone.

So the major change is that for grapheme bytes in particular, when we
reach a capacity limit, we take the current usage for the current set of
rows and project it out to the remaining capacity of rows. Basically, we
assume that a similar workload will continue. So rather than doubling,
we're _guessing_ how much you're going to need.

In the real world, I'm not really sure if this matters at all. There are
no regressions on any regular corpus streams (asciinema, wikipedia dumps, etc.).

### Other Changes

There are some other changes here, all found on the path to improving
grapheme IO throughput:

* The bitmap allocator now maintains `search_start` hint we update on
  every allocation so that future free-scans are much faster. This is
  the lowest possible place we don't have a full bitmap.

* For wasm32, we use an alternate hashing structure for small keys
  since Wyhash's 64bit * 64bit multiplication is very very slow because
  wasm has no widening instruction.

* Terminal `printSlice` now checks the fast path compatibility once up front
  rather than on every fast-path attempt.

### Benchmarks

Data: ZWJ family/profession sequences, skin-tone modifiers,
flags, and combining marks streamed in 64 KiB chunks into an 80x24
terminal, default modes.

| Benchmark | Before | After | Speedup |
|---|---|---|---|
| wasm, V8, 16 MiB stream | 52 MB/s | 151 MB/s | 2.9x |
| native, terminal-stream, 64 MiB | 894 ms | 305 ms | 2.9x |

Sorry the native stuff is in ms, that's how our native `ghostty-bench`
does things versus the custom little V8 harness.

**AI usage:** Developed alongside Fable: profiling, implementation, and
benchmarks. All human language messages written myself. Validated myself.
2026-08-14 13:10:21 -07:00
Mitchell Hashimoto
16833f5e5f libghostty: faster render state reads and updates on wasm targets (#13825)
This makes the `ghostty_render_state_*` C API significantly faster on
wasm32-freestanding, measured in V8 via Node for Chrome. Also verified
in `jsc` for Safari.

The major change is a new bulk row read API that makes full-screen cell
reads roughly 10x faster for wasm embedders. This should help any
embedder with high FFI overhead, such as Go, Python, etc. too.

Non-wasm performance is not impacted, all benchmarks were run on my mac
too w/ no regressions (two of the changes are native wins as well).

## Changes

* color: the "vectorized" palette conversion loop was silently
scalarized by LLVM into per-byte ops because it loaded/stored through
array-typed pointers. Zig 0.16 disables the LLVM loop vectorizer, so
manually vectorized loops must go through vector-typed pointers.
* C styles: major optimizations to converting Zig styles to C styles.
This is a heavy operation for render state.
* render: `endUpdate`'s style-run fill (`@memset` with a struct value)
re-loaded its source every iteration and stored field by field. Now
manually vectorized.
* render: new `GHOSTTY_RENDER_STATE_ROW_DATA_CELLS_RAW` returns a
borrowed `GhosttyCellsView` of the current row's raw cell values, valid
until the next update. One call per row instead of 3-6 calls per cell.

## Benchmarks

| Benchmark | Before | After | Speedup |
|---|---|---|---|
| colors_get | 114 ns | 35 ns | 3.3x |
| style get, per styled cell | 7.8 ns | 6.7 ns | 1.2x | 
| raw+style read, per cell | 8.6 ns | 7.7 ns | 1.1x |
 | full-screen text read, per cell | 7.5 ns | 0.7 ns | 10.7x |
 | full-screen text+style read, per cell | 8.6 ns | 1.7 ns | 5.1x | 
| render state update, styled full frame | 3.4 us | 2.6 us | 1.3x |

**AI usage:** Fable did the implementation and benchmarking and drafted
this message. Comments were partially rewritten by me.
2026-08-14 11:53:04 -07:00
Mitchell Hashimoto
74a233b543 libghostty: faster render state reads and updates on wasm targets
This makes the `ghostty_render_state_*` C API significantly faster on
wasm32-freestanding, measured in V8 via Node for Chrome. Also verified
in `jsc` for Safari.

The major change is a new bulk row read API that makes full-screen cell reads
roughly 10x faster for wasm embedders. This should help any embedder with
high FFI overhead, such as Go, Python, etc. too.

Non-wasm performance is not impacted, all benchmarks were run on my mac
too w/ no regressions (two of the changes are native wins as well).

## Changes

* color: the "vectorized" palette conversion loop was silently
  scalarized by LLVM into per-byte ops because it loaded/stored through
  array-typed pointers. Zig 0.16 disables the LLVM loop vectorizer, so
  manually vectorized loops must go through vector-typed pointers.
* C styles: major optimizations to converting Zig styles to C styles.
  This is a heavy operation for render state.
* render: `endUpdate`'s style-run fill (`@memset` with a struct value)
  re-loaded its source every iteration and stored field by field. Now
  manually vectorized.
* render: new `GHOSTTY_RENDER_STATE_ROW_DATA_CELLS_RAW` returns a
  borrowed `GhosttyCellsView` of the current row's raw cell values, valid
  until the next update. One call per row instead of 3-6 calls per cell.

## Benchmarks

| Benchmark | Before | After | Speedup |
|---|---|---|---|
| colors_get | 114 ns | 35 ns | 3.3x |
| style get, per styled cell | 7.8 ns | 6.7 ns | 1.2x |
| raw+style read, per cell | 8.6 ns | 7.7 ns | 1.1x |
| full-screen text read, per cell | 7.5 ns | 0.7 ns | 10.7x |
| full-screen text+style read, per cell | 8.6 ns | 1.7 ns | 5.1x |
| render state update, styled full frame | 3.4 us | 2.6 us | 1.3x |

**AI usage:** Fable did the implementation and benchmarking and drafted
this message. Comments were partially rewritten by me.
2026-08-14 11:40:01 -07:00
Mitchell Hashimoto
8f485a7f47 ci: publish wasm tip artifacts (#13822)
This builds and publishes `ghostty-vt.wasm` binaries into our tip GitHub
releases. These are built with the proper optimization, `simd128` CPU
feature set, and run through `wasm-opt`.

This allows wasm consumers to use libghostty without a Zig toolkit.

Published two: `ghostty-vt.wasm` and `ghostty-vt-small.wasm`. The latter
is ReleaseSmall, but is 10 to 20% slower. Users choice.
2026-08-14 11:00:13 -07:00
Mitchell Hashimoto
29a70bc367 ci: publish wasm tip artifacts
This builds and publishes `ghostty-vt.wasm` binaries into our tip
GitHub releases. These are built with the proper optimization, `simd128`
CPU feature set, and run through `wasm-opt`.

This allows wasm consumers to use libghostty without a Zig toolkit.

Published two: `ghostty-vt.wasm` and `ghostty-vt-small.wasm`. The latter
is ReleaseSmall, but is 10 to 20% slower. Users choice.
2026-08-14 10:47:22 -07:00
Mitchell Hashimoto
2f72b041f6 libghostty: much faster vt_write on wasm targets (#13821)
This makes `ghostty_terminal_vt_write` on wasm32-freestanding anywhere
from 1.4x to 13x faster depending on the input, measured in V8 via Node
for Chrome as well as `jsc` for Safari.

This changes the default Wasm build to default to enabling the `simd128`
CPU feature because baseline doesn't have that and every major browser
has supported it for years. This results in massive performance
improvements (like, 50%+ on all streams).

Non-wasm performance is not impacted, all benchmarks were run on my mac
too w/ no regressions.

## Changes

* stream: the batched parse path (bulk UTF-8 decode, print_slice runs)
is used even when `build_options.simd` is false. The per-byte loop is
now debug-only.
* simd/vt: the scalar `utf8DecodeUntilControlSeq` gets a vectorized
ASCII bulk path that is compatible with wasm simd128.
* style: on wasm, `Style.eql` compares canonical `PackedStyle` forms
which is faster by like 11%. On native its slower so we only do this for
wasm.
* build: wasm targets now default to the `simd128` CPU feature since
every browser engine has supported it for years. Opt out with
`-Dcpu=generic`.
* PACKAGING.md documents the wasm build, including `wasm-opt` notes.

## Benchmarks

| Workload | Before | After | Speedup |
|---|---|---|---|
| ascii | 85 MB/s | 1070 MB/s | 12.5x |
| ascii-wrap | 84 MB/s | 1103 MB/s | 13.1x |
| clear-redraw | 85 MB/s | 913 MB/s | 10.7x |
| scroll | 79 MB/s | 304 MB/s | 3.8x |
| cursor | 120 MB/s | 255 MB/s | 2.1x |
| utf8 | 99 MB/s | 169 MB/s | 1.7x |
| sgr16 | 81 MB/s | 133 MB/s | 1.6x |
| sgr-truecolor | 62 MB/s | 88 MB/s | 1.4x |

End result: wasm at roughly 50-85% of the native ReleaseFast+SIMD build
on the same workloads. Plain ASCII was at 6% of native before.

**AI usage:** Lots of Fable help. As always, the human language stuff
like this commit and comments were rewritten by me.
2026-08-14 10:37:58 -07:00
Mitchell Hashimoto
87f69a12ee libghostty: much faster vt_write on wasm targets
This makes `ghostty_terminal_vt_write` on wasm32-freestanding anywhere
from 1.4x to 13x faster depending on the input, measured in V8 via Node
for Chrome as well as `jsc` for Safari.

## Changes

* stream: the batched parse path (bulk UTF-8 decode, print_slice runs)
  is used even when `build_options.simd` is false. The per-byte loop
  is now debug-only.
* simd/vt: the scalar `utf8DecodeUntilControlSeq` gets a vectorized
  ASCII bulk path that is compatible with wasm simd128.
* style: on wasm, `Style.eql` compares canonical `PackedStyle` forms
  which is faster by like 11%. On native its slower so we only do this
  for wasm.
* build: wasm targets now default to the `simd128` CPU feature since
  every browser engine has supported it for years. Opt out with
  `-Dcpu=generic`.
* PACKAGING.md documents the wasm build, including `wasm-opt` notes.

## Benchmarks

| Workload | Before | After | Speedup |
|---|---|---|---|
| ascii | 85 MB/s | 1070 MB/s | 12.5x |
| ascii-wrap | 84 MB/s | 1103 MB/s | 13.1x |
| clear-redraw | 85 MB/s | 913 MB/s | 10.7x |
| scroll | 79 MB/s | 304 MB/s | 3.8x |
| cursor | 120 MB/s | 255 MB/s | 2.1x |
| utf8 | 99 MB/s | 169 MB/s | 1.7x |
| sgr16 | 81 MB/s | 133 MB/s | 1.6x |
| sgr-truecolor | 62 MB/s | 88 MB/s | 1.4x |

End result: wasm at roughly 50-85% of the native ReleaseFast+SIMD build
on the same workloads. Plain ASCII was at 6% of native before.

**AI usage:** Lots of Fable help. As always, the human language stuff
like this commit and comments were rewritten by me.
2026-08-14 10:25:30 -07:00
Mitchell Hashimoto
53be7d0353 libghostty: faster render state updates and C API reads (#13818)
This improves the performance of render state plus C API reads. I
specifically benchmarked the C API call and found a lot of overhead in
the C API layer which this cleans up. The impact of these changes will
be less visible to Zig consumers but moderately improve there.

All benchmark numbers below are via the C API.

Highlights: 

- full rebuilds are **1.71x faster (11.4µs to 6.6µs per 120x80 frame)**
- single-dirty-row updates (e.g. the TUI/prompt steady state) are
**1.44x faster**
- full-frame reads through the C API are **1.2x to 1.8x faster** 

## Changes

* endUpdate skips unchanged style runs. 
* `GRAPHEMES_UTF8` getter gets a fast path for single ASCII codepoints
(the overwhelming majority of cells).
* The bg/fg color getters no longer copy the full 28-byte style.
Instead, they switch directly on the one color field they need.
* The `get_multi` variants validate the handle and position once per
batch instead of per key.
* Iterator positions are sentinel values instead of Zig optionals. The
optional tagging overhead was showing up in benchmarks.
* `colors_get` reads through a pointer instead of copying the ~1KB
colors struct to the stack per call.
* The palette conversion is vectorized. The 4-byte padded RGB to 3-byte
was not being auto-vectorized. Explicitly vectorize it. Something like a
4x speedup on NEON.

## Benchmarks

| Benchmark | Before | After | Speedup |
|---|---|---|---|
| update (forced full rebuild) | 11.4 µs/frame | 6.6 µs/frame | 1.71x | 
| update (single dirty row) | 143 ns | 99 ns | 1.44x | 
| read cell style/bg/fg/selected | 10.3 ns/cell | 8.8 ns/cell | 1.17x | 
| read cell via get_multi | 9.6 ns/cell | 6.9 ns/cell | 1.40x | 
|read cell UTF-8 text | 4.9 ns/cell | 2.7 ns/cell | 1.78x | 
| colors_get + palette | 213 ns/call | 45 ns/call | 4.58x |

Clean updates (no terminal changes) and the raw cell read paths are
unchanged.

**AI usage:** Driven by Fable primarily, reviewed everything and rewrote
all human-language (comments) since Fable in particular does really bad
at that. This commit message too.
2026-08-14 09:10:52 -07:00
Mitchell Hashimoto
e3056658d0 libghostty: faster render state updates and C API reads
This improves the performance of render state plus C API reads. I 
specifically benchmarked the C API call and found a lot of overhead in 
the C API layer which this cleans up. The impact of these changes will be 
less visible to Zig consumers but moderately improve there.

All benchmark numbers below are via the C API.

Highlights: 

- full rebuilds are **1.71x faster (11.4µs to 6.6µs per 120x80 frame)**
- single-dirty-row updates (e.g. the TUI/prompt steady state) are *1.44x 
  faster**
- full-frame reads through the C API are **1.2x to 1.8x faster** 

## Changes

* endUpdate skips unchanged style runs. 
* `GRAPHEMES_UTF8` getter gets a fast path for single ASCII codepoints (the 
  overwhelming majority of cells).
* The bg/fg color getters no longer copy the full 28-byte style. Instead, 
   they switch directly on the one color field they need.
* The `get_multi` variants validate the handle and position once per batch
  instead of per key.
* Iterator positions are sentinel values instead of Zig optionals. The
  optional tagging overhead was showing up in benchmarks.
* `colors_get` reads through a pointer instead of copying the ~1KB colors 
  struct to the stack per call.
* The palette conversion is vectorized. The 4-byte padded RGB to 3-byte 
  was not being auto-vectorized. Explicitly vectorize it. Something like
  a 4x speedup on NEON.

## Benchmarks

| Benchmark | Before | After | Speedup |
|---|---|---|---|
| update (forced full rebuild) | 11.4 µs/frame | 6.6 µs/frame | 1.71x |
| update (single dirty row) | 143 ns | 99 ns | 1.44x |
| read cell style/bg/fg/selected | 10.3 ns/cell | 8.8 ns/cell | 1.17x |
| read cell via get_multi | 9.6 ns/cell | 6.9 ns/cell | 1.40x |
| read cell UTF-8 text | 4.9 ns/cell | 2.7 ns/cell | 1.78x |
| colors_get + palette | 213 ns/call | 45 ns/call | 4.58x |

Clean updates (no terminal changes) and the raw cell read paths
are unchanged.

**AI usage:** Driven by Fable primarily, reviewed everything and rewrote
all human-language (comments) since Fable in particular does really bad
at that. This commit message too.
2026-08-14 08:48:24 -07:00
Mitchell Hashimoto
4a174e1c89 renderer: simplify cell row storage (#13599)
Cell contents used our ArrayListCollection container to manage per-row
foreground lists. This was the only place ArrayListCollection was used.

We now own the row list slice directly, initialize cursor capacity to
exactly one cell, and reallocate the contiguous background buffer in
place when possible. Foreground rows still use exact sizes so resizes
(which are infrequent) do not retain the high-water mark.
2026-08-14 08:31:50 -07:00
Jon Parise
cde7f93435 renderer: simplify cell row storage
Cell contents used our ArrayListCollection container to manage per-row
foreground lists. This was the only place ArrayListCollection was used.

We now own the row list slice directly, initialize cursor capacity to
exactly one cell, and reallocate the contiguous background buffer in
place when possible. Foreground rows still use exact sizes so resizes
(which are infrequent) do not retain the high-water mark.
2026-08-14 09:59:04 -04:00
ghostty-vouch[bot]
f81dcadc82 Update VOUCHED list (#13814)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/13812#discussioncomment-18018163)
from @mitchellh.

Vouch: @elitex45

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-14 13:56:41 +00:00
Mitchell Hashimoto
562f21a6e7 macOS: avoid holding SurfaceView when sending notifications (#13810)
We shouldn't hold a closing surface view when sending notifications and
waiting to dismiss that notification. This happens rarely, but it's the
right thing to do.

### AI Disclosure
Found by Claude when judging other branches, I applied the changes
myself.

> Forgot that after force pushing, you can't reopen #13787 🫪, linking it
here for the review history.
2026-08-14 06:55:40 -07:00
kat
1ff3deb1bb i18n: Update es_ES translations (#13800)
Update the translations for the next 1.4 release
2026-08-14 13:50:46 +00:00
trag1c
6584450279 i18n: Update Norwegian translations (#13781) 2026-08-14 15:50:38 +02:00
Uzair Aftab
375ce78746 i18n: Update Norwegian translations
Co-authored-by: Aleksander Eriksen <jakeriksen@gmail.com>
2026-08-14 15:19:13 +02:00
kat
fa392baf28 i18n: add missing Hungarian translations (#13799)
Part of: #13766
2026-08-14 13:15:00 +00:00
Lukas
485864cd60 po/zh_CN: add missing translations (#13608)
Frankly the number of command palette entries is a bit ridiculous, but
such is life
2026-08-14 13:49:32 +02:00
Lukas
f2022fe88d macOS: avoid holding SurfaceView when sending notifications 2026-08-14 10:00:15 +02:00
Leah Amelia Chen
93e7e7e993 po/zh_CN: add missing translations
Frankly the number of command palette entries is a bit ridiculous,
but such is life
2026-08-14 15:15:58 +08:00
ghostty-vouch[bot]
89a26a39eb Update VOUCHED list (#13808)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/12664#discussioncomment-18012616)
from @pluiedev.

Vouch: @Zlitus

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-14 06:12:09 +00:00
Alan Moyano
365e0bd008 i18n: Updating es_AR for 1.4 (#13784)
This PR also updates old translations to keep better consistency.

AI Disclaimer: I translated manually all strings and then used an agent
to review consistency and legibility and applied many suggestions.
2026-08-14 03:27:57 +00:00
ghostty-vouch[bot]
710b872390 Update VOUCHED list (#13805)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/13804#discussioncomment-18010199)
from @jcollie.

Vouch: @pssalman

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-14 02:34:51 +00:00
kat
0ee8a72970 i18n: add missing Polish translations + minor fixes (#13798) 2026-08-13 22:50:02 +00:00
kat
226a91658d Update Turkish translations (#13770) 2026-08-13 21:23:49 +00:00
Mitchell Hashimoto
119f4fd606 libghostty: minor C/C++ compatibility fixes (#13801)
Minor things as I was just auditing the state of our headers:

* Make sure all subheaders like `point.h` can be included standalone
* Support Clang/GCC extensions for typed enums if we can detect it
* Add missing structs to the `ghostty_type_json` function
* Fix `GHOSTTY_INIT_SIZED` for C++ mode
2026-08-13 12:56:32 -07:00
José Miguel Sarasola
250a36fe6f i18n: Update es_ES translations
Update the translations for the next 1.4 release
2026-08-13 21:39:40 +02:00
Mitchell Hashimoto
d930c74c4d libghostty: make sized initialization valid C++
Use an immediately invoked lambda for GHOSTTY_INIT_SIZED in C++ so the 
macro value-initializes every field before setting the ABI size. The 
previous C compound literal and designated initializer required compiler 
extensions in C++17 and C++20.

Keep the existing standard compound literal for C callers.
2026-08-13 12:39:25 -07:00
Mitchell Hashimoto
309440e07f libghostty: include all public structs in type JSON 2026-08-13 12:39:25 -07:00
Mitchell Hashimoto
e4ec4f0f95 libghostty: fix enum underlying type detection
Use fixed int enum types for C++11, C23, Clang's fixed-enum extension, 
and GCC 13 or newer. Previously only finalized C23 mode selected an explicit 
underlying type, leaving C++ and common older C modes with 
implementation-defined enum types.
2026-08-13 12:39:25 -07:00
Mitchell Hashimoto
51992ab01a libghostty: make device and point headers self-contained 2026-08-13 12:39:25 -07:00
trag1c
bedb6f2ff9 i18n: update es_BO translations for 1.4 (#13782)
issue #13766
2026-08-13 21:36:32 +02:00
Balázs Szücs
987ee52751 Update and (hopefully) complete Hungarian translations in hu.po 2026-08-13 21:23:51 +02:00
trag1c
8fd2013a09 i18n: add missing Polish translations + minor fixes 2026-08-13 21:09:31 +02:00
ghostty-vouch[bot]
43fe699071 Update VOUCHED list (#13797)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/13796#discussioncomment-18006390)
from @jcollie.

Vouch: @sghng

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-13 18:55:20 +00:00
Mitchell Hashimoto
908961f8a9 terminal: size dynamic tabstops by bits (#13600)
Dynamic tabstop storage treated the number of columns above the inline
capacity as a byte count even though each byte stores eight stops. This
was wasteful, although in practice this is in the order of just bytes.

Round the extra column count up to whole storage units and grow the
existing slice with realloc, preserve existing stops.
2026-08-13 11:43:18 -07:00
Emir SARI
27d1642879 Update Turkish translations 2026-08-13 21:08:28 +03:00
ghostty-vouch[bot]
bb019cac27 Update VOUCHED list (#13794)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/13792#discussioncomment-18005749)
from @jcollie.

Vouch: @dmunozv04

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-13 18:03:40 +00:00
ghostty-vouch[bot]
47703753ad Update VOUCHED list (#13793)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/13791#discussioncomment-18005730)
from @jcollie.

Vouch: @dolzenko

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-13 18:03:00 +00:00
kat
9f8550b7f4 Add danish translations (#13538) 2026-08-13 17:33:38 +00:00
Miguel P Z
dd22396bd7 i18n: update es_BO translations for 1.4 2026-08-13 17:44:20 +03:00
kat
613050ddff i18n - Latvian translation of command palette, typo fixes and more natural translations (#11663) 2026-08-13 13:48:19 +00:00
Jeffrey C. Ollie
dab1b105b9 config: flush autogenerated config template (#13780)
Fixes #13774

Simple one-line fix: added the missing flush to the function.

- `zig build` passed
- `zig build test` passed
- Confirmed template appears after fix in `~/Library/Application
Support/com.mitchellh.ghostty/config.ghostty`

---
**AI Disclosure**

As mentioned before - I used OpenAI Codex (Sol 5.6 high):
a) to see if the template still exists & a function exists that tries to
use the template
b) find the moment in history this behavior changed.
Additionally:
c) reviewing my work and draft a commit message matching your preferred
style

I implemented the change, ran the build/test, manually verified the
behavior, and understand the fix.
2026-08-13 07:18:45 -05:00