Commit Graph

17768 Commits

Author SHA1 Message Date
ghostty-vouch[bot]
0c2a290d3a Sync CODEOWNERS vouch list (#14229)
Sync CODEOWNERS owners with vouch list.

## Added Users

- @ibaios

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-09-14 00:01:26 +00:00
Lukas
7aab0a0392 macOS: implement move_tab_to_new_window (#14216)
Closes #2630 for macOS. #13621 added the `move_tab_to_new_window` action
and the GTK side; this does the same on macOS with AppKit.

With native tabs a tab is already a window, so the action forwards to
AppKit's own `moveTabToNewWindow:`. It's a no-op when the window is
alone in its tab group, same as the Window menu item. The "only
implemented on Linux" note comes off the doc comment in `Binding.zig`.
Tested on macOS 26, from a keybind and from the command palette. I have
no macOS 13-15 machine.

Full disclosure, written with Claude Code, I directed it, read every
line, and tested the result.
2026-09-13 17:46:00 +02:00
ghostty-vouch[bot]
09a2724c23 Update VOUCHED list (#14223)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/14221#discussioncomment-18420862)
from @jcollie.

Vouch: @helium777

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-09-13 11:35:10 +00:00
Leah Amelia Chen
5252b193cf po/zh_CN: add missing translations (#14218) 2026-09-13 11:49:39 +08:00
Lukas
6a64b1c86a po/zh_CN: add missing translations 2026-09-13 10:51:17 +08:00
ghostty-vouch[bot]
9bbb9b2468 Update VOUCHED list (#14215)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/14166#discussioncomment-18413557)
from @jcollie.

Vouch: @pedronaugusto

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-09-12 15:03:44 +00:00
Mitchell Hashimoto
e2e53f8614 build: refactoring our use of translate-c (#14203)
This commit refactors our use of translate-c, in preparation for larger
removal of `cImport` and better co-ordination between building of C
dependencies and translation of headers.

The major update is the creation of an internal helper package that
wraps our use of the external translate-c library. This allows us to not
only have better shorthand and a data-driven, declarative approach to C
translation (versus the otherwise more imperative approach), it also
funnels the external dependency into a single package instead of
spreading it out among what will be an increasingly larger amount of
places as dependencies in `pkg/` get updated.

It also includes some refactors, namely to the harfbuzz package, which
has had its individual settings refactored into helpers to allow for the
settings to be better shared between translation and the build of the
c-based static library.

Wuffs has also had a bit of a refactor too so that we don't generate a
file with all of the macro defines in it - we just send these in as `-D`
flags now.
2026-09-11 21:22:47 -07:00
Pedro Augusto
1a8f331f16 macOS: implement move_tab_to_new_window
The action and its keybind exist, and GTK implements them, but macOS had no
handler so the binding did nothing there. AppKit already has the command for
window tabs, so this forwards to it.

A window that isn't in a tab group, or is alone in one, is already a window of
its own, so there is nothing to move and the action reports it did nothing.

Implements the remaining macOS half of #2630.
2026-09-12 04:53:30 +01:00
Chris Marchesi
c0c5473daf build: refactoring our use of translate-c
This commit refactors our use of translate-c, in preparation for larger
removal of cImport and better co-ordination between building of C
dependencies and translation of headers.

The major update is the creation of an internal helper package that
wraps our use of the external translate-c library. This allows us to not
only have better shorthand and a data-driven, declarative approach to C
translation (versus the otherwise more imperative approach), it also
funnels the external dependency into a single package instead of
spreading it out among what will be an increasingly larger amount of
places as dependencies in "pkg/" get updated.

It also includes some refactors, namely to the harfbuzz package, which
has had its individual settings refactored into helpers to allow for the
settings to be better shared between translation and the build of the
c-based static library.

Wuffs has also had a bit of a refactor too so that we don't generate a
file with all of the macro defines in it - we just send these in as "-D"
flags now.
2026-09-10 11:17:32 -07:00
kat
44f2a44df7 i18n: update vi translation for 1.4 (#13783) 2026-09-10 10:05:04 +00:00
trag1c
ea624f5a8c i18n(hr): spiffy up the translation (#14194)
Adds some linguistic polish mentioned in [my

review](https://github.com/ghostty-org/ghostty/pull/14019#pullrequestreview-5146552587)
and throughout the comments.

Contributes to #13766

CC: @Filip7 @kristina8888
2026-09-10 10:52:57 +02:00
neoto
6d8f8b9aa7 chore: make event reporting explicit
Co-authored-by: Filip Milković <Filip7@users.noreply.github.com>
2026-09-10 10:06:59 +02:00
ghostty-vouch[bot]
466439bdfc Update VOUCHED list (#14205)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/14179#discussioncomment-18381789)
from @jcollie.

Vouch: @korikhin

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-09-10 06:52:13 +00:00
ghostty-vouch[bot]
8c17235f8d Update VOUCHED list (#14195)
Triggered by
[comment](https://github.com/ghostty-org/ghostty/issues/14194#issuecomment-5608205535)
from @trag1c.

Vouch: @neoto

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-09-09 20:23:36 +00:00
Leon Lombar
8a3dbc8ce6 i18n(hr): spiffy up the translation
Adds some linguistic polish mentioned in [my
review](https://github.com/ghostty-org/ghostty/pull/14019#pullrequestreview-5146552587)
and throughout the comments.

Contributes to #13766
2026-09-09 22:11:49 +02:00
Mitchell Hashimoto
fde3449b34 tinyio: implement a Windows version and use it in the C API (#14193)
Implements TinyIO for Windows which is used to save binary and runtime
costs. As a reminder, binary costs are saved because `std.Io` uses a
vtable so compilers can't prune any unused functions, so you pay for the
full cost. We can noop unused functions to save. Runtime is saved
because there is less state to carry for unused functionality like
concurrency primitives.

The impl itself is mostly taken from Zig directly. I ran tests on
Windows (arm64) and verified everything works as expected so far!

Binary size measurements before/after:

  | Mode         | Io owner        | ghostty-vt.dll | vs. Threaded |
  |--------------|-----------------|---------------:|-------------:|
  | ReleaseFast  | std.Io.Threaded |      2,209,280 |              |
  | ReleaseFast  | TinyIo          |      1,826,816 |     -382,464 |
  | ReleaseSmall | std.Io.Threaded |      1,541,632 |              |
  | ReleaseSmall | TinyIo          |      1,199,616 |     -342,016 |

The runtime savings are relatively small, but 1KB per terminal ain't
nothing:

  | Io owner        | Private, +100 terminals | Private, startup |
  |-----------------|------------------------:|-----------------:|
  | std.Io.Threaded |            +161,845,248 |          782,336 |
  | TinyIo          |            +161,742,848 |          729,088 |
2026-09-09 12:04:23 -07:00
Mitchell Hashimoto
f6cb8312b3 tinyio: implement a Windows version and use it in the C API
Implements TinyIO for Windows which is used to save binary and runtime
costs. As a reminder, binary costs are saved because `std.Io` uses a
vtable so compilers can't prune any unused functions, so you pay for the
full cost. We can noop unused functions to save. Runtime is saved
because there is less state to carry for unused functionality like
concurrency primitives.

The impl itself is mostly taken from Zig directly. I ran tests on
Windows (arm64) and verified everything works as expected so far!

Binary size measurements before/after:

  | Mode         | Io owner        | ghostty-vt.dll | vs. Threaded |
  |--------------|-----------------|---------------:|-------------:|
  | ReleaseFast  | std.Io.Threaded |      2,209,280 |              |
  | ReleaseFast  | std.Io.failing  |      1,815,552 |     -393,728 |
  | ReleaseFast  | TinyIo          |      1,826,816 |     -382,464 |
  | ReleaseSmall | std.Io.Threaded |      1,541,632 |              |
  | ReleaseSmall | std.Io.failing  |      1,190,912 |     -350,720 |
  | ReleaseSmall | TinyIo          |      1,199,616 |     -342,016 |

The runtime savings are relatively small, but 1KB per terminal ain't nothing:

  | Io owner        | Private, +100 terminals | Private, startup |
  |-----------------|------------------------:|-----------------:|
  | std.Io.Threaded |            +161,845,248 |          782,336 |
  | TinyIo          |            +161,742,848 |          729,088 |
2026-09-09 11:39:47 -07:00
Mitchell Hashimoto
4a70ee4718 build/libghostty-vt: fixed to the build system for programs that embed libghostty-vt and libvaxis (#14191)
Two small patches that don't directly affect Ghostty, but do affect
programs that embed `libghostty-vt` and `libvaxis`, or
any other combination that also uses `uucode`.

AI disclosure: these bugs were discovered/fixed by Claude, but I've
rewritten parts of the patches and the comments.

CC @rockorager
2026-09-09 09:10:49 -07:00
Mitchell Hashimoto
95cfbbb055 terminal: reclaim pooled and compressed page memory on Windows (#14190)
This adds memory decommit/recommit support to Windows via
DiscardVirtualMemory. This allows unused page memory to be reclaimed the
same way it is already today on Linux and macOS.

DiscardVirtualMemory releases the physical pages behind a committed
range but leaves it committed, so a later access finds a zero page or
the old contents rather than faulting, and nothing has to be committed
again before reuse. That keeps recommit a no-op and, more importantly,
keeps restoring a compressed page infallible.

Windows has an alternative `VirtualFree(MEM_DECOMMIT)` followed by
`VirtualAlloc(MEM_COMMIT)` which releases the commit charge as well, but
Windows has no overcommit, so the commit can be refused on restore and
our restore path doesn't support OOM.


https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-discardvirtualmemory
2026-09-09 08:34:03 -07:00
Jeffrey C. Ollie
7644e6d627 build/linghostty-vt: fix libvaxis access to uucode tables 2026-09-09 10:13:28 -05:00
Mitchell Hashimoto
60b43068c5 terminal: reclaim pooled and compressed page memory on Windows
This adds memory decommit/recommit support to Windows via
DiscardVirtualMemory. This allows unused page memory to be reclaimed
the same way it is already today on Linux and macOS.

DiscardVirtualMemory releases the physical pages behind a committed
range but leaves it committed, so a later access finds a zero page or
the old contents rather than faulting, and nothing has to be committed
again before reuse. That keeps recommit a no-op and, more importantly,
keeps restoring a compressed page infallible. 

Windows has an alternative `VirtualFree(MEM_DECOMMIT)` followed by 
`VirtualAlloc(MEM_COMMIT)` which releases the commit charge as well, but 
Windows has no overcommit, so the commit can be refused on restore and our
restore path doesn't support OOM.

https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-discardvirtualmemory
2026-09-09 08:08:09 -07:00
Mitchell Hashimoto
cf4de795be kitty: reject unsafe Windows paths for image file mediums (#14189)
The Kitty graphics file and temporary file mediums open a
client-supplied path and the Kitty specification only specifies the
blocklist for Unix-style machines.

Windows has various unsafe paths as well that we should very obviously
block. This diverges from the Kitty specification for now (I plan on
reporting this upstream and asking for feedback) but I think its the
right move for security.

Windows dangerous namespaces:

- A UNC path (`\\server\share\x`, also `//server/share/x`) makes the
process resolve the host and authenticate to it over SMB.
- The device namespaces (`\\.\`, `\\?\`, `\??\`) reach raw volumes and
named pipes, where the open connects to something or blocks.
- Reserved DOS device names (CON, NUL, COM1, ...) resolve to devices
from inside any directory.

These are now blocked.

This commit also heap allocates the path buffer because max path on
windows is around 100KB. :)\

**AI usage:** Fable and Astra both helped with validation, edge cases.
2026-09-09 07:53:39 -07:00
Jeffrey C. Ollie
7adbb5160d build/libghostty-vt: export uucode so that it can be re-used 2026-09-09 09:25:37 -05:00
Mitchell Hashimoto
0b54463649 terminal/kitty: reject unsafe Windows paths for image file mediums
The Kitty graphics file and temporary file mediums open a
client-supplied path and the Kitty specification only specifies the
blocklist for Unix-style machines.

Windows has various unsafe paths as well that we should very obviously
block. This diverges from the Kitty specification for now (I plan
on reporting this upstream and asking for feedback) but I think its the
right move for security.

Windows dangerous namespaces:

  - A UNC path (`\\server\share\x`, also `//server/share/x`) makes the 
    process resolve the host and authenticate to it over SMB.
  - The device namespaces (`\\.\`, `\\?\`, `\??\`) reach raw volumes and 
    named pipes, where the open connects to something or blocks.
  - Reserved DOS device names (CON, NUL, COM1, ...) resolve to devices 
    from inside any directory.

These are now blocked.

This commit also heap allocates the path buffer because max path on
windows is around 100KB. :)
2026-09-09 06:56:00 -07:00
trag1c
448062571c i18n: Started updating hr translation (#14019)
Related issue #13766
2026-09-08 18:28:25 +02:00
Filip M
68852fc008 i18n(hr): unify translation
Use "zaslon" instead of "ekran"
2026-09-08 16:27:12 +02:00
kristina8888
d1ed60d569 Update hr.po 2026-09-08 16:12:33 +02:00
Filip M
c01c683eb0 i18n(hr): "toggle" string translations
i18n(hr): add missing translations and correct some others
2026-09-08 16:12:33 +02:00
Filip M
edf3aa01bb i18n(hr): added more translations and fixes 2026-09-08 16:12:33 +02:00
kristina8888
437dce21bc Update hr.po
added new translations for croatian language
2026-09-08 16:12:33 +02:00
Filip M
1ff027c332 i18n(hr): started updating hr translation
Related issue #13766
2026-09-08 16:12:33 +02:00
Mitchell Hashimoto
b0c421fcd2 libghostty: return safe pointers for empty output (#14177)
Normalize empty buffers and borrowed strings at the libghostty-vt C
boundary to null pointers.

Zig can use sentinel addresses such as 0x1 for empty slices. Returning
these pointers to Go can cause a fatal invalid-pointer error when the
runtime relocates a goroutine's stack, even though the length is zero.
2026-09-07 21:02:01 -07:00
Mitchell Hashimoto
dd2edd760d libvt: return safe pointers for empty output
Normalize empty buffers and borrowed strings at the libghostty-vt C
boundary to null pointers.

Zig can use sentinel addresses such as 0x1 for empty slices. Returning
these pointers to Go can cause a fatal invalid-pointer error when the
runtime relocates a goroutine's stack, even though the length is zero.
2026-09-07 20:42:28 -07:00
Mitchell Hashimoto
82232ecde5 renderer: never stop the display link while holding the draw mutex (#14171)
Fixes #14150

drawFrame called syncDisplayLink from its no-redraw path while still
holding draw_mutex, and syncDisplayLink stops the CVDisplayLink when
there is no work left. CVDisplayLinkStop is a blocking join on
CoreVideo's IO thread. On macOS the apprt also calls drawFrame from the
CoreAnimation layer display callback on the main thread, which takes the
same mutex, so any CoreVideo stall inside that stop deadlocked.
2026-09-07 09:45:25 -07:00
Mitchell Hashimoto
623106cc4e config: rebuild RepeatableCommand's C mirror on clone (#14170)
## Why

`RepeatableCommand.clone` copies `value_c` shallowly: the cloned
`Command.C` structs keep string pointers into the *source* config's
memory, so the clone only stays valid as long as its source lives. Every
other field of a config clone is a deep copy — this is the one spot
where the clone silently borrows.

The macOS app never notices because of how it rotates configs: its
clone's source is the core-owned live config, and both are replaced
together on the next reload, so a clone never outlives its source. An
embedder that clones a config and then frees the source — a legal
sequence, e.g. promoting the clone to be the new active config — reads
freed memory the next time it fetches `command-palette-entry` through
the C API. Caught by AddressSanitizer.

History: the shallow copy is as old as the C exposure itself.
`dbe6035da` introduced `RepeatableCommand` with a correct deep `clone`
(zig-side `value` only); `017021787` added the `value_c` mirror for
`ghostty_config_get`, maintaining it carefully in `init`/`parseCLI` but
extending `clone` with only the mechanical `ArrayList.clone` — the
struct array copies, the string ownership doesn't. Nothing in-tree
exercises clone-then-free-source, so it stayed latent.

## What

Rebuild the C mirror from the cloned commands using the same
`Command.cval` path `parseCLI` uses, so the clone's C strings live in
the clone's own allocation. A regression test asserts the clone's C
strings do not alias the source's while staying equal in content.

## AI disclosure

Developed with AI assistance (Claude Code). The bug was found by
AddressSanitizer while testing the Windows embedding host; the
root-cause analysis, the fix, and the regression test were produced in
an AI-assisted session, then reviewed and verified by the submitter
(ASan clean after the fix, `RepeatableCommand` tests passing).
2026-09-07 09:25:41 -07:00
Mitchell Hashimoto
72cf508551 renderer: never stop the display link while holding the draw mutex
Fixes #14150

drawFrame called syncDisplayLink from its no-redraw path while still
holding draw_mutex, and syncDisplayLink stops the CVDisplayLink when
there is no work left. CVDisplayLinkStop is a blocking join on
CoreVideo's IO thread. On macOS the apprt also calls drawFrame from the
CoreAnimation layer display callback on the main thread, which takes
the same mutex, so any CoreVideo stall inside that stop deadlocked.
2026-09-07 09:21:52 -07:00
Mitchell Hashimoto
da9e21602f build(deps): bump c-hive/gha-remove-artifacts from 1.4.0 to 1.8.0 (#14165)
Bumps
[c-hive/gha-remove-artifacts](https://github.com/c-hive/gha-remove-artifacts)
from 1.4.0 to 1.8.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/c-hive/gha-remove-artifacts/releases">c-hive/gha-remove-artifacts's
releases</a>.</em></p>
<blockquote>
<h2>v1.8.0</h2>
<p>Enhancements:</p>
<ul>
<li>New <code>skip-recent-commits</code> input keeps every artifact of
the N most recent commits, regardless of how many artifacts each commit
produced. Applied before <code>skip-recent</code>, so the two can be
combined. Fixes <a
href="https://redirect.github.com/c-hive/gha-remove-artifacts/issues/28">#28</a></li>
<li><code>GITHUB_TOKEN</code> can now be set on both <code>env:</code>
and <code>with:</code> (for example when it is exported for all steps)
without the action failing. The input takes precedence. Fixes <a
href="https://redirect.github.com/c-hive/gha-remove-artifacts/issues/48">#48</a></li>
</ul>
<h2>v1.7.0</h2>
<p>Enhancements:</p>
<ul>
<li>New <code>dry-run</code> input: logs which artifacts would be
removed without deleting anything.</li>
<li>Stricter input validation. <code>age</code> now rejects fractional
amounts and units that are not durations (for example <code>30 D</code>,
which moment silently treated as zero); <code>skip-recent</code> and
<code>max-retries</code> must be non-negative integers. Previously such
values could make every artifact eligible for deletion.</li>
<li>Artifacts without commit information are reported separately from
tagged ones when <code>skip-tags</code> is on.</li>
</ul>
<p>Maintenance:</p>
<ul>
<li>Rewritten in TypeScript under <code>src/</code>, bundled with
esbuild</li>
<li>Unit tests for input parsing and the cleanup plan, plus end-to-end
tests against a mock GitHub API covering deletion, rate limit retries
and failure handling</li>
<li>CI split into lint, typecheck, test, build and run jobs</li>
<li>Dropped dependencies: yn, dotenv-safe, cross-env,
eslint-plugin-import</li>
</ul>
<h2>v1.6.0</h2>
<p>Enhancements:</p>
<ul>
<li>Artifacts are now listed repo-wide instead of per workflow run. This
cuts API requests by roughly two orders of magnitude and removes the
hardcoded 90-day window, so artifacts on repositories with longer
retention are now cleaned up too. Fixes <a
href="https://redirect.github.com/c-hive/gha-remove-artifacts/issues/62">#62</a></li>
<li>A failed deletion no longer aborts the run: remaining artifacts are
still processed and the action fails at the end with a count.</li>
<li>With <code>skip-tags</code>, artifacts without commit information
are kept rather than deleted.</li>
<li>The log ends with a summary of removed and skipped artifacts. Fixes
<a
href="https://redirect.github.com/c-hive/gha-remove-artifacts/issues/21">#21</a></li>
</ul>
<p>Maintenance:</p>
<ul>
<li>CI checks that <code>dist/</code> matches the source instead of
auto-committing it</li>
<li>Removed CodeQL workflow, pre-commit hooks and
eslint-plugin-import</li>
<li>Dependency purposes documented in <code>package.json</code></li>
</ul>
<h2>v1.5.0</h2>
<p>Enhancements:</p>
<ul>
<li>New <code>max-retries</code> input caps how often a rate-limited
request is retried before the action fails. <strong>Default: 5.</strong>
Previously requests were retried indefinitely; set a larger value to
keep the old behaviour. Fixes <a
href="https://redirect.github.com/c-hive/gha-remove-artifacts/issues/36">#36</a>,
<a
href="https://redirect.github.com/c-hive/gha-remove-artifacts/issues/49">#49</a>,
<a
href="https://redirect.github.com/c-hive/gha-remove-artifacts/issues/51">#51</a></li>
<li>Action runtime updated to Node 24 (<a
href="https://redirect.github.com/c-hive/gha-remove-artifacts/issues/63">#63</a>)</li>
</ul>
<p>Maintenance:</p>
<ul>
<li>All dependencies upgraded (<code>@actions/core</code> 3,
<code>@octokit/action</code> 8, <code>@octokit/plugin-throttling</code>
11, moment 2.30). <code>pnpm audit</code> reports no known
vulnerabilities.</li>
<li>Source converted to ESM, bundled with <code>@vercel/ncc</code></li>
<li>Tooling: pnpm, ESLint 10, Prettier 3, CI on Node 24</li>
<li>Docs: <code>action.yml</code> description, updated retention docs
link</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="62c2fbea93"><code>62c2fbe</code></a>
Bump version to 1.8.0</li>
<li><a
href="449a616233"><code>449a616</code></a>
Add skip-recent-commits input and accept GITHUB_TOKEN from env and
input</li>
<li><a
href="4bff15786b"><code>4bff157</code></a>
Bump version to 1.7.0</li>
<li><a
href="a52e55eb4f"><code>a52e55e</code></a>
Add end-to-end tests against a mock GitHub API</li>
<li><a
href="03f14e2351"><code>03f14e2</code></a>
Simplify config parsing, logging and tsconfig</li>
<li><a
href="04de7b0694"><code>04de7b0</code></a>
Address review findings on the TypeScript rewrite</li>
<li><a
href="8b74b1b6fc"><code>8b74b1b</code></a>
Rewrite in TypeScript, add tests, merge CI workflows</li>
<li><a
href="73aaf4a5bf"><code>73aaf4a</code></a>
Bump version to 1.6.0</li>
<li><a
href="c4da97c8ee"><code>c4da97c</code></a>
Ignore CLAUDE.local.md</li>
<li><a
href="614c11c542"><code>614c11c</code></a>
Describe each dependency in package.json</li>
<li>Additional commits viewable in <a
href="44fc7acaf1...62c2fbea93">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=c-hive/gha-remove-artifacts&package-manager=github_actions&previous-version=1.4.0&new-version=1.8.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>
2026-09-07 08:47:17 -07:00
Mitchell Hashimoto
ccaf7c7761 build(deps): bump ryand56/r2-upload-action from 1.4 to 1.5 (#14164)
Bumps
[ryand56/r2-upload-action](https://github.com/ryand56/r2-upload-action)
from 1.4 to 1.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/ryand56/r2-upload-action/releases">ryand56/r2-upload-action's
releases</a>.</em></p>
<blockquote>
<h2>v1.5</h2>
<h2>What's Changed</h2>
<ul>
<li>chore(deps): update dependency <code>@​types/node</code> to v22.9.0
by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/524">ryand56/r2-upload-action#524</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.686.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/526">ryand56/r2-upload-action#526</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.687.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/527">ryand56/r2-upload-action#527</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.688.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/528">ryand56/r2-upload-action#528</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.689.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/529">ryand56/r2-upload-action#529</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.691.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/530">ryand56/r2-upload-action#530</a></li>
<li>chore(deps): update determinatesystems/nix-installer-action action
to v16 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/531">ryand56/r2-upload-action#531</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.693.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/532">ryand56/r2-upload-action#532</a></li>
<li>chore(deps): update dependency <code>@​vercel/ncc</code> to v0.38.3
by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/534">ryand56/r2-upload-action#534</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.693.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/533">ryand56/r2-upload-action#533</a></li>
<li>chore(deps): update dependency typescript to v5.7.2 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/537">ryand56/r2-upload-action#537</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.700.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/536">ryand56/r2-upload-action#536</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.701.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/538">ryand56/r2-upload-action#538</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.703.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/539">ryand56/r2-upload-action#539</a></li>
<li>chore(deps): update dependency <code>@​types/node</code> to v22.10.1
by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/535">ryand56/r2-upload-action#535</a></li>
<li>chore(deps): update dependency dotenv to v16.4.6 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/540">ryand56/r2-upload-action#540</a></li>
<li>chore(deps): update dependency dotenv to v16.4.7 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/541">ryand56/r2-upload-action#541</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.705.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/542">ryand56/r2-upload-action#542</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.709.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/543">ryand56/r2-upload-action#543</a></li>
<li>chore(deps): update dependency <code>@​types/node</code> to v22.10.2
by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/544">ryand56/r2-upload-action#544</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.712.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/545">ryand56/r2-upload-action#545</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.713.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/546">ryand56/r2-upload-action#546</a></li>
<li>fix(deps): update dependency mime to v4.0.6 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/548">ryand56/r2-upload-action#548</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.715.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/547">ryand56/r2-upload-action#547</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.717.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/549">ryand56/r2-upload-action#549</a></li>
<li>chore(deps): update dependency <code>@​types/node</code> to v22.10.3
by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/550">ryand56/r2-upload-action#550</a></li>
<li>chore(deps): update dependency <code>@​types/node</code> to v22.10.5
by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/551">ryand56/r2-upload-action#551</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.722.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/552">ryand56/r2-upload-action#552</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.723.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/553">ryand56/r2-upload-action#553</a></li>
<li>chore(deps): update dependency typescript to v5.7.3 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/554">ryand56/r2-upload-action#554</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.726.1 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/555">ryand56/r2-upload-action#555</a></li>
<li>chore(deps): update dependency <code>@​types/node</code> to v22.10.6
by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/556">ryand56/r2-upload-action#556</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.731.1 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/557">ryand56/r2-upload-action#557</a></li>
<li>chore(deps): update dependency <code>@​types/node</code> to v22.10.7
by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/558">ryand56/r2-upload-action#558</a></li>
<li>chore(deps): update determinatesystems/magic-nix-cache-action action
to v9 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/560">ryand56/r2-upload-action#560</a></li>
<li>chore(deps): update dependency <code>@​types/node</code> to
v22.10.10 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/561">ryand56/r2-upload-action#561</a></li>
<li>chore(deps): update dependency typescript to v5.8.2 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/564">ryand56/r2-upload-action#564</a></li>
<li>ci(test-nix): replace magic nix cache with flakehub cache by <a
href="https://github.com/ryand56"><code>@​ryand56</code></a> in <a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/567">ryand56/r2-upload-action#567</a></li>
<li>chore(deps): update dependency typescript to v5.8.3 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/566">ryand56/r2-upload-action#566</a></li>
<li>fix(deps): update dependency mime to v4.0.7 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/565">ryand56/r2-upload-action#565</a></li>
<li>chore(deps): update determinatesystems/nix-installer-action action
to v17 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/569">ryand56/r2-upload-action#569</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.810.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/559">ryand56/r2-upload-action#559</a></li>
<li>chore(deps): update dependency <code>@​types/node</code> to
v22.15.19 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/572">ryand56/r2-upload-action#572</a></li>
<li>chore(deps): update stefanzweifel/git-auto-commit-action action to
v6 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/576">ryand56/r2-upload-action#576</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.832.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/571">ryand56/r2-upload-action#571</a></li>
<li>chore(deps): update dependency <code>@​types/node</code> to
v22.15.33 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/573">ryand56/r2-upload-action#573</a></li>
<li>fix(deps): update aws-sdk-js-v3 monorepo to v3.837.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/577">ryand56/r2-upload-action#577</a></li>
<li>chore(deps): update dependency dotenv to v16.6.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/ryand56/r2-upload-action/pull/578">ryand56/r2-upload-action#578</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="33ebb7a494"><code>33ebb7a</code></a>
chore: update to nodejs 24</li>
<li><a
href="61474c8f6a"><code>61474c8</code></a>
chore: update mappings [skip ci]</li>
<li><a
href="7d9e7c27f8"><code>7d9e7c2</code></a>
chore(deps): update typescript to v6</li>
<li><a
href="6e86c77f4a"><code>6e86c77</code></a>
fix(renovate): increase minimumReleaseAge and add packageRules for
ts</li>
<li><a
href="fd3d3d4ccd"><code>fd3d3d4</code></a>
chore(deps): update dependency jest to v30.5.1</li>
<li><a
href="0b5990b910"><code>0b5990b</code></a>
chore(deps): update dependency github-action-ts-run-api to v3.1.0</li>
<li><a
href="4196309eee"><code>4196309</code></a>
chore(deps): update dependency dotenv to v17.4.2</li>
<li><a
href="d62fd13887"><code>d62fd13</code></a>
chore(deps): update dependency <code>@​vercel/ncc</code> to ^0.45.0</li>
<li><a
href="5124bb9938"><code>5124bb9</code></a>
chore(deps): update dependency ts-jest to v29.4.12</li>
<li><a
href="820995a4f1"><code>820995a</code></a>
chore(deps): update dependency <code>@​actions/core</code> to
v3.0.1</li>
<li>Additional commits viewable in <a
href="b801a390ac...33ebb7a494">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ryand56/r2-upload-action&package-manager=github_actions&previous-version=1.4&new-version=1.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>
2026-09-07 08:47:04 -07:00
Mitchell Hashimoto
82938b633b deps: update translate-c backport (#14126)
This is just a monthly refresh, things have been pretty quiet on both
the Aro and translate-c sides.

ecbc5c7...f97cdfc

05e7b9dd87...4e879eb8ab
2026-09-06 18:35:00 -07:00
Chris Marchesi
2b3b893919 deps: update translate-c backport 2026-09-06 17:39:24 -07:00
dependabot[bot]
e9283ba872 build(deps): bump c-hive/gha-remove-artifacts from 1.4.0 to 1.8.0
Bumps [c-hive/gha-remove-artifacts](https://github.com/c-hive/gha-remove-artifacts) from 1.4.0 to 1.8.0.
- [Release notes](https://github.com/c-hive/gha-remove-artifacts/releases)
- [Commits](44fc7acaf1...62c2fbea93)

---
updated-dependencies:
- dependency-name: c-hive/gha-remove-artifacts
  dependency-version: 1.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-07 00:18:38 +00:00
dependabot[bot]
258c057c0a build(deps): bump ryand56/r2-upload-action from 1.4 to 1.5
Bumps [ryand56/r2-upload-action](https://github.com/ryand56/r2-upload-action) from 1.4 to 1.5.
- [Release notes](https://github.com/ryand56/r2-upload-action/releases)
- [Commits](b801a390ac...33ebb7a494)

---
updated-dependencies:
- dependency-name: ryand56/r2-upload-action
  dependency-version: '1.5'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-07 00:18:30 +00:00
ghostty-vouch[bot]
97f2ddb06e Sync CODEOWNERS vouch list (#14163)
Sync CODEOWNERS owners with vouch list.

## Added Users

- @slowdub

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-09-07 00:01:08 +00:00
Jeffrey C. Ollie
f426f6f181 Update iTerm2 colorschemes (#14159)
Upstream release:
https://github.com/mbadolato/iTerm2-Color-Schemes/releases/tag/release-20260831-151010-752a9c0
2026-09-06 16:58:49 -05:00
Mitchell Hashimoto
955d902fa6 pkg/fontconfig: update to 2.18.3 (#14113)
Supersedes #14071 (just additional review and local re-generation/re-org
of needed headers).

This updates our own bundled fontconfig (for static builds) to 2.18.3.

Note that fontconfig has changed their build process a bit since this
has been updated last; they are leaning on the Autoconf (and Meson as
they are now deprecating use of Autoconf) toolchain(s) to now generate a
number of headers that are a part of the build process.

Since servicing this dependency in an effort to keep the build pure Zig
is starting to get more complex, I've added some documentation on how to
actually get a snapshot of the fontconfig repository in a state where
files can be looked for and copied over as needed. Otherwise, we might
want to in the future consider removing this altogether and just rely on
system integrations.
2026-09-06 14:39:51 -07:00
i999rri
5909690de1 config: rebuild RepeatableCommand's C mirror on clone
Cloning value_c copied Command.C structs whose string pointers
still referenced the source config's memory; once the source was
freed, an embedded host reading the command list after a config
replace (ghostty_config_clone + ghostty_config_free of the old
one) hit use-after-free, caught by ASan. Rebuild the mirror from
the cloned commands with the same cval path parseCLI uses, and add
a regression test asserting the clone's C strings do not alias the
source's.
2026-09-07 02:09:49 +09:00
mitchellh
11d1cc4fc8 deps: Update iTerm2 color schemes 2026-09-06 00:22:51 +00:00
Mitchell Hashimoto
492300cad1 input: encode non-ASCII alt prefixes as UTF-8 (#14146)
Legacy Alt-as-Escape now prefixes the complete UTF-8 sequence for
non-ASCII input. When text is unavailable, the encoder falls back to the
UTF-8 encoding of the unshifted codepoint.

This fixes 16 xterm legacy cases and eight fixterms cases without
changing MOK2. The cases I'm talking about are in my comparison
harness...

The helper now writes Escape and the selected payload directly. It
preserves macOS Option-as-Alt translation and shifted ASCII behavior.
2026-09-04 10:49:54 -07:00
Mitchell Hashimoto
587e08f3f7 input: encode non-ASCII alt prefixes as UTF-8
Legacy Alt-as-Escape now prefixes the complete UTF-8 sequence for
non-ASCII input. When text is unavailable, the encoder falls back to
the UTF-8 encoding of the unshifted codepoint.

This fixes 16 xterm legacy cases and eight fixterms cases without changing
MOK2. The cases I'm talking about are in my comparison harness...

The helper now writes Escape and the selected payload directly. It
preserves macOS Option-as-Alt translation and shifted ASCII behavior.
2026-09-04 10:36:56 -07:00
Mitchell Hashimoto
b97654fe76 input: improve xterm modifyOtherKeys 2 compatibility (#14145)
Follow-up to #14144

I wrote a harness that created all possible US-layout keyboard input
combinations with xterm patch 411 and Ghostty main and compared their
full encoding sequence. There are various miscompatibilities on purpose
but these were definitely bugs I wanted to address first.

- Normal-mode numeric keypad keys now preserve their numeric output
instead of falling through to generic MOK2 encoding. Application keypad
behavior is unchanged.
- F13 through F25 now emit their xterm-compatible function-key
sequences, including modifier parameters.
- Help and Context Menu now emit editing-key codes 28 and 29.
- Alt+Escape now emits `CSI 27;3;27~` under MOK2 while retaining the
traditional `ESC ESC` encoding otherwise.

After these changes, 2,081 of 2,096 cases match xterm exactly. The
remaining 15 differences are intentional.
2026-09-04 10:10:49 -07:00