Skip to content

dive/ghostty-tip-changelog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

512 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Tip

Subscribe to Releases: In GitHub, use Watch -> Custom -> Releases for this repository to get a daily notification with the previous day's Ghostty tip changes.

Note

This changelog summarizes Ghostty tip nightly builds. It is auto-updated every 3 hours by GitHub Actions and shows a rolling 7-day window by default.

Entries are grouped by UTC day and combine commits across all successful runs for each day.

Last updated: April 23, 2026 at 18:24 UTC.

April 23, 2026

Runs: 1, 2, 3, 4, 5, 6, 7
Summary: 7 runs • 40 commits • 8 authors

Changes

  • 61fce4d font: add Windows font discovery backend (@mattn)
    Adds a FreeType-based Discover implementation for Windows that walks
    the system (C:\Windows\Fonts) and per-user
    (%LOCALAPPDATA%\Microsoft\Windows\Fonts) font directories, matching
    descriptors via family_name / SFNT name table and optionally codepoint
    presence.
    
    Wired up as a new .freetype_windows backend which Backend.default() now
    returns on Windows. Existing freetype-only paths are untouched.
    
    With this in place, standard code paths -- +list-fonts, SharedGridSet
    font-family lookup, CodepointResolver fallback -- work on Windows
    without any os.tag == .windows branches in the caller.
    
  • fe2a909 font/discovery: use %SYSTEMROOT%\Fonts instead of a hardcoded path (@mattn)
    Resolve the system font directory from SYSTEMROOT rather than assuming
    it lives on C:. If SYSTEMROOT is somehow unset we skip the system
    directory instead of falling back to a literal drive letter.
    
  • 5aef254 address review: Discover.init takes a Library across all backends (@mattn)
    Per review feedback, drop the `if (Discover == Windows)` comptime
    branches in SharedGridSet and list_fonts by making every backend's
    `init` take a Library and ignore it when unused. Call sites just do
    `Discover.init(self.font_lib)` now.
    
    Also adds a discovery test for the Windows backend that looks up
    Arial and checks the returned face has the 'A' codepoint.
    
  • fe725b5 address review: update shaper test discover callsites (@mattn)
    CI on Windows (MSVC) surfaced three remaining callers of the old
    zero-arg `Discover.init()` in shaper test helpers that the earlier
    commit missed. Pass `lib` to match the new signature.
    
  • 0343a4d address review: update DeferredFace test discover callsites (@mattn)
    Two more holdouts in DeferredFace.zig test helpers calling
    Fontconfig.init / CoreText.init with no args; Nix test CI surfaced
    them for the fontconfig path.
    
  • e89cc0b pkg/simdutf: upgrade to simdutf v9, off our fork for nolibcxx (@mitchellh)
  • 48db54d pkg/simdutf: upgrade to simdutf v9, off our fork for nolibcxx (#12399) (@mitchellh)
  • 2f1a30d font: add Windows font discovery backend (#12386) (@mitchellh)
    Adds a FreeType-based `Discover` implementation for Windows. It walks
    the system font directory (`%SYSTEMROOT%\Fonts`) and the per-user
    directory (`%LOCALAPPDATA%\Microsoft\Windows\Fonts`), matches
    descriptors by FreeType `family_name` (falling back to the SFNT name
    table), and, when a codepoint is in the descriptor, filters on CMap
    coverage.
    
    Wired up as a new `.freetype_windows` backend which `Backend.default()`
    now returns on Windows. Existing freetype-only paths are untouched and
    no other platform is affected; cross-platform switches were extended to
    handle the new enum value the same way they handle `.freetype`.
    
    With this in place, the standard code paths (`+list-fonts`,
    `SharedGridSet` font-family lookup, `CodepointResolver` fallback) work
    on Windows without any `os.tag == .windows` branches in the caller.
    
    Verified by the `build-libghostty-windows-gnu` CI job. No runtime binary
    ships yet on Windows (no apprt), but this is a drop-in for the discovery
    API that the Win32 apprt (and the revisited `+list-fonts` PR #12384)
    will use. Once this lands, #12384 can be closed and `+list-fonts` will
    work on Windows through the ordinary discovery code path, which
    addresses the review feedback that `+list-fonts` should only show fonts
    the internal discovery can find.
    
    ---
    
    AI usage disclosure: developed with Claude Code (Claude Opus 4.7).
    Claude drafted the implementation based on my design direction -- I
    picked the "add a Discover backend" shape over the ad-hoc approach in
    the earlier `+list-fonts` PR. I reviewed each diff and validated it with
    a Windows GNU-ABI smoke build before pushing.
    
    Part of the Win32 apprt upstreaming series (see discussion #2563 /
    mattn/ghostty#1).
    
  • d778be2 font/opentype: add glyf table entry validation (@qwerasd205)
    We want to have this for the glyph protocol so that we can validate
    passed glyf data in libghostty without having to link freetype or
    anything like that.
    
  • 5086995 font/opentype: use packed struct for glyf point flags (@qwerasd205)
    Also fixes a logic bug where we weren't counting the length of x
    coordinates and y coordinates correctly when we had repeated flags.
    
  • 94e638d build: produce fat static archive on all platforms (@deblasis)
    The static libghostty archive previously only bundled vendored
    dependencies on macOS (via libtool). On Windows and Linux the
    archive contained only the Zig-compiled code, leaving consumers
    to discover and link freetype, harfbuzz, glslang, spirv-cross,
    simdutf, oniguruma, and other vendored deps separately.
    
    Now all platforms produce a single fat archive:
    - macOS: libtool (unchanged)
    - Windows: zig ar qcL --format=coff (LLVM archiver with the L
      flag to flatten nested archives; MSVC's lib.exe cannot read
      Zig-produced GNU-format archives)
    - Linux: ar -M with MRI scripts (same as libghostty-vt)
    
    This makes the static library self-contained for consumers like
    .NET NativeAOT that link via the platform linker (MSVC link.exe)
    and need all symbols resolved from a single archive.
    
  • a108546 build: disable ubsan in C deps for MSVC static linking (@deblasis)
    Zig's ubsan runtime cannot be bundled on Windows (LNK4229),
    leaving __ubsan_handle_* symbols unresolved when the static
    archive is consumed by an external linker like MSVC link.exe.
    
    freetype, glslang, spirv-cross, and highway already suppress
    ubsan unconditionally. Add MSVC-conditional suppression to the
    seven C dependencies that were missing it: harfbuzz, libpng,
    dcimgui, wuffs, oniguruma, zlib, and stb.
    
    The fix is gated on abi == .msvc so ubsan coverage is preserved
    on Linux and macOS where bundle_ubsan_rt works.
    
  • 08a2d9b build: share combineArchives and fix internal archive names (@deblasis)
    Extract CombineArchivesStep.zig so both GhosttyLib and GhosttyLibVt
    use the same archive-combining logic. Uses libtool on Darwin and the
    cross-platform combine_archives build tool elsewhere.
    
    Renames the internal library's fat archive outputs from ghostty to
    ghostty-internal, matching the pkg-config rename from PR 12214.
    
  • bc90a51 build: fat static archive and ubsan fix for external linkers (#12217) (@mitchellh)
    ## Summary
    
    > [!IMPORTANT]
    > Stacked on #12214. Review that first. (i am targeting `main` so here
    you will see the full changeset, including 12214
    
    Two changes that make the static libghostty archive consumable by
    external linkers (MSVC link.exe, .NET NativeAOT, Rust, Go, etc.):
    
    **Fat static archive on all platforms**
    
    The static archive previously only bundled vendored deps on macOS (via
    libtool). On Windows and Linux the archive contained only the
    Zig-compiled code, requiring consumers to find and link freetype,
    harfbuzz, glslang, spirv-cross, simdutf, oniguruma, etc. separately.
    
    Now all platforms produce a single fat archive:
    - macOS: libtool (unchanged)
    - Windows: zig ar qcL --format=coff (MSVC's lib.exe can't read
    Zig-produced GNU-format archives, so we use the bundled LLVM archiver)
    - Linux: ar -M with MRI scripts (same approach as libghostty-vt)
    
    **MSVC ubsan suppression for C deps**
    
    Zig's ubsan runtime can't be bundled on Windows (LNK4229), leaving
    __ubsan_handle_* symbols unresolved. freetype, glslang, spirv-cross, and
    highway already suppress ubsan. This adds MSVC-conditional suppression
    to seven more: harfbuzz, libpng, dcimgui, wuffs, oniguruma, zlib, and
    stb.
    
    Gated on abi == .msvc so ubsan coverage is preserved on Linux/macOS.
    
    ## Test plan
    
    - [x] zig build produces a fat ghostty-static.lib (~230MB) with ~200
    object files
    - [x] MSVC's lib /LIST can read the archive
    - [x] .NET NativeAOT consumer resolves all symbols (0 unresolved)
    - [x] Linux/macOS builds unaffected (ubsan remains enabled)
    
  • 464c504 font/opentype: accept header-only simple glyf entry (@qwerasd205)
  • c1b685b Add code for validating OpenType GLYF table entries (#12375) (@mitchellh)
    This code was motivated by the need for the glyph protocol handler
    (#12352) to be able to validate the provided `glyf` payload, without
    having to link freetype or anything (because libghostty-vt needs to be
    static). As such it's written specifically to meet those needs, but in
    such a way that it can be expanded if we find a need for more in-depth
    inspection of `glyf`s in the future.
    
  • ef7ecbd termio: run Windows shell commands without a cmd.exe wrapper (@mattn)
    On Windows the shell value was always executed as `cmd.exe /C <shell>`.
    For even a simple `command = wsl ~` this spawned two processes (the
    cmd wrapper and the user's actual shell) and had visible side effects:
    an extra cmd.exe in the process tree, and cmd AutoRun state (DOSKEY
    aliases, `cd` in init.cmd, etc.) running in the wrapper rather than
    the user's shell, since AutoRun is per-process.
    
    Run the shell value directly. If it contains whitespace, split on
    whitespace into argv. Bare `cmd.exe` is resolved via %COMSPEC% which
    is the documented path to the current command processor; other bare
    values are left to PATH resolution in Command.startWindows.
    
    The simple whitespace split does not honor Windows CLI quoting rules.
    Users who need quoted arguments should use the direct command form.
    
    Also skip the termios focus timer on Windows since Windows has no
    termios; the focusGained callback was starting a timer whose callback
    would then do nothing.
    
  • c32e88c Command: let CreateProcessW resolve the program via PATH (@mattn)
    Pass null for lpApplicationName and put the program as the first
    token of lpCommandLine. Per the Windows docs, this makes
    CreateProcessW perform the standard program search (parent-app dir,
    CWD, system dirs, PATH) and append ".exe" when the name has no
    extension.
    
    So a bare command name like `wsl` or `pwsh` from the Ghostty config
    now resolves without any PATH/PATHEXT handling on our side. The
    child also sees its argv[0] exactly as written rather than replaced
    with the resolved absolute path.
    
  • 8c5b8ac address review: add unit tests for Windows execCommand paths (@mattn)
    Per review feedback, cover the four Windows branches added in the
    parent commit:
    
    - bare `cmd.exe` resolves via `%COMSPEC%` (with documented fallback)
    - bare non-cmd shell (`pwsh.exe`) is passed through unchanged
    - shell value with arguments (`wsl ~`) is split on whitespace
    - direct command is passed through without modification
    
  • 1ae27f9 os: trim trailing path separators from tmpdir (@jparise)
    Because we generally read this value from an environment variable, we
    the resulting value can include a trailing slash (as on macOS). This
    results in less-friendly path operations for callers who are building
    paths based on this value.
    
    `std.fs.path.join()` handles trailing slashes just fine, but it's an
    allocating API. For callers who just want to format a path, they have to
    assume they need to include their own path separator.
    
    We can make this friendlier by always trimming trailing path separators
    from the environment variable values before returning the slice.
    
    This behavior matches "higher-level" languages' standard libraries (I
    checked Python, Node, Ruby, and Perl). Other "systems" languages (Go,
    Rust) just return the system value as-is, like we were doing before.
    
  • b34c62b Command: let CreateProcessW resolve the program via PATH (#12387) (@mitchellh)
    Windows users often set bare command names in the Ghostty config
    (`command = bash`) or pass them via `-e`, matching how they would on
    Linux/macOS. Today that fails because `CreateProcessW` does not do
    program search for `lpApplicationName` on its own.
    
    Thanks to @qwerasd205 for pointing out that passing `NULL` for
    `lpApplicationName` is exactly how Windows docs say to get program
    search for free. This PR does that: drop the explicit utf16 conversion
    for `lpApplicationName`, pass `null`, and make sure the program name is
    the first token of `lpCommandLine`. Windows then walks parent-app dir,
    CWD, system dirs, and PATH (and appends `.exe` for extensionless names).
    The child also sees its `argv[0]` exactly as we wrote it rather than a
    resolved absolute path, which is less surprising.
    
    Net change is +15 / -7 in `src/Command.zig`; no new helpers, no changes
    outside that file. The earlier version of this PR (which added
    PATH/PATHEXT handling in `internal_os.path.expand`) is obsoleted by this
    approach and has been force-pushed away.
    
    ---
    
    AI usage disclosure: developed with Claude Code (Claude Opus 4.7).
    Claude drafted the implementation based on my direction after
    @qwerasd205's review suggested the NULL-lpApplicationName approach. I
    reviewed the diff, built and verified it on the Windows GNU-ABI target,
    and am responsible for the code landing here.
    
    Part of the Win32 apprt upstreaming series (see discussion #2563 /
    mattn/ghostty#1).
    
  • 04accc0 os: trim trailing path separators from tmpdir (#12397) (@jparise)
    Because we generally read this value from an environment variable, we
    the resulting value can include a trailing slash (as on macOS). This
    results in less-friendly path operations for callers who are building
    paths based on this value.
    
    `std.fs.path.join()` handles trailing slashes just fine, but it's an
    allocating API. For callers who just want to format a path, they have to
    assume they need to include their own path separator.
    
    We can make this friendlier by always trimming trailing path separators
    from the environment variable values before returning the slice.
    
    This behavior matches "higher-level" languages' standard libraries (I
    checked Python, Node, Ruby, and Perl). Other "systems" languages (Go,
    Rust) just return the system value as-is, like we were doing before.
    
  • 239b97e termio: run Windows shell commands without a cmd.exe wrapper (#12389) (@mitchellh)
    On Windows the configured shell was always executed as `cmd.exe /C
    <shell>`. That inserts a cmd.exe even for simple values like `command =
    wsl ~` or `command = pwsh -NoLogo`, producing two processes where one
    would do.
    
    Two concrete side effects:
    
    An extra cmd.exe appears in every Windows terminal's process tree
    (visible in Task Manager / process listings), two processes per surface
    where only one is the user's shell.
    
    cmd.exe state set by AutoRun (`HKCU\Software\Microsoft\Command
    Processor\AutoRun`, used commonly for DOSKEY aliases or `cd` in
    `init.cmd`) lives in the wrapping cmd process, not in the user's shell.
    Since AutoRun state like DOSKEY aliases is per-process, the user's
    aliases don't reach the shell they actually interact with.
    
    Run the shell value directly instead. If it contains whitespace, split
    on whitespace into argv. A bare `cmd.exe` is resolved via `%COMSPEC%`
    (the documented path to the current command processor). Other bare
    values are left to PATH resolution in `Command.startWindows` (#12387).
    
    The simple whitespace split does not honor Windows CLI quoting rules;
    users who need quoted arguments should use the direct command form,
    which takes an argv array as-is. For the common case (`wsl ~`, `pwsh
    -NoLogo`, `cmd.exe /k init.cmd`, etc.) this covers the shapes users
    actually write today.
    
    Also skips the termios focus timer on Windows in `focusGained`, since
    Windows has no termios -- the callback was arming a timer whose tick did
    nothing and just added noise.
    
    ---
    
    AI usage disclosure: developed with Claude Code (Claude Opus 4.7).
    Claude drafted the implementation based on my design direction -- I
    picked which pieces belong in this PR (drop the cmd wrapper, use
    `%COMSPEC%`, skip the termios focus timer) and which belong in sibling
    PRs. I reviewed each diff and validated it with a Windows GNU-ABI smoke
    build before pushing.
    
    Part of the Win32 apprt upstreaming series (see discussion #2563 /
    mattn/ghostty#1).
    
  • ae1dd56 fuzz: fix macOS AFL toolchain and linker setup for macOS 26.4 (@mitchellh)
    On macOS 26.4, AFL builds were picking up Nix compiler-wrapper
    variables and Apple SDK target settings from the shell environment.
    That caused afl-cc to drive the wrong linker and target configuration,
    which broke even simple fuzz harness builds. Unset the Nix compiler and
    linker environment in the fuzz dev shell so AFL++ uses the system or
    Homebrew Apple toolchain directly.
    
    Also force afl-cc to link with lld because the newer Apple linker
    asserts on the custom sections emitted by AFL's LLVM
    instrumentation. Finally, pin fuzz-libghostty to the host target so the
    build does not inherit stray SDK targets from the environment.
    
  • d6d7bdb fuzz: fix macOS AFL toolchain and linker setup for macOS 26.4 (#12398) (@mitchellh)
    * Unset the Nix compiler and linker environment in the fuzz dev shell so
    AFL++ uses the system or Homebrew Apple toolchain directly.
    * Force afl-cc to link with lld because the newer Apple linker asserts
    on the custom sections emitted by AFL's LLVM instrumentation.
    * Pin fuzz-libghostty to the host target so the build does not inherit
    stray SDK targets from the environment.
    
  • a8ed37a macOS: fix command parsing in NewTerminalIntent (@bo2themax)
    Fixes #12391, regression from #10765
    
  • b0b23f5 macOS: check abnormal-command-exit-runtime when process exits (@bo2themax)
  • 70bd66c macOS: check abnormal-command-exit-runtime when process exits (#12393) (@mitchellh)
    <img width="849" height="434" alt="image"
    src="https://github.com/user-attachments/assets/81c89d8d-6f0a-4bb9-b942-6734ff616bf9"
    />
    
  • 7629c4b macOS: fix command parsing in NewTerminalIntent (#12392) (@mitchellh)
    Fixes #12391, regression from #10765
    
  • 8f49ed6 ci: add GNU-ABI Windows library build job (@mattn)
    The existing `build-libghostty-vt-windows` job builds libghostty-vt
    with the MSVC ABI. The Win32 apprt (discussion #2563) will target
    the GNU ABI, so add a parallel job that exercises the GNU-ABI path
    to catch bitrot.
    
    The job runs `zig build -Dtarget=native-native-gnu -Dapp-runtime=none`
    which produces ghostty-vt.dll and ghostty-internal.dll without
    requiring a platform-specific apprt.
    
  • e88c6c0 ci: add GNU-ABI Windows library build job (#12383) (@jcollie)
    Adds a new CI job `build-libghostty-windows-gnu` that exercises the
    GNU-ABI Windows library build path. The existing
    `build-libghostty-vt-windows` job covers the MSVC ABI; with the recent
    fixes (#12373 / #12381 / #12382) the GNU path is now viable, and this
    job catches regressions before the upcoming Win32 apprt (discussion
    #2563) starts to depend on it.
    
    Named `build-libghostty-windows-gnu` rather than following the
    `build-libghostty-vt-*` convention because this job also builds
    `ghostty-internal.dll`, not just libghostty-vt. Happy to rename if you
    prefer a different convention.
    
    Part of the Win32 apprt upstreaming series (see discussion #2563 /
    mattn/ghostty#1).
    
  • ce3c319 build(deps): bump cachix/install-nix-action from 31.10.4 to 31.10.5 (@dependabot[bot])
    Bumps [cachix/install-nix-action](https://github.com/cachix/install-nix-action) from 31.10.4 to 31.10.5.
    - [Release notes](https://github.com/cachix/install-nix-action/releases)
    - [Changelog](https://github.com/cachix/install-nix-action/blob/master/RELEASE.md)
    - [Commits](https://github.com/cachix/install-nix-action/compare/616559265b40713947b9c190a8ff4b507b5df49b...ab739621df7a23f52766f9ccc97f38da6b7af14f)
    
    ---
    updated-dependencies:
    - dependency-name: cachix/install-nix-action
      dependency-version: 31.10.5
      dependency-type: direct:production
      update-type: version-update:semver-patch
    ...
    
  • 83a3e5a windows: disable C++ ubsan regardless of ABI (@mattn)
    The existing `-fno-sanitize=undefined` flag was gated on `abi == .msvc`
    to avoid undefined `__ubsan_handle_*` references from simdutf/highway.
    The same linker error reproduces on Windows GNU ABI for the same
    reason: the Zig-bundled libraries don't provide a matching UBSan
    runtime for these C/C++ objects in our build configurations.
    
    Widen the condition to `os.tag == .windows` so both MSVC and GNU
    Windows targets skip ubsan for these C++ deps.
    
  • 5c4ab6c build: pass zig exe path to combine_archives (@mattn)
    `combine_archives` spawns `zig ar -M` to combine static archives via
    an MRI script. It hard-coded the command name `"zig"` and relied on
    the binary being on `PATH`, which fails on Windows when the build is
    driven by an absolute zig.exe path (common in CI and in Scoop/winget
    installs where PATH isn't populated at build time). The failure
    surfaces as `error: FileNotFound` from `Child.spawn`.
    
    Pass `b.graph.zig_exe` as the first argument so the tool always uses
    the exact zig binary that is driving the build, matching how other
    build tools in this repo spawn zig subcommands.
    
  • b526175 build(deps): bump cachix/install-nix-action from 31.10.4 to 31.10.5 (#12380) (@jcollie)
    Bumps
    [cachix/install-nix-action](https://github.com/cachix/install-nix-action)
    from 31.10.4 to 31.10.5.
    <details>
    <summary>Release notes</summary>
    <p><em>Sourced from <a
    href="https://github.com/cachix/install-nix-action/releases">cachix/install-nix-action's
    releases</a>.</em></p>
    <blockquote>
    <h2>v31.10.5</h2>
    <h2>What's Changed</h2>
    <ul>
    <li>nix: 2.34.5 -&gt; 2.34.6 by <a
    href="https://github.com/github-actions"><code>@​github-actions</code></a>[bot]
    in <a
    href="https://redirect.github.com/cachix/install-nix-action/pull/274">cachix/install-nix-action#274</a></li>
    </ul>
    <p><strong>Full Changelog</strong>: <a
    href="https://github.com/cachix/install-nix-action/compare/v31...v31.10.5">https://github.com/cachix/install-nix-action/compare/v31...v31.10.5</a></p>
    </blockquote>
    </details>
    <details>
    <summary>Commits</summary>
    <ul>
    <li><a
    href="https://github.com/cachix/install-nix-action/commit/ab739621df7a23f52766f9ccc97f38da6b7af14f"><code>ab73962</code></a>
    Merge pull request <a
    href="https://redirect.github.com/cachix/install-nix-action/issues/274">#274</a>
    from cachix/create-pull-request/patch</li>
    <li><a
    href="https://github.com/cachix/install-nix-action/commit/41e4d4a5ae81b05c01f2e2e77bfbf2fe219b53c1"><code>41e4d4a</code></a>
    nix: 2.34.5 -&gt; 2.34.6</li>
    <li>See full diff in <a
    href="https://github.com/cachix/install-nix-action/compare/616559265b40713947b9c190a8ff4b507b5df49b...ab739621df7a23f52766f9ccc97f38da6b7af14f">compare
    view</a></li>
    </ul>
    </details>
    <br />
    
    
    [![Dependabot compatibility
    score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cachix/install-nix-action&package-manager=github_actions&previous-version=31.10.4&new-version=31.10.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>
    
  • 1979b1c build: pass zig exe path to combine_archives (#12382) (@jcollie)
    `combine_archives` spawns `zig ar -M`, hard-coding the command name
    `"zig"` and relying on the binary being on `PATH`. On Windows when the
    build is driven by an absolute zig.exe path (common in CI and
    Scoop/winget installs), this surfaces as `error: FileNotFound`.
    
    Pass `b.graph.zig_exe` explicitly so the tool always uses the exact zig
    binary driving the build, matching how other build tools in this repo
    spawn zig subcommands.
    
    Part of the Win32 apprt upstreaming series (see discussion #2563 /
    mattn/ghostty#1).
    
  • db210e4 windows: disable C++ ubsan regardless of ABI (#12381) (@jcollie)
    Widens the existing `-fno-sanitize=undefined` gate from `abi == .msvc`
    to `os.tag == .windows`. The same undefined `__ubsan_handle_*` link
    errors from simdutf/highway also reproduce on Windows GNU ABI, and the
    fix is identical.
    
    Part of the Win32 apprt upstreaming series (see discussion #2563 /
    mattn/ghostty#1).
    
  • 2d4d47e windows: provide DllMain stub for non-MSVC ABI (@mattn)
    Part of preparation for upstreaming a Win32 application runtime
    (see discussion #2563). This is one of three small build-related
    fixes that unblock the Windows GNU-ABI library build.
    
    When targeting Windows with GNU ABI, the existing `DllMain` declaration
    falls through to `void` (a type), which Zig stdlib's `start.zig` then
    attempts to call as a function via `root.DllMain(...)` - producing the
    compile error "type 'type' not a function".
    
    Restructure the conditional so that:
      - non-Windows builds keep `DllMain = void`
      - Windows + MSVC keeps the existing CRT-init handler (unchanged)
      - Windows + non-MSVC gets a no-op `BOOL` handler
    
    This unblocks `zig build -Dtarget=native-native-gnu -Dapp-runtime=none`
    on Windows.
    
  • 5a84afe address review: collapse DllMain into a single struct (@mattn)
    Per review feedback (#12373), fold the nested `if/else if/else` into a
    single Windows-gated struct whose handler picks up the abi difference
    via a comptime check. This removes the duplicated `const BOOL = ...`
    block that the two per-abi structs shared.
    
  • 880a599 windows: provide DllMain stub for non-MSVC ABI (#12373) (@jcollie)
    Part of preparation for adding a Win32 application runtime (discussion
    #2563). One of three small, independent build fixes that together
    unblock the Windows GNU-ABI library build.
    
    On Windows with non-MSVC ABI, `pub const DllMain` resolved to `void` (a
    type), and Zig's stdlib `start.zig` then tried to call it as a function
    via `root.DllMain(...)`, failing to compile with "type 'type' not a
    function".
    
    This restructures the conditional so MSVC keeps its existing CRT-init
    handler unchanged, non-MSVC Windows gets a no-op `BOOL` handler, and
    non-Windows continues to resolve to `void`.
    
    Verified: `zig build -Dtarget=native-native-gnu -Dapp-runtime=none
    [-Doptimize=ReleaseSafe]` now builds cleanly on Windows.
    

April 22, 2026

Runs: 1, 2
Summary: 2 runs • 4 commits • 4 authors

Changes

  • 2a3d93f Update VOUCHED list (#12374) (@ghostty-vouch[bot])
    Triggered by [discussion
    comment](https://github.com/ghostty-org/ghostty/discussions/12168#discussioncomment-16672511)
    from @jcollie.
    
    Vouch: @mattn
    
  • 38d6451 libghostty-vt: emit resolved include/lib dirs in .pc files (@domenkozar)
    `${prefix}/include` and `${prefix}/lib` are wrong under split-prefix installs (e.g. Nix multi-output).
    Use `b.h_dir` / `b.lib_dir` instead and drop the unneeded Nix postInstall/postFixup hooks.
    
  • 733abbc libghostty-vt: revert .pc changes and use Nix to fix them (@sandydoo)
    Keeps the .pc files templated and instead uses Nix to rewrite the libdir for the static library.
    
  • 98b7ad4 libghostty-vt: fix broken dynamic linking with pkg-config (#12364) (@jcollie)
    ~`${prefix}/include` and `${prefix}/lib` are incorrect under
    split-prefix installs (e.g. Nix multi-output). Use `b.h_dir` /
    `b.lib_dir` instead and drop the unneeded Nix postInstall/postFixup
    hooks.~
    
    Refactors the libghostty-vt derivation to:
    
    - fix `libdir` pointing to the wrong output in the pkg-config files.
    This would throw a missing library error at runtime.
    - reduce the amount of manual copying, linking, and patching of files.
    
    An earlier version of this PR used the zig compiler + `.pc` files to do
    this. People pointed out concerns, so I came up with a simpler solution.
    
    Claude Code was used to debug and write an initial fix. Final changes
    rewritten and simplified by me. No AI was used to write comments,
    descriptions, etc.
    

April 21, 2026

Runs: 1, 2, 3, 4
Summary: 4 runs • 12 commits • 7 authors

Changes

  • d2f8602 Use patched Zig 0.15.2 on macOS to avoid Xcode 26.4 issue (@mitchellh)
    This updates our Nix flake to use the Homebrew bottled Zig 0.15.2 which
    contains a patch to work around the issue with Zig 0.15.x and Xcode
    26.4.
    
  • 6e0b031 Use patched Zig 0.15.2 on macOS to avoid Xcode 26.4 issue (#12363) (@mitchellh)
    This updates our Nix flake to use the Homebrew bottled Zig 0.15.2 which
    contains a patch to work around the issue with Zig 0.15.x and Xcode
    26.4.
    
  • 9bad936 macOS: open preferred config if exists (@bo2themax)
  • 22f9233 contributing: don't encourage opening an issue (@trag1c)
  • cb518e6 ci: use a custom template for ghostty-vouch issue comments (@trag1c)
  • e9a196c build(xcframework): exclude libghostty-vt headers from GhosttyKit (@claude)
    The GhosttyKit xcframework previously shipped the entire include/
    directory, which pulled in the libghostty-vt headers under
    include/ghostty/. Because those headers are not referenced from the
    ghostty.h umbrella, Clang's module system emitted "umbrella header for
    module 'GhosttyKit' does not include header 'ghostty/vt/*.h'" warnings
    in Xcode builds.
    
    Stage only ghostty.h and module.modulemap via addWriteFiles so the
    xcframework Headers directory contains exactly the GhosttyKit API,
    mirroring the pattern used in GhosttyLibVt.xcframework.
    
  • a6105b3 build(xcframework): exclude libghostty-vt headers from GhosttyKit (#12360) (@mitchellh)
    The GhosttyKit xcframework previously shipped the entire include/
    directory, which pulled in the libghostty-vt headers under
    include/ghostty/. Because those headers are not referenced from the
    ghostty.h umbrella, Clang's module system emitted "umbrella header for
    module 'GhosttyKit' does not include header 'ghostty/vt/*.h'" warnings
    in Xcode builds.
    
    Stage only ghostty.h and module.modulemap via addWriteFiles so the
    xcframework Headers directory contains exactly the GhosttyKit API,
    mirroring the pattern used in GhosttyLibVt.xcframework.
    
    ## AI disclosure
    
    Claude made the changes (including the commit message), I reviewed and
    tested them.
    
  • 95c61e2 docs,ci: clarify that users can never open issues (#12335) (@mitchellh)
    I removed the entire paragraph in CONTRIBUTING.md because the "Quick
    Guide" section explains it all better already.
    
  • 62fdd88 macOS: open preferred config if exists (#12321) (@mitchellh)
    This helps developers like me to use a separate config for debugging
    (which is already supported by the environment variable
    `GHOSTTY_CONFIG_PATH`).
    
    I can already use the local scheme to load a debugging config file, but
    when opening the config file through Ghostty, it will still open the
    default config.
    
    This changes doesn't affect the release build, since `configPath` is
    only set in the DEBUG build.
    
  • 58af471 Update VOUCHED list (#12362) (@ghostty-vouch[bot])
    Triggered by [discussion
    comment](https://github.com/ghostty-org/ghostty/discussions/12361#discussioncomment-16656763)
    from @jcollie.
    
    Vouch: @sandydoo
    
  • 5eeb4d9 build(deps): bump namespacelabs/nscloud-cache-action from 1.4.2 to 1.4.3 (@dependabot[bot])
    Bumps [namespacelabs/nscloud-cache-action](https://github.com/namespacelabs/nscloud-cache-action) from 1.4.2 to 1.4.3.
    - [Release notes](https://github.com/namespacelabs/nscloud-cache-action/releases)
    - [Commits](https://github.com/namespacelabs/nscloud-cache-action/compare/a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9...15799a6b54e5765f85b2aac25b3f0df43ed571c0)
    
    ---
    updated-dependencies:
    - dependency-name: namespacelabs/nscloud-cache-action
      dependency-version: 1.4.3
      dependency-type: direct:production
      update-type: version-update:semver-patch
    ...
    
  • 3a1482d build(deps): bump namespacelabs/nscloud-cache-action from 1.4.2 to 1.4.3 (#12355) (@jcollie)
    Bumps
    [namespacelabs/nscloud-cache-action](https://github.com/namespacelabs/nscloud-cache-action)
    from 1.4.2 to 1.4.3.
    <details>
    <summary>Release notes</summary>
    <p><em>Sourced from <a
    href="https://github.com/namespacelabs/nscloud-cache-action/releases">namespacelabs/nscloud-cache-action's
    releases</a>.</em></p>
    <blockquote>
    <h2>v1.4.3</h2>
    <h2>What's Changed</h2>
    <ul>
    <li>
    <p>Add npm mode by <a
    href="https://github.com/rcrowe"><code>@​rcrowe</code></a> in <a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/pull/118">namespacelabs/nscloud-cache-action#118</a></p>
    </li>
    <li>
    <p>Use repeated --path arguments instead of comma-separated values by <a
    href="https://github.com/annervisser"><code>@​annervisser</code></a> in
    <a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/pull/112">namespacelabs/nscloud-cache-action#112</a></p>
    </li>
    <li>
    <p>Bump the minor-actions-dependencies group across 1 directory with 7
    updates by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
    in <a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/pull/115">namespacelabs/nscloud-cache-action#115</a></p>
    </li>
    <li>
    <p>Add manual-paths mode test with multiple paths by <a
    href="https://github.com/annervisser"><code>@​annervisser</code></a> in
    <a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/pull/111">namespacelabs/nscloud-cache-action#111</a></p>
    </li>
    <li>
    <p>Bump the minor-npm-dependencies group across 1 directory with 6
    updates by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
    in <a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/pull/116">namespacelabs/nscloud-cache-action#116</a></p>
    </li>
    <li>
    <p>Add major-actions-dependencies Dependabot group by <a
    href="https://github.com/rcrowe"><code>@​rcrowe</code></a> in <a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/pull/119">namespacelabs/nscloud-cache-action#119</a></p>
    </li>
    <li>
    <p>Upgrade <code>@​namespacelabs/actions-toolkit</code> to 0.3.0 by <a
    href="https://github.com/rcrowe"><code>@​rcrowe</code></a> in <a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/pull/125">namespacelabs/nscloud-cache-action#125</a></p>
    </li>
    <li>
    <p>Bump the major-actions-dependencies group across 1 directory with 4
    updates by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
    in <a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/pull/123">namespacelabs/nscloud-cache-action#123</a></p>
    </li>
    <li>
    <p>Bump the minor-actions-dependencies group across 1 directory with 3
    updates by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
    in <a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/pull/122">namespacelabs/nscloud-cache-action#122</a></p>
    </li>
    <li>
    <p>Bump eslint from 9.39.4 to 10.2.0 by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
    in <a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/pull/121">namespacelabs/nscloud-cache-action#121</a></p>
    </li>
    <li>
    <p>Bump typescript from 5.9.3 to 6.0.2 by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
    in <a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/pull/120">namespacelabs/nscloud-cache-action#120</a></p>
    </li>
    <li>
    <p>Bump <code>@​eslint/js</code> from 9.39.4 to 10.0.1 by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
    in <a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/pull/102">namespacelabs/nscloud-cache-action#102</a></p>
    </li>
    <li>
    <p>Bump typescript from 6.0.2 to 6.0.3 in the minor-npm-dependencies
    group by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
    in <a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/pull/126">namespacelabs/nscloud-cache-action#126</a></p>
    </li>
    </ul>
    <p><strong>Full Changelog</strong>: <a
    href="https://github.com/namespacelabs/nscloud-cache-action/compare/v1...v1.4.3">https://github.com/namespacelabs/nscloud-cache-action/compare/v1...v1.4.3</a></p>
    </blockquote>
    </details>
    <details>
    <summary>Commits</summary>
    <ul>
    <li><a
    href="https://github.com/namespacelabs/nscloud-cache-action/commit/15799a6b54e5765f85b2aac25b3f0df43ed571c0"><code>15799a6</code></a>
    Bump typescript from 6.0.2 to 6.0.3 in the minor-npm-dependencies group
    (<a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/issues/126">#126</a>)</li>
    <li><a
    href="https://github.com/namespacelabs/nscloud-cache-action/commit/a74ba09be4eecba86290920825b0b74efab518e2"><code>a74ba09</code></a>
    Add npm mode test (<a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/issues/118">#118</a>)</li>
    <li><a
    href="https://github.com/namespacelabs/nscloud-cache-action/commit/3accca63b228cb1a9847e533466b497d5422da59"><code>3accca6</code></a>
    Bump <code>@​eslint/js</code> from 9.39.2 to 10.0.1 (<a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/issues/102">#102</a>)</li>
    <li><a
    href="https://github.com/namespacelabs/nscloud-cache-action/commit/320beceb2e4cff95a23363a5c81fd0d0326ba5d6"><code>320bece</code></a>
    Bump typescript from 5.9.3 to 6.0.2 (<a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/issues/120">#120</a>)</li>
    <li><a
    href="https://github.com/namespacelabs/nscloud-cache-action/commit/7b579df1e212c05a2e3ad697a5d9780c934e0cb3"><code>7b579df</code></a>
    Bump eslint from 9.39.4 to 10.2.0 (<a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/issues/121">#121</a>)</li>
    <li><a
    href="https://github.com/namespacelabs/nscloud-cache-action/commit/0170534ed677e581623af217e966496a2d96699a"><code>0170534</code></a>
    Bump the minor-actions-dependencies group with 3 updates (<a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/issues/122">#122</a>)</li>
    <li><a
    href="https://github.com/namespacelabs/nscloud-cache-action/commit/04d1d76ca05cb8ce5c021032972983806b0a8c4c"><code>04d1d76</code></a>
    Bump the major-actions-dependencies group across 1 directory with 4
    updates (...</li>
    <li><a
    href="https://github.com/namespacelabs/nscloud-cache-action/commit/0496385e4a2a0ba41f6ad494948696fa90c60f72"><code>0496385</code></a>
    Upgrade <code>@​namespacelabs/actions-toolkit</code> to 0.3.0 (<a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/issues/125">#125</a>)</li>
    <li><a
    href="https://github.com/namespacelabs/nscloud-cache-action/commit/e14531ae78967dc1dc2ba26fdc3b6d461dcdb525"><code>e14531a</code></a>
    Add major-actions-dependencies Dependabot group (<a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/issues/119">#119</a>)</li>
    <li><a
    href="https://github.com/namespacelabs/nscloud-cache-action/commit/1f34f9763c6fa1cb6986aacb3c0211a87fdfa87a"><code>1f34f97</code></a>
    Bump the minor-npm-dependencies group across 1 directory with 6 updates
    (<a
    href="https://redirect.github.com/namespacelabs/nscloud-cache-action/issues/116">#116</a>)</li>
    <li>Additional commits viewable in <a
    href="https://github.com/namespacelabs/nscloud-cache-action/compare/a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9...15799a6b54e5765f85b2aac25b3f0df43ed571c0">compare
    view</a></li>
    </ul>
    </details>
    <br />
    
    
    [![Dependabot compatibility
    score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=namespacelabs/nscloud-cache-action&package-manager=github_actions&previous-version=1.4.2&new-version=1.4.3)](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>
    

April 20, 2026

Runs: 1, 2
Summary: 2 runs • 10 commits • 4 authors

Changes

  • 2db58a6 update zon2nix (@jcollie)
  • c7a7307 macOS: fix App Icon update in Finders (@bo2themax)
    Looks like  `NSWorkspace.shared.setIcon` can only be called from the main App, DockTilePlugin is sandboxed and doesn't have the permission to `file-write-finderinfo`.
    
    It works fine in debug, but not in release. This fixes #11489, #11290
    
  • 61363e8 macOS: fix App Icon update in Finder (#12344) (@mitchellh)
    Looks like `NSWorkspace.shared.setIcon` can only be called from the main
    App, DockTilePlugin is sandboxed and doesn't have the permission to
    `file-write-finderinfo`.
    
    <img width="1186" height="144" alt="image"
    src="https://github.com/user-attachments/assets/e5ea4f1c-718c-493a-bda2-32787881881e"
    />
    
    
    It works fine in debug, but not in release. This fixes #11489
    
  • c3c8572 update zon2nix (#12337) (@mitchellh)
    Adds better Zig 0.16 compatibility.
    
  • 9a90022 macos: add pid and tty properties to AppleScript terminal class (@TweedBeetle)
    Expose the foreground process PID and TTY device path as read-only properties on the AppleScript terminal class and App Intents TerminalEntity. This enables reliable process-to-terminal mapping for automation tools when multiple terminals share the same CWD.
    
    Closes #11592
    Closes #10756
    
    Session: 019d341c-a165-7843-a2f7-2f426114cf17
    
  • 8302740 terminal: fix memory leak that could happen with invalid Kitty image cmd (@mitchellh)
  • 0509f00 terminal/apc: introduce a max_bytes parameter to prevent DoS (@mitchellh)
  • 0069e28 libghostty: expose the APC max byte limits (@mitchellh)
  • 4446dba Misc APC improvements (#12349) (@mitchellh)
    * Fix a memory leak when invalid Kitty graphics data is sent via APC
    (this is the only commit for backporting to 1.3.2)
    * Add `max_bytes` to limit size of buffered APC data by protocol to
    prevent DoS, default to reasonable values
    * libghostty: expose max bytes APC options
    
  • afdae72 macos: add pid and tty properties to AppleScript terminal and App Intents TerminalEntity (#11922) (@bo2themax)

April 19, 2026

Runs: 1, 2, 3, 4, 5
Summary: 5 runs • 17 commits • 7 authors

Changes

  • adb0d79 android: Avoid referencing POSIX shared memory functions (@fornwall)
    Stop trying to use POSIX shared memory functions such as
    `shm_open` on Android as it's unsupported and the platform libc does not
    have those symbols.
    
    This avoids an error such as the below when trying to use
    `libghostty-vt` on Android:
    
    > dlopen failed: cannot locate symbol "shm_open" referenced by [..]
    
  • dcc39dc android: Avoid referencing POSIX shared memory functions (#12341) (@mitchellh)
    Stop trying to use POSIX shared memory functions such as `shm_open` on
    Android as it's unsupported and the platform libc does not have those
    symbols.
    
    This avoids an error such as the below when trying to use
    `libghostty-vt` on Android:
    
    > dlopen failed: cannot locate symbol "shm_open" referenced by [..]
    
  • d69d937 Update VOUCHED list (#12340) (@ghostty-vouch[bot])
    Triggered by [discussion
    comment](https://github.com/ghostty-org/ghostty/discussions/12339#discussioncomment-16627477)
    from @jcollie.
    
    Vouch: @fornwall
    
  • 9cbca54 Fix typo + improve fluency in README_TRANSLATORS § Viewing translations. (@00-kat)
  • 8a6c664 Fix typo in i18n_locales.zig. (@00-kat)
  • 49cd2ba Mark i18n_locales.zig as owned by ghostty-org/localization/manager. (@00-kat)
  • 2e33589 Avoid marking files as owned by ghostty-org/localization. (@00-kat)
    That team and its children have a very large number of members, so
    requests for review from them would make for a mass ping.
    
  • ed29fd5 Translation documentation-related typos + CODEOWNERS update (#12336) (@00-kat)
  • 4f3a9cb i18n: add Belarusian translation (be) (illia krauchanka)
  • ff9ca55 i18n: fix terminology in Belarusian translation (be) (illia krauchanka)
  • 3ee0b0a i18n: fix gender agreement for match translations (be) (illia krauchanka)
  • 4381153 i18n: replace змесціва with змест (be) (illia krauchanka)
  • 053dee8 i18n: replace гартаць with пракручваць (be) (illia krauchanka)
  • f370099 i18n: address review feedback (be) (Illia Krauchanka)
  • 28b7ef1 i18n: add Belarusian translation (be) (#12284) (@00-kat)
    This PR adds Belarusian (be) language support to Ghostty.
    
    ## Changes
    
    - `po/be.po` — new Belarusian translation file (80 strings)
    - `src/os/i18n_locales.zig` — added `be` locale
    - `CODEOWNERS` — added `/po/be.po @ghostty-org/be_BY`
    
    ## Notes
    
    Terminology was cross-referenced with:
    - KDE Belarusian translations (l10n.kde.org)
    - qBittorrent Belarusian translation
    - far2l Belarusian translation
    - Ubuntu Belarusian Translators Dictionary
    
  • 5939b8c macOS: fix 12266 by using the correct coordinates for the hitTest (@bo2themax)
    Regression of #11872
    
  • 7a3e3dc macOS: fix #12266 by using the correct coordinates for the hitTest (#12322) (@bo2themax)
    Fixes #12266, regression of #11872.
    

April 17, 2026

Runs: 1
Summary: 1 runs • 2 commits • 2 authors

Changes

About

A friendly changelog for Ghostty’s tip (nightly) version releases

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages