ghostty (1.0.0-1) unstable; urgency=medium

  [ Mitchell Hashimoto ]
  * Initial
  * remove mach-glfw
  * add glfw vendor
  * nix: add libX11
  * initial glfw stuff working
  * rendering a window
  * Remove glfw gitmodule
  * build mach-glfw
  * nix
  * build gpu-dawn
  * basics of setting up webgpu are up
  * add raylib
  * minimal raylib window
  * use waiting rather than polling on window
  * setup opengl
  * draw a triangle with opengl
  * abstract shaders
  * opengl: programs
  * opengl: extract into folder
  * opengl: VertexArray
  * opengl: buffers
  * opengl: more generic setData for buffer
  * opengl: bound buffers
  * opengl: more bindings
  * opengl: uniforms
  * add stb
  * comments
  * stb
  * textures
  * opengl: draw functions
  * opengl: more funcs
  * submodule: freetype
  * build freetype from source
  * fontconfig example
  * clean up the main App
  * don't build stb
  * move stuff we aren't using
  * getting closer to dumb font rendering
  * busted text rendering
  * vendor: cglm
  * cglm
  * gb_math
  * awful text rendering
  * less dumb
  * opengl: adding pixelStorei
  * opengl: a lot more enums
  * opengl: for an array, size is just the size of the type
  * remove raylib
  * vendor: freetype-gl
  * build freetype-gl
  * move from epoxy to glad
  * freetype uses glad
  * freetype-gl doesn't link gl
  * Makefile with task for updating glad
  * output loaded OpenGL version
  * opengl: glad helpers
  * readme
  * Update README.md
  * gitattributes to ignore vendor
  * update README
  * Update README.md
  * use a font atlas!
  * opengl: simplify vertex attribute setting
  * draw text using ebo, some work to be done to clean that up
  * remove old text renderer
  * zig native atlas implementation
  * starting FontAtlas
  * atlas: use saturating arithmetic
  * font atlas creates glyph records
  * switch to pure Zig font atlas
  * remove ftgl build
  * remove freetype-gl
  * note perf todo
  * opengl: unbind programs
  * addGlyph returns glyph
  * calculate cell widt/height, cross verified with kitty
  * grid render a few cells
  * render a rainbow grid
  * new Window abstraction
  * fix memory leaks
  * calculate grid size in dedicated struct, tests
  * setup a single vao, ebo, vbo for grid rendering
  * model direct gpu cell
  * grid keeps track of cells
  * make colors more distinct for demo cells
  * basic pty opening
  * working on subprocessing
  * TempDir implementation
  * improve commnts
  * remove freetype-gl
  * terminal stuff
  * initial VT emulation table
  * comment
  * implement basic VT parser -- only print/execute handled
  * terminal: writing strings and multiline strings starting to work
  * terminal: C0.BS
  * attach a terminal to the window, start hinting at renderer hookup
  * setup our GPU cells based on terminal state
  * render text from our terminal!
  * render multiple lines
  * add background pass
  * update some comments
  * cell: convert atlas x/y to NDC in shader
  * update zig
  * update mach
  * set character callback and update the terminal
  * remove old shaders
  * shader modes, draw a jank cursor
  * fix the baseline for font rendering
  * calculate the cell width/height using the font size scale factor
  * accept enter to make a newline
  * starting libuv bindings
  * libuv: Sem
  * libuv: Threads
  * libuv: thread self, no deinit
  * libuv: Timers
  * libuv: timer start
  * libuv: backend fd/timeout
  * embedded libuv loop. still some issues:
  * libuv: Async
  * fully integrate libuv, no crash on close
  * clean up some of the libuv interations
  * libuv: fix self-dependent zig error
  * pass around the event loop, setup a timer to prove it works
  * blinking cursor
  * use async handles to more immediately exit the event loop
  * don't blink cursor when losing focus
  * update cells to hide cursor on non-focus
  * when losing focus, show hollow box
  * style
  * don't blink the cursor while typing
  * libuv: implement kqueue
  * update zig
  * expandPath for looking in PATH
  * Command: set custom env vars
  * improve building on darwin
  * compilation for macos works?
  * define gl_FragColor for macos
  * use OpenGL on Mac
  * fix pty resizing on darwin
  * various fixes for macos
  * kevent properly blocks
  * disable retina framebuffer on mac, see comment
  * redraw window during resize
  * execute the child command
  * libuv: starting Tty impl
  * libuv: start shared stream functions
  * libuv: beginning Pipes so we can more easily test streaming
  * libuv: stream writes
  * libuv: pipe reading
  * libuv: stream try_write
  * libuv: Errno, build up errors at comptime
  * hook up pty master to libuv
  * pty: use libc ioctl for compat
  * Command: setup fd properly on mac
  * update command comments
  * libuv: expose WriteReq
  * SegmentedPool
  * hook up the real subprocess reader/writer to the UI!
  * don't ignore fcntl return for macos
  * enter sends '\n' to child process
  * handle backspace
  * add some TODOs
  * update TODO
  * catch errors in ttyRead
  * bell doesn't crash
  * don't crash on htab, but its not implemented yet
  * horizontal tab, implement tabstops using a default value
  * fix some miscalculations with tabstops, add test
  * ctrl-l is form feed
  * horizontal tab off by one, add unit tests
  * send tab to process
  * terminal: scrolling
  * send control characters
  * jank wrap handling (by not wrapping at all)
  * unused comment
  * remove old unused files
  * remove vendor/cglm
  * vendor: remove stb
  * add tracy and update Zig
  * vendor: add tracy v0.7.8
  * initial tracy support
  * integrate tracy more deeply
  * tracy: support allocation wrapping
  * libuv: Loop.now
  * libuv: add Cond, Mutex
  * libuv: add more APIs
  * libuv: Embed now uses a mutex + cond var
  * Move the render to a timer that slows down under load
  * have to use an async handle to wake up event loop for max timer
  * max_timer: don't call callback in the same tick anymore
  * Update comments
  * only update cells in the render call
  * fix release mode builds by building parse table
  * slow it down a bit more under load
  * Add task to initialize repo
  * tracy: not enabled if root doesn't export tracy_enabled
  * use nix-direnv
  * update zig
  * set refresh callback for redraw
  * envrc: use nix, nix flakes messes up env in a way that breaks shells
  * implement basic CSI dispatch action
  * terminal: pass intermediates through to CSI, ignore NUL
  * terminal implement clear screen and set cursor, needs tests
  * CUP full implementation with tests
  * code tweak to avoid crash
  * implement erase line (EL) CSI
  * rename some funcs
  * DCH delete chars
  * cursor right
  * esc dispatch is handled in parser
  * parse SGR really poorly
  * terminal: collect intermediates properly
  * implement (untested) more codes
  * forgot a letter on ctrl characters
  * Add conformance apps
  * implement reverse index and erase display below
  * implement scroll behavior for reverse index, add conformance
  * fix a couple memory leaks
  * fix VPA/HPA offsets
  * implement ECH
  * enter is CR
  * terminal: OSC parser
  * OSC parses prompt_start
  * osc: end of command
  * osc: prompt_end
  * osc parser temporary state changed to union
  * osc: reset_cursor_color
  * parse DCS sequences (but do nothing)
  * osc: change window title with code 2
  * send esc
  * terminal: move tests into main
  * terminal: start pulling out stream processing into dedicated type
  * modify terminal tests to avoid append
  * move stream handling into the Window
  * terminal doesn't need parser anymore
  * implement CUD, CUU
  * terminal: setScrollingRegion
  * terminal stream set mode and reset mode
  * hook up setMode
  * set top and bottom margins full hookup
  * implement delete line
  * hook up delete lines
  * quiet
  * terminal parser allows colons for SGR
  * terminal sgr attribute parsing
  * sgr parsing can parse multiple
  * connect setAttribute
  * connect fg/bg of cell to renderer
  * always draw cell bg if it has one even if no char
  * eraseline sets SGR on all cells
  * typo on the rgb...
  * eraseDisplay honors sgr
  * eraseChars respects pen
  * terminal: insertLines
  * hook up insertLines
  * panic on unimplemented
  * respond to ESC [ c for primary attributes
  * use queueWrite helper
  * insertLines with scroll region support
  * conformance for insert lines with scroll region
  * terminal: utf-8 decoding
  * invalid utf8 turns into �
  * unknown glyph renders a space
  * terminal: implement resizing in a basic way
  * update comments clarifying changes to state table from vt100.net
  * update zig
  * lock to a release branch of nixpkgs
  * pin tracy to latest
  * update tracy
  * CLI parsing, can set default foreground/background color
  * change default font size
  * cli args support optional types
  * properly copy string cli flags
  * cursor left
  * update the font atlas if there are changes
  * implement device status request
  * sgr parse bold and 256 fg/bg
  * terminal: color palette structure and generation
  * support 256 color palette setting
  * implement named 8 colors sgr
  * mistake calculated background
  * implement bright fg/bg
  * plumb CSI to set cursor style, but haven't implemented any styles
  * render: bar cursor style
  * update cursor on request from shell
  * set the window cursor to the ibeam
  * update TODO
  * misparsing colors
  * super+v to paste
  * bracketed paste
  * update TODO
  * update deps
  * starting new screen
  * scrolling in the screen (no scrollback yet)
  * screen: row copy
  * fix some bugs
  * Terminal: switch to new screen, passing tests (not full coverage)
  * switch to new screen, bugs!
  * screen: fix negative scrolling from zero
  * various fixes
  * scroll can be a multiple of row count
  * make erase a bit more efficient
  * more efficient eraseLines
  * clear the last line when we scroll up
  * fixing more bugs
  * fix bugs
  * only slow down to 15 fps
  * screen resize
  * scren resize
  * add todo for reflow
  * on resize, set the terminal cursor to max
  * update deps and fixes for NixOS 22.05
  * update dependencies
  * update zig
  * use c allocator in release modes if available
  * OSC 133;C
  * origin mode set cursor pos
  * support set top/bottom margin with zero params
  * decaln
  * erase display above
  * erase line complete
  * f CSI alias for set cursor pos
  * basic "index" implementation
  * hook up IND index
  * NEL next line
  * implement VT
  * setting and clearing tab stops
  * handle SO/SI but don't do anything yet (just don't crash)
  * save and restore cursor
  * enq and cursor report with origin mode
  * fix tabstops off by one
  * update zig
  * Build in CI
  * update CI
  * fix test
  * agree to macos sdk
  * update CI
  * only compile tracy on linux
  * reverse colors
  * fix paste outputting "v"
  * parse more SGR attrs
  * update mach
  * move towards font family management to prep for bold/italic
  * add bold font, doesn't work yet
  * bold font rendering
  * font
  * initial underline support, can be improved
  * invert attribute
  * handle inversion with screen inversion properly
  * update deps
  * update README
  * implement auto-wrap, always enabled for now (ignores mode 7)
  * disable action debug
  * enable/disable autowrap
  * add constants for 132 col mode but don't implement
  * update TODO
  * start building in "scrolling" of sorts
  * better tests around scrollback
  * scroll down behaves correctly
  * fix build
  * scroll with delta no grow
  * can scroll to bottom
  * hook up scrolling, kind of works, kind of broke
  * scroll down with no scrollback fixes
  * update TODO
  * disable debug
  * defining some terms, prepare to have helpers for active vs history
  * update zig
  * typing jumps scroll to bottom
  * don't draw cursor on scroll
  * update TODO
  * update README
  * docs
  * Update enq.md
  * seqs
  * update README
  * fix tab behavior, should not print
  * add more sequences
  * update seqs
  * more sequences
  * update README
  * update README
  * update README
  * update README
  * delete old unused shaders
  * lots more sequences
  * dup
  * use packed struct for modes
  * KIND OF handle mode 3 (132 col mode)
  * index (IND) handles scroll up properly with a scrolling region set
  * update zig
  * comment to be clear
  * support building with musl, although it doesn't run currently
  * update to latest zig
  * start dockerfile and script for running a terminal and screenshotting it
  * Build vttest, improve runner
  * test: run from host
  * test: run.sh also does compare
  * test: compare the results and error
  * test: vttest-1-1
  * test: fix vttest/1_1
  * image outputs now contain the terminal name
  * remove unused
  * test: start preparing to run ourselfs in the harness
  * test: switch to Ubuntu for now
  * test: run-all.sh, hide i3bar for compare
  * add --font-size flag for font size in pixels
  * CSI: Insert Blanks (ESC [ n @)
  * add all vttest screen 1s
  * update alacritty test cases
  * xterm test cases
  * update TODO
  * cursor belongs to screen (prep for alternate screen)
  * alternate screen buffer (mode 1049) now supported
  * test: colorize output
  * quiet noisy log
  * update zig
  * clean up unreachables with log statements
  * test: sort tests prior to running
  * test: use larger dimensions to avoid some crash
  * on resize, make sure we resize the alt screen too
  * move test log up so it shows up on fail
  * add a formatter for CSI logs so that they're more easy to read
  * big improvements in action logging
  * count = 0 implies 1 for all cursor movement, fixes one line of vttest
  * erase line left should include cursor position
  * support DECCOLM
  * fix crash we can get with horizontal tabs off the end of the screen
  * test cases update since deccolm implemented
  * test: run-all runs in parallel
  * index should return after handling bottom-most line in scroll region
  * nix: add wraptest
  * test: add wraptest
  * fix an off by one in set cursor pos
  * test: update test cases from the setCursorPosition off-by-one fix
  * reset inverse attribute
  * don't install conformance tests
  * vendor: update mach for glfw
  * Add sdk submodule
  * first attempt at a derivation
  * nix: we have a package that builds, but doesn't run
  * log glfw errors globally
  * nix: update the package to set proper rpath
  * update to nixpkgs 22.05
  * nix: add other X11 deps
  * make dev/install to add a dev install
  * Update makefile to only patchelf on NixOS
  * cli parsing supports modification, add "RepeatableString" as example
  * cli: support multiple calls into parse without clobbering arena
  * --config-file to load a config file
  * detect config file load in config file
  * update Zig nightly
  * cursor position absolute needs to ignore all the offset stuff
  * implement DECSASD by just blackholing the output for now
  * releast-fast for dev/install otherwise renders are slow
  * remove unused line
  * add a lot more tracing as I hunt down some performance things
  * update nixpkgs
  * some logging improvements
  * refactor cursor implementation, implement cursor visible (mode 25)
  * opengl: support extension iteration, list in debug mode
  * terminal: add Selection struct
  * introducing dedicated point types
  * fix build error
  * track mouse state, setup selection state on cursor move with click
  * color selection!
  * fix some selection contains logic on single lines
  * fix selection of a single character
  * update TODO
  * terminal.selectionString to grab the string value of a selection
  * selectionString unwraps properly
  * selectionString: more accurate buf allocation
  * selectionString: test wraparound case, fix bugs
  * way easier way to slice to end of storage duh
  * copy!
  * update TODO
  * note that selectionSlices is tested
  * cursor should be a hollow rect on unfocus, regression from e163e4962baad09cd2c36be1529dee4fcf1220b0
  * HPA does nothing when status display is active
  * update zig
  * update mach vendor
  * update TODO
  * memset zero values when resizing a screen
  * selectionString: realloc so free gets the correct length
  * mouse xpos/ypos can be negative or larger than window size
  * update TODO with a bunch of select tasks
  * more TODO
  * start changing getRow and rowIndex to use tagged indexes
  * screen operations operate on the active area
  * rowIterator takes the tag type to iterate over
  * Screen.region to get a region of contiguous memory for a tag
  * start working on new resize with reflow, can grow rows
  * resize increasing column width without reflow
  * reflow when cols grow
  * resize less rows, but currently not 100% working (see commented tests)
  * rowIterator(.screen) now ignores unused lines, fixes shrinking rows
  * rowIndex uses tag max so we have max in just one place
  * reflow when columns get smaller
  * replace old resize with new reflow resize
  * update TODO
  * when cols grow, move cursor if it unwraps the line it is on
  * more cursor reflow
  * reflow cursor when shrinking cols
  * assertions to save our bacon
  * handle case where cursor is past where content is on col shrink
  * fix a crash when reflowing to smaller cols but still buggy
  * when shrinking rows, clear empty space from the end (see test case)
  * when less cols, cursor needs to be in screen space, not viewport
  * when growing rows, offset cursor by added rows
  * when growing cols, adjust viewport and cursor if we shorten
  * resize alt screen without reflow
  * set a minimum window size
  * update TODO
  * add screen `.history` tag to fetch scrollback region
  * implement erase display scrollback ("clear" command)
  * update zig
  * enable retina on Mac, set OpenGL to pixel size properly
  * don't scale up OpenGL projection in Retina, use true values
  * fix ttyWrite calculation to avoid truncating data
  * update zig
  * move libuv into pkg
  * move freetype into pkg
  * update libuv tests
  * Revert "update libuv tests"
  * src/terminal can build into a minimal wasm library, I think
  * test wasm of the term package
  * turn tracy into proper package
  * pkg/tracy
  * Fix libuv tests
  * Fix some stage2 compilation errors
  * add system SDK to build to enable cross compilation
  * only build tracy if enabled
  * skip a test on stage2, with this the main package tests pass!
  * update zig
  * Typing a character clears selection, scrolls to bottom
  * erase display complete should scroll to bottom
  * get rid of gb_math and create matrices from scratch
  * clean up ortho2d to do less things
  * math style
  * update Zig, fixed new invalid octal error
  * rename font/font.zig to font/main.zig
  * Enable depth buffer, add depth to shader
  * Only reallocate the GPU buffer if our CPU capacity changes
  * Grid supports sending partial cell updates to GPU
  * updateCell sets the proper Z value and bumps it
  * get rid of Z buffer stuff
  * Texture atlas supports variable color depth, not just greyscale
  * avoid an alloc and buffer copy in the common case on font loading
  * zlib
  * build libpng and link freetype to it
  * vendor
  * freetype builds in png support, uses our own zlib
  * temp: add libpng to nix
  * font face supports loading color fonts (emoji!)
  * really hacked in emoji support, time to clean it up
  * font FallbackSet for looking up in fallback TTFs (emoji)
  * only downsample size if its an emoji
  * remove the font style fallback for the fallback set
  * fix crash that could happen looking up fallback
  * nix: remove libpng
  * add utf8proc so we can detect unicode char width
  * font: move codepoint into a public API
  * support dynamic linking (not default) test in GH actions
  * terminal: print wide characters
  * render wide chars
  * selection of wide chars and copy/paste works
  * don't render wide char trailers
  * get rid of assertions because its possible they're false
  * update TODO
  * remove done shader TODO
  * fix stage2 compiler error
  * update mach
  * pin new zig-overlay repo
  * remove unused zig file
  * key.Binding and basic parsing
  * binding parse action with parameter
  * move input stuff to src/input
  * keybind parsing in CLI args
  * look up keybindings on keypress, clean up how non-printables are handled
  * only handle non-printables on press/release, and BS is 0x7F
  * unify non-printables up by bindings
  * hook up keybindings for copy/paste and arrow keys
  * hook up more control keys: home, end, page up, page down
  * move input test to qualified
  * update TODO
  * fix data corruption on growing the Atlas
  * atlas tracks modified/resize state, reallocate on GPU if resized
  * update TODO, we fixed atlas resizing
  * ignore zero-width characters for now
  * font size is now in font points, determine size based on window DPI
  * code for getting physical DPI
  * scale the cursor position from screen coords to pixels
  * missed comment
  * update TODO
  * note charsets are TODO
  * SGR 39/49 (reset fg/bg, respectively)
  * bind function keys (F1 to F12)
  * make cell attrs bools instead of u1s
  * implement faint colors (SGR 2)
  * define mouse events, all TODO
  * change u1 in mode to bool
  * X10 click-only mouse reporting
  * mouse normal events in x10 format
  * normal events can now track scroll
  * Track/cache button state and mods state
  * normal event (motion) mouse tracking
  * any event mouse tracking
  * UTF-8 mouse reporting
  * SGR reporting
  * urxvt reporting format
  * sgr pixels mouse report format
  * fix miscompilation around sgr mode
  * update TODO
  * starting charset tables
  * british charset
  * basic charset mapping, support configuration, print tests
  * Shift Out/Shift In (invoke charset into GL)
  * single shift 2/3
  * implement locking shift
  * update TODO
  * hook up scroll down and up CSI codes (SD/SU)
  * sgr parsing bright colors now sets color properly
  * Add harfbuzz build (not used yet)
  * pkg/harfbuzz: some functions and tests
  * output harfbuzz version on startup
  * pkg/harfbuzz: some blob APIs
  * pkg/harfbuzz: face, font, freetype
  * pkg/harfbuzz: buffer init, add
  * pkg/harfbuzz: buffer set direction, script, and language
  * pkg/harfbuzz: buffer get glyph positions and info
  * pkg/harfbuzz: shape
  * pkg/harfbuzz: use extern funcs for freetype interop
  * clean up some imports
  * shader: only downsample glyph if its bigger than width plus padding
  * pkg/freetype: Library and Face
  * pkg/freetype: more face APIs
  * pkg/freetype: loading glyphs
  * pkg/freetype: finish APIs we need
  * allow non-printables even if modifiers are pressed
  * convert src/font to use new pkg/freetype
  * src/font: change Face to require font to init
  * font: introduce Group which will eventually replace FallbackSet
  * font: GroupCache is like Group, but with caching...
  * use new font.GroupCache, remove unused font structs
  * move cell metrics calculation out into src/font
  * pkg/harfbuzz: add guessSegmentProperties
  * Line segmentation into text runs
  * font: Face initializes a hb_font alongside every face
  * utf8proc: add grapheme break API
  * font: shape API, calls shape and outputs some debug
  * TODO
  * pkg/harfbuzz: fixing some APIs
  * dedicated circular buffer
  * starting the new screen implementation
  * big API surface for screen2, can test write/read now
  * screen2: scrolling (to a certain extent), copying in tests
  * screen2: selection
  * add cursor to new screen
  * circbuf doesn't use zeroes, it takes a default value
  * use non-extern unions so we get safety checks
  * fix some circbuf bugs (add tests) and add rotation
  * circbuf resize operation
  * circbuf rotateToZero does nothing if its already at zero
  * screen2: dynamically allow scrollback when its needed
  * update overlay but we still can't use master
  * new screen supports resize without reflow
  * our new resize without reflow supports scrollback so test that
  * resize without reflow preserves cursor better
  * the big screen switchover
  * resize should maintain minimum of screen rows
  * grow our scrollback much faster
  * process ASCII events manually to avoid function call overhead
  * small optimizations
  * screen: cache history offset
  * cache row iterator max value
  * asserts not being optimized away, use comptime gate
  * use an arena allocator for tty allocs
  * clean up some assertions
  * fix scrolling and new row calculation
  * fix y pos on resize
  * resize with reflow more cols
  * maybe clean up resize more cols
  * resize less rows
  * resize with shrinking cols
  * remove dirty for now
  * comment on screen struct
  * clearHistory
  * bump render to 144hz, slowest 120hz
  * on resize, if rows increasing, handle that first
  * fix some resize crashes
  * update TODO
  * setup flags, storage for graphemes
  * detect and attach grapheme to grapheme data
  * various methods on Row are grapheme-aware and tested
  * test writing graphemes
  * handle graphemes with more than 1 joiner
  * Disable
  * attach zero-width joiners to cells
  * Ligatures
  * Calculate grid_width properly, use that instead of wide mask in shader
  * Rebase
  * Font face handles zero-width glyphs (weird but happens)
  * font don't include convert
  * fonts are presentation format aware (text vs emoji)
  * kind of handle VS15/16 better, its not blank anymore, but its wrong
  * test very long emoji
  * test shaping a long emoji
  * only test presentation VS15/16 if directly adjacent to codepoint
  * much more accurate run splits and cell widths in runs
  * fix some emoji sizing
  * only scale fonts to height
  * add tracing
  * update TODO
  * update TODO
  * remove font conversion stuff
  * better handling of combination characters
  * avoid large shaper buffer allocation on every frame
  * update to stage3 zig with -fstage1
  * Screen dirty tracking
  * rows are dirty when initialized
  * add LRU
  * lru resize
  * implement LRU row GPU cell caching
  * update TODO
  * fix potential crash
  * a cell is empty only if it also has no styling
  * Cell GPU cache must also key by screen type (primary/alternate)
  * pkg/fontconfig: starting, not working
  * build fontconfig
  * don't build fontconfig on mac
  * pkg/fontconfig: disable ubsan (reported upstream)
  * fontconfig: object sets and patterns
  * fontconfig: font sets
  * fontconfig: font list
  * fontconfig: fc-match
  * fontconfig: fc-match
  * fontconfig: more APIs
  * update to latest Zig nightly
  * Revert "update to latest Zig nightly"
  * Make selection part of the cache key for GPU cells
  * pkg/fontconfig: pattern.add
  * pkg/fontconfig: add weights/slants enum
  * fontconfig: charset and langset apis
  * pkg/fontconfig: add some error handling
  * pkg/fontconfig: pattern get
  * pkg/fontconfig: const pointers
  * update to the latest stage2 compiler we can
  * Fix a couple bugs in memory access (tests only)
  * RGB should not be packed, so that it has align = 1
  * Fix invalid c types with fontconfig
  * use meta.FnPtr to prep for stage2
  * reproduced issue for upgrade comment
  * start adding fontconfig conditional compilation
  * deferred face hasCodepoint
  * font discovery builds up a set of deferred faces
  * font group works with deferred faces exclusively
  * store requested size alongside deferred font for loading
  * src/font: working on initiaizing deferred fonts from fc
  * font: test loading deferred face for fontconfig
  * update flake
  * font Group has Lib, loads deferred faces when needed
  * pkg/freetype: disable ubsan
  * search for fonts on startup
  * only discover if it is enabled
  * cli args fix stage1 miscompilation, add font families
  * cli args can parse null-terminated strings
  * --font-family CLI config
  * update TODO
  * -Dtest-exe flag to build and install test executables
  * fix tests so they pass on mac
  * pkg/macos: start core foundation bindings
  * macos: add another string API to test it really works
  * pkg/macos: add CoreText
  * macos: CFArray
  * macos/text: matching font descriptors
  * pkg/macos: dictionary create
  * macos/foundation: more string funcs
  * macos/text: font descriptors
  * macos: test listing fonts
  * pkg/macos: CFURL
  * macos/text: more APIs
  * pkg/macos: import headers instead of doing externs manually
  * macos/foundation: number, dict get value
  * macos/text: FontTraits
  * macos/text: create collection from descriptors
  * pkg/macos: add mutable dictionaries, flesh out font descriptor
  * pkg/macos: fix invalid constant
  * pkg/macos: fix crash when no fonts are found
  * pkg/macos: font initializes, get glyphs
  * Mac Font Discovery with CoreText (#17)
  * font: set "backend" enum vs booleans
  * pkg/harfbuzz: add coretext compilation on macOS
  * Use Apple Emoji font on Mac
  * update TODO
  * calculate font metrics per face
  * redoing some of the baseline calcs, remove from shader
  * underline is derived from the primary font
  * more accurately compute font metrics
  * font: calculate correct offset for non-scalable emoji fonts
  * Strikethrough (#19)
  * Fix underline/strikeout position with larger fonts
  * Add some padding to emoji
  * TODO for colored and styled underlines
  * pkg/macos: CGColorSpace
  * pkg/macos: CGContext
  * pkg/macos: font draw glyphs
  * pkg/macos: RGB color space
  * pkg/macos: bounding rects for text
  * Make font face a compile time interface, stub for coretext
  * font: begin coretext Face
  * font: coretext face presentation
  * font: coretext glyphIndex
  * font: lower interface requirement for face
  * macos: url from path
  * macos: create descriptors from URL
  * macos: data
  * pkg/macos: create fonts from data
  * font: coretext initialize face from memory
  * fix compilation
  * pkg/macos: some font metrics functions
  * font: coretext cell width calculation
  * font: start working on core text cell height calcs
  * macos: AttributedString
  * pkg/macos: text framesetter
  * pkg/macos: path
  * pkg/macos: starting frames
  * macos: frames, attributed strings, stylized strings
  * font: calculate cell height
  * font: coretext calculate cell metrics
  * font: coretext initial render glyph
  * font: deferred face can load core text backend
  * font: fix some coretext rendering issues
  * pkg/macos: bitmap info arg
  * update to API
  * pkg/macos: more stuff
  * pkg/macos: fix zig C ABI issue
  * fix some issues that fail nightly stage2 compiler
  * update mach
  * update mach to fix stage2 issue
  * I think this gets us on master zig...
  * move shaders into src/ tree for stage2
  * new opengl function calls for stage2
  * fix invalid ptrcast
  * pkg/libuv: fix stage2 compilation issues
  * workaround stage2 translate-c issue with link to issue
  * Workaround stage2 compile issue with issue link
  * pkg/libuv: workaround stage2 issue
  * fix more stage2 build errors
  * update zig
  * run tests against both stage1 and stage2
  * get rid of stage2 workaround for now
  * use old version of mach
  * opengl: setting buffer data with array must get proper pointer
  * update zig which fixes test on wide terminals
  * pkg/libpng: name the lib png, so its not "liblibpng"
  * Switch to stage2 primarily for builds
  * Imgui (#20)
  * update zig
  * Bring back freetype font bitmap conversion
  * Use scalable check rather than fixed size check for setting char size
  * pkg/freetype: remove unused API
  * disable inputs when they're captured by dev mode
  * enable freetype with imgui
  * use our built-in font for dev mode
  * render font info in dev mode
  * freetype: resize glyphs that are too tall prior to storing in texture
  * face: coretext zero the bitmap before render
  * coretext: we do want to smooth and anti-alias glyphs
  * coretext: render glyph on its own bounding box, calculate bearings
  * coretext: rasterize glyph with a padding to prevent artifacting
  * cell under cursor always remains visible by inverting fg colors
  * update to latest zig which renames @min/@max
  * update zig to latest, fix todos
  * workaround for https://github.com/ziglang/zig/issues/13277
  * pkg/libuv: get rid of sleep state, it did nothing
  * rename grid to a renderer, extract to subfolder
  * make opengl loader context-aware
  * introduce renderer thread logic (not starting it yet)
  * prepare our render state on the window
  * move to new renderstate, new render method
  * pkg/libuv: Idle handles
  * run rendering on another real thread (still bugs)
  * renderer: extract the size structs to a shared file
  * no longer store grid size on the renderer
  * support screen size, rip out shared state
  * bring back out of focus no blink
  * set proper opengl background
  * remove render timer from window
  * remove the max timer
  * pkg/libuv: generate cimport.zig for specific platforms
  * update zig
  * use the c allocator when running under valgrind
  * Fix memory leak forgetting to clean up fontconfig
  * free memory in cells LRU
  * fix a couple more memory leaks
  * fixing more memory leaks
  * Fix the primary leak with config
  * propertly deinit the GPA so we can detect leaks in debug
  * pkg/objc starting
  * pkg/objc: selectors
  * pkg/objc: message send
  * don't need fstage1
  * pkg/objc: more message send stuff
  * pkg/objc: properties
  * update zig
  * window no longer makes any OpenGL calls
  * pkg/objc: more methods
  * Comment to show native access
  * pkg/objc: shortcut for set/get property
  * fixed bugs
  * update README about release builds
  * update zig
  * mac: load emoji font last so it is not preferred for text
  * Initial metal abstraction (noop)
  * metal: setup the render loop, draw the background color
  * don't test stage1
  * boilerplate for rendering
  * add first pass metal shader
  * draw a triangle
  * draw a square, handle resize
  * projection matrix, render cell
  * metal: use content scale when resizing
  * metal: setup vertex data
  * metal: populate the greyscale texture, prep ubershader
  * metal: pass colors in
  * metal: handle HiDPI scaling
  * metal: glyphs show up (poorly)
  * metal: blending
  * metal: cursor and underline
  * metal: color textures
  * metal: devmode
  * metal: set contentsScale and handle screen scale factor for retina
  * log the renderer on startup
  * metal: fix double wide cell width
  * metal: disable v-sync
  * metal: hollow rect cursor works
  * metal: reallocate textures if they grow
  * fix mouse scroll direction
  * Mac bundle, icons
  * Update README.md
  * pkg/macos: OS Log support
  * macos: send logs to unified logging
  * update zig
  * remove stage1 hack
  * update zig
  * look up default shell in user passwd entry
  * source default shell from SHELL if set
  * get rid of stage1 compat
  * extract passwd to its own file so its easier to test
  * Command supports setting cwd
  * macos: Default working directory to home dir if launched from app
  * properly handle "inherit" working directory value
  * change defaults to be more aesthetically pleasing
  * Load `$XDG_CONFIG_HOME/ghostty/config` if it exists (#25)
  * re-enable hot path optimization
  * Blocking queue implementation for thread message passing
  * Start pulling out IO thread and IO implementation
  * IO thread has more state setup
  * IO thread stream handler is in, lots of commented TODOs
  * IO thread can trigger render and write data
  * termio: start the thread mailbox, hook up resize
  * fully hook up resize
  * termio: clear selection
  * More IO events
  * Actually, we'll manage selection and viewports on the windowing thread
  * Switch over to the IO thread. A messy commit!
  * remove unused fields on Window
  * move bracketed paste to terminal state
  * field rename
  * fix deadlock with mouse reports
  * allocate data for paste data if its too large
  * bug: assume focused on launch
  * renderer mailbox, focus message
  * Move cursor timer to renderer
  * implement cursor reset when data comes in pty
  * Window thread is now single event loop!
  * rename termio thread message struct
  * delete unused comment
  * App prepare for multi-window
  * Hook up new window, modify renderers
  * Do not block on app mailbox
  * close window action
  * termio: on deinit, send SIGHUP to child process to exit it
  * support app quitting to close all windows
  * termio: clean up error handling for kill
  * pkg/imgui: support context current
  * DevMode only renders on first window
  * clean up some resources better on error
  * raise max file descriptors on launch
  * Deinit devmode more cleanly
  * Set proper keybinds
  * update TODO
  * update zig
  * throttle cursor reset, under heavy IO this would slow things down
  * implement `ESC c` -- full reset
  * libuv: Prepare handles
  * tracy: support naming threads
  * name threads and add more tracing
  * add more traces
  * sgr: parse italic (render not implemented)
  * missing trace
  * update TODO
  * implement region scrolling directly in screen to use memcpy
  * drop a couple function calls and optimize scrolling a bit
  * use libc memcpy/memmove instead of std.mem if available
  * add more tracing, unroll a loop
  * update zig
  * cli args without arena
  * Add a benchmark exe for testing parser throughput
  * opengl: copy screen data instead of sharing state
  * opengl: handle screen resize outside of critical area
  * fix outdated test
  * metal: copy screen data (see opengl commit for why)
  * The cursor should be reset on entering the alt screen
  * implement many more reset sgr attributes
  * implement CSI ESC [ <n> b for repeating previously printed char
  * update TODO
  * pkg/objc: autorelease pools
  * set system locale on startup, read Mac locale from OS preferences
  * set COLORTERM -- macOS uses this for emoji
  * locale always requires libc
  * better commenting
  * OSC handling, handle OSC change window title command
  * opengl: automatically pad render area to balance non-grid space
  * metal: implement auto padding
  * extract auto-padding code to shared logic
  * opengl: padding is done via ortho matrix rather than viewport
  * initial padding options
  * explicit padding works
  * padding needs to be sent to termio
  * metal: understand explicit padding
  * Don't crash on huge padding, warn users if padding is absurd
  * Move shaders into the renderer dir
  * move opengl to renderer dir
  * remove stage1 workarounds
  * No need to use a mach fork anymore
  * extract out message data from termio
  * font: freetype eliminate some duplicated work on init
  * font: freetype face supports resize
  * font: Group supports resize
  * font: GroupCache supports resize
  * window caches all sizing so it doesn't depend on renderer state
  * renderer: font size changed event, OpenGL impl
  * window cell size event for changing cell size
  * hook up all the keyboard actions
  * metal: implement font size changing
  * coretext: implement resizing
  * screen: support scroll region scrolling with circular buffer wraparound
  * Option (def true) to inherit font size on new window
  * update status
  * make goal explicit to support windows
  * waitpid should specify WNOHANG
  * fix tests for WNOHANG commit
  * enable Mac native tabbing
  * hide tab bar if last window is destroyed
  * new_tab action
  * update some docs
  * app: deinit darwin info
  * update TODO
  * Create dependabot.yml

  [ dependabot[bot] ]
  * Bump actions/checkout from 2 to 3

  [ dependabot[bot] ]
  * Bump cachix/install-nix-action from 17 to 18
  * release-tip workflow (wip)
  * release-tip can be dispatched
  * release-tip manual
  * try again (noise)
  * fix skip on tip release
  * Update README.md
  * release-tip should update the SHA
  * move screen resize to a renderer mailbox message
  * Embed nerd fonts into our default font
  * pkg/fontconfig: charset can add chars
  * pkg/macos: support CFCharacterSet
  * pkg/macos: character set in range
  * font: specific codepoint lookup in internals
  * search for unknown codepoints in any available font face
  * Always send mouse events

  [ Anubhav Mishra ]
  * Update README.md
  * Update README.md

  [ Mitchell Hashimoto ]
  * opengl: culling is not necessary
  * opengl: render bg in a separate pass
  * metal: implement two-pass render for bg
  * fix memory leak when grapheme clusters of >4 codepoints are present
  * fix memory leaks with metal resources and multi-window/tab
  * OSC parsing for get/set clipboard (OSC 52) -- not hooked up yet
  * fix test name
  * pkg/objc: correct objc_msgSend call on x86_64 depending on return type
  * workaround for x86_64 ABI issue: https://github.com/ziglang/zig/issues/13598
  * pkg/objc: make ptrcast var so that LLVM backend sees sig
  * don't change cursor to ibeam on macOS prior to Ventura
  * manually focus next window on macOS <= 12
  * Configurable 256 Color Palette (#50)
  * config file allows and ignores empty lines, supports comments
  * test that quoting config values is okay
  * fix selection regression caused by screen copy optimization
  * do not block channel send while draining channel
  * change config write to be debug
  * ability to set selection fg/bg colors
  * ability to customize cursor color
  * update TODO
  * config files allow spaces around "="
  * put some config in the devmode UI
  * ci: release should update tip tag
  * sign release bundle
  * ci: release will always do unsigned first
  * ci: release into zig-out
  * ci: try macos 12
  * ci: macos 12
  * ci: set executable bit for binary
  * ci: notarize
  * update README
  * OSC 52: Clipboard Control (#52)
  * macOS should launch shell as a login shell
  * window detects double and triple clicks
  * screen selectWord starting functionality, not done at all
  * selectWord goes across soft-wrapped lines
  * Don't crash when fn key pressed on mac (workaround upstream issue)
  * double-click drag selects word by word
  * fix regression around selecting word at end of screen
  * screen selectLine and tests
  * hook up triple-click in UI to select lines
  * update TODO
  * hide imgui demo window
  * configurable click interval with `click-repeat-interval`
  * mac: get default click repeat interval from NSEvent
  * moving the mouse too far between clicks will reset the click count
  * copying selection trims trailing whitespace
  * set IUTF8 on the pty
  * vendor/pixman and basic building
  * pkg/pixman: starting API
  * pkg/pixman: some drawing
  * build: support for dynamic linking pixman
  * pkg/pixman: fix math for bpp calculation
  * pkg/pixman: add more types
  * add pixman package
  * font: detect box glyphs, start littering stuff to denote special fonts
  * font: skeleton for box drawing and hook up to Group
  * test rendering box glyphs, looks OKAY
  * font: shaper handles special fonts
  * fix offset for box glyphs
  * remove test code
  * font: more box glyphs
  * more... more...
  * more glyphs for the glyph god
  * metal: support for box glyphs
  * more
  * 16 more
  * 16 more
  * 16 more
  * 16 more
  * many more boxes
  * pkg/pixman: more image APIs
  * arc glyphs
  * opengl: continue rendering if single cell has error
  * pkg/pixman: rasterize trapezoids
  * more box fonts
  * lot more boxes
  * pkg/pixman: fill rects
  * more glyphs
  * braille
  * sextants
  * wedge triangles
  * more wedges
  * more wedges
  * more
  * more glyphs
  * metal: continue to render if single cell fails
  * fix comment
  * terminal: copy grapheme map when resizing and ensure proper cleanup
  * terminal: fix possible crash when increasing columns in resize
  * rearrange box rendering to prepare for more sprite drawing
  * pkg/pixman: more getters
  * font: introduce Canvas, start converting Box
  * font: use Canvas more, Canvas rect
  * use enum for underline styles
  * font: draw single and double underlines as sprites
  * opengl: render underlines using sprite system, not shaders
  * fix sgr parsing for underline styles
  * unknown underline styles render a single underline
  * terminal: parse all underline styles
  * font: render dotted underlines
  * dashed underlines
  * curly underlines
  * metal: underline styles
  * remove underline support from shaders since we now use sprites
  * update TODO
  * font: Shaper should replace 0 with 0x20 (space)
  * respect application cursor keys for arrow (DECCKM)
  * fix crash with cursor going off screen on resize
  * revert
  * font: when resizing a glyph, scale metrics by same ratio
  * move Atlas to font
  * update mach for macOS Ventura
  * update zig version
  * update zig again
  * update nixpkgs to 22.11
  * update zig
  * update zig
  * move wasm main to src/, export an Atlas API
  * wasm allocator, consider "host-owned" pointers
  * support unit testing wasm via wasmtime
  * Start scaffolding web_canvas backend
  * blank out web canvas impl
  * add node for web stuff
  * update zig
  * add zig-js
  * font: web canvas creates a canvas element
  * logging works for wasm
  * hook up logging to wasm, example uses new zig-js package
  * don't export coretext/freetype
  * calculate font metrics via canvas
  * fix zig-js so wasm-test works
  * font: working on rendering glyphs in canvas
  * face: web canvas glyph rendering appears to work!
  * font: add method for drawing atlas to canvas
  * font: fix glyph offset calculations for render
  * font: add 1 to the canvas glyph to avoid clipping
  * font: fix some JS memory leaks
  * font: begin making Group work with wasm
  * font: DeferredFace is wasm-compatible
  * font: web canvas doesn't support discovery
  * font: Group is now wasm-compatible
  * font: GroupCache is wasm compatible
  * wasm: export terminal core API
  * wasm: show color atlas in example web app
  * font: web canvas can render emoji
  * font: move shaper into comptime interface
  * font: extract common shaper elements out
  * renderer: use new shaper structs
  * font: shapers init with allocator since web canvas needs to init buffer
  * font: web canvas shaper yields runs
  * wasm: build.zig uses addDeps for wasm
  * font: web canvas face has to render to check presentation for cp
  * font: shaper test should decode unicode codepoints
  * font: start web canvas shaping, we perform grapheme clustering
  * font: web canvas tracks glyph indexes for grapheme clusters
  * font: faceFromIndex returns a pointer to the face
  * face: web canvas can render grapheme clusters
  * update example to show multi-codepoint grapheme
  * update zig version
  * font: mac should use freetype rasterizer by default
  * wasm: disable stack protector
  * font: start converting Box font to our abstract canvas interface
  * font: Box font uses canvas abstraction
  * font: remove getData from canvas
  * font: mostly empty web canvas sprite renderer, but compiles
  * font: web canvas rect sprite func
  * font: web canvas sprite font can write to atlas
  * font: web canvas sprite font can composite
  * font: web canvas sprite trapezoid
  * zero-width chars are ignored if they're at col 0
  * terminal: ignore invalid C0 escape codes
  * terminal: parse table needs to have room for all chars
  * terminal: don't crash if cell claims to have grapheme but doesn't
  * terminal: osc parser gracefully handles input data larger than buffer
  * terminal: insertLines with count 0 no longer crashes
  * terminal: only clear wide spacer head if wide char is not on first line
  * terminal: scrollRegionUp outside of range does nothing
  * terminal: printing char outside of ASCII with non-UTF8 charset is space
  * font: clear up some logging
  * mac: in debug, set locale to en_US if not manually set
  * update zig version, update @call for newer zig version
  * update to latest zig
  * update zig again
  * update zig -- should fix codesign issue
  * Test wasm builds in CI
  * wasm: use shared, imported memory
  * wasm: use wasm allocator, rather than page allocator
  * wasm: log should use stack allocated memory first
  * update zig
  * window: start abstracting a window implementation
  * window: abstract more, it starts
  * rename window package to apprt
  * renderer: make Metal apprt-aware
  * move the size callback into apprt
  * apprt: key/charCallback, input supports all glfw keys
  * apprt: couple more easy callbacks
  * apprt: all mouse callbacks
  * core window doesn't have reference to glfw window anymore!
  * window should reach into glfw for addWindow for now
  * comments
  * apprt: clipboard
  * rename windowing_system to just window
  * apprt: window size limits
  * initialize glfw in app
  * app: make apprt agnostic
  * config: API for wasm
  * config: enable passwd isn't compiled for wasm
  * can specify a wasm target in build
  * start making the src more wasm target aware
  * move wasm target struct around to avoid analyzing wasm file on non-wasm
  * remove unused import
  * vendor: update tracy to 0.8.2 to match latest nix version
  * pkg/objc: extract to zig-objc repo
  * terminal: check OSC parser for tmux 112 sequences from HN
  * update zig
  * window (mac): recalculate sizes on new tab
  * Fix new log function options for zig
  * vendor/libxev
  * update libxev
  * renderer uses libxev
  * vendor/libxev update
  * vendor update
  * termio: use libxev (with TODOs)
  * remove libuv from build
  * update libxev
  * termio: use a dedicated io reader thread?
  * pkg/libuv: delete
  * termio: reader thread is thread-safe for writing to writer
  * termio: IO reader thread cleanup works
  * termio: better commenting on what is going on
  * termio: fix TODO around cursor reset
  * termio: fix pty close error so close doesn't hang on macOS

  [ dependabot[bot] ]
  * build(deps): bump cachix/install-nix-action from 18 to 19
  * build: add comptime check to verify Zig version
  * build conformance into dedicated directory
  * nix: fix darwin devshell
  * update zig version
  * new build system
  * delete libuv
  * fix tests, wasm build works again
  * ci: use -Doptimize
  * macos: starting boilerplate
  * build: can build the app using Swift (noop)
  * add TODO notes about arch
  * build: add SwiftBuildStep to run "swift build"
  * macos: empty window
  * build: ghostty lib, framework, build into app
  * macos: use xcodeproj
  * macos: xcodeproj
  * build: just copy xcframework
  * build: remove SwiftBuildStep
  * build: LipoStep
  * ci: trying to build macos
  * ci: build macos app
  * ci: try to xcodebuild
  * include: comment the modulemap
  * ci: revert back to scripting xcodebuild (broken)
  * macos: disable code signing for now
  * lots of broken stuff
  * macos: add missing Preview Content folder
  * libtoolstep
  * macos: need to link to libstdc++
  * build: update libtool step docs
  * macos: config API
  * macos: add ErrorView
  * build: bundle compiler rt
  * update to latest build API, rebase
  * build: must set run condition to always now
  * build: use caching for Libtool and Lipo steps
  * move allocator to global state
  * app: only create first window in exe mode
  * apprt: start embedded implement, make App API available to C
  * lots of stubbing so window will kind of compile for embedded
  * apprt: can pass options through to Windows
  * macos: terminal surface view
  * c: create/destroy surface API
  * lots of progress running a surface but still crashes
  * it draws!
  * update size
  * macos: disable sandbox
  * macos: correct scale factor propagated
  * start input, its broken but we're getting there
  * termio: remove xcode-injected env vars
  * c: fix enums for input
  * macos: hook up text input
  * embedded wakeup calls callback
  * macos: clean up surface on close
  * macos: track surface focus state
  * macos: hook up change title events
  * set title callback needs to use surface userdata
  * macos: set correct title for surface title
  * macos: new tab implementation
  * macos: mouse button and mouse move events
  * macos: mouse scroll events
  * ci: release updated to work with new xcodebuild
  * main: fix tracy allocator in GlobalState
  * Makefile update for new Zig build flags
  * ci: use shell to git push tag for release
  * macos: stdbool missing so we can use bool in ghostty.h
  * ci: fix path to release app
  * window charCallback accepts doesn't assume ASCII, accepts any Unicode CP
  * macos: emoji keyboard works
  * macos: hook up clipboards
  * macos: set ibeam cursor within terminal view
  * macos: don't set cursor in mouseMoved
  * macos: add settings view with a coming soon to help some people
  * macos: disable ApplePressAndHoldEnabled so that repeated key events work
  * update zig
  * update README with latest macos building instructions
  * macos: remove unused vstack
  * macos: update minimum deployment target to macOS 12
  * macos: use GeometryReader for terminal size for macOS 12
  * Update README.md
  * opengl: use premult alpha on fg color to avoid dark edges
  * add app runtime option, add gtk backend
  * init gtk app
  * setup app, run works but crashes in OpenGL
  * opengl: support loading global gl functions
  * apprt refactor in progress, launches glfw no window
  * Integrating new surface
  * rename more stuff
  * fix crashes on close
  * more crap
  * remove memory pool usage for mac
  * inherit font size works again
  * surface no longer has reference to app
  * apprt: C API for embedded updated to new style
  * main update to new runtime API
  * apprt/gtk: compiles again -- does nothing
  * apprt newWindow/newTab do not have to return a surface
  * apprt/glfw: fix macos build
  * gtk: hook up GL area and render a color
  * opengl: move screen size GL context changes into draw path
  * opengl: enable single-threaded draw
  * gtk: render!
  * gtk: get proper content scaling
  * gtk: proper surface cleanup
  * gtk: listen to should quit from app
  * gtk: start hooking up event callbacks
  * gtk: char input
  * gtk: key press/release
  * gtk: mouse input
  * gtk: mouse cursor pos and scroll
  * gtk: set cursor to ibeam over terminal surface
  * embedded: fix build
  * gtk: receive key press for all keys
  * opengl: make setting font size thread safe
  * gtk: make clear opengl requirements
  * don't log config its too noisy
  * metal: premult alpha for fg color
  * gtk: clipboard
  * gtk: set title stub
  * gtk: put gl area in notebook
  * gtk: add tab works
  * gtk: close tab button
  * gtk: new tab keyboard shortcut works
  * gtk: tab reordering, hide tab bar with one tab, etc.
  * gtk: close surface works
  * gtk: re-enable closing on no windows
  * gtk: convert keyvals back into unmodified keyvals for shifted ops
  * gtk: previous/next tab bindings
  * don't require runtimes to implement all callbacks
  * apprt: move newTab to a surface callback rather than app
  * "goto_tab" key binding to jump to a specific tab, defaults to Super+N
  * gtk: previous/next tab wraps
  * gtk: handle <tab> so it doesn't move focus
  * build: don't build bench by default
  * build: add freedesktop file and icon
  * fpm build deb
  * output runtime at startup
  * nix: remove dpkg
  * dist/linux: add freedesktop desktop spec file
  * nix: add flatpak-builder
  * vendor: update linux aarch64 sdk
  * build: omit icon that is too large for freedesktop
  * nix: need debugedit for flatpak-builder
  * Command/Pty work better with Flatpak but not 100% yet
  * add flatpak builder yml
  * os: add flatpak detection
  * ignore flatpak builder files
  * flatpak: use host-spawn to find default shell
  * passwd entry in flatpak needs to trim newlines
  * termio: use host-spawn for pty
  * flatpak: build GTK version
  * nix: flatpak stuff should go into linux section
  * flatpak.HostCommand wip
  * macos: on resize do not use the view frame
  * metal: use the screen size reported in the callback to resize
  * apprt/embedded: ignore size callbacks that change nothing
  * os: FlatpakHostCommand uses thread with its own event loop
  * passwd uses new FlatpakHostCommand
  * termio: exec uses new flatpak command, no more host-spawn
  * flatpak: disable strip -- causes crashes
  * termio: implement kill command for flatpak
  * termio: env should not freed because arena gets it
  * flatpak: enable ReleaseSafe
  * github: trying to add flatpak builds
  * ci: add flatpak builder
  * ci: try multiarch flatpak builder
  * ci: clean artifacts, move flatpak to release tip
  * remove gtk build from test, doesn't work in CI
  * build: install the proper linux desktop file depending on flatpak or not
  * flatpak: remove zig from final build
  * Update README.md

  [ dependabot[bot] ]
  * build(deps): bump docker/setup-qemu-action from 1 to 2

  [ dependabot[bot] ]
  * build(deps): bump flatpak/flatpak-github-actions from 4 to 5
  * update zig, src for loops
  * pkg: fmt
  * iterating on the new for loop syntax
  * update mach to fork for now
  * update flatpak to use latest zig
  * update zig-js for latest zig changes
  * update zig-objc for new for syntax
  * termio/exec: don't pass pointer to stack var
  * screen clone should not make full requested height "written"
  * screen: when resizing and trimming scrollback, have to offset cursor Y
  * screen: fix issue with resizing w/ more cols, reflow, and scrollback
  * screen: resize more rows preserves soft wrapped flag
  * screen: trim trailing no-character cells when rows is changing
  * screen: don't trim blank lines if rows aren't changing

  [ dependabot[bot] ]
  * build(deps): bump cachix/install-nix-action from 19 to 20
  * screen: when expanding cols, broadcast empty styled cells
  * screen: don't wrap empty-char stylized cells on shrinking cols
  * screen: only trim if we're not wrapping on col growing
  * screen: grow cols before rows to handle reflow (tested)
  * screen: redo resizing to less columns
  * screen: correct cursor position with scrollback and less cols
  * terminal: erase display below should unwrap soft wrapped state
  * screen: shrinking cols trims trailing blank lines
  * screen: adding cols doesn't mess with the viewport
  * disable the auto balance config by default, add some padding
  * terminal: erase display complete needs to reset row wrap state
  * screen: resize rows should use old cols value
  * add log when config file is successfully read
  * config: add functions to load from home and load configured
  * macos: load config file default file locations
  * build_config sets runtime to "none" if embedded
  * clear_history binding, default Cmd+K
  * renderer: reset font shaper buffer size on font size change
  * can now use -Dfont-backend to choose the font backend to use
  * fix mouse position recording for x10 format
  * disable double/tripclick highlighting if mouse reporting is enabled
  * fix wasm build
  * don't need to set all sprite values in enum
  * Use procedurally generated sprites for cursors rather than shaders
  * build: generate a version number, show in log on startup
  * ci: automatically set macos app build number
  * ci: release tag after builds are done
  * build.zig handles tagged releases
  * metal: do not use setPurgeableState on MTLTexture/Buffer
  * ci: set git committer for release tag
  * macos: rename TerminalSurfaceView to TerminalSurface
  * macos: making the surface state get passed down...
  * macos: get rid of delegates on our surface view
  * macos: working on splits
  * macos: window tracking cleans up observers properly
  * macos: fix state handling of terminal surface in split
  * macos: massive reorg
  * macos: change key window detection
  * macos: working on custom split view
  * macos: SplitView dragging
  * macos: use my new split view
  * macos: comment my split view
  * macos: fix focus on split change
  * macos: little tweaks
  * termio: coalesce resize events
  * input: new_split binding, can parse enums
  * apprt/embedded: newSplit callback
  * apprt/embedded: close surface callback
  * macos: nil bottomright when we close it
  * macos: set proper window title for focused split
  * macos: redo all the split views
  * macos: terminal split views handle nested close properly
  * macos: fix bug where like... 5 terminals were being launched in the background
  * macos: take over menu bar, separate close and close window
  * macos: close surface works
  * macos: menu bar to split
  * macos: properly lose focus on previous split when new split
  * update Zig version
  * update README
  * macos: hook up all the bindings so we're ready to handle focus event
  * macos: hook up previous/next split focus
  * macos: put next/prev split focus into menu
  * macos: change focus callback to use an enum so we can get other dirs
  * macos: navigate splits directionally
  * apprt/glfw: add logging with error information when glfw init fails
  * clean up some of the nix package building
  * build.zig: automatically patchelf the rpath when in a nix shell
  * build.zig: detect build outside of Nix environment and provide warning
  * macos: set default window size on macOS 13+
  * update libxev
  * ghostty.h: fix type usage before declaration
  * macos: explicitly free surface resource on split/tab close
  * macos: reliable window focus tracking for surface
  * Update README.md
  * apprt/gtk: make compatible with GTK < 2.74
  * Use proper Linux default keybindings
  * font/freetype: add a 1px border to each glyph in the texture atlas
  * linux copy/paste defaults to ctrl+shift+c/v
  * terminal: selectLine can select last line with scrollback
  * apprt/gtk: add more debug logs about scale factors
  * apprt/gtk: copy the app id because we need to own it according to docs
  * terminal: add missing anywhere states to ground, get rid of real state
  * terminal: clean up duplicate states in parse table
  * fix regression where BEL is accepted to end OSC sequences
  * linux: proper split shortcuts
  * support mouse alt scroll (mode 1007)
  * handle horizontal scrolling for mouse reports
  * termio: detect child process exit
  * pty: deinit should close child end
  * termio: close surface on process exit
  * apprt: all implement close surface
  * termio: no need to close pty primary when process exits
  * remove unused function, make apprt surface close mandatory
  * apprt/gtk: do not use unique app mode (do not set ID for GApplication)
  * apprt/embedded: incorrect function call for new close surface
  * update TODO!
  * config supports clone() operation for a deep copy
  * config: implement change iterator (one todo)
  * config: changed() to test if a specific key has changed
  * config: implement comparison for keybinding change
  * config: dedicated load func so we can reload
  * surface doesn't store a pointer to Config anymore
  * make it claer the config pointer is not stable after renderer/IO init
  * move config loading into apprt to prep for reloading
  * implement reload_config app message
  * reload_config keybinding (defaults to ctrl+alt+super+space)
  * apprt/embedded: reload config support
  * ghostty.h: add missing reload callback
  * macos: implement config reloading callback
  * renderer: use a DerivedConfig to avoid the main Config pointer
  * surface propagates new config to renderer
  * termio: use DerivedConfig
  * termio/exec: comment about what we're updating
  * surface mouse_interval is dynamically update-able
  * termio: allow write req pool to grow if needed
  * update config messages use pointers now to make messages small again
  * don't look up default shell from SHELL env if shell is set
  * update zig-objc
  * terminal: implement focus event mode 1004
  * if no argv, then don't load CLI args
  * scroll viewport to bottom on certain character write events
  * ci: add timeout to release
  * move selection to screen
  * terminal: screen scroll with full scrollback modifies selection
  * terminal: selection within logic is more correct, better tested
  * core: scroll the surface when mouse is pulled above or below surface
  * update TODO
  * shift-click extends selection
  * renderer/metal: fix color bug on macOS 13 Intel.
  * selection: containedRow for getting the row that contains a screen point
  * font/shaper: split runs at selection boundaries
  * renderer/Metal: split runs on selection
  * font/shaper/web_canvas: needs to add null selection for shaper test
  * terminal: selectWord stops at single/double quote boundaries
  * terminal: parser must reset intermediate storage for utf8
  * build compiles at least
  * build: run tests
  * use new build struct
  * don't prefix warning
  * update zig bins for flatpak
  * copy mac binary must depend on binary
  * macos: translate ASCII keys
  * core: input bindings support unmapped bindings
  * apprt/glfw: new keycallback for unmapped
  * apprt/embedded: support unmapped keys
  * apprt/gtk: fix key callback
  * apprt/gtk: always confirm when surface is closed
  * apprt/gtk: only show exit confirmation if process is alive
  * apprt/embedded: support new process alive callback on close
  * apprt/gtk: set proper defaults to confirmation dialog
  * macos: show close confirmation if running process exists
  * macos: Cmd+W closes settings window if focused

  [ Jakub Konka ]
  * macos: force macOS 12 SDK for latest macOS 13 as Mach does not support it

  [ Mitchell Hashimoto ]
  * macos: confirm on quit
  * macos: only show confirm quit on focused window
  * macos: quit if we have no visible windows
  * core: quit flag is reset after tick
  * apprt/gtk: close keybind doesn't leak memory
  * apprt/gtk: close tab button will show confirmation properly
  * apprt/gtk: window close confirmation
  * apprt/gtk: quit confirmation window
  * apprt/glfw: quit cleans up resources properly
  * selection toViewport point should extend to end of last row
  * vendor/mach: go back to mainline
  * vendor/zig-objc update
  * update zig

  [ dependabot[bot] ]
  * build(deps): bump flatpak/flatpak-github-actions from 5 to 6

  [ Jack Pearkes ]
  * config: add confirm-close-surface
  * pass through confirm close config in surface

  [ Mitchell Hashimoto ]
  * remove mach, specialize to mach-glfw
  * update build
  * vendor/zig-objc
  * update zig version
  * update zig version
  * macos: don't block shutdown/restart on confirmation
  * fix some issues for future Zig update

  [ dependabot[bot] ]
  * build(deps): bump cachix/install-nix-action from 20 to 21
  * renderer: do not draw cursor cell inversion if we don't draw the cursor
  * update zig
  * update flatpak zig binary URLs
  * update required zig version in build.zig
  * linux: fit gtk/flatpak builds
  * mac: fix split initial focus
  * terminal: track semantic prompt metadata per row
  * termio/exec: handle semantic prompt events
  * core: surface confirm close logic updated to handle semantic prompts
  * terminal: don't log semantic prompt marks
  * Update README.md
  * apprt/embedded: clipboard value can be null
  * update zig version

  [ Thorsten Ball ]
  * Handle non-printable characters when ctrl is pressed

  [ Mitchell Hashimoto ]
  * update zig
  * terminal: parse OSC 133 A redraw like kitty
  * terminal: semantic prompt aware resize
  * terminal: tests for semantic prompt on resize
  * terminal: osc 7 parsing
  * terminal: track pwd reported via OSC 7
  * app keeps track of last focused surface
  * apprt/embedded: new surfaces inherit last focused
  * termio/exec: check cwd validity
  * apprt/glfw: inherit working dir
  * apprt: clean up how apprt initializes surfaces
  * update README
  * font: if CoreText needs to allocate, stack allocate and log
  * update zig version
  * update cachix action for macos 12
  * various tests to ensure we parse curly underlines correctly
  * terminal: parse underline color sequences (but do not handle yet)
  * terminal: track underline color on cell
  * renderer: render underline color if set
  * finalize comments
  * font: curly underline has a minimum wave height
  * font: fix double underline drawing with very low underline positions
  * font: remove old logging
  * font: underline sprites should never go out of bounds for canvas
  * log emoji font as info, log that fonts are using default
  * config file quoted strings are accepted now
  * font: run splitting needs to detect italics
  * terminal: correct assertion for scrollUp
  * terminfo: basic Source structure and can encode
  * terminfo: working on Ghostty's terminfo
  * build: build.zig encodes and writes the terminfo source
  * build: use tic to compile terminfo into database format
  * nix: add ncurses so we have access to tic, infocmp, etc.
  * terminfo: a bunch more capabilities
  * terminfo: more capabilties, I think this is all of them
  * ghostty encoding test needs more buffer
  * os: exePath to get path to running executable
  * build: copy terminfo data into Mac app bundle
  * ci: during release builds, copy terminfo db into mac app bundle
  * termio: sets TERMINFO if we can find the terminfo dir
  * use stdlib selfExePath
  * build: copy the terminfo db using cp so we get symlinks
  * build: fix race conditions, use actual filesource
  * terminfo: fix 0 => O
  * terminfo: switch to semicolon SGR 48 to prevent render issues
  * terminal: reset CSI param separator in parser on clear
  * build: fix race condition in build on creating 'share' dir
  * build: Copy terminfo resources from xcodeproj
  * terminal: SGR parse invisible (attr 8, 28)
  * renderer: support invisible attribute
  * ci: release process must preserve symlinks
  * terminal: horizontalTabBack function
  * terminal: CHT/CBT
  * CSI W - cursor tabulation control
  * CSI ? W
  * CSI f
  * CSI aliases
  * Update zig, mach, fmt
  * update libxev
  * fix min usage in src/os
  * build.zig update min version
  * update flatpak build
  * update zig-js for wasm
  * mouse shift-click only continues previous event if selection is active
  * shift+click to override "grabbed" mouse events and select
  * mouse button codes for right/middle were swapped!
  * define precision scrolling and momentum structs, C API
  * apprt: plumb through scroll mods to core, don't handle them yet
  * macos: build scroll mods value
  * core: do high precision scrolling Y calculations
  * scale x, speed up scrolling
  * Update Zig (#164)
  * build: update min required zig version

  [ Thorsten Ball ]
  * macOS: change quit dialog to handle return by removing role

  [ Evan Phoenix ]
  * Use the precision calculation to determine when to send mouse events

  [ Thorsten Ball ]
  * macOS: implement cmd+[0-9] to goto tab

  [ Mitchell Hashimoto ]
  * macos: attach gotoTab listener to contentView and filter on focused win
  * log if a configured font is not found
  * coretext: calculate units per em/point
  * coretext: initially fill grey
  * fix up for new zig
  * font: remove the old comment about not doing the grey stroke
  * coretext: the size needs to be in pixels! (see comment)
  * coretext: rasterization looking cleaner
  * cleaning up rasterization, comments
  * coretext: colored glyph rendering
  * coretext: validate atlas depth matches color depth
  * coretext: fix emoji placement
  * coretext: handle glyph padding in region reservation
  * coretext: layout rect must fit all chars
  * coretext: improved baseline calculation
  * coretext: do not treat color diffs special for offset
  * sprite: all rasterized sprites should have a 1px padding
  * coretext: remove the old renderGlyph impl
  * font: comment out debug logs
  * font: update comment
  * font: turn rasterization options into a struct, add thicken
  * renderer: hook up font thickening setting
  * font: default rasterizer on macOS is now coretext
  * coretext: tweak underline position
  * coretext: address TODO
  * pkg/macos: do not use bitCast through a function
  * font: do not use Noto on macOS for tests, it doesn't work
  * renderer: remove metal workaround, this caused crashes on x86_64
  * fix failing test on non-Mac
  * remove metal workaround completely

  [ Thorsten Ball ]
  * Toggle fullscreen on super/ctrl+return, only macOS for now
  * README: show how to set color palette in config

  [ Mitchell Hashimoto ]
  * macos: make close the terminal button non-destructive
  * adjust mouse selection calculation for window-padding settings

  [ Thorsten Ball ]
  * gtk: handle ctrl+return to toggle fullscreen

  [ Mitchell Hashimoto ]
  * fix old zig fmt in blocks.zig
  * Change font metrics to all be integers, not floats.
  * coretext: switch up positive/negative y axis values
  * coretext: use alternate approach to calcaulate cell height and ascent
  * update nix to 23.05
  * Revert "update nix to 23.05"
  * font: support skew transform for auto-italics
  * font: don't fallback styles when searching for a codepoint
  * font: share skew matrix for core text
  * nix: update to python3
  * config: add background-opacity and float parsing for config
  * metal: start setting up background transparency
  * metal: apply background opacity
  * apprt: add C API for detecting background transparency per surface
  * config: clarify reload
  * opengl: support background opacity
  * apprt/gtk: honor background opacity
  * background-blur-radius for macOS
  * update zig
  * bar cursor was short by a couple pixels
  * font-feature config to enable/disable OpenType Font Features
  * clear_screen keybinding works even when not at shell prompt
  * clear_screen uses FF (0x0C) if cursor is at prompt
  * terminal: jump to prompt core methods
  * keybinding jump_to_prompt for semantic prompts
  * terminal: scroll to row always tries to get it to the top
  * start shell-integration folder, copy into zig-out
  * termio/exec: refactor resources dir lookup to prep for shell integ
  * termio: fish shell integration injection
  * fish shell integration
  * fish: pwd reporting
  * zsh files starting
  * zsh integration
  * config: support parsing enums
  * allow configuring shell integration injection
  * change "auto" to "detect" for shell integration
  * config: support enum cloning
  * update README
  * renderer: double line widths for sprite fonts when font-thicken is true
  * terminal: do not scroll viewport if new lines are added while scrolled
  * terminal: rename scroll "delta/delta_no_grow" to screen/viewport
  * update zig
  * update freetype to 2.13.1
  * vendor: update harfbuzz
  * vendor: update pixman
  * vendor: update libpng
  * vendor: update utf8proc
  * terminal: add screen.dumpString
  * terminal: don't export plainString, its only for testing
  * add os.tmpDir to get the recommended temp dir base path
  * move TempDir to src/os and use the real tmpDir
  * write_scrollback_file binding
  * do not write scrollback file for alternate screens
  * renderer: do not blink explicit steady cursor styles
  * font: block cursor was not taking full cell width
  * move a bunch of files to src/os
  * validate locale prior to setting, fallback to en_US.UTF-8

  [ Thorsten Ball ]
  * gtk: change default window size to 1000x600
  * Fix blurry fonts by flooring padding of surface

  [ Mitchell Hashimoto ]
  * renderer: change padding to integers
  * reset LANG env var if we set it and it is invalid
  * update zig version
  * font/shaper: text runs should split around block cursors
  * font/shaper: do not break on merged emoji if cursor is directly on it

  [ Thorsten Ball ]
  * locale: set LANG to the fallback value if we have invalid locale
  * locale: remove default value for local dev env

  [ Mitchell Hashimoto ]
  * update zig
  * Revert "update zig"
  * update zig
  * update libxev
  * CSI for SGR only if there are no intermediates

  [ Thorsten Ball ]
  * gtk: remove thin, white border
  * config: change default keybind for goto-split on non-Darwin

  [ Mitchell Hashimoto ]
  * update zig

  [ Thorsten Ball ]
  * gtk: add missing space in close dialog and add newline

  [ Mitchell Hashimoto ]
  * update zig
  * fix various build scripts
  * switch back to mach-glfw fork
  * update flatpak builder to correct zig version
  * update build.zig required zig version
  * add README for testers
  * HTML tweak
  * termio/exec: default window title to the pwd if not reported
  * default the title to the ghostty emoji
  * shell-integration/zsh: enable title changes

  [ Thorsten Ball ]
  * macos: add support for non-native fullscreen mode
  * Add config setting to turn non-native fullscreen on or off

  [ Mitchell Hashimoto ]
  * macos: merge AppController and AppDelegate, organize groups
  * macos: reorganize, rename, put files in groups
  * set the title of the window
  * macos: implement newWindowForTab for "+" button
  * macos: "+" button ensures tab is added to same window group
  * macos: new tab menu/shortcut works even if no windows are present
  * apprt/gtk: fix build for macos non-native fullscreen changes
  * only send resize messages to renderer/io thread if changes happen
  * update tester readme info
  * macos: Cmd-Q without any window focus works

  [ Thorsten Ball ]
  * macos: re-add Edit submenu to main menu

  [ Mitchell Hashimoto ]
  * macos: remove unimplemented menu items
  * macos: quit menu should say "Ghostty"
  * C API for invoking bindings
  * macos: enable copy/paste menu items in "Edit"
  * macos: help menu goes to the github repo
  * input: support assigning integer binding action values
  * bind shift+<page-up/down> to jump_to_prompt back/forward, respectively
  * termio: respect GHOSTTY_RESOURCES_DIR
  * update README with shell integration instructions
  * renderer/opengl: need to release OpenGL context with glfw
  * fix keybind example in README

  [ Thorsten Ball ]
  * flatpak: install icon files to `/apps` path

  [ Mitchell Hashimoto ]
  * renderer: hide cursor is state explicit asks for invisible cursor
  * terminal: implement insert mode (mode = 4)
  * tests for insert mode (4)
  * CSI r for top/bot margin must have no intermediates
  * build: always add /usr/lib/{triple} to search path for Linux
  * build: add libxml2/libbuid for fontconfig dynamic link for CI

  [ Thorsten Ball ]
  * macOS: explicitly name the NSMainNibFile in plist

  [ Mitchell Hashimoto ]
  * build: dynamic link first (mode_first)
  * nix: remove unused libs
  * build: update flatpak to point to correct zig version
  * make keyboard modifiers left/right-aware throughout core
  * apprt/gtk: new input mods format
  * bindings can contain directional modifiers: left_shift+a
  * non-macos doesn't support directional bindings
  * key: fix wrong comment
  * search for resources dir relative to executing binary on Linux (#245)
  * change sentinel value for resources dir, its different on Linux
  * Revert "Merge pull request #244 from mitchellh/alt-as-esc"
  * apprt/gtk: enable single instance mode
  * apprt/glfw: launch window on startup
  * termio: use a pipe to notify the reader thread to quit
  * termio/exec: set pty fd to non-blocking, try to read as long as possible
  * termio/exec: if read thread gets 0 bytes then break the tight loop
  * termio/exec: make sure that process is dead before killing read thread
  * apprt/gtk: remove useless calls

  [ Kevin Hovsäter ]
  * Fix typos

  [ Mitchell Hashimoto ]
  * update nix to 23.05 (#250)
  * termio/exec: poll() needs a negative timeout to block 🤡
  * os: add resourcesDir function to find app resource dir
  * core: App looks up resources dir on startup
  * plumb through the resources dir to termio
  * apprt/gtk: set icon name
  * apprt/embedded: new resources dir api
  * revert back to nix 22.11, see comment
  * keyboard bindings should never take caps/num lock into account
  * bind sequences for PC style function keys from xterm
  * scroll top, bot, page up, page down binding actions
  * scroll_page_fractional keybinding
  * linux default keybindings for scroll top, bot, page up, down
  * update libxev to fix split writes on large writes (i.e. big paste)
  * fix error set for libxev cross-platform
  * ctrl+backspace should send 0x08

  [ Thorsten Ball ]
  * gtk: fix arrow-up stealing focus

  [ moderation ]
  * gtk: apply background opacity

  [ Mitchell Hashimoto ]
  * apprt: primary clipboard awareness (selection clipboard)
  * selection copies to the selection clipboard
  * apprt/gtk: use glfw for reading primary clipboard (see comment)
  * apprt/glfw: support primary clipboard
  * apprt/embedded: support selection clipboard
  * "copy-on-select" configuation to disable
  * apprt/embedded: allow noting that selection clipboard is not supported
  * apprt/glfw: warn that the macos version has bugs
  * warn if the binary is a debug build
  * do not process charCallback if control character was processed

  [ cryptocode ]
  * Don't show hollow cursor in inactive windows when cursor is hidden.

  [ Mitchell Hashimoto ]
  * input, macos: initial work on keymapper and macos usage of it
  * macos: detect keyboard layout change and reload the keymap
  * apprt/embedded: keymap state is per surface, not per app
  * input: associate input.Key with keycodes from Chrome
  * keymap had incorrect bitfield for modifiers
  * macos: use the new self-hosted translation
  * apprt/embedded: remove old _key api, new only!
  * apprt/embedded: handle repeat events
  * core: note when keyCallback processed the input
  * apprt/embedded: fix char callback ignore when key is consumed
  * input: only load Keymap on darwin
  * input: printable, comment on what magic indexes mean
  * apprt/gtk: use manual translation, handle dead key states
  * core: get rid of ignore_char, apprt must handle this now
  * input: rename Keymap to KeymapDarwin since its macos only for now
  * input: rename "unmapped" to "physical"
  * support preedit text rendering in core and metal
  * apprt/gtk, opengl: render preedit
  * terminal: allow selections outside of written area and clamp
  * terminal: delete wide char if it wraps and we delete the row above
  * terminal: resize more cols with wide spacer head deletes the spacer
  * terminal: resize more cols with wide spacer head across multiple lines
  * terminal: introduce wide spacer head if reflowing wide char w/ more cols
  * terminal: less col resizing with wide char needs to insert head spacer
  * terminal: resizing to 1 col wide with wide chars
  * terminal: print wide char with 1-col width
  * terminal: avoid underflow on resize, tests added
  * ci: use custom token for release so it isn't rate limited
  * input: carbon modifier bits were not correct for some modifiers
  * only initialize font discovery mechanism once, cache on App
  * only the app should own the font discovery instance
  * update to nix 23.05
  * build: remove hardcoded glibc, I don't think this error is happening
  * apprt/gtk: inherit font size on new windows and tabs
  * add more ctrl key sequencs for legacy ascii
  * core: translate alt- prefix to an esc (0x1B) prefix
  * macos-option-as-alt config, handle alt-prefix for charCallback
  * input: add all the mappings for pc style function keys
  * core: match and emit function keys
  * terminal: handle set application keypad mode (both ESC and modes)
  * terminal: parse and handle set modify key format (ESC[>{a};{b}m)
  * terminal: support disable modify key format sequence ESC[>n
  * config: remove pc style function keys, handled separately now
  * parse and respect mode 1036
  * apprt/glfw: send mods to charcallback
  * terminal: parse mode 1039
  * input: various more helpers
  * terminal: ignore ESC \ which enables ST mode since we're always in it
  * apprt/gtk: convert keyval to unicode if input method doesn't process
  * input: unify binding-sensitive mods to a single func
  * input: expand Mods size, convert everything to use it
  * macos: send the left/right status of modifier keys
  * config: macos-option-as-alt now accepts "left", "right"
  * modifyOtherKeys state 2 should send sequences for all chars
  * modify keys state 2 depends on some scenarios
  * termio: send VT220 device attributes on request, add secondary
  * terminal: working on new modes storage abstraction
  * terminal: ModeState can save/restore one set of modes
  * apprt/embedded: keycallback should use nomod text to determine key
  * terminal: move to new modes struct
  * terminal: parse and handle save/restore mode (CSI ? s, CSI ? r)
  * termio: on restore mode we need to call setMode no matter what
  * renderer/opengl: fix compilation for new modes style
  * terminal: add a test to verify our grapheme state is what we expect
  * terminal: do not crash if selecting a wide spacer on a soft-wrapped line
  * terminal: selection string must include grapheme data
  * font: shaper doesn't split run on selection if selection splits grapheme
  * apprt/gtk: translate keyval if there is no utf8
  * macos: do not send ctrl or super into UCKeyTranslate
  * core: process fixterms sequences for modified unicode characters
  * core: add KeyEvent
  * input: starting to work on KeyEncoder, got ctrl sequences
  * input: KeyEncoder legacy encoding handles old keyCallback logic
  * input: KeyEncoder handles the charCallback stuff now too
  * input: legacy key encoding handles alt-as-esc for general utf8
  * core: start on key2Callback for the new callback that uses KeyEncoder
  * input: legacy encoding never emits sequence during dead key state
  * input: encoding should always write to the buf
  * apprt/gtk: call new key2callback using the all-in-one key event
  * apprt/gtk: clean up keyval_unicode usage
  * apprt/gtk: only use key2callback
  * apprt/embedded: only call new key2callback
  * apprt/glfw: convert to new key2callback
  * remove charCallback/keyCallback
  * rename key2callback to keycallback
  * input: CSI u encoding for modified unicode chars
  * input: clarify why we use all mods for unicode CSI u
  * input: do not send ctrl-sequences for ctrl-i,m,[
  * bindings should not use consumed modifiers
  * terminal: add Kitty key flags, stack
  * terminal: parse kitty query, push, pop keyboard flags
  * terminal: implement CSI = u for setting kitty keyboard flags
  * terminfo: add fullkbd for kitty keyboard protocol

  [ Thorsten Ball ]
  * macOS: remove dead code from PrimaryWindowController

  [ Mitchell Hashimoto ]
  * input: add kitty keymap data
  * input: begin kitty key encoding logic (not working yet)
  * input: KittySequence for encoding sequences
  * input: lot more Kitty encoding logic
  * core: use Kitty encoding if enabled
  * input: key must provide unshifted codepoint
  * input: Kitty encodes alternate keys
  * input: proper optional entry handling
  * input: repeat events need to be handled for Kitty w/o report events

  [ Thorsten Ball ]
  * macOS: inherit font size when creating new tab
  * macOS: move newTab code to PrimaryWindowManager

  [ Mitchell Hashimoto ]
  * apprt/glfw: always say alt is consumed on macos
  * input: remove old TODO. This is handled now in the app runtimes
  * shell-integration: add bash script (no auto-inject yet)
  * terminal: ignore SOH/STX, bash sends this for some reason
  * Note bash shell integration in README
  * Update README.md
  * termio: disable kitty keyboard protocol for glfw
  * build: make glfw opt-in on all platforms, default to GTK on Linux
  * update README

  [ Thorsten Ball ]
  * macOS: simplify code for new tab

  [ Mitchell Hashimoto ]
  * Simplify Bash Integration (#299)

  [ Thorsten Ball ]
  * embedded: use separate struct to pass options to new_tab_cb

  [ Mitchell Hashimoto ]
  * Fix rendering issues with bash shell integration (#301)
  * build: fix linking bugs for macos test
  * build: imgui should not be linked without an apprt
  * build: gtk needs imgui
  * terminal: proper reverseIndex behavior with scroll region set
  * mouse scroll events were flipped for non-cursor key events
  * macos: pass around a base surface_config_s rather than a new tab
  * apprt/embedded: use setfontsize so that the original font size is retained
  * c include: u8 => u16
  * macos: can always set base config on new tab

  [ Jack Pearkes ]
  * Tweak testing README

  [ Mitchell Hashimoto ]
  * config: repeatablestring must copy values it parses into arena
  * renderer/{metal,opengl}: need to premult our cell alpha to have effect

  [ Thorsten Ball ]
  * macOS: new window can inherit font size
  * macOS: new split can inherit font size
  * macOS: reduce mechanism to create windows back to one
  * macOS: fix cascading windows when using tabs and closing windows

  [ Mitchell Hashimoto ]
  * Update TODO.md
  * remove imgui and devmode
  * update to 0.12.0-dev.141+ddf5859c2
  * terminal: CSI < u defaults param to "1" if not set (pop kitty keyboard)
  * core: send pixel-level surface sizing to the pty
  * terminal: parse APC strings
  * termio/exec: process APC callbacks
  * termio/exec: limit max apc string length
  * terminal: move kitty keyboard protocol to its own file
  * terminal: kitty graphics command/control structs
  * terminal: initial kitty graphics command parsing
  * terminal: a lot more kitty command parsing
  * terminal: all commands parsed, need tests
  * terminal: tests for kitty command parsing
  * terminal: more comments for kitty command parsing
  * terminal: kitty parser get a little clever, keys are always a char
  * terminal/kitty-gfx: optimize some of our kv parsing
  * terminal/kitty-gfx: clean up a lot more memory management
  * terminal: generalized APC handler
  * move stb to src/stb, add stb_image for png decoding
  * terminal/kitty-gfx: support "query", loading images, tests
  * terminal/kitty-gfx: handle quiet settings for response
  * terminal/kitty-gfx: add some validation from Kitty
  * terminal/kitty-gfx: better memory ownership semantics around func calls
  * terminal/kitty-gfx: start terminal state, can load and add images
  * terminal/kitty-gfx: start working on placements
  * terminal/kitty-gfx: placement now works properly
  * terminal/kitty-gfx: assign an internal image id
  * terminal/kitty-gfx: huge progress on chunked transfers, lots of issues
  * terminal/kitty-gfx: fix big chunked load memory leak
  * terminal/kitty-gfx: zlib decompression for data validation
  * terminal/kitty-gfx: loading non-chunked image takes data slice ownership
  * terminal/kitty-gfx: fix broken tests
  * terminal/kitty-gfx: the data is base64 encoded!
  * input: pc style function keys should use all mods, not effective
  * terminal/kitty-gfx: add debug function to dump image data
  * terminal/kitty-gfx: decompress as part of image completion, tests
  * terminal/kitty-gfx: test for non-compressed rgb image
  * terminal/kitty-gfx: base64 decode data as it comes in
  * terminal/kitty-gfx: centralize all image loading on LoadingImage
  * terminal/kitty-gfx: move all image decompression to loadingimage
  * terminal/kitty-gfx: test chunked loads
  * terminal/kitty-gfx: temporary file medium
  * terminal/kitty-gfx: file medium
  * terminal/kitty-gfx: png decoding
  * terminal: clear screen, alt screen, etc. clear all kitty graphics
  * terminal/kitty-gfx: make some args const
  * renderer/metal: images required by placements become textures
  * renderer/metal: deallocate unused image textures

  [ Kevin Hovsäter ]
  * Allow optional OSC 52 parameter

  [ Mitchell Hashimoto ]
  * renderer/metal: extract helpers for shaders/buffers
  * renderer/metal: first pass at an image shader
  * renderer/metal: emit draw calls for images
  * renderer/metal: set correct x/y for image
  * renderer/metal: clip image if necessary off top of viewport (scrolling)
  * terminal/kitty-gfx: move cursor after image placement
  * terminal/kitty-gfx: cursor pos x/y were flipped
  * terminal/kitty-gfx: down movement off by one
  * renderer/metal: image should always be rendered at desired x
  * terminal/kitty-gfx: add placement function get selection
  * renderer/metal: honor cell offset graphics command
  * terminal/kitty-gfx: process source rectangle display params
  * terminal/kitty-gfx: respect display c/r params
  * terminal: mark kitty images as dirty on resize
  * input: kitty encoding should only output unmodified utf8 if printable
  * terminal: delete lines (CSI M) should clamp count to remaining lines
  * terminal/kitty-gfx: honor "z" setting
  * terminal/kitty-gfx: delete by id
  * terminal/kitty-gfx: delete intersecting cursor
  * terminal/kitty-gfx: delete intersection
  * terminal/kitty-gfx: we need to use rect, not sel
  * terminal/kitty-gfx: delete by column, row, z
  * terminal/kitty-gfx: images store transmit time
  * terminal/kitty-gfx: delete newest
  * terminal/kitty-gfx: hook up delete
  * terminal/kitty-gfx: get rid of selection
  * ci: disable wasm build for now
  * terminal/kitty-gfx: add file loading safety checks from Kitty
  * terminal/kitty-gfx: add per-screen storage limit
  * terminal/kitty-gfx: update todo
  * config: image-storage-limit to set maximum image memory per terminal
  * terminal/kitty-gfx: only enable on Metal for now
  * terminal/kitty-gfx: chunked transmit and display
  * terminal/kitty-gfx: data chunk can be zero size
  * terminal/kitty-gfx: ignore extra base64 padding
  * terminal/kitty-gfx: transmission only sends response when no more chunks
  * terminal/kitty-gfx: do not send response on transmit/display unless I
  * terminal/kitty-gfx: add error if both image id and num is set
  * termio/exec: initial subprocess screen size should be sub padding
  * terminal/kitty-gfx: todo notes
  * remove kitty graphics from TODO
  * update zig
  * renderer/opengl: glyphs that are too wide should be scaled down
  * apprt/embedded: do not translate control characters
  * Revert "Merge pull request #322 from mitchellh/big-glyphs"
  * input: kitty should not encode modifier-only key unless "report all"
  * build: can select renderer with -Drenderer
  * quirks: Menlo/Monaco should disable ligatures by default (#331)
  * font: Group maintains face ownership
  * font: move auto-italicization to Group
  * font: DeferredFace can no longer represent a loaded face
  * font: DeferredFace.name takes a buffer
  * font: determine quirks modes on font face load
  * font: fontconfig adaptations to new api
  * core: set focused surface pointer to null if matches on delete

  [ Kevin Hovsäter ]
  * Implement cursor text in addition to color

  [ Mitchell Hashimoto ]
  * input: keypad enter should act as normal "\r" if no other seq matches
  * font: grapheme clusters need to find a single font for all codepoints
  * config: add doc comment for cursor-text

  [ Seth Rider ]
  * Set gtk window title on change and tab swap (by key command)

  [ Mitchell Hashimoto ]
  * font/shaper: on macos load apple color emoji for tests

  [ Will Pragnell ]
  * macos: fix non-native fullscreen dock/menubar bugs

  [ Mitchell Hashimoto ]
  * remove pixman submodule
  * add pixman vendor without submodule
  * macos: add necessary functions for variation axes querying
  * font/coretext: ability to set variation axes
  * font/coretext: log the variation axes in debug mode
  * config: new "font-variation" set of configurations to set variable font
  * font: freetype supports font variation settings

  [ Seth Rider ]
  * use Gtk.Notebook::switch-page callback for setting window title

  [ Mitchell Hashimoto ]
  * terminal: screen test dumpString function should add graphemes
  * terminal: resize with less cols preserves zero width codepoints
  * terminal: test to ensure that DECRQM can parse
  * terminal: implement DECRQM (request mode)

  [ SoraTenshi ]
  * config: Add option for custom cursor style
  * Add Caveat information for shell integration

  [ cryptocode ]
  * Set TERM_PROGRAM and TERM_PROGRAM_VERSION environment variables.
  * Add comment explaining the purpose of the env variables

  [ Mitchell Hashimoto ]
  * termio: handle all the synchronized output setting, timer
  * renderer: do not render if synchronized output is on
  * termio/exec: disable synchronized output mode on resize

  [ moderation ]
  * vendor: update zlib

  [ Mitchell Hashimoto ]
  * font/sprite: fix horizontal dash drawing math for cells too small
  * renderer: split ligature around cursor even if cursor is flashing
  * font/shaper: split ligature around cell style change
  * terminal: tabstops were off by one
  * surface should default to default cursor, blinking should check selected
  * terminal: get rid of duplicate RGB struct
  * terminal: add w3c luminance formula
  * terminal: add contrast function based on w3c
  * terminal: sgr parsing doesn't parse 4-form 48, allows unstyled underline
  * terminal: resize more cols no longer preserves trailing stylized cells

  [ Will Pragnell ]
  * termio/exec: don't leak zombie subprocesses

  [ Mitchell Hashimoto ]
  * input: move action parsing to dedicating Action.parse
  * apprt/embedded: ghostty_surface_binding_action can now run any action
  * add ghostty_config_trigger C API to find a trigger for an action
  * macos: begin syncing menuitem key equivalents

  [ Will Pragnell ]
  * command: only spin on waitpid if it's non-blocking

  [ Mitchell Hashimoto ]
  * macos: complete lookup table for key equivalents
  * macos: sync many more menu items
  * macos: sync File menu
  * macos: sync all remaining menu items
  * macos: setup delegate for app state, config reload callback
  * input: maintain a reverse mapping to quickly look up trigger by action
  * input: when overwriting a binding, we must update the reverse map
  * input: kitty keymap was missing page up/down
  * remove some unreachables, log errors to avoid crashes
  * terminal: CSI S allows for count greater than scroll region height
  * terminal: delete chars (CSI P) tested, fixes many issues
  * terminal: add more assertions
  * terminal: delete lines outside of scroll region should do nothing
  * terminal: charset table should be len 256, not 255
  * font: don't use intCast on index
  * update libxev to fix CPU issue on macos
  * terminal: fix unimplemented origin mode check
  * macos: break reference cycle to window to allow window to free memory

  [ Karol Bakunowski ]
  * macos: default to sRGB color space

  [ Mitchell Hashimoto ]
  * update README to hide glfw
  * macos: hacks to grab surface focus on macOS 12

  [ Will Pragnell ]
  * macos: add visible-menu non-native-fullscreen option
  * macos: fix non-native-fullscreen menu & dock visibility bugs

  [ Mitchell Hashimoto ]
  * macos: hacks for split focus to work correctly on macos 12

  [ Mat ]
  * Update font DPI when the content scale is updated
  * use a const scoped block for font size

  [ Mitchell Hashimoto ]
  * content scale change events should also impact viewport padding
  * terminal: CSI P must shift all remaining columns to right of cursor
  * update README with additional shell integration notes
  * core: add zoom keybinding for splits
  * core: add unzoom_split binding
  * macos: support zoomed splits
  * turn zoom into a toggle rather than an explicit zoom/unzoom
  * macos: zoomed splits put an emoji in the title bar
  * macos: new split on zoomed split unzooms
  * macos: close and refocus split work while zoomed

  [ SoraTenshi ]
  * config: clean up cursor style configuration

  [ Mitchell Hashimoto ]
  * update vendor/libxev to retry on EINTR for io_uring
  * update zig

  [ Thorsten Ball ]
  * gtk: allow hiding window decoration in configuration
  * README: add notice about gtk single instance application

  [ Mitchell Hashimoto ]
  * terminal: parse semantic prompt "k" (kind) parameter
  * terminal: mark prompt continuation lines, end prompt clear at first prompt
  * terminal: disable noisy logs

  [ Will Pragnell ]
  * macos: fix split focus when toggling fullscreen

  [ dependabot[bot] ]
  * build(deps): bump actions/checkout from 3 to 4

  [ dependabot[bot] ]
  * build(deps): bump cachix/install-nix-action from 22 to 23

  [ Thorsten Ball ]
  * gtk: add gtk-single-instance setting to allow disabling of it

  [ Mitchell Hashimoto ]
  * renderer: always show cursor if window is not focused
  * macos: handle reopen event and open a window if none are visible
  * macos: dock menu

  [ Thorsten Ball ]
  * gtk: add new-window action to .desktop files
  * nix: add latest version of `zls` to flake.nix

  [ Mitchell Hashimoto ]
  * macos: key events for modifier-only keys
  * macos: add prev/next tab custom binding support
  * Big Cursor State Refactor
  * renderer/opengl: new cursor apis
  * termio/exec: ensure initial cursor blink mode is set to config
  * termio/exec: changing default cursor config updates at runtime
  * renderer: cursor style unit tests
  * macos: split traversal uses direction to determine proper focus target
  * macos: new window assertion is unnecessary
  * macos: fade unfocused splits
  * macos: add split zoom to menu
  * renderer: update some code comments
  * macos: disable hit testing for unfocused split rectangle
  * config: extract into dedicated dir, split into files
  * config: add C API ghostty_config_get to read configuration values
  * macos: use the configured unfocused split opacity
  * terminal: CSI q requires a space intermediate
  * renderer: implement underline cursor

  [ tom speak ]
  * Update README.md Config location

  [ Mitchell Hashimoto ]
  * config: cannot set underscore-prefixed fields
  * config: store some basic errors on parse
  * config: arg parser supports custom types with error tracking
  * config: store unknown errors in list too
  * apprt/glfw: log configuration errors
  * config: add ErrorList file
  * apprt/gtk: log configuration errors
  * macos: log configuration errors
  * config: turn invalid config-file values into errors in the list
  * README: note where config errors are logged
  * macos: UI for configuration errors
  * macos: fix some error window styling
  * macos: don't clear contentview for configuration on close
  * macos: add reload configuration to the Ghostty menu bar
  * macos: hook up proper data events
  * config: unify some error types for now
  * macos: don't steal focus for config errors
  * macos: add a reload configuration button
  * macos: reload config MUST go through Zig core
  * core: app needsConfirmQuit to streamline quitting if no active sessions
  * macos: integrate needsConfirmQuit to quit if all windows are at prompt
  * apprt/gtk: integrate app needsConfirmQuit
  * apprt/gtk: do not ask for confirm window close if all surfaces idle
  * ci: upload tip releases to blob storage

  [ dependabot[bot] ]
  * build(deps): bump docker/setup-qemu-action from 2 to 3
  * macos: add button to ignore configuration errors
  * macos: use appearance-sensitive bg color for error window
  * core: surface should not use app mailbox

  [ Gonzalo Diethelm ]
  * README: fix typos

  [ Mitchell Hashimoto ]
  * remove flatpak
  * font: fallback search must verify presentation
  * core: do not do emoji font fallback on Linux
  * font: remove excess debugging code
  * core: do not preload Apple Emoji, our fallback search can find it
  * macos: AppState config must be published and observed
  * bring back built-in emoji font for Linux
  * typo in loading emoji font for linux
  * apprt/embedded: call core app reload config so changes go to all threads
  * config: default cursor style has to be block

  [ Jonathan Marler ]
  * windows: initial support for zig build test

  [ Mitchell Hashimoto ]
  * terminal: parse OSC 22
  * terminal: cursor shape parsing, hook up to apprt callback
  * apprt/glfw: support setting cursor shape
  * macos: support cursor style
  * apprt/gtk: support set cursor shape
  * rename cursor shape to mouse shape for OSC 22

  [ Thorsten Ball ]
  * Fix compilation issues with GTK cursor support

  [ Mitchell Hashimoto ]
  * apprt/gtk: cursor state should be on surface
  * apprt/gtk: apply GDK scale factor to mouse coordinates

  [ cryptocode ]
  * Implement OSC 10 and OSC 11 default color queries
  * Review updates:

  [ Mitchell Hashimoto ]
  * terminal: stylistic changes for OSC terminators, 10/11 params
  * config: change osc-color-report-format enum
  * mouse-hide-while-typing config and glfw implementation
  * macos: implement setCursorVisibility
  * apprt/gtk: implement hide cursor
  * if mouse hide setting changes to false, show mouse immediately
  * update config docs around mouse-hide-while-typing
  * core: resiliency to invalid base64 data for OSC 52

  [ Will Pragnell ]
  * windows: implement tmpDir
  * windows: implement expandPath
  * fix references to jump_to_prompt binding

  [ Tim Culverhouse ]
  * linux: don't presume install location in desktop file
  * gtk: handle all close-requests

  [ Mitchell Hashimoto ]
  * Add --version for outputting version, framework for more actions
  * do not write logs to stderr for cli actions
  * can enable logging for CLI actions with GHOSTTY_LOG env var
  * cli actions can be "+<name>"
  * output more information for version
  * c api: add ghostty_info to get metadata about the build
  * macos: show warning in debug mode
  * apprt/gtk: show warning when running debug version
  * macos: consistent text

  [ Will Pragnell ]
  * windows: use cross platform consts where available

  [ Mitchell Hashimoto ]
  * main: only check for CLI actions on non-lib builds
  * gtk: set Name for new-window action
  * apprt/gtk: refactor into separate files
  * apprt/gtk: Window css styling is no longer used
  * apprt/gtk: shuffle some lines around in Window
  * renderer/opengl: OpenGL state may be nil to disable rendering
  * renderer/opengl: support reloading the Opengl state
  * apprt/gtk: handle scenario where OpenGL area becomes unrealized
  * renderer/opengl: gl state init needs to set blending, realization
  * gtk: tabs are draggable to the desktop to extract a window
  * apprt/gtk: listen to page-removed to hide tab bar if only one
  * apprt/gtk: don't use userdata for pages, can request on demand
  * terminal/kitty-gfx: erase all should preserve storage limit size
  * terminal: ignore CSI S with intermediates
  * core: do not emit mouse report events if position is outside surface
  * core: all SGR mouse report modes can tell button differences
  * core: send mouse motion events if motion tracking and button pressed
  * core: do not send repeat mouse events if cell didn't change

  [ SoraTenshi ]
  * macos: allow to hide decorations
  * fixup! macos: allow to hide decorations
  * Store and restore style mask on fullscreen
  * Remove custom CAPI function

  [ Will Pragnell ]
  * macos: always use latest window decoration config from runtime

  [ Mitchell Hashimoto ]
  * c: remove unused struct field
  * macos: stylistic changes

  [ SoraTenshi ]
  * Spawn alert box on new tab if decorations disabled

  [ Mitchell Hashimoto ]
  * macos: remove unnecessary call
  * core: mouse reports should always send on release even if outside
  * core: don't send release events for key bindings
  * apprt/gtk: working on config errors window
  * apprt/gtk: add View to help with auto-layout views
  * apprt/gtk: extract config errors window into views
  * apprt/gtk: hook up buttons
  * apprt/gtk: grab focus of config window when reloading
  * apprt/gtk: update config error contents on reload
  * apprt/gtk: if errors fixed, hide window

  [ Jonathan Marler ]
  * windows: fix fontconfig into libxml runtime crash from implicit func decl

  [ Mitchell Hashimoto ]
  * core: only prevent repeat mouse events for motion
  * apprt/gtk: config errors is not an application window
  * apprt/gtk: initial app menu
  * apprt/gtk: key file for logic related to keys
  * apprt/gtk: window actions
  * apprt/gtk: new window, tab
  * apprt/gtk: add new tab button in header
  * apprt/gtk: add reload config
  * apprt/gtk: reset accelerators initially
  * apprt/gtk: about window
  * apprt/gtk: window actions should use currently active surface
  * ci: don't run gtk tests in CI
  * terminal: allow mixed semicolon/colon CSI m commands
  * terminal: CSI G must reset pending wrap state
  * update README for Linux installation notes
  * update README
  * update README
  * core: move clipboard to async process
  * macos: async style clipboard reading
  * apprt/gtk: async clipboard
  * input: kitty alternates and text should not include control characters
  * macos: send caps lock state to UCKeyTranslate
  * apprt/gtk: use gtk_keyval_to_lower to get unshifted
  * macos: prevent mouseEntered/Exited processing if already in that state
  * macos: change executale name to "ghostty" (lowercase)
  * macos: set env var for app bundle to detect app launch vs CLI
  * apprt/embedded: ghostty_cli_main
  * main: disable stderr logging by default for lib
  * macos: set the proper env var
  * os: appendEnv
  * termio/exec: remove GHOSTTY_MAC_APP on Mac
  * input: correct xterm encoding for modified F1-F4

  [ Tim Culverhouse ]
  * terminal: respond to XTVERSION query

  [ Mitchell Hashimoto ]
  * config: window-theme, enum support for get
  * macos: sync NSAppearance for app based on window-theme setting
  * macos: background-opacity getter

  [ Tim Culverhouse ]
  * terminal: use larger buffer for xtversion response
  * osc: allow 0x20-0xFF in osc_put

  [ Mitchell Hashimoto ]
  * terminal: CSI E and F
  * core: send proper reporting code for alt not super
  * macos: mouse tracking area should always send
  * macos: detect mouseEntered/Exit on frame change
  * apprt/gtk: always set app ID, use G_APPLICATION_NON_UNIQUE instead
  * update zig to 0.12.0-dev.464+a63a1c5cb

  [ Tim Culverhouse ]
  * terminfo: add Smulx (underline styles) entry

  [ Mitchell Hashimoto ]
  * apprt/embedded: initialize unmodified keystate prior to use
  * renderer/opengl: only skip drawing cells if they're empty, not clear
  * renderer/opengl: remove gpucell lru cache
  * apprt/embedded: if a physical key input is a keypad key, keep it
  * macos: more robust cursor visibility handling
  * macos: enum does not need to be a string

  [ Tim Culverhouse ]
  * terminal: reset cursor state before eraseDisplay in fullReset
  * terminal: erase pen, except bg, in eraseDisplay
  * terminal: ensure 'has_bg' is set in eraseDisplay

  [ Mitchell Hashimoto ]
  * terminal: make switch true/false more idiomatic zig
  * cli: dedicated directory
  * cli: move cli_args.zig to cli
  * cli/list-fonts: dumb implementation
  * font: CoreText discovery searches monospace only by default
  * cli/list-fonts
  * cli/list-fonts: don't use arrayhashmap
  * font: fontconfig should not omit earlier fonts
  * cli/list-fonts: flags, help
  * font/core-text: discovery supports style search
  * font/fontconfig: support style descriptor
  * font: fallback should not restrict to only monospace
  * config: add font-style configurations
  * config: update docs
  * config: update some docs to clarify how to disable ligatures
  * font/shaper: fix failing test on macos
  * font: CodepointMap
  * font: discovery descriptor can be hashed
  * font: add CodepointMap with tests
  * font: add codepoint map and descriptor cache to Group, not used yet
  * font: change FontIndex to a u16 since we can expect more fonts with maps

  [ Tim Culverhouse ]
  * terminal: make deleteChars insert blank cells

  [ Mitchell Hashimoto ]
  * font: Group will use the codepoint map for codepoint overrides

  [ Tim Culverhouse ]
  * terminal: insert a blank cell in insertBlanks
  * terminal: save charset state and DECOM mode when saving cursor

  [ Mitchell Hashimoto ]
  * config: add font-codepoint-map
  * config: unicode range parser is more lenient about whitespace
  * core: hook up the codepoint map to the loaded font group
  * config: codepoint override font descriptors should not require monospace
  * font: debug log for overide
  * config: remove unused test, make parse test more intense

  [ Tim Culverhouse ]
  * terminal: move charset to screen
  * terminal: retain cursor and charset when entering alt screen
  * terminal: don't modify pen state when erasing eraseDisplay

  [ Mitchell Hashimoto ]
  * terminal: add protected mode flag to cursor pen
  * terminal: CSI Ps " q for setting DEC protected mode
  * terminal: DECSED, DECSEL parsing, tests
  * terminal: eraseLine protected, tests

  [ Tim Culverhouse ]
  * terminal: use ST instead of BEL terminator for XTVERSION

  [ Mitchell Hashimoto ]
  * terminal: eraseDisplay protected

  [ Tim Culverhouse ]
  * terminfo: add Setulc string for colored underlines
  * terminal: only use bg attr when erasing line
  * screen: only use bg attr for inserted rows

  [ Mitchell Hashimoto ]
  * terminal: DL should reset wrap
  * terminal: insertLines resets wrap
  * terminal: deleteChars resets pending wrap state
  * terminal: eraseChars resets wrap
  * macos: read from clipboard uses UTF-8 encoded string, proper byte count
  * terminal: eraseLine resets wrap
  * terminal: cursors must set pending wrap

  [ Isabella Basso ]
  * quirks: CodeNewRoman should disable ligatures by default

  [ Mitchell Hashimoto ]
  * core: shift does not send mouse events
  * config: font style is a union
  * renderer: always reset font group on config change
  * font: Group can enable/disable styles
  * core: disable styles
  * cli: args can parse unions
  * renderer: support font style changing at runtime
  * config: update docs

  [ Tim Culverhouse ]
  * config: add term config option
  * terminfo: add cursor styles to terminfo

  [ Mitchell Hashimoto ]
  * apprt/gtk: detect keyboard modifier state for mouse events
  * core: normalize newlines in non-bracketed pastes
  * Simplify setlocale logic to rely on libc to fail if invalid
  * font: shaper dynamically allocates cell buffer

  [ Tim Culverhouse ]
  * terminal: rows created from IND should inherit the current bg attr

  [ Mitchell Hashimoto ]
  * terminfo: OSC 52 support
  * terminfo: add a few more missing entries from tmux(1)

  [ Tim Culverhouse ]
  * terminfo: add bracketed paste entries BD, BE, PS, PE

  [ Mitchell Hashimoto ]
  * input: 0x7F is a control character, use helper
  * update zig
  * terminal: DCS handler, XTGETTCAP parsing
  * termio: hook up dcs callbacks
  * terminfo: comptime map for xtgettcap results
  * termio/exec: hook up xtgettcap
  * terminfo: xtgettcap map name should use the source name
  * terminfo: numeric comptime buffer only needs to be 10 bytes
  * termio/exec: need to defer deinit for DCS command
  * macos: on Sonoma, manually add menu height padding for visible-menu
  * macos: custom fullscreen menu item to respect non-native fullscreen
  * macos: change text to "toggle full screen"

  [ Tim Culverhouse ]
  * termio: reset mouse shape on terminal reset
  * terminfo: add mouse entries, correct kmouse

  [ Nathan Fisher ]
  * (Gtk) Set tab labels to fill the available space, so that they will divide up the avialable horizontal area instead of leaving a large empty space in the tab bar.

  [ Mitchell Hashimoto ]
  * terminfo: increase buffer size for test
  * Revert "macos: on Sonoma, manually add menu height padding for visible-menu"

  [ Tim Culverhouse ]
  * terminfo: add additional entries, fix smkx/rmkx
  * config: default TERM to xterm-ghostty
  * terminfo: use 'xterm-ghostty' as primary name

  [ Gregory Anders ]
  * macos: add tab index labels
  * macos: rename indexTabs() to relabelTabs()
  * macos: create modifier flags as OptionSet instead of from array
  * macos: add keyEquivalent overload to also return modifier string
  * macos: display keybinding instead of index in tab label

  [ Mitchell Hashimoto ]
  * macos: stylistic changes
  * macos: relable tabs when config is reloaded
  * apprt/gtk: make wide-style gtk tabs configurable
  * core: do not scroll viewport if mouse reporting is requested

  [ Patrick Fong ]
  * lint all Md files
  * lint all Yaml files
  * add Prettier step to check formatting
  * lint JSON and Typescript as well
  * ignore some other stuff
  * add linting doc
  * update linting doc
  * update linting doc
  * undo changes to vendor
  * don't lint macos/, undo macos/ changes

  [ Mitchell Hashimoto ]
  * nix: install prettier, also ignore zig-cache/out

  [ Nathan Youngman ]
  * fabs builtin was renamed

  [ Mitchell Hashimoto ]
  * update zig
  * terminal: scroll region scroll up copied the wrong length of data

  [ Curt Bushko ]
  * inital windows build support
  * run prettier

  [ Tim Culverhouse ]
  * gtk(input): fix value used for lowercase lower_unicode
  * input(kitty): fix reporting of alternate keys

  [ Curt Bushko ]
  * create script and dump logs

  [ Tim Culverhouse ]
  * input: don't ESC prefix non-ascii characters

  [ Patrick Fong ]
  * improve docs on font config
  * fix grammar

  [ Mitchell Hashimoto ]
  * input: make Key ascii functions comptime-generated

  [ Michael Dusan ]
  * macos: adjust fullscreen frame height for notch

  [ Mitchell Hashimoto ]
  * macos: safeAreaInsets.top includes menu
  * os: we need to copy the old lang pointer before we unsetenv
  * os: unset lang completely setlocale fails

  [ moderation ]
  * vendor: update harfbuzz.

  [ Tim Culverhouse ]
  * selection: only clear when keypress has utf8

  [ Nathan Fisher ]
  * Add Categories entry to .desktop file so Linux desktops have a better chance of placing the menu entry into an appropriate category

  [ Mitchell Hashimoto ]
  * apprt/gtk: default working-directory to home if launched from desktop
  * input: fix regression with ascii mapping to a keypad key
  * recomment line
  * input: binding set can track unconsumed triggers
  * input: Binding string can be unconsumed with "unconsumed:" prefix
  * core: handle unconsumed bindings in key callbacks
  * termio: clear screen always sends form feed (0x0C)
  * config: keybinding clone must clone all members
  * apprt/gtk: add ctrl+page-up/down as prev/next tab
  * apprt/gtk: previous_tab/next_tab action do not consume if there are no tabs
  * apprt/embedded: adapt to new binding API
  * apprt/gtk: gtk-single-instance defaults to true only if desktop env

  [ Nathan Fisher ]
  * Set the mouse pointer to "text" (an I-beam) when it is over the gl_area which the terminal embeds into for the Gtk interface. Addresses https://github.com/mitchellh/ghostty/issues/596

  [ Mitchell Hashimoto ]
  * apprt/gtk: change default cursor to text
  * os: launchFromDesktop works even if the artifact is a lib
  * apprt/glfw: support window-width, window-height configurations
  * config: increase eval branches for new configs
  * macos: support initial window size
  * initial window size needs to take into account window chrome
  * apprt/gtk: implement default window size
  * config: note gtk bug
  * update zig
  * pkg/libpng, pkg/zlib use package manager
  * pkg/freetype
  * pkg/harfbuzz
  * use package manager for font stack
  * pkg/fontconfig
  * add build.zig.zon
  * add fontconfig
  * pkg/libxml2
  * pkg/fontconfig: depend on libxml2
  * pkg/pixman
  * pkg/harfbuzz needs to use apple sdk for coretext
  * pkg/apple-sdk: set sysroot
  * pkg/utf8proc
  * libxev, zig-js, zig-objc
  * pkg/fontconfig module
  * pkg/freetype, harfbuzz modules
  * pkg/pixman, utf8proc
  * pkg/macos
  * macos: fix missing symbols in archive
  * remove unused deps
  * pkg/tracy
  * pkg/tracy
  * progress on glfw
  * fix build on linux
  * no more system_sdk
  * fix dynamic build
  * remove a great many submodules
  * remove mach-sdk submodules
  * fix failing test, freetype needs libpng
  * don't run dependency tests anymore
  * pkg: remove all old build.zig files
  * pkg: add test targets
  * ci: remove tests for macos cross-compile
  * prettier
  * update zig
  * terminal: mode 2027
  * pkg/macos: MutableArray, sorting
  * font/coretext: score discovered fonts
  * font/fontconfig: adhere to correct function signature
  * macos: change close confirmations to NSAlert
  * apprt/embedded: supporting setting working directory in config
  * macos: use SurfaceConfiguration everywhere instead of bare c struct
  * macos: support drag and drop with no windows
  * macos: support dropping folder with window
  * apprt/embedded: validate directory for wd
  * macos: validation of dropped directory
  * macos: surfaceview supports dropping file URLs, just logs for now
  * core: textCallback to send text directly to the terminal
  * apprt/embedded: ghostty_surface_text function, remove _char
  * macos: support dropping file urls onto surfaces
  * macos: escape shell-sensitive characters on filepath drop
  * macos: localize the permission strings
  * macos: implement service provider
  * font: Metrics.Modifier for applying a percentage/absolute change
  * font: Metrics ModifierSet
  * font: rework font init to use a struct with modifiersets everywhere
  * font: wire up all the metric modifiers
  * font: modify font compiles for freetype
  * config: add remaining font modifiers
  * config: update some docs
  * font: fix failing macos tests
  * font/coretext: allow setting a non-monospace font explicitly
  * website: create-next-app boilerplate
  * prettier
  * website: noop homepage
  * prettier
  * config: add option to disable working directory inheritance
  * terminal: cursor back should reduce count if pending wrap is one
  * terminal: cursor back handles reverse wrap (mode 45)
  * terminal: CUB extended reverse wrap mode
  * terminal: extended reverse wrap takes priority over reverse wrap
  * terminal: add todo for CUB for left/right margins
  * prettier: ignore generated website files
  * website: add mdx, typography styling
  * website: rehype slug
  * wip vt sequence
  * website: fix type error
  * website: BEL
  * website: types
  * website: handle CSI sequences
  * website: wip cub
  * website: parameters have no hex value
  * website: cub
  * website: put ghostty icon in top
  * website: update reverse wrap details and test
  * website: cub extended reverse wrap test case
  * website: cub top/bottom scroll with extended wrap
  * website: tweak cub
  * website: start cr
  * terminal: have left/right scrolling region data but can't be set yet
  * terminal: implement origin mode and left margin handling for CR
  * website: update carriage return tests
  * terminal: FF (0x0D) also invokes LF
  * website: cud
  * terminal: cursor down respects bottom margins
  * website: ind
  * terminal: a lot more index tests
  * terminal: IND supports left/right margins
  * website
  * terminal: CBT respects left margin in origin mode
  * website: cbt
  * terminal: CHT
  * terminal: ICH handles left/right margins, clears bg
  * website: ich
  * website: ich split multi-cell
  * terminal: cursor up respects scroll margins
  * update zig
  * terminal: CUF handles right margin
  * website: cup
  * terminal: CUP respects left/right scroll region
  * terminal: HPA, VPA
  * website: HPA, VPA
  * terminal: HPR, VPR
  * Revert "termio: clear screen always sends form feed (0x0C)"
  * terminal: alternate scroll (mode 1007) should not be enabled by default
  * core: alternate scroll only sends up/down arrows, not left/right
  * pkg/libxml2: download using zig package manager
  * remove libxml2 submodule
  * pkg/harfbuzz: download source using zig package manager
  * remove harfbuzz submodule
  * ci: do not checkout submodules, because none exist
  * Makefile doesn't need to init submodules anymore
  * README: remove `make`
  * pkg/apple-sdk: do not git clone anymore
  * website: ech
  * terminal: ECH tests with bg and multi-cell fix
  * terminal: ECH handles protection attributes properly
  * terminal: EL (erase line) xterm audit
  * terminal: ED xterm audit
  * website: IL
  * terminal: IL preserves bg sgr, partial left/right margin support
  * terminal: insert lines (IL) handles left/right scroll regions
  * terminal: DL
  * terminal: test IND preserves background sgr
  * terminal: dch xterm audit

  [ Gregory Anders ]
  * macos: force new window for "New Window" action

  [ Mitchell Hashimoto ]
  * terminal: enable alternate scroll mode by default
  * terminal: scroll down tests
  * terminal: implement DECID (ESC Z)
  * terminal: TBC tests
  * terminal: SD should also work if cursor outside of left/right region
  * website: add validation for sd
  * terminal: handle ansi vs dec mode
  * pkg/harfbuzz: remove accidentally committed archive file
  * terminal: set top and bottom margin tests
  * terminal: decaln
  * terminal: set left and right margins, left and right margin mode 69
  * website: left/right margins
  * website: RIS
  * terminal: RIS should reset tabstops, ESC ? W should reset every 8
  * core: mouse selection when moving left before half-way point
  * core: mouse selection to right should include first cell if past boundary
  * update prettier ignore to ignore website dev compiled
  * termio: unescape OSC 7 pwd since it is URL encoded
  * website: deckpam, deckpnam
  * terminal: decscusr
  * terminal: SU, fix DL bug
  * terminal: scroll down test
  * website: CNL CPL
  * termio: NEL is index then CR

  [ Paul Hinze ]
  * Document terminfo & SSH details

  [ Mitchell Hashimoto ]
  * terminal: reverse index xterm audit
  * prettier
  * Enable left/right margin support
  * terminal: CUL handles left/right margins
  * terminal: print handles left/right margins
  * terminfo: add left/right margin entries
  * terminal: default for right scroll margin was incorrect
  * terminal: test REP
  * config: add mouse-shift-capture configuration
  * terminal: XTSHIFTESCAPE
  * website
  * terminal: index handles left/right regions
  * input: legacy encoding pc style keys should ignore directional modifiers
  * terminal: KAM (mode 2)
  * terminal: insert mode tests, fix insertBlanks multi-cell char split
  * website: document srm mode
  * terminal: linefeed mode
  * font: fallback search should search full discovery chain
  * font: render sprites with a configurable grid cell width
  * renderer: render cursor over wide character if on tail part
  * terminal: printing over wide spacer tail should clear wide char
  * terminal: when clearing previous wide character, preserve SGR state
  * terminal: VS16 should make a narrow char take up two cells in mode 2027
  * core: allow arrow key on scroll to fail write to IO
  * renderer: default cursor color to foreground
  * config: add cursor-opacity
  * renderer: unfocused cursor should always be fully opaque
  * macos: insertText should not include null char
  * terminal: OSC parser takes optional allocator
  * termio: configure OSC parser with an allocator
  * core: scroll viewport back to bottom on any key input that isn't a mod
  * terminal: save cursor and restore cursor xterm audit
  * renderer: handle error.NotFound for timer cancellation
  * terminal: cursor position report respects left scroll region with origin
  * terminal: scroll up full top/bottom region was off by one
  * terminal: with mode 2027, vs16 must move cursor one more right
  * renderer/metal: need to set proper alpha for fg mode in shader
  * renderer: render cursor behind colored emoji

  [ Gregory Anders ]
  * macos: add menu items to modify font size

  [ Mitchell Hashimoto ]
  * macos: make xcode 14 compatible, do not use switch expr
  * renderer: do not downsample oversized glyphs
  * update zig
  * ci: don't specify -gnu on test triple
  * pkg/apple-sdk: update to not have any broken symlinks

  [ James Tucker ]
  * pkg/fontconfig: move defines to fix x86_64-windows targets

  [ Jon Parise ]
  * config: add quit-after-last-window-closed

  [ Krzysztof Wolicki ]
  * Disable iconv on Windows by default (enabled via cli flag). Skip various tests not implemented on windows.
  * Fix option name passed to fontconfig dep
  * Don't enable iconv for fontconfig dep on windows
  * pkg/fontconfig: windows check more readable
  * os/xdg: Avoid allocations on non-Windows systems. os/desktop: Add TODO

  [ Mitchell Hashimoto ]
  * fix build with no font discovery
  * build: disable Tracy by default even for debug builds
  * config: update doc comment
  * pkg/harfbuzz: update to 8.2.2

  [ Jon Parise ]
  * macos: always apply initial size to new windows

  [ Matthew Winter ]
  * fix: adjust for window padding when calculating whether selection has started

  [ Brandon Ferguson ]
  * If the locale isn't supported and falls back to the POSIX/C locale, use en_US.UTF8

  [ Mitchell Hashimoto ]
  * update zig
  * update zig

  [ Erlend Lind Madsen ]
  * config: comment regarding font-family config reload

  [ Gregory Anders ]
  * macos: use commit hash in version info instead of build number

  [ Mitchell Hashimoto ]
  * pkg/fontconfig: make iconv build param non-windows specific
  * os: remove some duplication in the env var check for xdg config
  * os: update todo about subsystem for windows
  * terminal: horizontal tab back should handle cursor already left margin
  * terminal: cub with reverse mode on left margin
  * terminal: insert blanks (ICH) with left/right and large count
  * terminal: ICH should only run with no intermediates
  * website: prettier
  * terminal: deleteCharacters should clear wide spacer tails if split
  * terminal: do not attach grapheme to empty cell
  * terminal: deleteLines has to reset wrap state on blank lines
  * update zig
  * pkg/cimgui
  * build: add cimgui to build
  * add empty Inspector file
  * apprt/gtk: empty inspector window
  * apprt/gtk: can render imgui
  * apprt/gtk: complete imgui backend
  * apprt/gtk: imgui widget calls callback to populate imgui frame
  * pkg/cimgui: add metal backend
  * pkg/cimgui: add osx backend
  * macos: MetalView, render an MTKView
  * macos: use a MTKView subclass for the inspector
  * apprt/gtk: use new imgui opengl API
  * macos: rendering basic imgui
  * macos: complete cimgui events
  * macos: only re-render the inspector when requested
  * apprt/gtk: use shared key => imgui key helper
  * macos: proper title when focusing the inspector
  * macos: don't do full surface-style key translation for imgui
  * core: add input binding to control terminal inspector
  * macos: terminal inspector control
  * pkg/cimgui: requires libcpp
  * apprt/gtk: surface has inspector state
  * apprt/gtk: button to toggle inspector
  * apprt/gtk: destory the inspector properly on close
  * apprt/gtk: different bg color for imgui widget
  * core: hook up all the inspector activation state and such
  * apprt/gtk: initialize and run the inspector
  * apprt/embedded: render inspector
  * pkg/cimgui: use freetype for font rendering
  * inspector is scaled to native dpi
  * apprt/embedded: render in native dpi
  * note font size todo
  * inspector: setup basic modes window (empty), dock
  * apprt/embedded: also must render imgui multiple times
  * initial work on basic inspector information
  * all threads are notified of inspector state, trigger render
  * apprt: none has app/surface so tests pass
  * inspector: show modes
  * inspector: show imgui demo window only in debug
  * apprt/embedded: do not lock render state for inspector render
  * macos: update inspector size in draw call
  * apprt/glfw: does not implement inspector
  * inspector: screen window
  * inspector: cursor style information
  * inspector: add keyboard info
  * inspector: track mouse state
  * inspector: cell inspector
  * inspector: give cell picker modal a reasonable title
  * terminal: circular buffer has append, clear, iterator
  * move circular buffer to src/
  * inspector: keep track of keyboard events (not rendered yet)
  * circbuf: iterator yields pointers
  * inspector: render basic key inspector
  * inspector: move inspector to dedicated folder
  * inspector: render key events
  * inspector: add clear keyboard events button
  * inspector: note memory leak
  * inspector: remove unused next id system
  * inspector: fix key memory leak
  * inspector: show kitty graphics metadata
  * inspector: start termio log
  * inspector: format termio a little better, incomplete
  * inspector: filter terminal io events by kind
  * inspector: add basic termio seq filter
  * inspector: termio pause/resume
  * inspector: add sequence number to termio
  * termio: inspector forces byte-at-a-time processing
  * inspector: track lots of metadata for vt events
  * inspector: forgot a file
  * inspector: reversed a checkbox
  * inspector: always increment seq number for vt events
  * inspector: add OSC command metadata to inspector
  * inspector: minor style tweak
  * inspector: termio filter also checks metadata values
  * macos: free inspector when it is hidden
  * inspector: reset vt seq number on clear

  [ Nameless ]
  * fuzz: src/terminal/stream.zig
  * add tests for fuzzed results, clean up unimplemented osc warning
  * fuzz: termio.MessageData small_size is max of 255, not 256

  [ Mitchell Hashimoto ]
  * command: allow relative paths in PATH
  * termio: MessageData should pick appropriately sized int for len
  * terminal: addWithOverflow to detect max int
  * terminal: bring back unimplemented logs
  * update zig
  * core: check for inspector activity before recording event
  * config: default inspector keybind to same as chromium
  * macos: fix warning from xcode

  [ Gregory Anders ]
  * macos: set window resizeIncrements when cell size changes

  [ Mitchell Hashimoto ]
  * terminal: clamp cursor left above scroll region with XTREVWRAP2
  * terminal: assertion should check x is on left margin
  * terminal: CUB with reverse wrap on first row should not crash

  [ Gregory Anders ]
  * macos: document SurfaceView.cellSize property
  * config: add window-step-resize option
  * maacos: update doc comment for PrimaryView.window

  [ Mitchell Hashimoto ]
  * config: slighty copy editing
  * config: make step resize opt-in for macos
  * terminal: in mode 2027, do not attach any width=0 char unless grapheme
  * terminal: ECH minimum count is 1
  * terminal: improve some debug logging
  * terminal: only clear spacer tail if exists
  * terminal: sgr direct color fg missing color doesn't crash
  * terminal: sgr direct bg also had wrong slice len
  * terminal: restore cursor should clamp x/y
  * apprt/gtk: only create window header bar with window decorations

  [ Vlad Pănăzan ]
  * apprt/gtk: handle surface scale changes

  [ Mitchell Hashimoto ]
  * macos: set proper cascade point when closing tab in window
  * apprt/gtk: use gtk widget scale to get content scale
  * apprt/gtk: comment about future API
  * build: do not build glfw for gtk anymore
  * config: command-arg to specify arguments to the executed command
  * cli: handle "-e" as the command to execute

  [ Gregory Anders ]
  * terminfo: remove focus reporting mode from XM entry (#748)

  [ Mitchell Hashimoto ]
  * config: tests for -e parsing
  * config: -e replaces previous args

  [ Thorsten Ball ]
  * nix: update ZLS to newest version

  [ Vlad Pănăzan ]
  * apprt/gtk: handle non-unicode keyvals

  [ Mitchell Hashimoto ]
  * apprt/gtk: comment on what is going on with keyval mapping

  [ Matthew Winter ]
  * feat: update undercurl with antialiasing
  * feat: add x_facter comment and remove old code

  [ Mitchell Hashimoto ]
  * font/underline: some additional type annotations
  * renderer/metal: reclaim cell buffer memory when resizing
  * renderer/opengl: reclaim cell buffer memory when resizing

  [ Mathew Polzin ]
  * Fix typo in Config.zig
  * Fix typo in README

  [ Matthew Winter ]
  * feat: cleanup types and reduce casting

  [ Mitchell Hashimoto ]
  * config: update some comments around pwd inheritance
  * terminfo: add E3 for clear scrollback

  [ Chinmay Dalal ]
  * implement selecting output a `ScreenPoint` is in

  [ Mitchell Hashimoto ]
  * macos: SplitNode must be hashable to detect change

  [ Chinmay Dalal ]
  * add tests
  * handle cursor on a prompt line
  * exit early when cursor is on a prompt line

  [ Lukáš Dvořák ]
  * fix window-padding-balance in combination with explicit padding
  * balanced padding cleanup

  [ Mitchell Hashimoto ]
  * apprt/gtk: if no parent is set on new window, do not inherit wd
  * font: box sprite use saturated subtraction
  * apprt/embedded: add API to detect if a single surface needs quit confirm
  * macos: add HostingWindow helper
  * macos: add needsConfirmQuit helper to surface and split structs
  * macos: update xib version
  * macos: wip
  * macos: working on the new terminalmanager
  * macos: new terminal view new tab/window

  [ Chinmay Dalal ]
  * expose selectOutput via ctrl+triple click

  [ Mitchell Hashimoto ]
  * macos: toggle fullscreen
  * macos: goto tab works
  * macos: tab labels, detect window close
  * macos: implement last surface close to close window
  * macos: base config plumbed through
  * macos: clear content view on window close
  * macos: move debug view
  * update README
  * macos: terminal controller owns split data
  * macos: remove old primary window stuff
  * macos: delete Ghostty.SplitView
  * macos: rename all the 2-suffix
  * macos: detect when surface tree becomes empty
  * macos: confirm quit with splits, tab
  * macos: only show alert once
  * macos: do not need base config
  * macos: improved comments
  * macos: fix cascade points
  * Update macos/Sources/Features/Terminal/TerminalController.swift
  * macos: regressed #761
  * macos: attach various menu items to first responder, terminal
  * macos: forgot the toggle fullscreen binding
  * macos: simpler mechanism to detect no more config errors
  * macos: fix some split focus issues
  * macos: new tab while a window is focused inherits
  * macos: new window on existing terminal inherits properly

  [ Matthew Winter ]
  * feat: update undercurl thickness and wave height
  * feat: update undercurl thickness and wave height

  [ Mitchell Hashimoto ]
  * macos: if alert is already showing, don't check if need confirm
  * update zig
  * apprt/gtk: create new tab after current tab

  [ Chinmay Dalal ]
  * disable zig fmt for aligned comments

  [ Matthew Winter ]
  * feat: change minimum height to 2
  * feat: improve variable naming

  [ Mitchell Hashimoto ]
  * core: if a font-style is specified, do not restrict style category
  * macos: clear keyboard shortcut if unbound on reload

  [ xdBronch ]
  * add support for file dropping to glfw runtime

  [ Raiden1411 ]
  * feat(actions): add new list-keybinds action

  [ Leo Razoumov ]
  * feat: keybind escape sequence action "esc:text" similar to "csi:text"

  [ Hanna ]
  * Integrate libadwaita for the gtk backend (#792)

  [ Mitchell Hashimoto ]
  * apprt/glfw: small line length fixes
  * font: if a codepoint is emoji presentation, prefer that for shaping

  [ hanna ]
  * remove hard dependency on libadwaita
  * Update gtk build test to use libadwaita

  [ Mitchell Hashimoto ]
  * macos: terminal window must subclass nswindow to receive events

  [ hanna ]
  * change option name and default value
  * Correct the option on the ci workflow

  [ Mitchell Hashimoto ]
  * macos: only modify style mask, don't overwrite

  [ xdBronch ]
  * fix build with libadwaita disabled

  [ Gregory Anders ]
  * macos: always create new window on New Window action
  * macos: fix tab labeling
  * terminfo: add missing % character after conditional

  [ Mitchell Hashimoto ]
  * macos: do not set window initial size if fullscreen
  * macos: modify tabbing mode when entering/exiting fullscreen
  * macos: deminiaturize on new tab

  [ Lukáš Dvořák ]
  * fix: posToViewPort when using balanced padding enabled
  * update comment

  [ David Rubin ]
  * add basic functionality
  * configs added

  [ xdBronch ]
  * remove deps that were already provided by other packages (#797)

  [ David Rubin ]
  * forgot to update other backends

  [ Mitchell Hashimoto ]
  * input: add Binding.Action.format to convert action to string
  * input: Binding.Trigger format
  * cli/list-keybindings: stylistic changes
  * font/coretext: discovery scoring should take into account symb. traits

  [ David Rubin ]
  * add todos + make sure non-implimented platforms still work.

  [ Mitchell Hashimoto ]
  * terminal: move sanitization check to this package, unit test
  * apprt/gtk: copy change for unsafe paste window
  * terminal: add sanitize.zig
  * apprt/gtk: tweak unsafe paste window
  * core: do not consider bracketed pastes unsafe
  * apprt/gtk: correct new tab button click function signature
  * update zig
  * macos: paste protection boilerplate
  * macos: hook up paste protection delegate, cancel button
  * macos: paste protection text should be selectable

  [ Raiden1411 ]
  * feat: add support for fullscreen, title and class values
  * fix: match main
  * more match fixes
  * chore: add log to setTitle
  * chore: add targets
  * fix: glfw build
  * glfw: send warning for fullscreen

  [ Mitchell Hashimoto ]
  * apprt/embedded: hook up paste confirmation
  * core: not unsafe on bracketed
  * config: add clipboard-paste-bracketed-safe
  * macos: comment the new views
  * termio: initialize pwd before subprocess starts
  * config: on macOS cmd+ctrl+f toggles fullscreen by default

  [ kcbanner ]
  * windows: add support for the glfw backend on Windows
  * - Update libxev dependency - Fixup macos compile error

  [ Mitchell Hashimoto ]
  * shuffle some source around
  * os: rename env to be posix-like, do not allocate on posix
  * rename Pty.zig to pty.zig
  * os: macos lang check should include lang null
  * shuffle some code
  * os: more comments
  * os: add internal_os.pipe for cross-platfor pipe

  [ Gregory Anders ]
  * macos: set id on nested terminal splits

  [ Mitchell Hashimoto ]
  * termio: cleanup
  * pty: stylistic changes
  * command: stylistic changes
  * ci: enable windows cross-compile build
  * ci: style
  * apprt: default runtime for windows is glfw
  * update README with windows notes

  [ Gregory Anders ]
  * macos: refactor SplitNode
  * core: add support for bindings with multiple parameters
  * core: add resize_split binding with default keys
  * macos: support resizing splits
  * macos: use Ghostty.AppState as @EnvironmentObject

  [ Nawaf ]
  * fix macos font being drawn thicker when updating font size

  [ Mitchell Hashimoto ]
  * inspector: add cursor style to inspector panel

  [ Raiden1411 ]
  * fix: begin implementation of suggested changes
  * chore: update comment
  * chore: more comment changes
  * fix: fullscreen on new windows
  * chore: update fullscreen implementation
  * chore: cleanup
  * chore: cleanup

  [ Mitchell Hashimoto ]
  * stylistic changes
  * macos: honor fullscreen setting
  * apprt/gtk: fix valid id check
  * apprt/gtk: move default id into scope
  * macos: use normal swiftui parameters for resizable publisher/inc
  * macos: remove focused cell size resize increment setter
  * input: add format support for tuple args
  * input: unit tests for pasing tuples

  [ Gregory Anders ]
  * macos: complete clipboard request even when clipboard is empty

  [ Mitchell Hashimoto ]
  * input: allow modifier aliases

  [ Gregory Anders ]
  * terminfo: fixup Sync terminfo string

  [ Mitchell Hashimoto ]
  * termio: cursor-style-blink being set disables DEC mode 12

  [ Tim Culverhouse ]
  * gtk(mouse): use "text" enum as default value
  * mouse: set mouse as text only when not reporting mouse events
  * mouse: set mouse to text when bypassing mouse reporting

  [ Mitchell Hashimoto ]
  * some comments, make switch exaustive

  [ Gregory Anders ]
  * macos: pass split as a binding to SplitView

  [ Raiden1411 ]
  * feat: fullscreen and toggleFullscreen support
  * chore: add video mode

  [ Patrick Fong ]
  * update config section
  * explain Nix is golden setup in devel section
  * consistently sytlize as Ghostty

  [ Raiden1411 ]
  * re-add dimensions

  [ Patrick Fong ]
  * rewrite about
  * link to roadmap and status
  * list terminal inspector as key feature
  * shorten text that is hyperlinked
  * pushes boundaries, not can push boundaries

  [ Mitchell Hashimoto ]
  * replace utf8proc with ziglyph

  [ Patrick Fong ]
  * Prettier version should match Nix's

  [ Gregory Anders ]
  * macos: add key binding for equalizing split sizes

  [ Tim Culverhouse ]
  * shell-integration: implement "no-cursor" option

  [ Mitchell Hashimoto ]
  * simplify some swift
  * config: packed struct of bools supported as config field
  * config: switch shell-integration-features
  * config: packed struct fields can clone directly via copy
  * macos: update xib version from xcode

  [ Paul Jimenez ]
  * config: make config-file names resolve relative to the config dir

  [ Severus ]
  * Add keymap for KP_*

  [ Gregory Anders ]
  * macos: ensure tab labels are always visible

  [ Paul Jimenez ]
  * config: support nested/recursive config-file keys

  [ Mitchell Hashimoto ]
  * apprt/gtk: add comment about key aliases

  [ Patrick Fong ]
  * reorder goals by order of importance

  [ Gregory Anders ]
  * terminfo: add entries for focus reporting

  [ Mitchell Hashimoto ]
  * font: if VS15/16 not specified, prefer any presentation in explicit font

  [ Gregory Anders ]
  * core: implement querying with OSC 4
  * termio: update foreground and background color on config change
  * core: implement setting colors with OSC 4, 10, and 11

  [ Mitchell Hashimoto ]
  * font: load valid union field for loaded deferred fonts
  * apprt/gtk: ensure equal tab width, truncate with ellipses

  [ Gregory Anders ]
  * core: move color parsing functions into RGB namespace
  * core: separate default colors from modifiable colors
  * core: implement OSC 104, 110, and 111 to reset colors
  * core: implement OSC 12 and OSC 112 to query/set/reset cursor color

  [ Mitchell Hashimoto ]
  * apprt/glfw: minor stylistic things
  * terminal: change mask from u256 to StaticBitSet
  * config: resolve file paths relative to their loaded file
  * config: comments

  [ Gregory Anders ]
  * core: update active palette on config reload

  [ Tim Culverhouse ]
  * terminal: initialize active palette with configured palette

  [ Mitchell Hashimoto ]
  * macos: handle preedit in AppKit, enables Korean input
  * core, renderer: handle wide preedit chars
  * renderer/opengl: handle wide preedit
  * config: default goto_tab bindings on darwin based on physical key

  [ Gregory Anders ]
  * macos: add option to prompt user for confirmation on OSC 52 commands
  * gtk: implement OSC 52 prompts
  * gtk: fix memory leak in GTK clipboard confirmation window
  * config: rename ClipboardRequest to ClipboardAccess
  * core: use ClipboardRequestType instead of ClipboardPromptReason

  [ Mitchell Hashimoto ]
  * font/coretext: split typographic leading equally when calculating cell height
  * termio: wake up writer thread if the writer mailbox is full

  [ Thorsten Ball ]
  * macOS: only unhide manu in non-native FS if focus lost to Ghostty

  [ Gregory Anders ]
  * glfw: fix compile error
  * config: export ClipboardAccess
  * Prefer explicit type syntax over @as

  [ Mitchell Hashimoto ]
  * stylistic tweaks
  * core: Fix various double-click word selection bugs
  * termio: Fix deadlock when writer mailbox is full
  * macos-option-as-alt works again

  [ Krzysztof Wolicki ]
  * os/xdg: Add `LOCALAPPDATA` as a fallback for `XDG_CONFIG_HOME` on Windows

  [ Mitchell Hashimoto ]
  * xterm audit: DECCOLM and 132COLS
  * xterm audit: slow scroll (DECSCLM)
  * xterm audit: reverse video (DECSCNM)
  * terminal: our mode size changed
  * macos: filter option in AppKit when option-as-alt set
  * input: process alt-prefix even if utf8 text doesn't exist
  * input: fix failing test on Linux
  * macos: ignore alt key with other modifiers set
  * macos: reuse original event if translation mods changes nothing
  * apprt/gtk: gtk-adwaita runtime config to configure libadwaita
  * ci: release-tip only works on this repository
  * update zig
  * slight edits
  * termio/exec: fall back to default command if specified command not found
  * config: clarify that command can only be a single binary

  [ Gregory Anders ]
  * core: support OSC 9 and OSC 777 for showing desktop notifications
  * macos: remove optional from Ghostty.AppState.surfaceUserdata

  [ Mitchell Hashimoto ]
  * input: do not encode enter with utf8 as pc style key

  [ Gregory Anders ]
  * macos: implement desktop notifications
  * core: use arrays instead of WriteReq for desktop notifications

  [ Mitchell Hashimoto ]
  * renderer/metal: support multi-codepoint preedit text
  * renderer/metal: handle preedit wider than our screen
  * renderer/opengl: use new preedit format
  * core: comment out log statements
  * renderer: faint should not be applied to bg alpha

  [ Gregory Anders ]
  * clipboard: add Clipboard variant for primary clipboard

  [ Krzysztof Wolicki ]
  * change unmodified `var`s to `const`s in anticipation of zig changes

  [ Raiden1411 ]
  * core: implement select all binding

  [ Tim Culverhouse ]
  * gtk: implement desktop notifications

  [ Raiden1411 ]
  * core: add config option to invert fg and bg of cell when selected
  * renderer: add support for metal

  [ Mitchell Hashimoto ]
  * comments
  * renderer: address issue with inverted cells
  * update zig-objc
  * pkg/macos: add CoreVide for DisplayLink
  * renderer: separate update frame data from draw
  * renderer/opengl: switch to new update vs draw
  * renderer/metal: wip for loading custom shader pipelines
  * renderer/metal: release some of our shader initialization objects
  * renderer/metal: CRT effect, ugly hacky code
  * pkg/glslang: can build
  * pkg/glslang: shader api
  * pkg/glslang: complete the API
  * pkg/glslang: build SPIRV lib
  * build: add glslang
  * pkg/spirv-cross
  * pkg/spirv-cross
  * build: add spirv-cross
  * pkg/spirv-cross: correct c header
  * renderer: shadertoy functions
  * renderer: shadertoy convert to MSL
  * renderer: turn assertion into error
  * config: introduce RepeatablePath to automatically expand
  * renderer/metal: load custom shaders
  * renderer/metal: setup sampler state
  * renderer/metal: set valid sampler properties
  * renderer/metal: reuse an intermediate texture for custom shaders
  * renderer/metal: don't recreate custom shader resources per frame
  * prettier: ignore shaders
  * renderer: log shadertoy compile errors
  * renderer: animation timer if we have custom shaders
  * renderer: spirv binary must be aligned to u32
  * renderer/opengl: move opengl API to pkg/opengl
  * pkg/opengl: add Framebuffer APIs
  * renderer/opengl: wip
  * renderer/opengl: extract cell program state to dedicated struct
  * renderer/opengl: only one GPUCell
  * renderer/opengl: start custom program work
  * renderer/opengl: create ubos
  * renderer/opengl: simplifying the custom shader to get things working
  * renderer/opengl: pull out cell program drawing to dedicated func
  * renderer/opengl: draw custom shaders, simplified
  * renderer/opengl: setup uniform buffer objects for custom shaders
  * renderer/opengl: better organization of custom shader state
  * renderer/opengl: increment time uniform
  * renderer/opengl: set resolution uniform on screen size change
  * config: note custom-shader requires opengl 4.2 on linux
  * renderer/opengl: create the screen texture
  * renderer/opengl: resize the screen texture
  * renderer/opengl: enable animations
  * quiet tests
  * renderer/metal: clean up some memory management
  * renderer: animations should stop if config changes them
  * renderer/opengl: some comments
  * renderer/opengl: shaders only need one color input
  * renderer/opengl: new gpucell
  * config: custom-shader-animation
  * config: clarify runtime reloading of shader stuff

  [ Gregory Anders ]
  * macos: ensure all surfaces are closed when a window is closed

  [ Mitchell Hashimoto ]
  * config: select all should default to ctrl+shift+a on linux
  * macos: alternate solution to ignoring "always" userTabbingPreference

  [ Chris Marchesi ]
  * nix: fix package build

  [ Mitchell Hashimoto ]
  * terminal: add explicit errorset to scroll screen
  * terminal: add "clear" screen scroll mode
  * terminal: add ESC [ 22 J (scroll and clear)
  * terminal: ED handles invalid values
  * terminal: ESC [ 2 J does a scroll and clear if viewport is at a prompt
  * terminal: remove invalid test
  * terminal: enable kitty graphics commands on OpenGL
  * renderer/opengl: upload kitty image textures
  * renderer/opengl: setup image uniforms
  * renderer/opengl: draw images
  * renderer/opengl: do not need to convert
  * renderer/opengl: correct shader params
  * renderr/opengl: stylistic
  * update zig
  * terminal: resize less cols attempts to preserve cursor y
  * apprt/gtk: disable GTK capturing F10
  * apprt/gtk: support IME popups such as Asian language input
  * font: shaper should not look up U+200D for consistent fonts
  * update libxev
  * update zig-objc
  * terminal: handle width==3 glyphs by just pretending they're width 2

  [ Chris Marchesi ]
  * apprt/gtk: let GTK titlebar be toggleable

  [ Mitchell Hashimoto ]
  * font: fallback fonts need to deinit their unused deferred faces

  [ Chris Marchesi ]
  * nix: use -Doptimize=ReleaseFast

  [ Mitchell Hashimoto ]
  * renderer: handle Kitty images where z < 0 for all placements

  [ Chris Marchesi ]
  * nix: update zigCacheHash

  [ Tim Culverhouse ]
  * osc: fix OSC4 response

  [ Mitchell Hashimoto ]
  * update ziglyph
  * terminal: switching alt/primary screen invalidates Kitty image state
  * terminal: fix cursor pos when resizing more rows not at bottom

  [ Chris Marchesi ]
  * nix: update zigCacheHash, mention that building pkg requires src

  [ Mitchell Hashimoto ]
  * renderer/opengl: convert Kitty images from RGB to RGBA
  * apprt/gtk: set default cursor to be "text" (ibeam)
  * xterm audit: DECOM (origin mode)
  * terminal: know about autorepeat mode
  * macos: relabel tabs when they're reordered with the mouse
  * build: add iterm2 themes repository, install into resources dir
  * config: add "theme" config, track inputs
  * core: move resources dir to main global state
  * config: load themes
  * macos: copy themes
  * config: update themes docs
  * cli: +list-themes
  * don't use package manager for iterm2 themes yet
  * apprt/gtk: use new resources dir
  * update README to cover themes
  * update README

  [ Chris Marchesi ]
  * font/sprite: add Powerline face

  [ Mitchell Hashimoto ]
  * core: do not send repeat/release events if the press consumed a binding
  * macos: add entitlements for basically everything so macos asks
  * core: clear selection on mouse cursor keys
  * terminal: implement OSC 1 (change icon) and ignore it
  * input: kitty encoding should ignore committed preedit state

  [ Guillaume Wenzek ]
  * add "text" action
  * parse string literal at load time

  [ Mitchell Hashimoto ]
  * Revert "parse string literal at load time"
  * config: add string parse, tests
  * input: allocate for text bindings

  [ Tim Culverhouse ]
  * key-encode: only set associated text when there is printable text

  [ Chris Marchesi ]
  * nix: add GitHub Actions workflow
  * workflows: disable nix build job

  [ Burak Yildiz ]
  * fix selection clearing after a key press

  [ Mitchell Hashimoto ]
  * move back to zig pm
  * nix: update zig cache hash

  [ dependabot[bot] ]
  * build(deps): bump cachix/install-nix-action from 23 to 24
  * pkg/oniguruma: basic build
  * pkg/oniguruma: init regex object
  * pkg/oniguruma: search
  * pkg/oniguruma: better regex api
  * build: add oniguruma
  * build: dynamically link oniguruma
  * terminal: basic lineIterator on screen
  * terminal: selectionString uses arraylist to build results
  * terminal: stringmaps
  * terminal: Screen.getLine
  * renderer/metal: underline urls
  * input: add Link
  * terminal: move line searching here, unit test
  * core: detect link click
  * core: change mouse cursor over link
  * renderer: link set for more efficient matching
  * renderer: matchset tests
  * renderer: link sets handle hover links
  * core: send mouse hover point
  * core: only update mouse hover point when no other mouse action
  * os: open
  * core: don't crash if link processing fails
  * core: handle URL clicking properly with shift-escaping mouse events
  * input: better docs on links
  * renderer/opengl: urls
  * nix: update cache hash
  * core: only process link detection on cursor pos if cell changes
  * config: ability to disable URL matching
  * core: on mod change, rerun cursor pos callback
  * apprt/gtk: translate modifier-only presses to proper modifier state
  * input: Kitty encoding suppress associated text on macOS with alt
  * input: update preventsText comment
  * termio: clear_screen binding does not trigger scrollback preservation

  [ Chris Marchesi ]
  * Add rectangle select

  [ Krzysztof Wolicki ]
  * Update to latest master
  * Update to latest master, update libxev dependency, change mach_glfw to an updated fork until upstream updates
  * Update required zig version to `0.12.0-dev.1767+1e42a3de8`
  * Fix src/Surface.zig Change fastmem.copy to use memcpy builtin
  * Fix forgotten openIterableDir

  [ Mitchell Hashimoto ]
  * update Zig version in Nix
  * nix: update cache hash

  [ Chris Marchesi ]
  * gtk: make sure WM_CLASS is being set on X11

  [ Nathan Fisher ]
  * Begin working on a skeleton for splits in Linux/Gtk
  * Add to Tab.init and fix compilation errors
  * Fill out the rest of `Tab.init()`
  * Add `Parent` and `Child` types for tracking splits; Add methods for adding start and end children in `Paned` widget;

  [ Thorsten Ball ]
  * gtk: get 1st version of GTK splits working
  * gtk: cleanup code in *Paned
  * gtk: remove code comments and dead code
  * gtk: simplify code when creating new split
  * gtk: wire up close-tab button
  * gtk: use `unreachable` in switch statements
  * gtk: take direction into account when creating a new split
  * gtk: allow splitting when already split
  * gtk: allow closing split panes that have been split
  * gtk: move Child/Parent/Position into same file
  * gtk: refactor how Paned is created
  * gtk: handle closing of surfaces with sibling being a Paned
  * gtk: refactor replacing child of Paned
  * gtk: Refactor how a new split is created
  * gtk: refator Parent/Tab/Paned and how they interact
  * gtk: fix tab settings after introducing *Tab
  * WIP: gtk: handle split surfaces when closing tab/window
  * gtk: introduce helper method on Paned
  * gtk: move helper function around
  * gtk: use deinit method on Paned consistently
  * gtk: fix warning when replacing children of Paned
  * gtk: refactor the Paned deinit method
  * gtk: rename and refactor Tab.deinit
  * gtk: refactor code and add comments to Paned
  * gtk: remove duplication of new surface creation
  * gtk: move logic of splitting surface in a tab to Tab
  * gtk: port new-tab behavior over after rebase and refactor
  * gtk: rework naming conflict after rebase
  * gtk: always remember focused surface before grabbing focus
  * gtk: find first surface to focus on if sibling is Paned
  * gtk: keep buffer of surface title, update if focused
  * gtk: restore "inherit working directory" behavior
  * gtk: use destructuring syntax
  * gtk: comment out detach-tab feature after breaking it
  * gtk: remove fields on Paned we don't need
  * gtk: rework surface title buffer handling

  [ Mitchell Hashimoto ]
  * apprt/gtk: working on some reorg
  * apprt/gtk: remove Window from Surface, use container only
  * apprt/gtk: get rid of title label option, we can infer it on container
  * apprt/gtk: remove tab option from surface
  * apprt/gtk: new surface options down to just a couple
  * apprt/gtk: get rid of one newsurface call
  * apprt/gtk: working on new Split
  * apprt/gkt: a lot of things are broken
  * apprt/gtk: nested splits are good
  * apprt/gtk: alternate approach to setting pane children
  * apprt/gtk: closing tabs works again
  * apprt/gtk: maintain container pointers

  [ Thorsten Ball ]
  * gtk: fix compilation error after rebase
  * gtk: fix closing of surfaces by releasing the ref to gl_area
  * gtk: fix replacing of splits, remove dead code
  * gtk: get closing of tabs working again (closing windows still broken)
  * gtk: fix closing of windows that contains splits
  * gtk: restore focus-grabbing after closing one side in split
  * gtk: move surface destroy through deref
  * gtk: restore detachable-tabs feature after adding splits
  * gtk: (temp) fix splitting top_left side in split
  * gtk: switch to long-held reference for GtkPaned
  * gtk: remove unneeded method setContainer on Surface

  [ Mitchell Hashimoto ]
  * apprt/gtk: rename parent2 to parent

  [ Gregory Anders ]
  * Preserve cursor shape when over a link

  [ Mitchell Hashimoto ]
  * apprt/gtk: code aesthetic changes
  * apprt/gtk: we don't need to keep track of Tabs
  * apprt/gtk: do not deinit tab in closeTab
  * apprt/gtk: add comments, rename some funcs
  * apprt/gtk: comments
  * apprt/gtk: just heap allocate the title text
  * apprt/gtk: rename parentSurface
  * apprt/gtk: gotoSplit, has some bugs

  [ Chris Marchesi ]
  * nix: update flake.lock for nixpkgs-zig-0-12

  [ Mitchell Hashimoto ]
  * apprt/gtk: gotoSplit gets proper previous/next direction
  * apprt/gtk: fix next split issue
  * macos: do not open an initial window if opening from URL
  * termio: only change mouse shape if it is changing
  * termio: set configured default cursor style on startup
  * renderer/metal: minimum contrast experiment
  * renderer/metal: minimum contrast ratio is configurable
  * renderer/metal: only apply min contrast if set and only on non-color fg
  * renderer/opengl: implement min contrast
  * config: improve docs for minimum-contrast
  * font: faces use primary grid metrics to better line up glyphs
  * update zig version

  [ Chris Marchesi ]
  * nix: update nixpkgs-zig-0-12

  [ Mitchell Hashimoto ]
  * core: remove size limit on preedit length by heap allocating
  * renderer: handle scenarios the preedit text is wider than our screen
  * renderer: default codepoints for preedit
  * ci: use Cirrus macOS VMs (#985)
  * Revert "ci: use Cirrus macOS VMs (#985)"
  * Revert "Revert "ci: use Cirrus macOS VMs (#985)""

  [ Tim Culverhouse ]
  * terminal: implement mode 1047 (alternate screen)

  [ Mitchell Hashimoto ]
  * core: alternate scroll encoding should respect DECCKM

  [ Thorsten Ball ]
  * gtk: add support for resizing splits via keybinds

  [ Mitchell Hashimoto ]
  * change default embedded font to JetBrains Mono

  [ Carlos Alexandro Becker ]
  * Remove FiraCode leftovers

  [ Mitchell Hashimoto ]
  * macos: if a preedit state is cleared, don't send key event
  * font: use nerd font patched jetbrains font
  * core: mods change doesn't unhide mouse

  [ RGBCube ]
  * Quote URLs in NixOS example
  * Add packages.default property

  [ Mitchell Hashimoto ]
  * apprt/gtk: stylistic changes

  [ Thorsten Ball ]
  * nix: update ZLS

  [ Mitchell Hashimoto ]
  * update zig
  * core: detect inputs that result in surface close and avoid segfault
  * macos: new tab button creates new tab after short delay
  * macos: handle the "+" button automatically adding the window to the tabs
  * terminal: support `58;5` for setting underline color via 256 palette
  * remove new-window action from desktop file

  [ Wataru Nishimoto ]
  * use images/icons for mac app icons

  [ Chris Marchesi ]
  * Powerline: Add half-circle rendering

  [ Mitchell Hashimoto ]
  * macos: manually show window to handle mission control behavior

  [ Matt Robenolt ]
  * meta: add make clean task

  [ Chris Marchesi ]
  * Selection: fix bottom-right/top-left rectangle selections

  [ Mitchell Hashimoto ]
  * remove new-window action from desktop file

  [ RGBCube ]
  * Add garnix cache and clean up all nix code
  * Compile wraptest with O3, run hooks
  * Use camelCase for all nix files

  [ Mitchell Hashimoto ]
  * nix: make devshell platform-specific
  * nix: add back shell.nix
  * ci: remove garnix for now, we may add it back later
  * macos: newTab needs to call Controller.showWindow

  [ Chris Marchesi ]
  * nix: Update nixpkgs-zig-0-12 source

  [ Mitchell Hashimoto ]
  * apprt/gtk: use map_keycode to get the proper unshifted key for a layout

  [ Nick Reilingh ]
  * README.md: Fix broken link to devShell.nix

  [ Mitchell Hashimoto ]
  * terminal: resize to less rows with empty lines should trim lines

  [ Caio Oliveira ]
  * Remove redundant `inline` key

  [ Kai Norman Clasen ]
  * doc: Update `gtk-titlebar` documentation

  [ Mitchell Hashimoto ]
  * renderer/metal,opengl: replace matching image IDs if transmit time differs
  * config: keybind = clear clears unmaps all keybinds
  * macos: previous_tab/next_tab wraps
  * font/coretext: calculate advance_x properly
  * renderer/metal: offset zero-advance glyphs by the cell width
  * renderer/opengl: apply extra offset for zero-advance glyphs
  * pkg/macos: implement CTRun
  * font/shaper: if char is 0, should send space to shaper
  * pkg/macos: add many more text APIs
  * font/shape: add coretext shaper

  [ RGBCube ]
  * input: add scroll_page_lines

  [ Mitchell Hashimoto ]
  * font/coretext: coretext shaper is cleaner
  * pkg/macos: more APIs

  [ Chris Marchesi ]
  * Powerline: Change half-circle algorithm to ellipse

  [ Mitchell Hashimoto ]
  * font/coretext: shaper applies x/y offsets
  * font/harfbuzz: track x/y offsets
  * font/coretext: clarify buggy coretext shaper
  * renderer/opengl: use new glyph offsets
  * font: note why shaper is not enabled

  [ Chris Marchesi ]
  * Powerline: add references for the ellipse algorithm

  [ Jeffrey C. Ollie ]
  * Add "terminfo" and "shell_integration" subpackages to the Nix package so that the Ghostty terminfo and shell integration files can be installed on a headless server without copying all of Ghostty to the server. Implementation liberally cribbed from the Kitty Nix package.

  [ Gregory Anders ]
  * term: parse hex color string for OSC commands

  [ Jeffrey C. Ollie ]
  * Use Alejandra to format Nix modules.
  * Add formatter output to flake so that 'nix fmt' does the right thing.

  [ Thorsten Ball ]
  * gtk: implement equalize_splits

  [ Jeffrey C. Ollie ]
  * Fix spelling error.
  * Fix another spelling error.

  [ Matt Robenolt ]
  * Configurable unfocused dimming color
  * Apply feedback
  * Use packed struct
  * typos

  [ Mitchell Hashimoto ]
  * font/coretext: ceil the cell height and ascent metrics
  * font: adjust cell baseline to center after modification, fix styles

  [ Thorsten Ball ]
  * gtk: use f64 everywhere instead of i16/f16/c_int

  [ Mitchell Hashimoto ]
  * font: cursor size remains original cell height if height adjusted

  [ Matt Robenolt ]
  * unpack rgb correctly

  [ Tim Culverhouse ]
  * gtk: get num_lock state for key events
  * key: add additional keypad keys
  * key: add TODO's for media keys

  [ Denys Pavlov ]
  * gtk: close tabs with middle-click

  [ Mitchell Hashimoto ]
  * font/sprite: manually determine which box codepoints are unadjusted
  * confirmance: fix unused var warnings
  * apprt/gtk: do not encode control characters into utf8 event field

  [ Chris Marchesi ]
  * Surface: fix some rectangle select behaviors

  [ Mitchell Hashimoto ]
  * input/kitty: do not encode event+mods if they're both default

  [ Gregory Anders ]
  * macos: special case handling of some control keys

  [ Mitchell Hashimoto ]
  * input/kitty: do not encode event with mods if press
  * macos: style changes, make equivalent not an optional
  * os: passwd also gets username
  * core: quit-after-last-window-closed works properly with "exit"
  * apprt/gtk: slight stylistic change
  * include: add new keycodes
  * config: docs
  * config: C API read allows any packed struct that fits in c int
  * config: make unfocused-split-fill default to bg
  * macos: proper event when sided mod released with other side pressed

  [ Kyaw ]
  * font/coretext: use `CTFontCopyFamilyName`

  [ Gregory Anders ]
  * termio: implement DECRQSS

  [ Chris Marchesi ]
  * build: use dedicated strings for conformance test keys

  [ Gregory Anders ]
  * termio: use u2 for length
  * termio: remove some code duplication in DECRQSS handler

  [ Mitchell Hashimoto ]
  * termio/exec: use login(1) on macOS
  * config: remove command-arg
  * termio/exec: only use sh login flag in flatpak

  [ Brian Cain ]
  * apprt: Fix key callback input key assignments

  [ Mitchell Hashimoto ]
  * renderer/opengl: acquire lock to prep kitty images

  [ Chris Marchesi ]
  * Surface: set crosshair, change event processing logic for mouse tracking

  [ Mitchell Hashimoto ]
  * macos: do not load zsh config on the outer zsh launch

  [ Denys Pavlov ]
  * nix: teach direnv about flake.nix imports
  * nix: use wrapGAppsHook4 to package ghostty
  * nix: fix GTK icons for debug builds

  [ Mitchell Hashimoto ]
  * termio: allocate initial capacity more accurately
  * nix: only add shellhook on linux

  [ Caleb Spare ]
  * config: improve link matching for URLs ending in . or )
  * update README with Linux dependency tips

  [ Mitchell Hashimoto ]
  * renderer/metal: constrain PUA glyphs if they aren't next to space
  * renderer/opengl: implement fg_constrained
  * renderer: also constrain PUA chars if preceded by PUA
  * font: center text when adjust-cell-width is used

  [ Chris Marchesi ]
  * Surface: ensure keyToMouseShape respects hidden state
  * renderer: don't constrain Powerline glyphs

  [ Borja Clemente ]
  * Add settings shortcut on MacOS

  [ Mitchell Hashimoto ]
  * macos: custom about window so we can be a first responder
  * input: translate '\t' to Key.tab
  * macos: close_window binding works properly again
  * macos: close all windows
  * fix callback struct ordering, use internal_os.open
  * apprt/gtk: hook up open config
  * input: clarify some limitations of opening config
  * apprt/glfw: implement openconfig

  [ Tim Culverhouse ]
  * cli: invert special case arg parsing logic
  * cli: parse args as command when launched as 'xdg-terminal-exec'

  [ Mitchell Hashimoto ]
  * renderer/opengl: error if OpenGL version is too old
  * renderer/opengl: allow OpenGL 4.1/4.2
  * macos: put build numbers back into info.plist, other metadata
  * macos: add Sparkle via Swift PM
  * macos: boilerplate to setup updater menu item
  * macos: add update delegate so we can configure some behavior
  * ci: setup sparkle binaries in release
  * ci: generate appcast, upload it
  * ci: disable releases temporarily
  * ci: correct filename for appcast
  * ci: codesign nested frameworks

  [ Borja Clemente ]
  * Remove unused imports from config/edit
  * Remove log from imports as it is unused

  [ Tim Culverhouse ]
  * cli: add xdg-terminal-exec parsing tests
  * cli: store manually parsed args for config replays

  [ Mitchell Hashimoto ]
  * dist/macos: appcast needs namespace, better formatting
  * ci: manually codesign since --deep is deprecated
  * macos: set the update URL
  * macos: update the release notes with link to GH project
  * ci: uncomment the release-to-github code

  [ Chris Marchesi ]
  * Powerline: add trapezoid rendering

  [ Mitchell Hashimoto ]
  * config: handle xdg-terminal-exec detection higher up
  * update zig

  [ David Eger ]
  * README: nvidia + ubuntu + x11 requires recent gtk

  [ Thorsten Ball ]
  * nix: update ZLS

  [ Mitchell Hashimoto ]
  * prettier
  * apprt/gtk: only reset IME state if key consuming while IME composing
  * update README about mac builds

  [ Leo Razoumov ]
  * fix(macos): ReleaseLocal build configuration with "Library Validation" disabled
  * doc: minor fix to README.md

  [ Mitchell Hashimoto ]
  * update README
  * macos: make default config ReleaseLocal
  * terminal: Screen.selectPrompt to get the selection of the prompt

  [ David Eger ]
  * doc: Linux tip on zig btrfs hash mismatch issue.

  [ Mitchell Hashimoto ]
  * terminal: Screen.promptPath
  * core: click to move cursor
  * core: click to move cursor only works on primary screen
  * core: fast path out of click to move if no semantic prompts
  * core: if click-to-move is done, stop mouse processing
  * core: cursor click to move can be disabled
  * dist/macos: remove any existing matching builds in appcast
  * dist/macos: put the date in the short version string

  [ Tim Culverhouse ]
  * terminfo: fix `xr` and `rv`

  [ Gregory Anders ]
  * core: look for resources in "ghostty" subdirectory for "share" paths
  * macos: include ghostty subdirectory under Resources

  [ Mitchell Hashimoto ]
  * macos: reordering some files

  [ Gregory Anders ]
  * build: build Vim plugin files for Ghostty config file
  * macos: add generated Vim plugin files to app bundle
  * build: move Vim plugin file generation into a separate Step

  [ Mitchell Hashimoto ]
  * input: kitty encoding should only report alt key if not equal to utf8

  [ Vivek Roy ]
  * macos: Implement context menu functionality to open tabs and windows.

  [ Chris Marchesi ]
  * macos: handle middle click

  [ Mitchell Hashimoto ]
  * config: generate vim configs at comptime
  * macos: do not change nofile rlimit max

  [ Jeffrey C. Ollie ]
  * fix nix package and add ci test for nix package build
  * enable magic nix cache to improve build times

  [ Chris Marchesi ]
  * nix: update nixpkgs-zig-0-12

  [ Mitchell Hashimoto ]
  * dist/macos: prune appcast to the most recent 15 items
  * ci: move nix build to dedicated job
  * ci: build-nix depends on test like other package builds
  * ci: swap magic-nix-cache with cachix
  * prettier
  * ci: build-nix and test are not matrix tests
  * apprt/gtk: correct icon path now that our resources dir is in a subdir

  [ Chris Marchesi ]
  * macos: middle click always pastes from clipboard

  [ Mitchell Hashimoto ]
  * macos: initial window save/restore is working for frames only
  * config: window-save-state
  * config: if window-save-state is never, never restore state
  * macos: encode surface tree in state restore
  * apprt/embedded: ghostty_surface_pwd
  * macos: store pwd with save/restore state
  * macos: use securecoding for codablebridge to prevent warning
  * config: change window-save-state to default
  * macos: reset state version to 1
  * input: kitty keyboard modifier event changes from Kitty 0.32

  [ dependabot[bot] ]
  * build(deps): bump cachix/cachix-action from 12 to 13
  * config: grapheme-width-method, default to "unicode"
  * terminal: resize cols should treat old cursor pos as active point
  * macos: assign unique UUID per surface, store in app state
  * macos: restore focused split on app restore
  * macos: increment restorable state version
  * macos: text in about window is selectable
  * input: only send keypad events for keypad application mode
  * macos: notifications use surface UUID for lookups
  * macos: set surface tree on init in restore
  * termio: ensure we kill all the children without killing ourselves
  * ci: remove macos unsigned releases

  [ Tim Culverhouse ]
  * termio: delay repeated `waitpid` syscalls when killing children

  [ Mitchell Hashimoto ]
  * config: not that cursor-style with shell integration overwrites
  * ci: explicitly sign our release entitlements on build

  [ Burak Yildiz ]
  * Reorder menu items (File, Edit, View ...) like most of the other apps

  [ Mitchell Hashimoto ]
  * macos: invalid restorable state when surface is closed

  [ Tristan Partin ]
  * Use adw_application_new() instead of adw_init()

  [ Mitchell Hashimoto ]
  * macos: verify inspector is not nil before sending it to draw

  [ Matthew Winter ]
  * Modify the way the login shell is launched on macOS to reduce nesting

  [ Mitchell Hashimoto ]
  * apprt/gtk: stylistic changes to adwaita init

  [ Matthew Winter ]
  * Ensure the shell environment passes the Login Shell test
  * Ensure the cwd is not changed, whilst remaining a logon shell

  [ Mitchell Hashimoto ]
  * config: validate that `command` can be found on the path
  * update tester README to note friend invites, MIT, etc.
  * readme: misordered headers
  * terminal: cursor back should not reduce by one with pending wrap
  * terminal: cub with reverse wrap consumes pending wrap state as one

  [ Tim Culverhouse ]
  * website: fix `cub` test script
  * website(el): clarify cursor position in test script
  * website(ich): fix test script v1
  * website(il): fix test script

  [ Mitchell Hashimoto ]
  * termio/exec: use bash instead of zsh for shell launching
  * termio: remove old warning log statement used for debugging
  * macos: wait for window to become visible to set blur
  * config: skip command validation if it has a space
  * termio/exec: detect exec failure and show an error message
  * termio/exec: detect abnormally short runtime and show an error message
  * config: remove command validation
  * termio/exec: abnormal exit can use exit code on linux
  * termio/exec: use arraylist to build up message for error
  * termio/exec: use message to writer thread so we can output failed cmd
  * termio/exec: style the exec failure error better
  * termio/exec: pass code and runtime to error but don't show it yet

  [ Jeffrey C. Ollie ]
  * Add exit code and runtime to abnormal exit error message.
  * Make the abnormal runtime threshold configurable.

  [ Mitchell Hashimoto ]
  * config: make abnormal runtime threshold a u32
  * termio/exec: reorder member since we like alloc on top
  * termio/exec: stylistic change on abnormal exit

  [ Chris Marchesi ]
  * apprt/gtk: ensure modifier state matches current keypress under X11

  [ Mitchell Hashimoto ]
  * apprt/gtk: stylistic changes
  * apprt/gtk: use some comptime to load X11 functions

  [ Chris Marchesi ]
  * apprt/gtk: Move Xkb state to App, remove un-needed fields, style changes

  [ Mitchell Hashimoto ]
  * apprt/gtk: stylistic changes

  [ Chris Marchesi ]
  * nix: add libX11 to RUNPATH

  [ Gregory Anders ]
  * macos: use ReleaseLocal build configuration for Profile action

  [ Mitchell Hashimoto ]
  * pkg/fontconfig: move some dependencies to our own mirror
  * termio/exec: avoid potential deadlock with surface message

  [ Gregory Anders ]
  * terminal: track palette color in cell state

  [ Jeffrey C. Ollie ]
  * replace deprecated std.mem.tokenize with std.mem.tokenizeScalar

  [ Mitchell Hashimoto ]
  * config: RepeatableString is null-terminated now
  * font-family settings are repeatable to specify fallback
  * config: empty value for RepeatableString resets the list
  * config: clarify docs on resetting font-family
  * macos: try to save window state before sparkle restart
  * macos: prevent super hot loop to restore focus state
  * macos: order main window front on restore

  [ Krzysztof Wolicki ]
  * WIP: Update to new build module API after Zig PR #18160 Temporarily change dependency sources to forks until they update

  [ Troels Thomsen ]
  * Resolve path relative to base

  [ Krzysztof Wolicki ]
  * build.zig: Make use of resolveTargetQuery for wasm_freestanding target
  * Update usage of testing.expectEqual

  [ EdenEast ]
  * feat(nix): add cachix binary cache to flake

  [ Collin Dickert ]
  * add CodeNewRoman Nerd Font to quirks

  [ widberg ]
  * Don't build with LTO on Windows
  * Use `cmd.exe` instead of `sh` on Windows

  [ Mitchell Hashimoto ]
  * termio/exec: small change

  [ Jeffrey C. Ollie ]
  * Add 'Open Config' menu to the GTK runtime and synchronize config-related keybindings across platforms.

  [ Mitchell Hashimoto ]
  * renderer: reload background, foreground, cursor-color at runtime
  * update README about zig version

  [ Evan Boehs ]
  * Fix #1213 (create dir if needed for settings)

  [ Gregory Anders ]
  * cli: strip CR in line iterator

  [ Mitchell Hashimoto ]
  * config: use dirname so we don't have to alloc a new dir for edit
  * config: create the config dir recursively for edit
  * macos: set initial window size in controller window init

  [ Vivek Roy ]
  * macos: Address window spawning and ordering issues from service.

  [ Mitchell Hashimoto ]
  * macos: move active state to delegate
  * termio: support XDG data dirs greater than 4k for fish shell integration
  * core: add Apple Color Emoji on macOS if its available
  * pkg/freetype: unknown errors should be reported, not unreachable

  [ Jeffrey C. Ollie ]
  * Include the git commit hash in the Nix package.
  * Include '-nix' in the version string to distinguish Nix builds.

  [ Mitchell Hashimoto ]
  * os: mac app launched with bundle env var is treated as desktop launch
  * config: do not load command from SHELL when launched from desktop

  [ Jeffrey C. Ollie ]
  * In some cases, 'self' would not be passed to the package. It's not necessary so remove it.

  [ Mitchell Hashimoto ]
  * font: insert blank cells for multi-cell ligatures for styling

  [ Krzysztof Wolicki ]
  * Update changed build.zig
  * Update source for libxev

  [ Riccardo Binetti ]
  * linux: add a function to check if we're running on X11

  [ Mitchell Hashimoto ]
  * core: clear_screen binding doesn't consume on alt screen

  [ Riccardo Binetti ]
  * linux: consider Xft.dpi to scale the content

  [ Krzysztof Wolicki ]
  * Update sources for zig-objc and zig-js
  * Add include paths to modules in pkg/
  * Add include paths to freetype module
  * Add include paths to more modules in pkg/
  * Change source of mach_glfw to experimental branch in fork
  * Update required zig version to 0.12.0-dev.2063+804cee3b9
  * Update source for zig-build-macos-sdk for pkg/apple-sdk
  * Clean pkg/fontconfig/build.zig

  [ Mitchell Hashimoto ]
  * update flake
  * fix macos `zig build test` failures

  [ Krzysztof Wolicki ]
  * Attempt to fix building on macos

  [ Mitchell Hashimoto ]
  * nix: update hash

  [ Krzysztof Wolicki ]
  * Link frameworks to macos module conditionally

  [ Mitchell Hashimoto ]
  * apprt/gtk: stylistic changes
  * ci: release should only run with a main main ref

  [ Krzysztof Wolicki ]
  * Maybe this will help macos
  * Update mach-glfw dependency
  * Update mach-glfw dependency

  [ Chris Marchesi ]
  * nix: update nixpkgs-zig-0-12 input, also cache hash

  [ Krzysztof Wolicki ]
  * Update mach-glfw dependency

  [ Mitchell Hashimoto ]
  * renderer: constrain dingbats category to cell size
  * renderer: for constrained cells, offset was being doubled
  * nix: update hash

  [ KNnut ]
  * readme: fix a typo

  [ Jeffrey C. Ollie ]
  * implement enquiry

  [ Mitchell Hashimoto ]
  * font/shaper: prevent underflow in multi-cell lig detection

  [ Tim Culverhouse ]
  * input: never report associated text on key release

  [ Mitchell Hashimoto ]
  * font: autoitalic should only apply to text presentation
  * core: add emoji fallback on macOS after built-in font
  * input: add unit test for no associated text on release

  [ Tristan Partin ]
  * fix: update code to compile with 0.12.0-dev.2075+f5978181e

  [ Mitchell Hashimoto ]
  * update zig
  * update zig 0.12 nxpkgs

  [ Jeffrey C. Ollie ]
  * change name of config entry and variables, add lock for safety during config update
  * add some more documentation about enquiry
  * add some more documentation about enquiry on iterm2

  [ Mitchell Hashimoto ]
  * Update README.md
  * update README
  * custom shader animation can be set to "always" to always remain active
  * input: missing kp_begin encoding entry
  * input: manage application keypad state with mode 1035
  * macos: support Display P3 colorspace through configuration
  * macos: add Edit => Select All menu item
  * renderer: do not free new configuration on change
  * build: only build embedded lib when targeting macos specifically
  * build: use Xcode for the macOS SDK
  * pkg/macos: only link apple paths on darwin target

  [ Thorsten Ball ]
  * macos: allow submitting clipboard confirmation with return

  [ Mitchell Hashimoto ]
  * pkg/apple-sdk: always require a module
  * pkg/apple-sdk: detect apple sdk based on target
  * nix: update package hash
  * pkg/apple-sdk add comment

  [ Gregory Anders ]
  * x11: fix modifier mask for Super key

  [ Mitchell Hashimoto ]
  * termio/exec: remove a bunch of state that is duplicated on StreamHandler
  * termio/exec: assign arena last so we capture allocations

  [ Thorsten Ball ]
  * macos: stop windows glitching when cascading

  [ Mitchell Hashimoto ]
  * pkg/apple-sdk: depend on macOS 14 SDK
  * pkg/apple-sdk: only exec to get xcode path once per build
  * macos: minor style changes

  [ Gregory Anders ]
  * gtk: use modifier state from GTK key event on X11

  [ Mitchell Hashimoto ]
  * pkg/harfbuzz: get zig build test working on macOS

  [ Jeffrey C. Ollie ]
  * add ability to specify RGB colors as names from the X11 rgb name list

  [ Mitchell Hashimoto ]
  * terminal: use comptime generated X11 lookup table from rgb.txt
  * build: remove generate_rgb_names
  * cli: list-colors uses new generated rgb
  * mark rgb.txt as vendored
  * macos: invalid restorable state whenever surface tree changes
  * macos: invalidate restorable state whenever a terminal window is closed

  [ Jeffrey C. Ollie ]
  * sort output from +list-colors

  [ Mitchell Hashimoto ]
  * cli/list-colors: use unstable sort, sort in-place on arraylist

  [ widberg ]
  * Use WINDIR instead of hardcoding C:\Windows

  [ Ryota ]
  * Add helper functions for finding root
  * Add helper func for first and last leaf
  * Add firstOrLast search based on next and previous
  * Wrap around split focus with next and previous
  * Fix comment

  [ Qwerasd ]
  * Added use of shift+arrow keys to expand current selection
  * Shift+keys selection: Fixed up/down logic, added page up/down, home, & end.
  * Fixed accidentally consuming ALL shift+<key> releases 😅

  [ Mitchell Hashimoto ]
  * build: do not depend on codeberg for dependencies
  * Selection: add adjust method, unit test it, swap for adjustments
  * update zig

  [ Thorsten Ball ]
  * gtk: append new tabs at the end if config is set

  [ Mitchell Hashimoto ]
  * ci: do not cross-compile windows
  * config: rename window-append-new-tab to window-new-tab-position
  * ci: only output build.log once for windows build

  [ Thorsten Ball ]
  * macos: respect window-new-tab-position configuration
  * macos: use switch statement instead of if-let

  [ Atanas Pepechkov ]
  * add sudo wrapper as optional shell integration feature

  [ Mitchell Hashimoto ]
  * update README about terminfo and sudo
  * build: remove tracy completely
  * remove tracy usage from all files
  * build: use BuildConfig struct
  * build: move more options to BuildConfig
  * build: move our configuration out of globals
  * build: update our macOS checks to check for macOS specifically
  * nix: update build hash
  * build: remove non-existent tracy dep

  [ Krzysztof Wolicki ]
  * Update mach-glfw dependency

  [ Mitchell Hashimoto ]
  * nix: update hash
  * build: build produces a broken object file for iOS
  * build: build iOS lib into XCFramework
  * nix: update hash
  * build: add iOS simulator target
  * macos: add iOS target
  * macos: show ghostty icon on main app loading
  * apprt/embedded: do not depend on macOS APIs on non-macOS
  * macos: iOS app can initialize Ghostty
  * use Apple logging subsystem on all Darwin targets
  * os: no mouse interval on ios
  * macos: only load config files on macos target
  * macos: disable iOS file in macOS build
  * macos: Ghostty.Config to store all config-related operations
  * macos: iOS Ghostty.App converted to use Ghostty.Config

  [ dependabot[bot] ]
  * build(deps): bump cachix/cachix-action from 13 to 14

  [ dependabot[bot] ]
  * build(deps): bump cachix/install-nix-action from 24 to 25
  * ci: specifically target the main Ghostty target
  * ci: try building iOS target in CI
  * macos: remove AppState and unify onto Ghostty.App cross-platform
  * build: fix mistaken dependency for iOS simulator lib
  * Revert "Merge pull request #1299 from mitchellh/dependabot/github_actions/cachix/cachix-action-14"
  * Revert "Merge pull request #1300 from mitchellh/dependabot/github_actions/cachix/install-nix-action-25"
  * ci: ios build does not use code signing

  [ Paul Berg ]
  * gtk: update tab title even when the tab is unfocused

  [ Mitchell Hashimoto ]
  * update zig

  [ Gregory Anders ]
  * macos: respect minimum split size when using resize keys

  [ Krzysztof Wolicki ]
  * Make addDeps cleaner

  [ LordMZTE ]
  * docs: correct note in readme about splits on linux

  [ Krzysztof Wolicki ]
  * Use addCSourceFiles with dependency instead of manually adding files in a loop

  [ Mitchell Hashimoto ]
  * build: set os_version_min on default target so tests work
  * build: no more resolved target hack
  * renderer/opengl: set texture size for constrained glyphs

  [ dependabot[bot] ]
  * build(deps): bump cachix/cachix-action from 13 to 14
  * termio: handle termio thread failure by showing a message in window
  * apprt/gtk: xft-dpi can be fractional, do not expect exact division
  * update zig-objc so enum types work for msgSend on x86_64
  * renderer/metal: detect frame commit failures and notify surface
  * macos: detect renderer health failures and show error view
  * renderer/metal: do not be unhealthy by default :)
  * nix: update hash
  * macos: use UIColor for iOS
  * renderer/metal: use a semaphore to protect deinit while waiting for GPU

  [ Qwerasd ]
  * Added macOS file open handler

  [ Mitchell Hashimoto ]
  * macos: detect error during surface initialization and render
  * readme: remove outdated sequences docs, more up to date are in web
  * update README
  * update README
  * update README styling
  * macos: terminals with custom commands are not restorable
  * config: introduce wait-after-command
  * apprt/embedded: set wait-after-command when command is set
  * macos: allow first click when non-focused to shift focus

  [ Thorsten Ball ]
  * gtk: respect minimum split size when using resize keys

  [ Mitchell Hashimoto ]
  * apprt/embedded: compile for Linux
  * apprt/embedded: fix initialization on macOS
  * build: copy header files, build static lib too
  * ci: libghostty on Linux build

  [ Krzysztof Wolicki ]
  * cimgui metal impl available only when target is Darwin

  [ Mitchell Hashimoto ]
  * core: Apple Emoji should be loaded on any darwin, not just macos
  * apprt/embedded: add iOS platform with uivew
  * renderer/metal: only set wantsLayer for AppKit
  * renderer/metal: initialize layer in init, handle iOS layer
  * macos: make SurfaceView cross-platform!
  * macos: set proper content size for UIView views
  * macos: iOS bg color extends to unsafe areas
  * terminal: erase line right should reset soft wrap state
  * terminal: ECH resets line wrap state in any scenario
  * terminal: select line considers semantic prompt change a boundary
  * terminal: soft-wrap inherits semantic prompt status of previous line
  * update zig
  * macos: select split above/below should go to correct split when nested

  [ Jeffrey C. Ollie ]
  * Generate help strings from doc comments

  [ Mitchell Hashimoto ]
  * rewrite generate_help for personal style
  * cli: support --help and -h for actions
  * cli: add help command
  * re-add helpgen
  * config: file formatter
  * cli: empty field resets optionals to null
  * nix: only linux is supported for the package
  * config: ability to format all field types except tagged unions
  * config: tests for all custom formatEntry calls
  * config: tests for formatEntry
  * config: support only formatting changed fields
  * config: union type formatters
  * config: formatter can output docs

  [ Jeffrey C. Ollie ]
  * add +show-config action to print out the config from the cli

  [ Mitchell Hashimoto ]
  * cli/show-config: add the changes-only and docs options

  [ Jeffrey C. Ollie ]
  * use keybind struct's built-in capabity to format itself in +list-keybinds action

  [ Mitchell Hashimoto ]
  * cli: list-keybinds uses new config formatting API
  * cli/show-config: enable --help
  * update README for show-config

  [ Tim Culverhouse ]
  * reflow: respect wraparound mode when reflowing text
  * reflow: add unit tests for wraparound mode

  [ Mitchell Hashimoto ]
  * terminal: handle wide character print at edge with wraparound disabled

  [ Jeffrey C. Ollie ]
  * Generate documenation (manpages, etc.) from help strings.
  * markdown-ify help strings

  [ Mitchell Hashimoto ]
  * renderer/metal,opengl: premult alpha for fragment shaders for images
  * build: use emit-docs for docs, don't need it on build config
  * build: shuffle files around for mdgen
  * build: only default emit-docs to true if pandoc is on PATH
  * ci: make sure to explicitly always test docgen
  * mdgen stylistic changes
  * macos: register a services menu
  * macos: register that we accept/send text types for services
  * apprt/embedded: support asking for selection text, existence
  * macos: support reading service result text into terminal

  [ Jeffrey C. Ollie ]
  * Generate help strings for keybind actions.
  * Use keybind actions help strings in +list-keybinds.
  * add keybind actions docs to manpages
  * markdown-ify keybind actions help strings

  [ Chris Marchesi ]
  * Selection: don't alter x position when rectangle select is off viewport

  [ Mitchell Hashimoto ]
  * cli: remove list-keybinds changes
  * core: only dump scrollback contents if there is scrollback

  [ Aurélien Cibrario ]
  * Added plus `+` key

  [ LordMZTE ]
  * add increase_font_size keybind with plus

  [ Mitchell Hashimoto ]
  * kitty images: support pngs with greyscale/alpha (bpp=2)
  * kitty graphics: assign automatic placement ID if p==0

  [ gabydd ]
  * don't write ":" when printing keybinding action with no argument

  [ jcalabro ]
  * set the atlas texture memory storage mode to shared

  [ Jeffrey C. Ollie ]
  * Add option to include docs when listing keybinds.

  [ Mitchell Hashimoto ]
  * terminal: ignore change window title requests with invalid UTF-8
  * renderer/metal: only set shared texture mode on aarch64
  * empty cli or config args reset the value to the default
  * config: re-expand relative paths correctly when reloading config
  * update zig
  * kitty graphics: use internal ID for placements with ID 0
  * terminal: preserve multi-point grapheme clusters on scrollback deletion

  [ Armin Ronacher ]
  * Document that window padding changes need a restart

  [ Mitchell Hashimoto ]
  * input: handle more ctrl+<key> sequences, namely ctrl+_
  * renderer: consider powerline box glyphs whitespace for PUA scaling

  [ Chris Marchesi ]
  * nix: update nixpkgs-zig-0-12

  [ Jakub Konka ]
  * apple-sdk: use zig's libstd getSdk to get active Apple SDK

  [ Mitchell Hashimoto ]
  * pkg/apple-sdk: use std.zig.system.darwin.getSdk
  * update zig
  * very small style change
  * forgot commit to get #1363 building to new API
  * ci: temporarily disable windows builds while Zig regression is fixed

  [ Matt Robenolt ]
  * Open links with Super+click
  * Only detect links when Super is held down
  * Update Config docs to suggest Super + hover is required for link activation

  [ Mitchell Hashimoto ]
  * core: send key release events on focus loss
  * macos: do not trust AppKit's text translation with ctrl only
  * macos: make global macOS fullscreen keybind work

  [ Selman Kayrancioglu ]
  * config/url: exclude trailing single quotes

  [ Mitchell Hashimoto ]
  * apprt/embedded: ctrl-only should use binding-mods only

  [ em-dash ]
  * Add mouse-scroll-multiplier config option

  [ Lin Xianyi ]
  * nix: Add meta.mainProgram

  [ Mitchell Hashimoto ]
  * add a new highlight state that requires modifiers
  * input: add link highlight always/hover w/ mods
  * config: update docs
  * renderer/link: fix test
  * core: be explicit about float rounding for mouse scroll multiplier

  [ Leaf Garland ]
  * Default to background color for cursor-text

  [ Mitchell Hashimoto ]
  * terminal: handle SCOSC/SCORC
  * terminal: avoid reading reset memory for preserving prompt
  * renderer: constrain emoji to cell width
  * apprt/embedded: do not allow NaN or small content scales

  [ Pete Schaffner ]
  * Tint split view divider based on theme background

  [ Mitchell Hashimoto ]
  * macos: plumb through the split divider color
  * macos: remove headers
  * macos: fix uikit build, NSColor is not available

  [ Pete Schaffner ]
  * Add ability to color the split divider on iOS
  * Move color extensions into OSColor

  [ Qwerasd ]
  * macOS: Added titlebar tabs
  * fix(macOS): set titlebar background color to support transparent windows with titlebar tabs

  [ Mitchell Hashimoto ]
  * macos: titlebar tab logic shuffling
  * config: clarify some limitations
  * macos: do not hardcode true for titlebar tabs
  * macos: fix tabs vs spaces

  [ Qwerasd ]
  * macOS: center window title when titlebar tabs enabled

  [ Mitchell Hashimoto ]
  * macos: minor edits
  * macos: whitespace

  [ Allan Calix ]
  * Automatically inject ghostty cli to end of $PATH

  [ Qwerasd ]
  * fix(macOS): restoring tabbed windows with titlebar tabs enabled

  [ Mitchell Hashimoto ]
  * termio/exec: always put ghostty bin dir in GHOSTTY_BIN_DIR env var
  * termio/exec: only add ghostty path if it isn't already in path
  * font/freetype: disallow bitmap strikes in scalable fonts
  * font/freetype: enable bitmap loading for colored faces
  * core: add "reset" keybinding to reset the terminal

  [ Jeffrey C. Ollie ]
  * fix typo in CSI n handling

  [ Mitchell Hashimoto ]
  * core: handle mouse capture events with link highlighting
  * renderer: only highlight link directly under mouse on line

  [ Erlend Lind Madsen ]
  * url/Link: simplify regex, remove 'find_longest' param and add new tests

  [ Mitchell Hashimoto ]
  * macos: titlebar tabs set window appearance based on bg luminance

  [ Erlend Lind Madsen ]
  * url: support dash '-' in urls
  * url: sort url schemes by most-used
  * url: add missing url-scheme tests
  * url: add missing rarer (all) characters allowed in URL

  [ Mitchell Hashimoto ]
  * config: add window-theme = auto for automatic choosing based on bg color
  * macos: set window button backdrop color based on appearance

  [ Qwerasd ]
  * fix(macOS): Use better hardcoded colors for light titlebar tabs window button backdrop
  * fix(macOS): Prevent squash/stretch during resize

  [ Mitchell Hashimoto ]
  * renderer/metal: apply layerContentsPlacement on macOS to fix stretching
  * config: grapheme-width-method sets mode 2027
  * terminal: distinguish between DSRs with "?" and not
  * core: colorSchemeCallback on surface, can report
  * apprt/embedded: add API for reporting color scheme
  * terminal: support mode 2031
  * macos: report color scheme for surface to libghostty
  * terminal: rename theme to color_scheme for dsr
  * terminal: remove unused const

  [ Jeffrey C. Ollie ]
  * Implement mode 2031 and DSR 996 for GTK

  [ Mitchell Hashimoto ]
  * apprt/gtk: small stylistic edits

  [ Krzysztof Wolicki ]
  * Surface: fix reportColorScheme on Windows

  [ Qwerasd ]
  * fix(macOS): Restore titlebar tabs when exiting non-native fullscreen
  * fix(macOS): Hide titlebar separator line in native fullscreen.

  [ Mitchell Hashimoto ]
  * update zig

  [ Qwerasd ]
  * fix(macOS): Adjust custom toolbar title to fix clipping problems.
  * macOS: Simplify native title hiding logic for titlebar tabs.
  * macOS: Improve custom title label centering and overflow appearance.

  [ Mitchell Hashimoto ]
  * ci: re-enable windows builds
  * macos: make label fileprivate

  [ Krzysztof Wolicki ]
  * Update mach-glfw dependency

  [ Mitchell Hashimoto ]
  * nix: update cache

  [ Tim Culverhouse ]
  * split: add `auto` as split option

  [ Mitchell Hashimoto ]
  * build: create new build options per compile step
  * move mdgen main to build dir
  * add helpgen entrypoint
  * build: get benchmarks building again
  * move SplitDirection to apprt

  [ Jeffrey C. Ollie ]
  * Fix shader time uniforms (#1462)

  [ Mitchell Hashimoto ]
  * update zig

  [ Chris Marchesi ]
  * nix: update nixpkgs-zig-0-12

  [ Qwerasd ]
  * fix(macOS): Prevent incorrect scaling of the Metal layer after DPI change
  * macOS: Add URL to documentation in comment
  * fix(macOS): Prevent janky transition animation on DPI change
  * fix(macOS): Restore custom titlebar background
  * fix(macOS): Improve updating of transparent titlebar tabs backgrounds

  [ Andrew Kelley ]
  * make mach_glfw a lazy dependency

  [ Mitchell Hashimoto ]
  * macos: small stylistic edits

  [ Qwerasd ]
  * Add fast DFA utf-8 decoder implementation
  * terminal: replace utf8 decoding with custom decoder in stream.zig
  * remove commented out test

  [ Mitchell Hashimoto ]
  * terminal: small stylistic tweaks
  * simd: basic ISA detection, boilerplate
  * simd: indexOf implementation using NEON
  * src/simd: improve isa detection
  * simd: utf8 validation
  * simd/utf8: document neon better
  * simd: only ref buildable decls
  * simd: utf8 count
  * simd: isa.funcMap to ensure only possible ISAs are analyzed
  * simd: simplify isa.funcMap, find Zig compiler bug
  * simd: utf8 decode
  * simd: utf decode using simdutf
  * simd: convert indexOf, mess around with simdvt
  * simd/aarch64: additional intrinsics
  * terminal: use SIMD w/ Neon to find ESC in VT streams
  * terminal: fix import issue
  * pkg/highway
  * terminal: use highway-based indexOf to support all targets
  * simd: implement utf8 decode until esc in C++
  * terminal: use new VT simd to process slices
  * terminal: split input to fit output chunks
  * simd: remove old attempts
  * build: missing simdutf
  * add clang-format for C++
  * move simdutf to a pkg
  * pkg/utfcpp
  * bench/stream: benchmark for stream processing
  * bench/stream: add terminal option

  [ David Rubin ]
  * make benchmarks more accurate

  [ Mitchell Hashimoto ]
  * bench/stream: add utf8
  * build: update build and comments
  * move bench script
  * nix: update cache hash
  * pkg: remove unused files, add highway API to get targets
  * terminal: do not have the UTF8Decoder overhead if SIMD

  [ Jeffrey C. Ollie ]
  * Generate fish command completions for Ghostty.
  * Do the fish completion generation with comptime during the build rather than building a standalone executable.

  [ Qwerasd ]
  * fix(terminal): Fix boundary utf-8 decoding crash
  * terminal: remove unused properties

  [ Mitchell Hashimoto ]
  * terminal: add tests for incomplete utf-8, fix one bug
  * fish: make generators non-pub

  [ Qwerasd ]
  * bench/stream: only generate benchmark input once, improve utf8 gen
  * bench/stream: add gen-rand (arbitrary random bytes)
  * bench/stream: script adjustments

  [ Mitchell Hashimoto ]
  * build: if emit-bench is on, do not emit exes
  * bench/codepoint-width

  [ Qwerasd ]
  * fix(terminal): send SI to execute instead of print

  [ Mitchell Hashimoto ]
  * simd/codepoint-width: wip

  [ Pete Schaffner ]
  * Add extensions to help finding private subviews
  * Hide tab bar shadows which improves light themes

  [ Mitchell Hashimoto ]
  * simd/codepoint-width: match ziglyph
  * bench/codepoint-width: add wcwidth
  * simd/codepoint-width: reinclude correct file
  * simd: remove ziglyph fallback
  * simd: minor tweaks
  * terminal: swap codepointwidth implementations

  [ Jeffrey C. Ollie ]
  * add hyperfine to the nix development environment

  [ Pete Schaffner ]
  * Use shallow search to improve performance
  * Add comments/docs and make method name clearer

  [ Mitchell Hashimoto ]
  * simd/codepoint-width: split by 16-bit
  * simd: use less vector ops for 16-bit
  * simd: increase padding for avx
  * simd/codepoint-width: assertions for avx512 padding

  [ Qwerasd ]
  * terminal: stream/parser changes

  [ Pete Schaffner ]
  * Add CALayer subclass for use in titlebar tabs
  * Make unselected tabs blend better with background color
  * Use draw rect to do the "plus darker" blending
  * Color the new tab button image appropriately
  * Move separator hiding back into `updateConstraintsIfNeeded`

  [ Mitchell Hashimoto ]
  * add utf8proc back for bench

  [ Pete Schaffner ]
  * Cache new tab button image to improve performance

  [ Qwerasd ]
  * terminal/stream: Added ESC parsing fast tracks
  * fix(terminal/stream): fix OOB read and integer overflow

  [ Mitchell Hashimoto ]
  * unicode: generate our own lookup tables
  * bench: update codepoint-width
  * remove utf8proc
  * terminal: swap to table implementatino
  * terminal: fast-path ASCII on char width
  * build: unigen needs libc
  * bench/grapheme-break

  [ Jeffrey C. Ollie ]
  * bump eval branch quota for newer Zig versions

  [ Erlend Lind Madsen ]
  * replace ziglyph codePointWidth -> table.get
  * remove unused ziglyph import

  [ Mitchell Hashimoto ]
  * unicode: get grapheme boundary class

  [ Erlend Lind Madsen ]
  * preeditCallback(self): remove fast path codepoint width

  [ Pete Schaffner ]
  * Improve window buttons backdrop with window opacity

  [ Gregory Anders ]
  * Reset status display after a full reset

  [ Troels Thomsen ]
  * Keep shadows for native tab bar

  [ Mitchell Hashimoto ]
  * macos: comment why we guard
  * macos: copy fish resources into app bundle
  * unicode: direct port of ziglyph to start
  * unicode: remove unused
  * unicode: use packed struct for break state
  * terminal: use new grapheme break algo
  * unicode: precompute grapheme break data
  * macos: nitpicks
  * ci: test self-hosted x86 runners
  * ci: try small instances
  * ci: no, build on mediums
  * ci: try namespace
  * ci: switch linux to namespace
  * ci: nix job should use namespace

  [ Pete Schaffner ]
  * Make special blending mode class more generic
  * Make new tab button images vibrant

  [ Mitchell Hashimoto ]
  * update zig
  * update req version in build.zig

  [ Jakub Konka ]
  * fix for latest breaking libstd changes to Options

  [ Mitchell Hashimoto ]
  * update zig
  * logfn doesn't need to be pub
  * update min zig version
  * command: io_mode removed for windows
  * ci: prettier/alejandra do not push to cachix
  * ci: nix job should also not push to cachix

  [ Chris Marchesi ]
  * nix: update nixpkgs-zig-0-12

  [ Mitchell Hashimoto ]
  * terminal: only apply VS15/16 to emoji

  [ Qwerasd ]
  * fix(bench): update std options format

  [ Mitchell Hashimoto ]
  * ci: build benchmarks
  * ci: build bench on larger instance
  * ci: add timeouts to prettier and alejandra

  [ Jonathan Marler ]
  * os: remove UB, tmpDir is returning stack memory on Windows

  [ Pete Schaffner ]
  * Remove vibrant layer before re-adding it
  * Make new tab icon respond to window's key status

  [ Jonathan Marler ]
  * image: center 16x16 icon
  * windows: add rc file

  [ Mitchell Hashimoto ]
  * macos: more robust surface focus state detection
  * input: ctrl ASCII uppercase behaves the same as ctrl lowercase

  [ Hugo Santos ]
  * Use Namespace cache volumes to cache /nix.
  * Switch to nscloud-cache-action v1.1.0 which handles the permissions required to create /nix.

  [ Krzysztof Wolicki ]
  * Update usage of std.os.O

  [ Mitchell Hashimoto ]
  * ci: add namespace cache to more places
  * apprt/embedded: add occlusion state callback
  * macos: call occlusion callback for state change
  * ci: try Namespace macOS
  * ci: macos doesn't support caches

  [ dependabot[bot] ]
  * build(deps): bump namespacelabs/nscloud-cache-action from 1.1.0 to 1.1.1
  * update nix
  * terminal: OSC parses 4 with empty string param without crashing

  [ Nameless ]
  * bug: std.os.realpath on non-windows asserts no nulls, make an error

  [ Mitchell Hashimoto ]
  * style nit
  * terminal/kitty-gfx: mistaken logic
  * core: fallback to heap allocation for long preedit inputs
  * config: note that tab restore with titlebar tabs on macos 13 is broken
  * renderer: handle renderer pause/redraw on occlusion
  * renderer/metal: start extracting "visible" resources

  [ Chris Marchesi ]
  * nix: update nixpkgs-zig-0-12

  [ Mitchell Hashimoto ]
  * renderer/metal: cache buf cells
  * renderer/metal: move shaders to cached state
  * renderer/metal: free resources when occluded
  * Revert "renderer/metal: free resources when occluded"
  * Revert "renderer/metal: move shaders to cached state"
  * Revert "renderer/metal: cache buf cells"
  * Revert "renderer/metal: start extracting "visible" resources"
  * pkg/apple-sdk: more descriptive error when SDK not found
  * update README to note macOS SDKs needed

  [ Troels Thomsen ]
  * Remove trailing whitespace

  [ Ryan Cao ]
  * docs: document the `text` action for `keybind`

  [ Troels Thomsen ]
  * Correct grammatical mistake
  * Set background color in title bar tab mode only

  [ Mitchell Hashimoto ]
  * macos: minor reordering

  [ Troels Thomsen ]
  * Avoid repainting new tab button for native tab bar

  [ Mitchell Hashimoto ]
  * build: fix issue for long branch names

  [ Felipe Coury ]
  * docs: correct MacOS location for themes on config docs

  [ Mitchell Hashimoto ]
  * input: send shifted uppercase ASCII letters as CSIu
  * input: encode ctrl+shift+<ascii letter> in CSIu as lowercase + shift

  [ Gregory Anders ]
  * Omit release events for backspace, enter, and tab if report_all is unset
  * Update minimum Zig version in build.zig

  [ Mitchell Hashimoto ]
  * kitty-gfx: deletion should mark image state dirty to force redraw
  * ci: add aarch64 nix builds

  [ Krzysztof Wolicki ]
  * Update to new compress.zlib API

  [ Mitchell Hashimoto ]
  * update zig version

  [ Chris Marchesi ]
  * nix: update nixpkgs-zig-0-12

  [ ProfOak ]
  * Add keybind support for shift+insert selection paste

  [ Tim Culverhouse ]
  * terminfo: remove completed todo

  [ ProfOak ]
  * Move selection paste to linux config section

  [ Pete Schaffner ]
  * Move un-zoom button into the tab/toolbar
  * Hide zoom button in toolbar when not zoomed
  * Get unzoom button working with standard title/tab bar
  * Move unzoom button logic into TerminalWindow
  * Reorganize a bit

  [ em-dash ]
  * fix crash in underline drawing math

  [ Mitchell Hashimoto ]
  * font/sprite: test for thick underline, assertion on x/y for rect

  [ Pete Schaffner ]
  * Fix wrong tint color and improve tab labeling

  [ Mitchell Hashimoto ]
  * font/sprite: rect must be smaller than canvas dims
  * update zig version

  [ Pete Schaffner ]
  * Rename "Un-zoom" to "Reset Zoom" and add tooltips
  * Don't use a toolbar for the traditional title/tab bar

  [ Jack N ]
  * add gtk-tabs-location

  [ Pete Schaffner ]
  * Select and uzoom when clicking button in unselected tab

  [ Krzysztof Wolicki ]
  * build API change: update usage of addCSourceFiles
  * Windows Utf8 -> Wtf8

  [ Mitchell Hashimoto ]
  * update zig version

  [ Chris Marchesi ]
  * nix: update nixpkgs-zig-0-12

  [ dependabot[bot] ]
  * build(deps): bump namespacelabs/nscloud-cache-action from 1.1.1 to 1.1.2

  [ Mitchell Hashimoto ]
  * ci: cache zig local/global cache

  [ Adam Stephens ]
  * screen/selectword: add more boundary characters

  [ Qwerasd ]
  * fix(renderer): allocate enough room for fg cells

  [ Mitchell Hashimoto ]
  * terminal: fix tests for brackets on selectWord
  * ci: try to use namespace for macos to see if that fixes builds
  * Revert "ci: try to use namespace for macos to see if that fixes builds"
  * ci: try new gha for r2 upload
  * ci: rename github release jobs for r2
  * ci: test aws for release
  * ci: test
  * ci: revert back to using r2 action

  [ Jon Parise ]
  * dist/macos: link the commit to GitHub's history view

  [ dependabot[bot] ]
  * build(deps): bump namespacelabs/nscloud-cache-action from 1.1.2 to 1.1.3

  [ Qwerasd ]
  * feat(macOS): Paste copied files as absolute paths.
  * style

  [ Mitchell Hashimoto ]
  * update zig
  * update zig

  [ Chris Marchesi ]
  * nix: update nixpkgs-zig-0-12

  [ dependabot[bot] ]
  * build(deps): bump cachix/install-nix-action from 24 to 26

  [ dependabot[bot] ]
  * build(deps): bump softprops/action-gh-release from 1 to 2

  [ Mitchell Hashimoto ]
  * core: remove undefined access on variable
  * build.zig update required zig version
  * update zig

  [ Chris Marchesi ]
  * nix: update nixpkgs-zig-0-12

  [ Mitchell Hashimoto ]
  * fix some issues
  * nix: update cache hash

  [ dependabot[bot] ]
  * build(deps): bump namespacelabs/nscloud-cache-action from 1.1.3 to 1.1.4
  * macos: only process key equivalents if we're focused

  [ Qwerasd ]
  * fix(terminal/stream): correct invalid assertion

  [ Jeffrey C. Ollie ]
  * log more information about the build

  [ Kyungrok Chung ]
  * apprt/gtk: commit buffer before preeditchanged resets

  [ Tim Culverhouse ]
  * mouse: handle switch case '0' for left_click_count

  [ Mitchell Hashimoto ]
  * core: reset left click count if mouse reporting goes on
  * update zig
  * nix: update hash
  * update libxev for windows stuff

  [ Chris Marchesi ]
  * nix: update nixpkgs-zig-0-12

  [ Mitchell Hashimoto ]
  * build.zig update min zig version
  * terminal: bunch of junk for paged terminal
  * terminal: copy stdlib hash_map
  * terminal/new: forked hash map works with fixed buffers
  * terminal/new: hash map remove old functions
  * terminal/new: remove more functions
  * terminal/new: slapped together offset map
  * terminal/new: hash map has no load factor
  * terminal/new: hash map doesn't need available
  * terminal/new: comment, remove some pubs
  * terminal/new: getOffset
  * terminal/new: nothing works but everything looks right
  * terminal/new: hash map size is part of buffer
  * terminal/new: style tests
  * terminal/new: style set removal
  * terminal/new: everything is OffsetBuf based
  * terminal/new: clean up comments
  * terminal/new: page init
  * terminal/new
  * terminal/new: initialize all rows to point to proper cell offsets
  * terminal/new: Screen beginnings
  * terminal/new: print some characters (test string)
  * terminal/new: PageList
  * terminal/new: lots of code thrown at the wall
  * terminal/new: detect empty rows
  * terminal/new: print single lines of ascii chars lol
  * terminal/new: add bench
  * terminal/new: store full style id
  * terminal/new: todos
  * terminal/new: add BitmapAllocator
  * terminal/new: page has graphemes attached
  * terminal/new: page has grapheme metadata
  * terminal/new: handle zero-width at beginning of line
  * terminal/new: wraparound beginnings
  * terminal/new: pages have a size
  * terminal/new: scrollDown
  * terminal/new: scrollactive
  * terminal/new
  * terminal/new: pages must use mmap directly
  * bench/page-init
  * bench/page-init: page count
  * terminal/new: fix allocation
  * terminal/new: using arena + pool is faster for page init
  * terminal/new: page capacity can be adjusted while retaining byte size
  * terminal/new: create in proper sizes
  * terminal/new: clean up
  * terminal/new: pagelist doesn't actively maintain active offset
  * terminal/new: wide char support
  * terminal/new: port many more tests
  * terminal/new: CR and LF
  * terminal/new: backspace, cursor left
  * terminal/new: setcursorpos tests
  * terminal/new: hashmap k/v offsets were off the wrong base
  * terminal/new: append/lookup graphemes and tests
  * terminal/new: non-grapheme zwjs
  * terminal/new: graphemes
  * terminal/new: adjust grapheme bytes default up
  * terminal/new: clear graphemes on overwrite
  * terminal/new: PageList scrolling
  * terminal/new: scroll by delta
  * terminal/new: scrolling viewport
  * terminal/new: insertLines
  * vt-insert-lines bench
  * terminal/new: introduce content tags and bg color cells
  * terminal/new: delete graphemes on insertLines
  * terminal/new: scrollDown, top/bot margin tests, fix insertLines bug
  * terminal/new: eraseChars
  * terminal/new: one left/right margin test
  * terminal/new: cursorUp and reverseIndex
  * terminal/new: index tests
  * terminal/new: deleteLines
  * terminal/new: scrollUp
  * terminal/new: couple missing tests
  * terminal/new: cursorLeft
  * terminal/new: cursorDown
  * terminal/new: cursorRight
  * terminal/new: start laying some groundwork for styles
  * terminal/new: print handles previous styles
  * terminal/new: erase according to bg sgr
  * terminal/new: left/right margins insertLines
  * terminal/new: insert and delete lines handle style dec
  * terminal/new: more robust cell blanking in row
  * terminal/new: lots more scroll region tests
  * terminal/new: decaln
  * terminal/new: insertBlanks, insert mode
  * terminal/new: grapheme tests
  * terminal/new: deleteChars
  * terminal/new: saved cursor
  * terminal/new: save cursor, protected modes
  * terminal/new: clear out some TODOs
  * terminal/new: eraseLine
  * terminal/new: bring in a bunch more tests
  * terminal/new: PageList respects max size, prunes scrollback
  * terminal/new: use new pagelist grow mechanism that prunes
  * terminal/new: pagelist rowChunkIterator
  * terminal/new: screen has more logic, eraseActive
  * terminal/new: pagelist can iterate over history
  * terminal/new: eraseRows
  * terminal/new: erasedisplay wip
  * terminal/new: erase display complete
  * terminal/new: scroll clear
  * terminal/new: PageList.erase
  * terminal/new: erase => clear when the data isn't physically erased
  * terminal/new: eraseDisplay history
  * terminal/new: decaln manages memory
  * terminal/new: charsets
  * terminal/new: semantic prompts
  * terminal/new: primary/alt screen
  * terminal/new: fullreset
  * terminal/new: properly handle zero scrollback configs
  * terminal/new: Screen new scrolldown should inherit bg color
  * terminal/new: scrolling viewport into active area pins to active
  * terminal/new: screen scrolling tests
  * terminal/new: screen scrollClear tests
  * terminal: noting uncopied tests
  * terminal/new: page clone, screen/pagelist clone wip
  * terminal/new: Screen.clone
  * bench/screen-copy
  * cli: arg parsing supports more int types
  * terminal/new: clone can take a shared pool
  * terminal: remove old logs
  * terminal/new: screen clone tests
  * terminal/new: eraseRows viewport behavior
  * terminal/new: more screen tests
  * terminal: mark off test
  * terminal/new: screen resize stubs (don't work)
  * terminal/new: page resizebuf boilerplate
  * terminal/new: pagelist resize rows only no reflow
  * terminal/new: resize no reflow pagelist less columns
  * terminal/new: pagelist more resize fixes
  * terminal/new: page.cloneFrom
  * terminal/new: pagelist more cols
  * terminal/new: pagelist resize rows and cols
  * terminal/new: screen resize no reflow less rows
  * terminal/new: resize less rows trims blank lines first
  * terminal/new: port lots of no reflow screen resizes
  * terminal/new: more no reflow tests
  * terminal/new: more no reflow tests
  * terminal/new: non-passing resize tests
  * bench/resize
  * terminal/new: pagelist resize no reflow more cols handles cap change
  * terminal/new: pagelist resize with reflow more cols with no wrapped rows
  * terminal/new: first grow cols reflow work, not done
  * terminal/new: start porting resize tests, bugs
  * terminal/new: resize without reflow updates cursor
  * terminal/new: port more screen resize tests
  * terminal/new: more resize more cols tests
  * terminal/new: recalculate cursor on more cols reflow
  * terminal/new: resize more cols ignores trailing empty cells
  * terminal/new: lots more tests ported
  * terminal/new: fix up cursor on grow cols
  * terminal/new: start reflow of less cols
  * terminal/new: less cols cursor tests
  * terminal/new: handle blank lines in reflow
  * terminal/new: more reflow less cols tests
  * terminal/new: more less cols tests
  * terminal/new: clean up redundancies
  * terminal/new: fix issue with resizing when cursor is in blank trailing cell
  * terminal/new: semantic prompt saving tests
  * terminal/new: copy graphemes for reflow
  * terminal/new: reflow copies styles
  * terminal/new: pagelist resize preserves semantic prompt
  * terminal/new: pagelist resize to 1 col deletes wide chars
  * terminal/new: wrap wide chars in resize reflow
  * terminal/new: handle unwrapping wide spacer heads
  * terminal/new: unwrapping requiring wrapping with spacer head
  * terminal/new: more reflow tests with wide chars
  * terminal/new: screen passes all resize tests
  * terminal/new: resize tests
  * terminal/new: deccolm
  * terminal/new: add scrollViewport
  * terminal/new: set/gwd pwd
  * terminal/new: some missing APIs
  * terminal/new => terminal2 so we can figure out what depends on what
  * terminal2: working on pins and tracked pins
  * terminal2: viewport exact is gone, now pin
  * terminal2: pointFromPin
  * terminal2: start testing pins with reflow
  * terminal2: lots more tracked pin logic
  * terminal2: screen uses pins
  * terminal2: remove rowoffset
  * terminal2: starting to port kitty graphics
  * terminal2: delete kitty by intersecting cursor
  * terminal2/kitty: tests pass
  * terminal2: use new kitty stack
  * terminal2: most imports
  * terminal2: more imports
  * terminal2: more imports
  * terminal2: start Selection
  * terminal2: pagelist cellIterator
  * terminal2: PageList pageIterator reverse
  * terminal2: PageList iterators all support reverse
  * terminal2: selection adjust right
  * terminal2: sel adjust left
  * terminal2: adjust down
  * terminal2: adjust down edges
  * terminal2: sel adjust home/end
  * terminal2: selection adjust done
  * terminal2: promote Selection
  * terminal2: a selection can be tracked or untracked
  * terminal2: Pin iterators
  * terminal2: selectLine
  * terminal2: selectAll
  * terminal2: more selectLine tests
  * terminal2: selectLine fixes
  * terminal2: selectWord starts
  * terminal2: selectWord more tests
  * terminal2: selectWord done
  * terminal2: selectOutput
  * terminal2: selectPrompt
  * terminal2: selection start/endPTr
  * terminal2: selection topLeft/bottomRight
  * terminal2: Selection.ordered
  * terminal2: contains selection
  * terminal2: promptPath
  * terminal2: selectionString beginning
  * terminal2: selectionString more tests
  * terminal2: selectionString with wide spacer head
  * terminal2: zwjs in selectionString
  * terminal2: selectionString with rect
  * terminal2: better blank line handling
  * terminal2: resize cols blank row preservation
  * terminal: todo for paged-terminal
  * terminal: remove new import
  * Revert "terminal: remove new import"
  * terminal2: add Pin.cells
  * font/shaper: start converting run to new terminal
  * font/shaper: more tests passing
  * font/shaper: test with bg only cells
  * font/shaper: new API
  * terminal2: export CursorStyle
  * zig build test with renamed terminal package
  * terminal: Screen can hold selection
  * terminal: more selection tests
  * terminal-old: note test we skipped
  * termio/exec: get compiler errors gone
  * terminal/kitty: graphics exec ported
  * core: surface compiles
  * renderer/metal: port
  * inspector: todo on render
  * terminal: correct cols/rows order
  * terminal: proper cursor copy for alt screen
  * terminal: PageList resize should set styled on row if style copy
  * terminal: test to ensure grapheme flag is set on row when resizing
  * terminal: pagelist verify erasing history resets to one page
  * terminal: erase complete deletes kitty images again
  * terminal: PageList updates page size accounting when erasing page
  * terminal: do not set selection manually
  * terminal: clone uses opts struct
  * terminal: PageList.Clone can remap tracked pins
  * terminal: Screen clone preserves cursor
  * terminal: Screen.clone preserves selection
  * renderer/metal: re-enable the cursor, it works
  * font/shaper: fix style for runs
  * remove point.Viewport
  * terminal: page size should be accounted every creation
  * terminal: pagelist resize handles soft-wrap across pages
  * terminal: Pagelist reflow cursor in blank cell wrapped properly
  * terminal: bring back clearPromptForResize, with tests!
  * terminal: resize create new pages as necessary
  * terminal: PageList more resize tests
  * terminal: PageList resize fix spacer issues with tests
  * terminal: don't insert newline across page boundaries
  * terminal: PageList resize blank lines at start of page
  * core: surface now tracks left click pin
  * renderer/metal: show selections
  * core: single click selection is on the way
  * core: checkResetSelSwitch converted
  * core: double-click drag
  * core: drag triple click
  * core: remove completed todos
  * update TODO.md
  * terminal: PageSize adjustCapacity for non-standard pages
  * terminal: PageList adjustCapacity should return new node and fix pins
  * terminal: resize page on unique style per cell
  * terminal: handle style ID overflow
  * terminal: PageList.clone must use createPageExt for non-std pages
  * terminal: PageList adjustCap should start from original cap
  * terminal: resize cols without reflow handles higher caps
  * terminal: resize handles increased styles/graphemes
  * core: configurable scrollback limit
  * terminal: page.cloneFrom graphemes
  * terminal: commented log line to see active style count
  * fix bench compilation
  * core: re-enable click to move cursor
  * terminal: fix page size calculations on Linux
  * terminal: jump to prompt
  * core: remove incorrect std.meta.eql on selection
  * terminal: dumpString options
  * terminal: dumpScreen handles wrap
  * core: write scrollback file works again
  * core: mouse untracks pin in right screen
  * terminal: Selection.containedRow
  * renderer/metal: re-enable selection awareness for shaping
  * renderer/metal: almost bring back kitty images, some bugs
  * terminal/kitty: calculate cell height more efficiently
  * renderer/metal: fix kitty image offset on screen
  * core: only adjust selection on keypress
  * terminal: selectionString should use proper ordered
  * terminal: selection should use pin iterators
  * terminal: Screen clone should preserve selection order
  * terminal: screen clone that doesn't have sel should set null sel
  * update TODO
  * terminal: remove TODO
  * core: scroll to selection working
  * renderer/opengl: convert
  * prettier
  * terminal: bitmap allocator had off by one on extra bitmaps
  * terminal: pagelist can adjust grapheme byte capacity
  * terminal: adjust page capacity for graphemes if necessary
  * inspector: support cell pinning again
  * inspector: cell selection works again
  * inspector: get mouse points working
  * inspector: forgot the new file
  * inspector: add page system details
  * config: increase default max scrollback to 10MB
  * inspector: forgot another new file
  * terminal: selectLine can disable whitespace/sem prompt splitting
  * terminal: screen lineIterator
  * core: converting more to new screen state
  * terminal: selectionString takes a struct for opts
  * terminal: add StringMap back
  * core: enable link hovering
  * renderer: convert link to new state
  * renderer: re-enable URL underlining

  [ Qwerasd ]
  * terminal/page: improved capacity adjust logic
  * terminal/page: improve capacity adjust cols tests

  [ Mitchell Hashimoto ]
  * ci: create PR releases
  * ci: PR builds for macOS should be ReleaseSafe
  * ci: release PR on sync
  * terminal: pruned pages should keep tracked pins in top-left

  [ Jeffrey C. Ollie ]
  * build ghostty nix package with ReleaseSafe

  [ Mitchell Hashimoto ]
  * terminal: fix off-by-one tracked pin issues when page is pruned

  [ Jeffrey C. Ollie ]
  * allow building nix package with different optimizations

  [ Mitchell Hashimoto ]
  * terminal: resizing to lt rows should not trim blanks with tracked pin
  * terminal: resizing greater cols without reflow should preserve cols
  * terminal: cleaner impl of getTopLeft(.active)
  * terminal: handle resizing into increased implicit max size
  * terminal: resize no reflow must do cols before rows
  * inspector: needs to call new PageList.maxSize func
  * terminal: PageList rowIterator respects limit row
  * terminal: insertLines uses iterators to handle pages
  * terminal: deleteLines assertion for same page
  * terminal: insertLines/deleteLines handle split across pages
  * terminal: delete/insertLines uses correct page for clearing

  [ Gregory Anders ]
  * terminal: set PageList viewport to active area when cloned

  [ Mitchell Hashimoto ]
  * terminal: cloneFrom clears destination
  * termio/exec: only clear above cursor if cursor is not on y=0
  * termio/exec: clear screen should erase rows and shift up
  * terminal: fullReset should reset cursor style
  * terminal: deleteLines with zero count should do nothing
  * terminal: style needs to be copied to new page on scroll
  * terminal: only reload style if we're on a new page on scroll
  * terminal: resize should preserve cursor style ref
  * terminal: in all cursor move cases, we need to account for page changes
  * terminal: all cursorReload scenarios should check style data
  * terminal: when overwriting wide spacer tail, clear graphemes
  * terminal: handles eraseRows that erases our full pagelist
  * terminal: Screen scroll test and handle single row screens
  * terminal: add assertion for trackPin as commented
  * terminal: remove completed todo
  * terminal: eraseDisplay complete needs to delete kitty images
  * terminal: remove unnecessary todo
  * terminal: deleteChars should not split wide char cursor x
  * terminal: pagelist handle scenario where reflow erases all pages
  * terminal: bitmap allocator handles 64-chunk sized allocs
  * terminal: BitmapAllocator supports allocations across bitmaps
  * terminal: properly clear style in error scenario
  * terminal: clear styles properly for clearing wide spacers
  * terminal: moveCell handles graphemes, clears source
  * terminal: add page.verifyIntegrity function
  * terminal: add some integrity assertions
  * terminal: add integrity checks throughout PageList
  * terminal: add Screen integrity checks, pepper them through cursors
  * terminal: add more integrity assertions
  * terminal: get rid of some verifications, comment why
  * terminal: insertChars/deleteChars needs to account properly
  * terminal: clearcells only decs cursor ref if same page
  * terminal: fix cursor style on deleteLines
  * terminal: handle row wrap integrity issues on reflow
  * terminal: relax grapheme integrity check for fast paths
  * terminal: prevent false positive integrity check
  * terminal: no scrollback eraseRows needs to fix style
  * terminal: bitmapallocator handles perfectly divisble chunk size
  * terminal: spacer heads should only exist w/o l/r margin
  * terminal: clear unprotected row should preserve row attrs
  * terminal: undo accidental debug logs
  * terminal: more accidental logging
  * address latest zig changes
  * terminal: use std.meta.eql for equality checks
  * terminal: avoid memory fragmentation if possible on col grow
  * terminal: remove problematic test on 4k pages, still working on it
  * terminal: allow growing beyond max size for active area to fit
  * terminal: add assertion to page integrity that row/col count > 0
  * terminal: decaln accounts for styles across pages
  * terminal: when reflowing, set style to default to prevent integrity fail
  * terminal: add a test for resize less cols across pages with cursor
  * terminal: many more assertions around spacer state
  * terminal: deleteChars must not shift a spacer head
  * terminal: pause page integrity can be nested
  * terminal: insertBlanks doesn't split spacer tail
  * terminal: fix release builds
  * terminal: clear spacer heads on growing cols w/o reflow
  * terminal: deleteChars resets row wrap state
  * terminal: insertLines clears row wrap state
  * terminal: deleteLines resets line wrap
  * terminal: PageList trim blanks erases empty pages
  * ci: try PR builds on Namespace
  * terminal: PageList support initialization of multi-page viewports
  * Revert "ci: try PR builds on Namespace"
  * terminal: address todo to re-resolve 905

  [ Gregory Anders ]
  * input: fix associated text on macOS

  [ Mitchell Hashimoto ]
  * terminal: add clonePartialRowFrom
  * terminal: insert/deleteLines with L/R region across pages
  * terminal: explicit error set for page clone
  * terminal: turn unreachable into todo

  [ Gregory Anders ]
  * terminal: reset alt screen kitty keyboard state on full reset

  [ Mitchell Hashimoto ]
  * only show optimization

  [ Qwerasd ]
  * wip(terminal): Fast path for scroll regions
  * fix(terminal): clear erased rows
  * comments
  * fastmem: rotateOnce
  * perf(terminal): fast-paths for scrolling regions
  * fix(terminal): correctly use slow path for left/right scroll margin
  * fix(terminal): don't reset x when indexing in scroll region
  * terminal: clean up some code and comments
  * fastmem: fix doc comment
  * perf(terminal/page): @memset micro-optimization

  [ Mitchell Hashimoto ]
  * macos: only set titlebar color with enough luminance to avoid #1549
  * macos: remove some slight duplication
  * macos: usingColorSpace is only available with AppKit
  * Revert "Merge pull request #1550 from peteschaffner/titlebar-unzoom-button"
  * remove old terminal implementation
  * ci: try namespace again

  [ Jon Parise ]
  * macos: configurable titlebar fonts

  [ Mitchell Hashimoto ]
  * ci: release tip moves to namespace

  [ Kevin Hovsäter ]
  * Add final newline to CLI output

  [ Mitchell Hashimoto ]
  * ci: add debug build to release-tip for macos
  * macos: show build in about window
  * ci: put debug build in release
  * terminal: when growing rows, need to set rows before grow()

  [ Igor Anić ]
  * gtk: use symbolic icon for tab close

  [ Mitchell Hashimoto ]
  * terminal: add integrity assertion that cursor pin matches x/y

  [ Jeffrey C. Ollie ]
  * GTK: Add compiled-in GTK resources and use them for icons.
  * generate gresource xml and dependencies at comptime rather than hardcoding

  [ Mitchell Hashimoto ]
  * terminal: test eraseRowBounded, fix off by ones
  * font sizes are limited to u8 (max size = 255 points)
  * font/freetype: avoid overflows with u8 font size
  * macos,libghostty: font size is a u8

  [ Pete Schaffner ]
  * Revert "Revert "Merge pull request #1550 from peteschaffner/titlebar-unzoom-button""
  * Revert luminance check from commit f7129880f5c4

  [ Mitchell Hashimoto ]
  * minor style changes
  * apprt/gtk: handle gtk realize error more gracefully

  [ Qwerasd ]
  * fix(terminal/stream): add SPA and EPA handlers

  [ Tristan Partin ]
  * fix: remove deprecated to-pixdata gresource preprocessor

  [ Qwerasd ]
  * perf(terminal): clear unprotected cells in spans
  * fix(terminal): correct wrap logic in insert/deleteLines
  * fix(termio/exec): avoid overflow in setCursorRow/ColRelative

  [ Angelo Tata ]
  * Clarify macOS build requirements

  [ RGBCube ]
  * nix: make ReleaseFast the default package
  * nix: use packages = instead of (native)buildInputs as that is recommended

  [ Qwerasd ]
  * fix(terminal): insert/deleteLines boundary cond.s
  * test(terminal/Screen): clearRows with protected cells

  [ Chris Marchesi ]
  * nix: update nixpkgs-zig-0-12 (security, ff to staging-next)

  [ Jon Parise ]
  * os/homedir: use NSFileManager on macOS
  * os/homedir: remove now unnecessary fba.reset()

  [ Qwerasd ]
  * terminal/kitty_graphics: update outdated comments
  * terminal/kitty_graphics: ignore base64 padding
  * fix(kitty_graphics): set dirty state on various scroll operations
  * terminal/kitty_graphics: update tests

  [ Gordon Cassie ]
  * fix(build): solve issue with building tests on certain apple cpus.

  [ Qwerasd ]
  * font/sprite: improve rendering of dashed lines

  [ Mitchell Hashimoto ]
  * font/sprite: remove comptime arg for box drawing
  * fmt

  [ Pete Schaffner ]
  * Make things work with really dark backgrounds
  * Fix conflicting constraints issue
  * Put titlebar font code where it was intended

  [ Mitchell Hashimoto ]
  * font/shaper: fix CoreText shaper to compile with latest terminal changes

  [ Marius Svechla ]
  * shell-integration: implement no-title option

  [ Qwerasd ]
  * test(terminal/Screen): selectionString across page boundaries
  * fix(terminal/Sreen): selectionString across pages

  [ Chris Marchesi ]
  * nix: update nixpkgs-zig-0-12 (re-follow nixos-unstable)

  [ rok ]
  * input: escape can be used to clear dead key state

  [ Mitchell Hashimoto ]
  * pkg/macos: add missing functions to macos/foundation
  * font/coretext: shaper supports user-defined font features
  * font: enable the coretext shaper by default for CoreText faces
  * font/coretext: remove todo for font features
  * font/coretext: respect quirks fonts for shaper
  * font/coretext: better comment coretext shaper
  * font/coretext: face doesn't need harfbuzz font if we're not using it
  * build: do not build/link harfbuzz on macOS
  * ci: build debug build for pr builds
  * Update src/font/shape.zig

  [ Qwerasd ]
  * flake: update ZLS
  * terminal/Screen: improve selectionString page test

  [ Mitchell Hashimoto ]
  * font/coretext: unit tests pass on macOS

  [ Qwerasd ]
  * fix(terminal/Screen): selectionString multi-page
  * fix(inspector): cell picker in scrollback

  [ Mitchell Hashimoto ]
  * font/coretext: handle two-byte utf16 followed by more chars
  * ci: test macOS
  * input: add test for esc clearing dead key state

  [ Severus ]
  * Add note about GTK 4.14

  [ rok ]
  * input: do not emit sequence on <BS> when their's UTF-8 text

  [ Pete Schaffner ]
  * Update standard title/tab bar when config changes
  * Update titlebar tabs when config changes

  [ Mitchell Hashimoto ]
  * update README
  * input: add test for backspace change
  * font: remove unused struct
  * font: descritor can hash using a hasher
  * font: introduce GroupCacheSet, use it for descriptors to start
  * font: CodepointMap hashable, use for groupcacheset
  * font: GroupCacheSet.Key has metric modifiers
  * font: GroupCacheSet can initialize a group
  * core: convert surface/app to use GroupCacheSet
  * core: deref the font group when not used
  * font: improve log statements a bit
  * font: [broken] working on extracting Collection from Group
  * font: a mess
  * font: Collection has load options
  * font: Collection.getIndex
  * font: Collection deinit
  * font: Collection autoItalicize
  * font: Collection setSize
  * font: CodepointResolver beginnings
  * font: CodepointResolver style disabling test
  * font: CodepointResolver test box glyph
  * font: start SharedGrid
  * macos: wrap syncAppearance in async call

  [ Pete Schaffner ]
  * Fix new tab icon color not updating sometimes

  [ Mitchell Hashimoto ]
  * font: SharedGrid setup test infra
  * font: SharedGridSet starts
  * font: SharedGridSet clarify memory ownership
  * core: begin converting to SharedGridSet, renderers still broken
  * renderer/metal: picking away at font group => grid changes
  * renderer/metal: convert more
  * font: SharedGrid.getIndex
  * font: SharedGrid hasCodepoint
  * font/shaper: work on new grid APIs
  * font: implement many rendering, caching functions for SharedGrid
  * font: Atlas updated to use monotonic ID
  * renderer/metal: use new atlas APIs
  * core: App asserts the font grid set is empty on close
  * renderer/metal: re-enable preedit rendering
  * font/harfbuzz: work with new font structures
  * renderer/opengl: convert to SharedGrid, new windows/tabs are frozen
  * renderer/opengl: clean up texture sync
  * font: SharedGridSet locks and is thread-safe
  * config: RepeatableString.clone should clone all the strings too
  * config: FontStyle.clone
  * font: SharedGridSet uses DerivedConfig
  * font: SharedGridSet DerivedConfig does not take font size
  * renderer/Metal: change font size works again
  * core: add todo for next time
  * core: font size changes work
  * renderer/opengl: support font size change
  * apprt/gtk: setFontsize should have error
  * apprt/embedded: setfontsize
  * font: fix hashing of descriptor strings
  * renderer/opengl: set the font grid
  * address many fontmem todos
  * font: remove old files
  * font: CodepointMap supports clone

  [ rok ]
  * input: fix bs emitting sequence when it should not

  [ Mitchell Hashimoto ]
  * font/coretext: shaper may return multiple runs and that's okay
  * font/coretext: fix merge issue from #1662

  [ Qwerasd ]
  * font: fix discovery of styles
  * font/sprite: Fix U+255D

  [ Mitchell Hashimoto ]
  * font: SharedGridSet must hash diff for font size change
  * macos: add the debug menu item to the xcode run scheme
  * nix: do not build ZLS on linux aarch64, see comment
  * font: SharedGridSet.Key needs to clone the DerivedConfig

  [ Nick Jones ]
  * Mention Debian in compilation notes

  [ Jon Parise ]
  * macos: fall back to the system titlebar font

  [ Mitchell Hashimoto ]
  * terminal: handle case where eraseRowBounded happens at top of page
  * terminal: index (LF) that scrolls scroll region preserves SGR
  * config: update docs that fullscreen is incompatible with win-deco
  * macos: show alert when creating new tab in non-native fs

  [ Jon Parise ]
  * apprt/embedded: store userdata directly on Surface

  [ Mitchell Hashimoto ]
  * update zig
  * fix more comptime var leaks
  * update zig again
  * working on more zig breaking changes
  * update libxev
  * update zig and zig-objc
  * update mach-glfw dep to work with latest zig
  * input: Key.Side needs a specific backing int for use in packed
  * build: fix broken install header call for Linux
  * terminal: another enum in a packed struct needs backing int
  * fix breaking changes with latest zig
  * update zig

  [ Max Guppy ]
  * apprt/gtk: Fix background-opacity

  [ Mitchell Hashimoto ]
  * update zig, fix linux build
  * update mach to avoid vulkan
  * terminal: relax cell zero value default test
  * update mach-glfw to use b.path for relative includes
  * nix: update cache hash
  * update deps
  * update zig
  * fix windows build
  * build: use b.path everywhere
  * build: absolute path should not use b.path

  [ Chris Marchesi ]
  * nix: update nixpkgs-zig-0-12

  [ Mitchell Hashimoto ]
  * inspector: show cell codepoints and wide property
  * config: rename "wcswidth" to "legacy" for "grapheme-width-method"

  [ Jon Parise ]
  * termio: fix "forced" shell integration

  [ Mitchell Hashimoto ]
  * terminfo: for XTGETTCAP, non-parameterized string values return encoded

  [ Jon Parise ]
  * termio: pass full command to shell integration

  [ Mitchell Hashimoto ]
  * terminfo: reset kbs back to ^?, clear high bit for encoding
  * Revert "Merge pull request #1690 from TheOnlyMrCat/gtk_opacity"
  * update to zig 0.12
  * try to use official zig 0.12 for nix package
  * remove nixpkgs fork for zig 0.12
  * build.zig: change required zig version
  * update README
  * font: strikethrough uses sprite rendering
  * renderer/metal: remove strikethrough support from GPU
  * renderer/opengl: strikethrough as sprite
  * renderer/opengl: remove strikethrough fg mode
  * renderer/metal: start setting up per-frame state
  * renderer/metal: move more frame state to the frame
  * renderer/metal: implement triple-buffering
  * renderer/metal: move more metal objects into GPUState
  * renderer/metal: don't draw with zero instances
  * renderer/metal: dedicated cell bg shader
  * renderer/metal: dedicated cell fg shader
  * renderer/metal: rename drawcells
  * renderer/metal: update comment

  [ Jack N ]
  * sprites: dont thicken via font-thicken, + add cursor thickness adjustment
  * fix macos build

  [ Mitchell Hashimoto ]
  * renderer/metal: prepare cell contents mapping data (not implemented yet)
  * terminal: export Coordinate
  * renderer/metal: grid pos for bg/text should be ushort2
  * renderer/metal: working on cell contents map
  * terminal: Coordinate uses CellCountInt
  * renderer/metal: swap to new cell contents map
  * renderer/metal: clear cell contents bottom-up

  [ Jared Widberg ]
  * Revert cc29f0686379187733fe8824a2bea3ec63d93448

  [ Mitchell Hashimoto ]
  * renderer/metal: use index() for all cell settings
  * renderer/metal: render the cursor
  * renderer/metal: invert text under cursor again
  * renderer/metal: only invert if block
  * renderer/metal: preedit works again
  * renderer/opengl: fix compilation
  * renderer/metal: remove old functions
  * renderer/metal: improved comments
  * renderer/metal: go back to single buffering for now
  * renderer/metal: frame index must fit up to buffer count
  * renderer/metal: font changes needs to reset cell contents
  * renderer/metal: only delete values from the same array
  * renderer/metal: skip frame update if our cell buffer is too small
  * font/coretext: shaping ligatures adds padding cells for replaced cells

  [ Gordon Cassie ]
  * Fix typo.
  * Remove unnecessary allocation.
  * More log statements.
  * revert on comment removal

  [ Mitchell Hashimoto ]
  * font: runs do not split on bg color change
  * font/coretext: tests for #1721
  * build: add -Dfont-backend=coretext_harfbuzz to force Harfbuzz w/ CT
  * font/shaper: add hash to text runs
  * font/shaper: add Cache
  * renderer/metal: integrate shaping cache
  * renderer/opengl: use shaper cache
  * renderer/metal: log some cache info
  * renderer/metal: don't log
  * font/shaper: run hash should include font index
  * font/coretext: only pad shaped text ltr
  * terminal: add dirty bits to the page structure
  * terminal: dirty tracking on `print` with tests
  * terminal: remove unused debug log
  * terminal: dirty tests on t/b/l/r margins
  * terminal: dirty tests for insertLines
  * terminal: scrollDown dirty tests
  * terminal: scrollDown dirty tests
  * terminal: index dirty tests one todo
  * terminal: eraseRowBounded dirty tracking
  * terminal: more dirty tests
  * terminal: deleteChars dirty
  * terminal: many more dirty checks
  * terminal: more dirty tests
  * renderer/metal: docs
  * terminal: new coordinate type
  * terminal: track dirty state of palette and reverse colors
  * terminal: dirty tracking on screen clone
  * terminal: on clone, only mark rows dirty that were previously dirty
  * renderer/Metal: only rebuild rows that are dirty
  * terminal: set dirty bit for screen swap
  * terminal: resize causes full screen redraw
  * renderer/metal: re-enable triple buffer
  * font: noop shaper
  * terminal: Screen selection marks dirty
  * renderer: add draw now async wakeup
  * renderer: move our constant draw timer up to 120fps
  * apprt/embedded: add draw now API
  * pkg/macos: add CVDisplayLinkSetCurrentCGDisplay
  * pkg/macos: display link callback slightly more typesafe
  * renderer/metal: setup display link
  * renderer/metal: stop display link when we lose focus
  * renderer/metal: stop/start display link on occlusion
  * renderer/metal: remove unnecessary logs
  * renderer/metal: do not update frames if cells don't change
  * renderer: remove 10ms delay on repaint
  * renderer: add comment why we have dead code
  * renderer/metal: clean up some unnecessary state around rebuilds
  * renderer/metal: API to handle macOS display ID changing
  * renderer: add window-vsync option (defaults to false)

  [ Jon Parise ]
  * shell-integration: automatic bash integration
  * shell-integration: revise ShellIntegration.command comment

  [ Mitchell Hashimoto ]
  * pkg/macos: add more CoreText APIs
  * pkg/macos: CTFontCreateForString
  * renderer/metal: reset screen dirty flags
  * terminal: only set selection dirty to true on clear if previously set
  * renderer/metal: rebuild all cells on resize
  * renderer/metal: disable dirty tracking temporarily
  * renderer/metal: disable bandaid
  * terminal: dirty tracking in more places, tests coverage
  * terminal: more dirty tracking
  * renderer/metal: rebuild full screen when viewport changes
  * terminal: maintain dirty bits when rotating rows on clone
  * terminal: eraseRows sets dirty bits
  * font: use CoreText API for CJK unified ideographs
  * font: fontconfig has proper function
  * font/coretext: choose proper original font for CJK search

  [ Qwerasd ]
  * renderer/Metal: improve cell contents tracking
  * renderer/Metal: ArrayList cell Contents rows
  * renderer/Metal: cell Contents cleanup
  * renderer/Metal: cell Contents tests
  * renderer/Metal: cell Contents asserts

  [ Mitchell Hashimoto ]
  * core: preedit modification sets full screen dirty
  * termio: shell integration uses arena
  * update README

  [ Jon Parise ]
  * shell-integration: expand bash HISTFILE value

  [ Mitchell Hashimoto ]
  * font/coretext: do not assume capacity on arraylist append
  * pkg/macos: add more text APIs

  [ Severus ]
  * Add GDK_DEBUG as default environment variable for linux
  * Add upstream's issue

  [ Mitchell Hashimoto ]
  * font/coretext: force LTR shaping
  * font: disable CJK unification fallback with freetype rasterizer
  * ci: add renderer, font engine macOS build+test matrix
  * font: SharedGridSet works without font discovery
  * font: fix coretext test issues with harfbuzz shaper

  [ Qwerasd ]
  * feat(font): Non-integer point sizes
  * fix a couple test failures
  * fix freetype face size calculation
  * fix point size type
  * revert dpi type to u16
  * keep font size in sane range
  * Enable libpng in harfbuzz freetype dep
  * cast dpi to int again
  * update font_size to f32 in libghostty

  [ Mitchell Hashimoto ]
  * apprt/gtk: set GDK_DEBUG
  * ci: collapse renderer/font matrix into single job
  * renderer/metal: reset cells when font size changes to avoid blank
  * pkg/simdutf: update to 5.2.8
  * pkg/highway: update
  * pkg/harfbuzz: update
  * pkg/glslang update
  * pkg/libpng: update
  * pkg/libxml2: udpate
  * pkg/zlib: update
  * nix: update cache hash
  * Revert "pkg/libxml2: udpate"
  * nix: update hash again

  [ cryptocode ]
  * Rename Split Horizontally/Vertically to Split Right/Down
  * Rename menu item variable name accordingly

  [ Qwerasd ]
  * fix(renderer): rebuild font grid and reset shaper cache on hot reload

  [ Jon Parise ]
  * shell-integration: update bash-preexec.sh

  [ Mitchell Hashimoto ]
  * update Dear Imgui to 1.90.6
  * macos: ime coordinate needs to be converted from view to window coords

  [ Jeffrey C. Ollie ]
  * Add split right & split down menu entries for the GTK apprt.
  * suppress identical desktop notifications
  * add strict rate limit
  * adjust log message

  [ Qwerasd ]
  * fix(renderer/Metal): dirty track link highlights

  [ Mitchell Hashimoto ]
  * config: default window-vsync to true

  [ Jon Parise ]
  * shell-integration: suppress shellcheck issues
  * shell-integration: handle 'bash -c command'
  * shell-integration: update Bash integration details

  [ Pete Schaffner ]
  * Make title/tab bar respect `window-theme` setting

  [ dependabot[bot] ]
  * build(deps): bump cachix/install-nix-action from 26 to 27

  [ ilk ]
  * feat(shell-integration): add integration for Elvish
  * refactor(shell-integration:elvish): refactor to improve readability

  [ Mitchell Hashimoto ]
  * macos: use enum for window theme
  * small comment changes
  * macos: only set bg color and titlebar color if opaque

  [ Jeffrey C. Ollie ]
  * Address review comments

  [ Mitchell Hashimoto ]
  * macos: titlebar styling always applies to titlebar tabs
  * font/shaper: periodically reset LRU in cache to avoid slowdown

  [ Gregory Anders ]
  * os: log stderr from open command

  [ Troels Thomsen ]
  * Recognize system theme

  [ Mitchell Hashimoto ]
  * os: some stylistic changes, comments for stderr logging

  [ dependabot[bot] ]
  * --- updated-dependencies: - dependency-name: cachix/cachix-action   dependency-type: direct:production   update-type: version-update:semver-major ...

  [ Troels Thomsen ]
  * Color after setting window theme and tab mode

  [ Mitchell Hashimoto ]
  * Extract guard statement

  [ Troels Thomsen ]
  * Avoid coloring when using native tabs

  [ Matt Robenolt ]
  * macos: Declare Ghostty as a Shell

  [ Mitchell Hashimoto ]
  * renderer: kitty image with y offset should stretch image
  * update README

  [ dependabot[bot] ]
  * build(deps): bump namespacelabs/nscloud-cache-action from 1.1.4 to 1.1.5

  [ Jan200101 ]
  * terminal: support using the bright palette for bold text

  [ Mitchell Hashimoto ]
  * update libxev
  * nix: update hash
  * very minor nitpicks
  * font/coretext: adjust strikethrough position for fonts with leading

  [ Peter Cardenas ]
  * 🧹 make strikethrough calculation slightly clearer

  [ Jan200101 ]
  * build: prevent breakage with relative paths `root()` returns `@src().file` which isn't guaranteed to be an absolute path

  [ Mitchell Hashimoto ]
  * modify var name
  * font: treated fonts with mixed color/non-color glyphs as text
  * core: nitpick some var names
  * shell-integration: add README about Elvish

  [ ilk ]
  * feat(shell-integration): add automatic integration for Elvish
  * refactor(shell-integration): refactor to make cases alphabetical
  * refactor(shell-integration): refactor to make cases alphabetical

  [ Mitchell Hashimoto ]
  * prettier
  * rename env var
  * font/coretext: can read font tables
  * font/opentype: add SVG table parser, membership check
  * font/freetype: API to load font table
  * font/coretext: determine glyph colorization
  * font/coretext: hasColor/isColored
  * font: handle presentation at glyph layer
  * font/freetype: update to new presentation APIs
  * font/freetype: CBDT/CBLC tables imply color
  * pkg/freetype: use c_ulong which isn't 64-bit on windows
  * font: remove deferred face todo, note why
  * font: remove unused structs
  * font/coretext: cleanup unused comments
  * font/coretext: glyphIndex must return u32 for noop shaper

  [ cryptocode ]
  * scrollback: Include active area when writing scrollback to file

  [ Mitchell Hashimoto ]
  * font: when presentation isn't found, always fallback to any

  [ ilk ]
  * fix(elvish-integration): fix mistakes

  [ Gregory Anders ]
  * os/open: do not wait for commands which do not terminate

  [ Mitchell Hashimoto ]
  * update READMEs to new repo URL
  * update release job
  * update README

  [ Jon Parise ]
  * Update functional URLs for ghostty-org

  [ Mitchell Hashimoto ]
  * Allow keybinding arbitrary unicode codepoints (#1814)
  * input: Kitty alternate should be reported even if no shifted text (#1817)
  * input: CSIu should send full codepoint
  * terminal: point coord y needs to be a larger int
  * apprt/gtk: when dragging tab out, grab focus
  * core: do not toggle mouse hidden on keyCallback with mods
  * core: only hide mouse on key press events
  * apprt/gtk: only set cursor on shape change if its visible
  * gtk: note setting title unhides the cursor
  * gtk: goto_split:previous/next wrap
  * gtk: set tab group so that tabs can be dropped onto other windows

  [ Jon Parise ]
  * shell-integration: bash must be explicitly enabled

  [ Mitchell Hashimoto ]
  * inspector: fix encoding of pty-encoded key event
  * update color themes to a34aeb1f505707a35102fe95984d4bea4a85eb3e
  * renderer/opengl: don't append assume capacity

  [ Paul Berg ]
  * gtk: update tab's window upon switching notebook

  [ Mitchell Hashimoto ]
  * os: add linux API for getting cgroup by pid
  * apprt/gtk: cgroup initialization
  * os: API for listing cgroup controllers
  * os: rename linux => cgroup
  * os: API to configure cgroup controllers
  * os: cgroup create/move
  * os: cgroup can set memory limits
  * apprt/gtk: store transient cgroup
  * plumb the linux cgroup through to termio

  [ Jan200101 ]
  * inspector: fallback to unicode when key event is invalid This prevents non-ascii characters like Ö from being displayed as invalid

  [ Mitchell Hashimoto ]
  * bikeshed style
  * termio: plumb a lot more to get ready to move into cgroup
  * termio/exec: move subprocess into cgroup
  * config: control cgroup isolation
  * apprt/gtk: config to hard fail on cgroup init
  * config: add cgroup memory limit config
  * config: clarify some config
  * apprt/gtk: cgroup hierarchy only affects surfaces
  * xdg-terminal-exec invocations set title based on command
  * config: xdg-terminal-exec parsing should ignore the initial "-e"

  [ Tim Culverhouse ]
  * stream: remove redundant alias handling in csiDispatch

  [ Jon Parise ]
  * os: std.ChildProcess -> std.process.Child

  [ Mitchell Hashimoto ]
  * config: macos-titlebar-style, remove titlebar-tabs option
  * macos: set background opacity/blur on window controller not surface
  * macos: set background color on transparency that matches Terminal.app
  * config: introduce macos-window-shadow
  * terminal: mark old/new rows as dirty when moving the cursor absolute
  * terminal: all cursor movement needs to mark the old and new page dirty
  * font: preload deferred faces in SharedGrid to avoid data races

  [ Danny Lin ]
  * scrollback: buffer writes to scrollback file

  [ Jeffrey C. Ollie ]
  * Use clone3 / CLONE_INTO_CGROUP on Linux
  * use consistent type for pid

  [ Mitchell Hashimoto ]
  * core: consider any paste with bracketed paste closer unsafe
  * small stylistic tweaks
  * remove unused var
  * migrate termio.Options.LinuxCgroup to Command
  * terminal: add easy debug mode for stream debugging
  * terminal: reject invalid DECSASD status code

  [ Qwerasd ]
  * misc: improve rebuildCells time logging
  * perf: introduce CacheTable strcture, use it for shaper cache

  [ Cameron Dart ]
  * feat: focus-follows-mouse
  * macos: add to config
  * macos: surface focus follow mouse
  * update config in TerminalController.windowDidLoad and TerminalController.configDidReload
  * no early return
  * feat(gtk): focus follows mouse

  [ Robbie Vanbrabant ]
  * Nix dev env to not depend on deleted Zig release

  [ Qwerasd ]
  * perf: introduce RefCountedSet structure, use it for Style.Set
  * perf(shaper/coretext): cache fonts between shape calls
  * perf: introduce CFReleaseThread for running CoreFoundation releases
  * shaper/coretext: update tests
  * add CFReleasePool handling to OpenGL renderer

  [ Robbie Vanbrabant ]
  * macos: regain window focus on inspector toggle

  [ Mitchell Hashimoto ]
  * minor comment changes
  * renderer/opengl: invert cursor cell text when glyph is constrained

  [ isabel ]
  * refactor(nix): specify source
  * build(nix): include more into source; ignore flake comapct

  [ Mitchell Hashimoto ]
  * nix: revert back to 23.05 for now
  * CacheTable tests, style changes
  * Move CFReleaseThread to os package
  * font: coretext shaper owns the cf release pool
  * coretext shaper owns CFReleaseThread, works on both Metal and OpenGL now
  * cache_table and ref_counted_set work on 32-bit machines
  * font: add noop endFrame calls to all other shapers
  * font/coretext: cached fonts uses unmanaged arraylist

  [ isabel ]
  * nix: inherit lib from unstable

  [ Mitchell Hashimoto ]
  * small stylistic changes

  [ Peter Cardenas ]
  * 🔧 more lenient file matching for ghostty config

  [ Mitchell Hashimoto ]
  * Update libxev
  * update to zig 0.12.1
  * terminal: RefCountedSize should use usize for byte math
  * begin 0.13 update process -- very broken
  * update ziglyph
  * update a couple more deps
  * update mach
  * update deps
  * 0.13 conversions

  [ Gordon Cassie ]
  * Fix some basic build errors.

  [ Mitchell Hashimoto ]
  * pkg/oniguruma: call new functions
  * nix: update package to zig 0.13
  * fix linux builds
  * update libxev
  * nix: update to zig 0.13
  * disable AVX512 until Zig issue is resolved

  [ Seth Vargo ]
  * Clarify shell integration installation

  [ Mitchell Hashimoto ]
  * update README for Zig 0.13
  * prettier

  [ Qwerasd ]
  * fix(terminal/PageList): clear cells in truncated rows during clone
  * RefCountedSet: use usize for cap to allow up to max `Id`+1
  * page integrity checks: detect zombie styles
  * fix(RefCountedSet): add NeedsRehash error and fix PSL counting bug

  [ Mitchell Hashimoto ]
  * terminal: ref counted set count is const
  * use +% for overflow
  * terminal: add test for pagelist to clear styles
  * terminal: if cloned screen is subset of selection, select full screen

  [ Justin Restivo ]
  * docs: fix nix wiki 404 in README

  [ Mitchell Hashimoto ]
  * macos: titlebar tabs should do nothing if no titlebar
  * config: reorder increase font size so it works on macOS menu

  [ Justin Su ]
  * fix a typo in Config.zig

  [ Mitchell Hashimoto ]
  * pkg/oniguruma: add additional header configs for build

  [ Severus ]
  * Fix issue 1667

  [ Mitchell Hashimoto ]
  * core: mouse within top/bottom 1 pixel should scroll selection
  * macos: update Sparkle to 2.6.3
  * macos: initialize some pressure click boilerplate
  * core: mouse pressure state and callbacks
  * macos: release pressure on mouseUp
  * macos: I don't need any custom quicklook stuff
  * macos: hacky API to get a CTFont for QuickLook
  * macos: return valid selection range
  * macos: add API to get selection top-left for quicklook
  * apprt: convert selection info to a single struct and C API
  * add TODO for branch
  * macos: offset quicklook box a bit to look better (imo)
  * apprt: scale coretext font size for quicklook properly

  [ Codey Oxley ]
  * docs: Convert 'unfocused-split-fill' comments into doc block

  [ Mitchell Hashimoto ]
  * macos: remove log statement
  * mouse button callbacks returns bool for consumption
  * macos: start context-menu
  * core: right-click press selects word
  * core: on right click, only create selection if point isn't in prev sel
  * apprt/gtk: conform to new mouse button API

  [ Ben Linsay ]
  * Add a line to the README about config reload

  [ Mitchell Hashimoto ]
  * macos: add string extension
  * macos: add windowing commands to context menu
  * macos: i don't like windowing in the context menu
  * macos: disable macOS-only API on iOS
  * ctrl+click is handled as right-click (with various details)
  * prettier

  [ Anton Kastritskii ]
  * docs: add valid values for enum config options

  [ Mitchell Hashimoto ]
  * macos: add man pages to app bundle

  [ Jeffrey C. Ollie ]
  * Don't leak env vars in GTK apprt.

  [ Mitchell Hashimoto ]
  * config: note blank valid value
  * macos: implement ctrl+command+d for quicklook under cursor

  [ Jon Parise ]
  * build: update repository URLs in mdgen documents

  [ Mitchell Hashimoto ]
  * core: mouse shift escape applies to all buttons, not just left
  * command: if chdir fails for subprocess, ignore the error
  * build: if emit-docs is not set, still create share/man
  * macos: relabel tabs when mergeAllWindows is called

  [ Jon Parise ]
  * termio: add man pages to MANPATH on macOS
  * termio: remove unnecessary resources_key const

  [ Mitchell Hashimoto ]
  * termio: allow failing to build manpath string

  [ Anton Kastritskii ]
  * docs: warn about `window-decoration` disables tabs functionality

  [ Mitchell Hashimoto ]
  * terminal/kitty: image dimensions off by one fix
  * terminal/kitty: delete by column/row is one-indexed
  * terminal: Pin.isBetween incorrect if same y and same page
  * terminal/kitty: intersect cell deletion is 1-based
  * terminal: when adjusting page capacity, account for cursor ref counts
  * terminal: parse osc 8 hyperlink_start
  * terminal: parse osc8 end
  * terminal: additional parse test cases
  * terminal: page memory layout for uri/hyperlink data
  * terminal: change default hyperlink count to zero
  * terminal: remove the hyperlink stuff i'm starting over
  * terminal: add strings table to page
  * terminal: hyperlink data structures beginning, alloc into page
  * terminal: refcountedset passes base memory to all context funcs
  * terminal: RefCountedSet has Context variant methods
  * terminal: RefCountedSet doesn't need to pass base anymore
  * terminal: hyperlink start/end on screen
  * terminal: RefCountedSet should call deleted on upsert
  * terminal: test hyperlink reuse shares ID
  * terminal: hyperlink deleted callback frees string memory
  * terminal: print sets hyperlink state, tests
  * terminal: row needs hyperlink state, test clearing hyperlink
  * terminal: handle moving/swapping/clearing cells with hyperlinks
  * terminal: save/restore cursor doesn't modify hyperlink state
  * terminal: index hyperlink tests
  * terminal: scrollDown with hyperlinks
  * terminal: scrollUp hyperlink tests
  * terminal: full reset clears OSC8 state
  * termio: hook up OSC8
  * terminal: increase std cap for now until we implement resize
  * terminal: simplify hyperlink capacity
  * terminal: support page oom with hyperlinks
  * core: clicking OSC8 links work
  * terminal: page clone needs to clone strings
  * renderer: matchSet matches OSC8
  * renderer: match multiple lines for osc8
  * terminal: copy hyperlinks on reflow
  * terminal: end hyperlink state when switching screens
  * core: when over a link we must set the whole screen dirty on move
  * terminal: pause integrity checks in clone row until done
  * renderer: match no-ID OSC8 in contiguous chunks
  * terminal: RefCountedSet checks for existence prior to cap check
  * terminal: pause integrity checks on resize for hyperlink set
  * terminal: set hyperlink state on clone
  * terminal: disable zombie styles integrity check
  * terminal: on print, adjust page size if we need to grow for hyperlinks
  * terminal: adjustCapacity handles hyperlink state

  [ Anton Kastritskii ]
  * docs: specify that window-decoration disables tabs on macos only

  [ Mitchell Hashimoto ]
  * terminal: hyperlink capacity adjustment needs to call safe variant
  * macos: some disabled swiftui code that makes link tooltips show
  * macos: show URL on OSC8 hover
  * core: helper to get osc8 URI
  * apprt: stubs for mouseOverLink
  * macos: fix iOS build

  [ Okan Esen ]
  * document unfocused split option only working on macOS

  [ Mitchell Hashimoto ]
  * apprt/gtk: convert surface to overlay so we can support the url overlay
  * apprt/gtk: style the overlay
  * macos: move OSC8 URL view to right if mouse is over it
  * core: show URL even for non-OSC8 hyperlnks
  * apprt/gtk: move url hover bar when its under the mouse
  * apprt/gtk: forgot to remove debug code to hide overlay
  * apprt/gtk: add deinit for url widget
  * apprt/gtk: add all event handlers to the overlay so both receive
  * apprt/gtk: committed the forever status bar again
  * core: when mouse reporting, clear link state
  * macOS select output is cmd+tripleclick not control anymore

  [ Qwerasd ]
  * RefCountedSet: add some missing context delete callbacks
  * Disable mouse scroll logging since it floods logs when trackpad scrolling
  * BitmapAllocator: slightly improve findFreeChunks mask calculation
  * terminal/page: add methods to get hyperlink and grapheme map capacities
  * terminal/page: use addWithIdContext when cloning hyperlink data
  * terminal: spacer heads and tails should be codepoint 0, not ' '
  * terminal/Screen: fix trailing blank cell handling for wrapped rows in dumpString
  * terminal/PageList: add method for logging debug diagrams
  * terminal/PageList: fix some incorrect test expectations
  * terminal/PageList: rework reflow logic to fix issues

  [ Anton Kastritskii ]
  * docs: fix typo

  [ Jon Parise ]
  * cli: boolean value support for packed structs
  * config: document true/false for shell-integration-features

  [ Mitchell Hashimoto ]
  * terminal: remove errdefer deleted call for refcountedset
  * macos: limit URL preview to a single line, ellipses in middle
  * macos: left hover needs to be higher Z so it takes mouse priority
  * apprt/gtk: ellipsize URLs in middle to show end

  [ Gregory Anders ]
  * macos: add split menu items to context menu

  [ Tim Culverhouse ]
  * gtk: implement unfocused-split opacity and fill
  * gtk: prevent CSS collision on notebook stack
  * gtk: improve readability of runtime css fmt
  * gtk: use GtkDrawingArea to dim unfocused split
  * gtk: remove unused css class on GtkNotebook
  * gtk: add unfocused_widget when split created from menu

  [ Alexey Shekhirin ]
  * docs(surface): `keyCallback` return value is self-descriptive

  [ Kainoa Kanter ]
  * docs: AUR package

  [ Mitchell Hashimoto ]
  * terminal: DCS parses params correctly
  * terminal: test DCS to make sure we don't regress
  * terminal: dcs put can return a command
  * terminal: all DCS events can produce a command
  * terminal: boilerplate for tmux control mode parsing
  * terminal: tmux enter/exit
  * terminal: dcs state cleanup in deinit
  * terminal: tmux parsing handles begin/end blocks
  * terminal: move tmux control mode parsing out to dedicated file
  * terminal/tmux: parse session-changed notification
  * terminal/tmux: many more notifications
  * terminal/tmux: block output notifications
  * termio: rename Exec to Termio throughout
  * termio: wip but it builds
  * termio: remove data field
  * termio: changeConfig on reader data
  * termio: move stream handler to dedicated file, remove dep on EventData
  * termio: queueWrite no longer uses EventData
  * termio: cleanup more state
  * termio: move subprocess out to its own file
  * termio: delete old impl
  * termio: fix up rebase
  * termio: rename
  * termio: move all subprocess logic to termio.Exec
  * termio: remove more unused things
  * termio: ReadData doesn't need a loop
  * termio: Thread doesn't need to hold termio pointer
  * termio: writer abstraction
  * termio: remove a ton of state
  * termio: writer needs a mut pointer
  * termio: excessive cursor reset
  * termio: ReadData is gone!
  * termio: fix windows build
  * termio: more windows fixes
  * termio: more windows fixes
  * termio: trying to get Exec to not have access to full Opts
  * termio: take reader as option
  * termio: remove more state
  * termio: reader => backend
  * termio: writer => mailbox
  * termio: update docs
  * termio: get rid of manual backend
  * remove unused derived config values
  * termio: remove unused data
  * apprt/gtk: toggle_window_decorations keybinding

  [ karei ]
  * gtk: fix terminal inspector menu button

  [ Mitchell Hashimoto ]
  * simd: add base64 functions from simdutf
  * terminal/kitty: change graphics base64 decode to use simdutf

  [ Remi Gelinas ]
  * feat(cli): add initial validate-config action

  [ Mitchell Hashimoto ]
  * terminal: implement in-band size reports (Mode 2048)
  * config: `-e` CLI flag automatically implies `gtk-single-instance=false`
  * config: font-family CLI flags will clear font families set in files

  [ Remi Gelinas ]
  * refactor: move config file loading into loadFile

  [ omar ]
  * fix: remove dollar sign from code snippets

  [ Remi Gelinas ]
  * fix: handle relative paths in CLI
  * feat: print every config error message
  * fix: handle recursive config files

  [ Jon Parise ]
  * terminal: test clearPrompt with a continuation
  * terminal: differentiate OSC 133 continuation and secondary kinds
  * editorconfig: indent styles for shell scripts
  * bash: always send "end of command" prompt sequence

  [ Remi Gelinas ]
  * docs: add docstrings

  [ Chris Marchesi ]
  * apprt/gtk: set mouse shape on GL area widget instead of overlay

  [ Qwerasd ]
  * shaper/coretext: reset font cache on grid change

  [ Łukasz Niemier ]
  * fix: instead of overriding MANPATHs set by OS, append to them

  [ Mitchell Hashimoto ]
  * tweaks
  * shaper/coretext: use pointer address for cache comparison

  [ Jon Parise ]
  * bash: add primary and secondary marks to PS1 and PS2

  [ Cameron Dart ]
  * feat: keybinds for text selection on copy mode

  [ Mitchell Hashimoto ]
  * rename to expand_selection
  * adjust selection

  [ karei ]
  * core: support opening scrollback file in default text editor
  * apprt/gtk: add menu button for opening scrollback file
  * macos: add button and menu item for opening scrollback file

  [ Mitchell Hashimoto ]
  * Revert "apprt/gtk: add menu button for opening scrollback file"
  * Revert "macos: add button and menu item for opening scrollback file"
  * some bikeshedding
  * core: make the write scrollback file logic more generic
  * add write_selection_file
  * core: add binding to write screen to file

  [ Justin Su ]
  * Fix build on Xcode 16

  [ Mitchell Hashimoto ]
  * terminal: Pin.isBetween broken logic

  [ Justin Su ]
  * Fix some words
  * Add `adjust_selection` actions for `beginning_of_line` and `end_of_line`
  * Update comment
  * Relabel all tabs and clear labels for tabs with no key equivalent
  * Use 1-indexed values when dealing with tabs

  [ karei ]
  * apprt/gtk: implement context menu
  * apprt/gtk: disable copy in context menu while without selection

  [ Remi Gelinas ]
  * feat: add absolute path assertion
  * docs: specify path must be absolute

  [ Mitchell Hashimoto ]
  * font: fontconfig always prefer monospace in pattern
  * macos: comment on clearing tab

  [ multifred ]
  * Fix multiple deprecated names for zig lib/std

  [ Justin Su ]
  * Add unit tests

  [ Tim Culverhouse ]
  * inspector: fix mode prefix by prepending '?' only to private modes

  [ Gregory Anders ]
  * config: add cursor-invert-fg-bg option

  [ Jon Parise ]
  * bash: ghostty doesn't support OSC 133;P

  [ Mitchell Hashimoto ]
  * config: clarify reload font-size behavior
  * some tweaks
  * apprt/gtk: get rid of forcing context menu for now
  * apprt/gtk: some stylistic changes

  [ karei ]
  * apprt/gtk: don't dim surface when opening context menu

  [ Gregory Anders ]
  * renderer/opengl: implement cursor-invert-fg-bg

  [ Mitchell Hashimoto ]
  * renderer/metal: fix custom shader animations with display link
  * terminal: page clone handles case where hyperlink can't dupe
  * renderer/metal: zig fmt
  * terminal: printing over a cell with the same hyperlink keeps flag

  [ Edmund Miller ]
  * zsh: Generalize shebang

  [ Qwerasd ]
  * renderer/metal: use swap chain for custom shader passes

  [ Mitchell Hashimoto ]
  * terminal: isBetween needs to fall through for matching y on top page
  * terminal/kitty: add graphics diacritics file
  * terminal/kitty: placements support location enum (only pin for now)
  * terminal/kitty: add virtual placeholders placements
  * renderer: skip virtual placements
  * terminal: cell returns empty for Kitty placeholder
  * terminal/kitty: parse relative placement fields
  * terminal/kitty: diacritic small tests
  * terminal/kitty: rename diacritics to unicode
  * terminal: print must use codepoint() now to work with placeholders
  * terminal/kitty: starting virtual placement iterator
  * temrinal/kitty: really basic row/col diacritic decoding
  * terminal/kitty: parse image/placement id from style
  * terminal/kitty: implement high bit image id parsing
  * terminal/kitty: preparing to build runs of placements
  * terminal/kitty: working runs
  * terminal/kitty: extra placement tests
  * terminal: introduce row bit for kitty virtual placeholders
  * terminal/kitty: support cells with no diacritics
  * renderer/metal: extract out some image placement logic
  * renderer/metal: virtual placements are kind of rendering
  * renderer/metal: calculate proper grid offsets for image
  * terminal: appendGrapheme should text for codepoint, not text

  [ Justin Su ]
  * Update docs for `window-padding-x/y`

  [ Mitchell Hashimoto ]
  * adjust_selection keybind should not be consumed if no selection
  * terminal: cursorChangePin needs to migrate hyperlink state

  [ Justin Su ]
  * Use `Surface.hasSelection()`

  [ Mitchell Hashimoto ]
  * renderer/metal: rewrite kitty placeholder handling

  [ Jeffrey C. Ollie ]
  * Additions to GTK context menu

  [ Mitchell Hashimoto ]
  * terminal/kitty: working on moving placement math here for testing
  * terminal/kitty: switch to new placement math
  * renderer/metal: address some todos
  * terminal/kitty: unit tests for unicode placements
  * terminal: hasText no longer special cases kitty placeholders
  * terminal/kitty: handle width-stretched
  * terminal/kitty: do not render blank virtual placement cells
  * terminal/kitty: adjust middle rows for image offsets
  * terminal/kitty: handle case where both offsets are in one grid cell
  * renderer/opengl: unicode placeholder support
  * terminal/kitty: delete all images ignores virtual placements

  [ bri ]
  * its → it's

  [ Mitchell Hashimoto ]
  * terminal: reflow tests for kitty virtual placeholder flag
  * terminal: more tests

  [ dependabot[bot] ]
  * build(deps): bump namespacelabs/nscloud-cache-action from 1.1.5 to 1.1.6
  * update comments
  * config: introduce config-default-files to skip loading default files
  * core: avoid mouse report when mods change without mouse event

  [ Jeffrey C. Ollie ]
  * gtk: allow running in the background

  [ Mitchell Hashimoto ]
  * apprt/gtk: ignore mouse movement if no actual movement occurs

  [ Jeffrey C. Ollie ]
  * make quit-after-last-window-closed-delay an optional

  [ Mitchell Hashimoto ]
  * core: surface needs to free link regex on config reload
  * update libxev
  * nix: update hash
  * update libxev to fix mach port leakage
  * nix: update hash

  [ Jeffrey C. Ollie ]
  * Improve quit timers.

  [ Mitchell Hashimoto ]
  * reset only
  * macos: add "Reset Terminal" context menu option

  [ Jeffrey C. Ollie ]
  * Add +list-actions CLI action to list keybind actions.
  * fix typo

  [ Mitchell Hashimoto ]
  * comment

  [ Jeffrey C. Ollie ]
  * re-use code to cancel old timer
  * make Duration units a struct field to reduce duplication and enable table-driven unit tests
  * fix off-by-one error
  * add a standard zig formatter to Duration and more testing
  * add a warning if quit delay too short
  * document behavior when no initial window is created and a quit delay is set

  [ Mitchell Hashimoto ]
  * config: duration prevents overflow, added tests
  * config: clarify comment
  * apprt/gtk: use tagged union for quit timer

  [ Jeffrey C. Ollie ]
  * Implement asymmetric window padding.

  [ Mitchell Hashimoto ]
  * terminal: eraseDisplay should allow kitty erase through
  * renderer/metal: extend background color of grid border into padding
  * renderer/metal: handle top/left
  * config: add window-padding-color
  * renderer/opengl: support window-padding-color=extend
  * renderer/metal: font grid change should run all screen size logic
  * renderer/metal: can access grid metrics directly on font grid
  * Revert "renderer/metal: can access grid metrics directly on font grid"
  * renderer: disable window-padding-color=extend in certain scenarios
  * config: typo in window-padding-color docs
  * change window padding color to background by default

  [ Jeffrey C. Ollie ]
  * Fix quit-after-last-window-closed=true, quit-after-last-window-closed-delay=null

  [ Mitchell Hashimoto ]
  * apprt/gtk: can manually expire our quit timer instead of 0 second timer

  [ Łukasz Niemier ]
  * chore: clean up typos

  [ Nihaal Sangha ]
  * Use standard GitHub Actions committer info
  * Document not every font-family needs to be set

  [ Mitchell Hashimoto ]
  * config: update docs
  * config: window-padding-x/y take two values for uneven padding

  [ Eleanor Bartle ]
  * Remove Erroneous Config Note

  [ Leah Amelia Chen ]
  * renderer: exempt Powerline cells from minimum contrast requirements

  [ Paul ]
  * gtk: One's complement the opacity of overlay for unfocused splits

  [ Mitchell Hashimoto ]
  * comment
  * renderer/opengl: comptime assertion to verify

  [ Tim Culverhouse ]
  * cli/list-keybinds: add pretty printing

  [ Mitchell Hashimoto ]
  * renderer/metal: powerline enum value used wrong value

  [ Tim Culverhouse ]
  * cli/list-keybinds: prevent ios, tvos, and watchos from pretty printing

  [ Mitchell Hashimoto ]
  * renderer/metal: fix warnings compiling metal shader

  [ Tim Culverhouse ]
  * cli/list-keybinds: restore terminal after exit
  * cli/list-keybinds: set vaxis measurement state
  * cli/list-keybinds: set default winsize for windows

  [ karei ]
  * cli/list-keybinds: align actions at the same column

  [ Mitchell Hashimoto ]
  * cli: note --plain
  * nix: update hash
  * cli/list-keybinds: fix windows build
  * renderer/metal: load shaders from precompiled lib
  * build: build metal lib
  * build: build proper metallib for iOS builds

  [ Jeffrey C. Ollie ]
  * Implement the XTWINOPS (CSI t) control sequences that "make sense".
  * fix url

  [ x123 ]
  * fix: vaxis recursive deps issue

  [ Qwerasd ]
  * renderer: metal shaders rework
  * fix tests
  * fix: use single triangle for metal post shader vertex
  * renderer/Metal: remove extraneous len arg from drawCellBgs

  [ hanna ]
  * update iterm2-color-schemes to latest commit
  * update the zig cache hash for nix

  [ Jeffrey C. Ollie ]
  * kitty graphics: add support for shared memory transfer medium

  [ Mitchell Hashimoto ]
  * terminal/kitty: minor stylistic changes to shm

  [ Qwerasd ]
  * renderer/metal: properly support padding color = background (not extend)
  * renderer/metal: use memset to clear bg cell rows
  * comment
  * remove superfluous slicing syntax
  * fix: promote dimensions to usize so cell_count doesn't overflow
  * fix: add `Contents.bgCell` to avoid accidentally indexing with undersized ints

  [ Mitchell Hashimoto ]
  * renderer/opengl: reset screen uniforms on font change
  * metal: cell bg pipeline no longer has vertex data, needs no vertex desc
  * terminal/kitty: shared memory size may be larger than expected for pages

  [ Jeffrey C. Ollie ]
  * gtk: add resize overlay

  [ Mitchell Hashimoto ]
  * do not extend background for window-padding-color if powerline
  * config: clarify padding color default
  * config: add window-padding-color=extend-always to force always
  * renderer: remove alt-screen extend-always
  * config: make window-padding-color=extend default again
  * stylistic nitpicks
  * apprt/embedded: store title directly instead of get_title cb

  [ Jeffrey C. Ollie ]
  * resize-overlay: change default and delay → duration
  * resize overlay: move all resize overlay code and data into a struct
  * move resize overlay code to a new file to keep the file size down

  [ Mitchell Hashimoto ]
  * config: quit-after-last-window-closed should be true on Linux

  [ cryptocode ]
  * Improve resize performance by switching to AutoArrayHashMapUnmanaged

  [ Mitchell Hashimoto ]
  * apprt/gtk: small style tweaks for resize overlay
  * macos: implement resize overlay
  * macos: use dedicated overlay view for resize overlay
  * renderer: fix underflow possibility in padding calculation
  * macos: truncate tail of resize view
  * macos: add iOS field necessary

  [ Jeffrey C. Ollie ]
  * gtk: resize overlay improvements

  [ Mitchell Hashimoto ]
  * macos: pause resize overlay until 500ms passes
  * macos: avoid showing overlay if gained focus recently
  * ios: add focusInstant field to surface

  [ Christian Kugler ]
  * Add Config Option to Limit Number of Processes

  [ Mitchell Hashimoto ]
  * font: add test for fl lig
  * font/shaper: split text runs on common bad ligature pairs

  [ Qwerasd ]
  * spelling: normalize grey -> gray

  [ Mitchell Hashimoto ]
  * os: unify memory/processes cgroup limiting func
  * font: remove broken test (on purpose) due to improvements in shaping

  [ Tim Culverhouse ]
  * fix(surface): account for padding in mouse pixel reports

  [ Gregory Anders ]
  * config: fix typo

  [ Jeffrey C. Ollie ]
  * gtk: prettify the url overlays

  [ Qwerasd ]
  * fix: prevent flicker while shrinking screen by eliminating thread race
  * renderer: don't update frame if renderer grid size != terminal size
  * termio: wake renderer outside of critical area in resize
  * macos/opengl: lock context while rendering to stop resize crashes

  [ Łukasz Niemier ]
  * chore: add mailmap to unify duplicated authors

  [ Qwerasd ]
  * fix(renderer/Metal): bail out of drawFrame if we haven't sized screen yet
  * RefCountedSet: use usize for living count to avoid overflow

  [ Mitchell Hashimoto ]
  * renderer/opengl: add comment explaning ogl lock on darwin

  [ Qwerasd ]
  * test(terminal/Screen): add failing unit test for cursorCopy
  * fix(terminal): proper style cleanup in `cursorCopy`
  * kitty graphics: support loading 1 channel grayscale images

  [ Uzair Aftab ]
  * docs: Update how to vouch for friends in README_TESTERS.md

  [ Mitchell Hashimoto ]
  * input: yeet usingnamespace
  * apprt: yeet usingnamespace
  * terminal: yeet usingnamespace
  * termio: yeet usingns
  * pty: remove usingns
  * renderer: yeet usingns
  * font: yeet usingns
  * config: yeet usingns
  * os: start yeeting

  [ Eduardo Dominguez ]
  * Config: cursor-style can bet set to block_hollow

  [ Mitchell Hashimoto ]
  * os: yeet usingns
  * lots more yeeting
  * almost yeeted it all!
  * move global state to dedicated file
  * apprt/gtk: remove usingnamespace
  * apprt/embedded: fix usingnamespace usage
  * pkg/opengl: yeet usingns
  * pkg/oni: yeet usingnamespace
  * pkg/freetype: remove usingns
  * pkg/glslang: yeet usingns
  * pkg/harfbuzz: fix c.zig
  * pkg/pixman: remove usingns
  * pkg/utf8proc: yeet usingns
  * pkg/macos: foundation yeet usingns
  * pkg/macos: animation yeet usingns
  * pkg/macos: graphics usingns yeet
  * pkg/macos: more
  * pkg/macos: yeet more usingns
  * pkg: yeet more usingns
  * apprt/gtk: fix imgui calls
  * pkg/fontconfig: yeet usingns
  * pkg/harfbuzz: yeet usingns

  [ Jeffrey C. Ollie ]
  * Implement Kitty Color Protocol (OSC 21)

  [ Mitchell Hashimoto ]
  * terminal: index from bottom row of scroll region always makes scrollback

  [ Jeffrey C. Ollie ]
  * fix test error and improve error logging

  [ Mitchell Hashimoto ]
  * terminal: add more tests for index, verified that l/r margin handling is good
  * terminal: add Screen.cursorScrollAbove and tests
  * terminal: call new method for scroll operation
  * terminal: only call new method
  * terminal: cursorScrollAbove handles case of no new page, prev page
  * terminal: handle case grow allocates but cursor is multiple pages back
  * renderer: use fg as extension color for covering glyphs (U+2588)
  * Minor changes, mainly commenting to clarify some behaviors
  * readme: clarify that comments are only allowed on a dedicated line

  [ Jeffrey C. Ollie ]
  * themes: allow loading from absolute paths and from user config dir
  * themes: add a switch that shows a small preview of each theme

  [ Mitchell Hashimoto ]
  * config: move theme loading to dedicated file
  * config: use else to catch all errors since there are many

  [ Jeffrey C. Ollie ]
  * themes: finish refactor
  * themes: fix comment
  * themes: don't use arena directly and cleanup debug code

  [ Mitchell Hashimoto ]
  * config: remove unused types and function
  * Fix broken import from rebase
  * config: fix build on iOS for error set
  * typos
  * input: Trigger.parse
  * input: SequenceIterator to parse sequences of triggers
  * input: binding parser of sequences
  * input: add Set.parseAndPut
  * input: converting set entries to Entry from Action
  * input: binding.set can parse sequences... lots TODO
  * input: more parseAndPut tests
  * input: unwind properly on unbind
  * input: remove todo
  * fix compilation but logic broken
  * input: binding set needs to clean up leader memory on manual put
  * input: Binding.Set.clone handles leaders
  * config: support equality checking keybinds with sequences
  * core: log when we see a leader
  * config: write the docs now for sequences
  * input: remove the old parse method for bindings
  * input: remove unused struct

  [ Jeffrey C. Ollie ]
  * Address review comments.

  [ Bruno Schaatsbergen ]
  * docs: add deps install
  * chore: rm `run`

  [ Mitchell Hashimoto ]
  * core: rework binding handling to prepare for nested binding sets
  * core: move key handling (w/o bindings) out to a separate func

  [ Eduardo Dominguez ]
  * macos: jump to last_tab

  [ Mitchell Hashimoto ]
  * core: release events should never trigger bindings
  * core: encodeKey should return a write request
  * core: enable key sequence handling, including dumping invalid
  * core: handle unconsumed key sequences
  * core: clear pending keyboard sequence when config reloads
  * core: centralize key sequence ending in one function
  * config: warn the hazards of '>' for sequences
  * font/coretext: font-thicken renders with additional padding on context

  [ Tim Culverhouse ]
  * cli(list-keybinds): format key sequences

  [ Mitchell Hashimoto ]
  * terminal: make kitty color tests a bit more readable
  * terminal: stylistic tweaks to kitty color protocol parsing
  * terminal: formatter for kitty color protocol kinds
  * termio: use new formatter, palette helper for kitty color protocol
  * termio: move renderer message sending out to separate func
  * terminal: move kitty color structs out to kitty package
  * typos

  [ Jeffrey C. Ollie ]
  * Clean up Kitty color protocol by using a union
  * Use `switch` and not `if` to format Kind

  [ pnodet ]
  * style(macos): cleanup trailing spaces

  [ Jeffrey C. Ollie ]
  * Make the `Kind` parsing simpler

  [ Mitchell Hashimoto ]
  * terminal: hyperlink state for cursor needs to be preserved on resize
  * renderer: do not extend padding color if any cell has default bg color
  * macos: do not open a window on reopen if terminal manager has any
  * config: note that styles that aren't found will use regular

  [ Jon Parise ]
  * editorconfig: add swift style

  [ Mitchell Hashimoto ]
  * font: support aliased entries in the font collection style table
  * font: Collection uses SegmentedList for styles for pointer stability
  * font: completeStyles
  * font/harfbuzz: work with new collection API
  * font: Collection can't use segmentedlist prealloc
  * font: use proper variation axes for non-default
  * font: if variation is set for a style and style isn't found, retry reg
  * typos
  * font: bold italic fallback has to avoid nested alias entry
  * font: rename auto-italicize to synthetic italic
  * font/coretext: support synthetic bold
  * font: synthesize bold italic
  * typos
  * small stylistic changes
  * pkg/macos: copyAttribute should return optional
  * font: support variations for coretext_freetype backend
  * apprt/embedded: use new copyAttribute API for CoreText
  * font/freetype: synthetic italic
  * font/freetype: synthetic bold
  * font/coretext: tweak synthetic bold amount to be slightly lighter
  * Clamp initial window size configurations to screen size
  * config: clarify window-width/height behavior

  [ Nihaal Sangha ]
  * Add space to `commentstring` in Vim plugin

  [ Mitchell Hashimoto ]
  * renderer/metal: cursor should be drawn on top of fg cells
  * config: remove the super+0 binding for last_tab
  * apprt: make gotoTab handle all tab movements
  * apprt/gtk: support last_tab
  * apprt/gtk: fix int cast
  * macos: remove unused gotolasttab
  * config: font-synthetic-style to enable/disable synthetic styles

  [ Qwerasd ]
  * terminal: move refcount responsibility out of setHyperlink
  * fix(terminal): don't MOVE hyperlinks in clonePartialRowFrom
  * fix(terminal): avoid trying to clone bad managed memory in reflow
  * test(Screen): add failing tests for `cursorCopy` hyperlink handling
  * Screen: update `cursorCopy` to handle hyperlink state
  * Terminal: release hyperlink before copying cursor when switching screen
  * PageList: refactor `clone` to avoid excess work
  * renderer: add `updateFrame` critical region timings for dev benchmark
  * this should be a doc comment

  [ Mitchell Hashimoto ]
  * Revert "Merge pull request #2153 from ghostty-org/metal-cursor"

  [ Justin Su ]
  * config: document left/right values for `macos-option-as-alt`

  [ cryptocode ]
  * Inspector: change color picker to use hex values

  [ Mitchell Hashimoto ]
  * terminal: cursorCopy has option to not copy hyperlink
  * terminal: tests for same page clone with hyperlinks

  [ Erlend Lind Madsen ]
  * avoid escape characters by using a multiline string

  [ Mitchell Hashimoto ]
  * macOS: save dSYM files
  * pkg/sentry: initial builds
  * pkg/sentry: add more Zig APIs
  * pkg/sentry: custom transports
  * initialize sentry on startup
  * pkg/sentry: fix Linux builds
  * build: always compile sentry
  * os: add xdg cache dir function
  * sentry init uses proper cache dir, sets tags
  * implement sentry transport to write crash reports to XDG_STATE_HOME
  * pkg/sentry: fix darwin lib builds
  * update nix hash
  * don't send empty envelopes
  * build: don't include sentry on windows
  * sentry: set tags after init
  * pkg/sentry: build in unwinder
  * add pkg/breakpad, configure sentry to use breakpad
  * nix: update cache
  * pkg/breakpad: add linux_syscall_support.h to the vendored files
  * build: include breakpad in static lib bundle for lib
  * macos: get updated surface size metrics immediately on resize
  * timers for start times for later
  * crash: sentry envelope parsing

  [ Qwerasd ]
  * RefCountedSet: make `lookup` public
  * terminal/page: discriminate cloneFrom errors
  * terminal: handle clonePartialRowFrom errors in insert/deleteLines

  [ Mitchell Hashimoto ]
  * build: build without Git, tag version as dev with 0 SHA
  * terminal: make error sets more explicit, capture explicit errors
  * cli/version: don't parse any args
  * move crash init to crash package
  * crash: discard envelopes that do not contain a crash
  * pkg/sentry: uuid string is null-terminated
  * crash: initialize sentry off-thread
  * pty: reset all signals after fork

  [ Jeffrey C. Ollie ]
  * Conditional compilation against different GTK versions
  * rename gtkVersionMinimum->gtkVersionAtLeast for consistency

  [ Mitchell Hashimoto ]
  * input: add crash binding action, remove key input crash
  * terminal: disable slow safety tests in releasesafe
  * ci: build releasesafe builds for macOS
  * ci: release-pr only on dispatch
  * macos: show debug build warning even with releasesafe for now
  * apprt/gtk: show debug warning whenever runtime safety is on

  [ Qwerasd ]
  * fix(terminal/PageList): update self.cols at start of resizeCols

  [ Mitchell Hashimoto ]
  * crash: add build mode to sentry tags
  * crash: try to attach dimensions to the crash report
  * renderer/termio attach thread local state for crash capture
  * terminal: do not run page integrity checks unless slow runtime safety

  [ Jeffrey C. Ollie ]
  * kitty graphics: fix usage of "m" key for local-only transmission mediums

  [ Justin Su ]
  * Don't run GitHub workflows on forks

  [ Mitchell Hashimoto ]
  * input: crash binding can configure which thread to crash
  * crash: beforeSend needs to add contexts to the event directly
  * crash: tag the thread type
  * update README about crashes
  * core: set crash state in surface in various places

  [ xdBronch ]
  * make +version hyperlink to the github commit

  [ Jeffrey C. Ollie ]
  * kitty graphics: performance enhancements
  * fix typos

  [ Mitchell Hashimoto ]
  * update zig cache hash

  [ Jeffrey C. Ollie ]
  * kitty graphics: address review comments
  * remove unnecessary @constCast

  [ Mitchell Hashimoto ]
  * pkg/wuffs: define build defines separately, not in defs.zig
  * some tweaks for wuffs
  * renderer/metal: use wuffs for format conversion
  * pkg/wuffs: fix builds for 32-bit systems
  * pkg/wuffs: use proper apple include paths on darwin targets
  * update README to warn about crash report env vars
  * update README again
  * kitty: ENOENT when image ID not found for placement
  * kitty: respond OK with metadata on display transmissions
  * kitty kbd: progressive enhancement `=` mode off by one
  * termio: set crash threadlocal data for exec reader thread
  * nix: remove ZLS
  * config: note that emoji font requires explicit override

  [ dependabot[bot] ]
  * build(deps): bump namespacelabs/nscloud-cache-action from 1.1.6 to 1.1.7
  * kitty gfx: handle `q` with chunked transmissions properly
  * apprt/gtk: do not remove unfocused widget from overlay

  [ Jeffrey C. Ollie ]
  * wuffs: fix blend mode

  [ Gregory Anders ]
  * termio: send initial focus reports

  [ Mitchell Hashimoto ]
  * Revert "Merge pull request #2060 from jcollie/gtk-compatibility"
  * terminal: add integrity check for unmarked grapheme cell
  * terminal: DECALN must use clearRows to clear protected memory
  * terminal: can't assert page integrity on screen
  * readme: update vouch help
  * update vouch instructions
  * terminal: do not reset OSC parser if its already empty

  [ Tristan Partin ]
  * gtk: silence bad accelerator warnings

  [ Mitchell Hashimoto ]
  * font/sprite: avoid invalid glyph if unsupported codepoint is attempted
  * crash: envelope encoder
  * crash: data model for encoded vs decoded items
  * crash: parse attachments from sentry envelope
  * typos

  [ Qwerasd ]
  * test(Terminal): test DCH wide char boundary conditions
  * test(Terminal): test ECH wide char boundary conditions
  * Terminal: fix ECH & DCH wide char boundary cond. behavior

  [ Mitchell Hashimoto ]
  * crash: envelope parsing handles multiple payloads with length properly

  [ Qwerasd ]
  * perf(terminal): specialize `splitCellBoundary` to cursor row

  [ Mitchell Hashimoto ]
  * terminal: fix uninitialized memory access when kitty color protocol
  * terminal: add test for wide character on right margin boundary

  [ Qwerasd ]
  * terminal: cursorResetWrap should not reset wrap_continuation
  * comment

  [ Mohammad H. AlShami ]
  * Add package names for Fedora variants
  * Fix copied mistake

  [ Mitchell Hashimoto ]
  * update README

  [ Leah Amelia Chen ]
  * README: document common issues on NixOS

  [ Tim Culverhouse ]
  * graphics: set default transmission format as .rgba

  [ Mitchell Hashimoto ]
  * prettier

  [ Jeffrey C. Ollie ]
  * fix: Surface.selectionString should return sentinel slice
  * feat: basic +crash-report cli action
  * remove unnecessary imports
  * update README

  [ Mitchell Hashimoto ]
  * crash: add directory listing, allocation free
  * cli/crash-report: make it simpler (uglier, honestly)

  [ hanna ]
  * refactor: attempted autoupdate configuration

  [ Mitchell Hashimoto ]
  * macos: start Sparkle after loading config
  * macos: update comment on why we don't start updater

  [ Paul ]
  * gtk: use adwaita tab view when possible
  * adw: move notebook to its own file

  [ Paul Berg ]
  * adw: respect gtk-wide-tabs
  * adw: implement next/previous
  * gtk: respect wide-tabs option
  * gtk: add devel class to window in debug builds
  * adw: update window title on selected page change

  [ Paul ]
  * gtk: adw toolbar view

  [ Paul Berg ]
  * gtk: add adwaita banner
  * adw: add support for gtk-tabs-location = bottom

  [ Jeffrey C. Ollie ]
  * delete unused vendor/fontconfig-2.14.0 directory

  [ Mitchell Hashimoto ]
  * apprt/gtk: move adw enabling and version checks into shared file
  * apprt/gtk: use adwaita helpers, move out some complicated logic
  * apprt/gtk: the comptimeEnabled check is redundant
  * apprt/gtk: scope comptime to only one
  * apprt/gtk: log the libadwaita version at startup if we use it
  * apprt/gtk: cleaup final notebook page on libadw 1.3.x
  * ci: test can be workflow dispatched
  * flake: update to Nixpkgs 24.05
  * prettier
  * flake: remove unnecessary unstable lib

  [ Paul ]
  * adw: add option to choose toolbar style
  * adw: show performance warning banner

  [ Mitchell Hashimoto ]
  * config: update docs, caps

  [ Max Guppy ]
  * Reapply "Merge pull request #1690 from TheOnlyMrCat/gtk_opacity"

  [ Mitchell Hashimoto ]
  * apprt/gtk: hide header bar when window decorations are disabled
  * apprt/gtk: inline adwaita checks so comptime disables conditional paths
  * build: support building without .git directory

  [ Tristan Partin ]
  * apprt/gtk: use AdwHeaderBar if available
  * apprt/gtk: use AdwAboutDialog if available

  [ Mitchell Hashimoto ]
  * apprt/gtk: use GtkWidget so there is a common ancestor

  [ Tristan Partin ]
  * apprt/gtk: use AdwTabOverview

  [ Mitchell Hashimoto ]
  * apprt/gtk: some tweaks, avoid uninitialized memory access, use optionals

  [ dependabot[bot] ]
  * build(deps): bump cachix/install-nix-action from V27 to 28

  [ Jeffrey C. Ollie ]
  * adw: allow creating new tabs in a tab overview with no open tabs

  [ Paul ]
  * apprt/gtk: add theme variant in window-theme

  [ Paul Berg ]
  * apprt/gtk: respect window-new-tab-position again
  * config: remove note that window-new-tab-position is gtk only
  * apprt/gtk: remove adw_tab_page from tab

  [ Jeffrey C. Ollie ]
  * gtk: prevent split separator from becoming transparent

  [ Paul Berg ]
  * apprt/gtk: make Notebook.create not depend on parent box

  [ Mitchell Hashimoto ]
  * apprt/gtk: style tweaks
  * config: copy

  [ Jeffrey C. Ollie ]
  * GTK: Fix clicking on desktop notifications

  [ Mitchell Hashimoto ]
  * pkg: add README and license
  * apprt/gtk: small comments
  * apprt/gtk: rename the other underscore actions to match naming rules
  * config: make window-padding-color default to "background"
  * config: "-e" implies quit after last window closed

  [ Gregory Anders ]
  * config: interpret leading ? in config-file as an optional file

  [ Paul Berg ]
  * gtk: prevent invalid call to adw_tab_view_get_page_position

  [ Tristan Partin ]
  * apprt/gtk: use toast UX from Adwaita if available

  [ Mitchell Hashimoto ]
  * apprt/gtk: tweaks
  * apprt/gtk: only setup the toast overlay if we have it enabled

  [ Tristan Partin ]
  * apprt/gtk: add notebook widget to the main box
  * apprt/gtk: use adwaita toasts regardless of gtk-titlebar
  * apprt/gtk: remove redundant adwaita check

  [ Mitchell Hashimoto ]
  * apprt/gtk: fix non-libadw builds
  * cli: config structure supports tagged unions

  [ Qwerasd ]
  * macos: fix various titlebar tabs problems in macOS 15.0

  [ Mitchell Hashimoto ]
  * terminal: avoid double free by resetting command to non-managed
  * README: note how to send crash reports to the project
  * config: fix regression for recursive config-files from 5ff0841ee65

  [ Gregory Anders ]
  * config: move optional path parsing into RepeatablePath

  [ Paul Berg ]
  * gtk: respect window-theme=ghostty when gtk-titlebar=false

  [ Mitchell Hashimoto ]
  * config: return OOM instead of NoSpaceLeft for Linux fmt
  * apprt/gtk: make focusCurrentTab safe to call at any time
  * apprt/gtk: refocus the current tab after adw tab overview closes
  * renderer/metal: fix compilation issues

  [ Paul Berg ]
  * adw: clear stored tab overview timer

  [ Mitchell Hashimoto ]
  * termio: poll termios for changes
  * termio: set pw input state on terminal and wake up renderer
  * renderer: render lock for password input
  * termio: stop the termios poller when not focused
  * termio: increase termios poller to 200ms
  * macos: right-click actions on surface should target surface under click
  * termio: always set termios timer running bool to true on focus
  * termio: typos
  * termio: use surface messages to trigger password input state

  [ Yi Ming ]
  * adw: disable all of the default shortcuts
  * refactor: remove the unnecessary `./` in imports

  [ Mitchell Hashimoto ]
  * pkg/macos: expose carbon API
  * macos: secure input manager, global option in app
  * core: add toggle_secure_input keybinding
  * macos: show secure input overlay when it is enabled
  * macos: enable secure input on password input
  * macos: fix deployment target back to 12.0
  * ios: disable secure input
  * macos: copy changes
  * config: config to disable auto secure input and secure input overlay

  [ Severus ]
  * Fix 2271 issue

  [ Mitchell Hashimoto ]
  * macos: persist secure input state across restarts
  * macos: copy
  * macos: rename overlay config to indication

  [ Severus ]
  * Fix typo

  [ Mitchell Hashimoto ]
  * apprt/gtk: add version helpers

  [ FineFindus ]
  * termio: correct comment about windows support

  [ Mitchell Hashimoto ]
  * macos: show clickable mouse pointer when hovering over secure input
  * ci: use xcode 16

  [ Qwerasd ]
  * macOS: add `macos-titlebar-style = hidden`
  * mention `macos-titlebar-style = hidden` in `window-decoration` docs

  [ Mitchell Hashimoto ]
  * termio: killpg expected to fail on darwin, still go into waitpid loop
  * macos: remove nstitlecontainerview hidden
  * macos: DraggableWindowView helper (unused currently)
  * macos: EventSinkHostingView must not override mouse events
  * macos: remove EventSinkHostingView
  * macos: use macOS 15 pointerVisibility to show/hide cursor
  * macos: pointer style uses macOS 15 helpers
  * macos: use pointerStyle for SplitView Divider

  [ Khang Nguyen Duy ]
  * fix(terminal/PageList): ensure enough pages before first page reuse

  [ Mitchell Hashimoto ]
  * macos: unhide cursor on clipboard confirmation
  * typos
  * config: note that mouse hide while typing on macos requires 15+
  * macos: fix non-AppKit builds
  * apprt/macos,gtk: unfocused splits now highlight hovered links
  * terminal: test for scenario where grow() has to prune with a single page
  * terminal: clarify comment
  * macos: cannot call mouseEntered/Exited with blank NSEvent
  * macos: enable dead code stripping
  * crash/minidump: header parsing
  * crash/minidump: read the streams from the minidump file
  * crash/minidump: split out into multiple files
  * crash/minidump: reader that streams data from a source
  * crash/minidump: StreamReader
  * crash/minidump: streamIterator
  * crash/minidump: typos
  * crash/minidump: working on rich stream type decoding, ThreadList
  * crash/minidump: handle padding in the ThreadList stream
  * crash/minidump: locationReader to read locations in a minidump

  [ Paul Berg ]
  * apprt/gtk: set tabs reorderable/detachable on GtkNotebook

  [ Jeffrey C. Ollie ]
  * gtk/adw: conditional tab keybindings

  [ Mitchell Hashimoto ]
  * update libxev

  [ Jeffrey C. Ollie ]
  * gtk/adw: perform version check at both comptime and runtime

  [ Mitchell Hashimoto ]
  * input: parse global keys, document them
  * input: move flags to a packed struct
  * input: global/all bindings can't be sequenced

  [ Tristan Partin ]
  * apprt/gtk: override the top bar colors in libadwaita correctly

  [ Qwerasd ]
  * macOS: prevent ctrl-return key equivalent
  * font/sprite: fix 1px gap at right edge of dotted and dashed underlines
  * font/sprite: rework underline rendering, adjust positioning
  * renderer: draw underlines below text to improve legibility
  * renderer/OpenGL: use better logic for whether to render glyph
  * coretext: improve strikethrough position calculation
  * freetype: improve strikethrough position guess by using ex height

  [ Mitchell Hashimoto ]
  * core: handle app bindings in the App struct

  [ Qwerasd ]
  * font/sprite: reduce uneven gaps in dotted underline

  [ Mitchell Hashimoto ]
  * core: "all" bindings work
  * input: fix tests
  * apprt/embedded: API for checking if there are global keybinds

  [ Qwerasd ]
  * font: further improve ul/st position calculations
  * freetype: fix underline position calculation

  [ Paul ]
  * apprt/gtk: support window-theme != ghostty

  [ Mitchell Hashimoto ]
  * Tap events, core API to handle global keybinds
  * macos: better enable timing depending on process launch time
  * typos
  * config: clarify docs
  * apprt/embedded: new_window can be called without a parent
  * small comment changes

  [ Chris Marchesi ]
  * terminal/kitty: increase value buffer, make 'H' and 'V' i32

  [ Qwerasd ]
  * correct diagram/description (+Y is down not up)
  * font/sprite: correct underline placement calculation
  * font: remove fudge factors in ul and st position calculations

  [ Mitchell Hashimoto ]
  * apprt: begin transition to making actions an enum and not use hasDecl

  [ Qwerasd ]
  * freetype: update expected ul pos in tests to account for removed fudge factor

  [ Mitchell Hashimoto ]
  * apprt: transition all hasDecls in App.zig to use the new action dispatch
  * apprt/embedded: support new performAction API
  * core: move password input into action enum
  * core: no need for hasTabs apprt function
  * core: more actions
  * core: many more actions
  * core: more actions
  * apprt/gtk
  * core: remove more hasdecls
  * apprt/gtk: handle zero value notification pointers

  [ Jeffrey C. Ollie ]
  * nix: fix up zig hook in package.nix

  [ dependabot[bot] ]
  * build(deps): bump namespacelabs/nscloud-cache-action from 1.1.7 to 1.1.8

  [ dependabot[bot] ]
  * build(deps): bump cachix/install-nix-action from V28 to 29

  [ Mitchell Hashimoto ]
  * libghostty: unified action dispatch

  [ Paul Berg ]
  * apprt/gtk: fix build with -Dgtk-libadwaita=false
  * apprt/gtk: remove Window.hasAdwToolbar
  * apprt/gtk: store tab_overview in Window struct
  * bind: add toggle_tab_overview binding

  [ Mitchell Hashimoto ]
  * apprt/embedded: add the tab overview to the enum
  * macos: add unhandled action
  * Forward std_options from entrypoint in main.zig

  [ Jeffrey C. Ollie ]
  * cli: "fancy" theme preview
  * cli: list-themes should list symlinks
  * cli: update +list-themes --help text
  * cli/list-themes: add ability to search theme names

  [ Mitchell Hashimoto ]
  * typos: ignore lorem
  * macos: fix previous/next tab bindings, improve action logging
  * core: fix invalid action call that wasn't setting our metrics properly

  [ Jeffrey C. Ollie ]
  * nix: work around ziglang/zig#20976 and fix nix package builds

  [ Mitchell Hashimoto ]
  * core: only extend selection on mouse if click interval is exceeded

  [ Jeffrey C. Ollie ]
  * nix: don't require the ZIG_LOCAL_CACHE_DIR to be set

  [ Mitchell Hashimoto ]
  * apprt/gtk: set null url if url is empty
  * macos: start work on SlideTerminal, slides in window from top
  * macos: render a terminal in the slide window
  * macos: make sliding logic a bit more extensible
  * macos: restrict resizing based on sliding terminal position
  * core: slide terminal keybinding action
  * macos: when sliding out the terminal, cycle focus
  * core: fix up toggle_slide_terminal action for rebase
  * macos: hook up the action for the slide terminal

  [ Jeffrey C. Ollie ]
  * nix: move fetch-zig-cache script into nix/build-support

  [ Tim Culverhouse ]
  * sgr: add support for legacy double underline

  [ Jeffrey C. Ollie ]
  * nix: remove tracy from the devshell
  * cli: fix integer overflow in `+list-themes` if window is too narrow

  [ Mitchell Hashimoto ]
  * macos: base class for terminal controller
  * macos: slide terminal exit and close window don't kill the window

  [ Jeffrey C. Ollie ]
  * nix: remove tracy from flake.nix

  [ Mitchell Hashimoto ]
  * macos: set initial terminal dimensions
  * rename slide to quick terminal
  * macos: ability to interrupt animation, track it in menu

  [ Jeffrey C. Ollie ]
  * nix: use stdenv from unstable to build the package

  [ Mitchell Hashimoto ]
  * config: support quick terminal position
  * macos: show alert if new tab is attempted from quick term
  * input: note fullscreen isn't supported by quick terminal
  * macos: if initializing new surface tree, move focus to it
  * macos: make quick terminal animation 0.2 instead of 0.3
  * macos: only define quick terminal configs for AppKit
  * macos: handle multiple monitors properly

  [ Christian Kugler ]
  * Use helper function to set correct env variables

  [ Mitchell Hashimoto ]
  * macos: quick terminal always brings Ghostty to the front
  * font/sprite: bounds checking for pixel writes on Pixman
  * font/sprite: fix out of bounds right on curly underline
  * macos: ensure quick terminal becomes key and focused after animation in
  * macos: quick terminal close focuses next window on same screen/space
  * macos: use orderOut which handles all of our focus logic for us
  * macos: quick terminal restores focus to previous application
  * macos: use a different bundle identifier for debug builds
  * macos: new FullscreenMode/Style architecture for fullscreen impls

  [ Paul Berg ]
  * cli: handle mouse scroll before setting window

  [ Mitchell Hashimoto ]
  * macos: new fullscreen implementation
  * macos: fullscreen=true with non-native fullscreen works
  * macos: fullscreen mode can be changed at runtime
  * macos: only get fullscreen mode on AppKit
  * macos: non-native fs sets frame async to account for style changes
  * macos: handle non-native fullscreen changing screens
  * macos: only hide dock on the screen with the dock
  * macos: only exit on screen change if the screen really changed
  * macos: exit native fullscreen if we try to enter non-native
  * macos: clarify comments, clean up notifications for fullscreen

  [ Tim Culverhouse ]
  * fix(list-keybinds): reset SGR after pretty printing

  [ Mitchell Hashimoto ]
  * ci: only run macos build matrix on main or demand
  * ci: fix invalid dependency on test
  * macos: quick terminal app activation tweaks to avoid bringing up other windows
  * ci: re-enable the build matrix, not happy with this yet
  * macos: quick terminal supports fullscreen
  * macos: apply background opacity to quick terminal
  * Change copy-on-select behavior to be more idiomatic for Linux

  [ Roland Peelen ]
  * Add action on Zig side
  * Add hiding toggle, hook up to menu / shortcut
  * Fix typo
  * Refactor to hide only BaseTerminalController windows
  * Review Feedback - formatting / docs

  [ Mitchell Hashimoto ]
  * docs updates

  [ Qwerasd ]
  * fix(renderer): use 1-wide ul/st chars, ignore null shaper cells
  * fix(renderer): make all decorations and combining marks visible under cursor

  [ Mitchell Hashimoto ]
  * font: add stylistic variants for built-in font, fix naming convention
  * renderer: some tweaks
  * Mouse movement events are sent with shift until a button is pressed

  [ dependabot[bot] ]
  * build(deps): bump namespacelabs/nscloud-cache-action from 1.1.8 to 1.2.0
  * fix xtshiftescape docs

  [ Jon Parise ]
  * config: update project URL

  [ theprimeagen ]
  * fix: scrolling with fraction produces different lines count due to @floor vs @trunc (-1 vs 1)

  [ Lucy Davinhart ]
  * Implements initial-window=false for macOS

  [ dependabot[bot] ]
  * build(deps): bump cachix/install-nix-action from 29 to 30

  [ Mitchell Hashimoto ]
  * macos: move show/hide all terminal windows
  * renderer: fg/bg/cursor change must mark the screen as dirty
  * macos: toggle_visibility needs to sync to the correct menu item
  * macos: non-native fs keeps track of screen number for change screen comp
  * Bind ctrl+tab and ctrl+shift+tab by default
  * Make the function/globe key available as a modifier on macOS
  * macos: forward key events to the app when no windows exist
  * config: more caveats for fn
  * cli/list-keybinds: output function modifier
  * macos: use local event listener to propagate modifier changes to all
  * core: refresh hyperlink state without hacky cursorPosCallback

  [ Qwerasd ]
  * font/sprite: fix undercurl rendering
  * font/sprite: improve double underline legibility with min 2px gap
  * fix(font/sprite): avoid underflow
  * font/sprite: use offset curve approximation for undercurl

  [ Mitchell Hashimoto ]
  * core: ghostty_app_key only handles global keybinds for now
  * core: add app focused state, make App.keyEvent focus aware
  * apprt/embedded: add ghostty_app_set_focus
  * macos: set the proper app focus state
  * apprt/gtk: report proper app focus state
  * core: negative x/y for cursor position indicates mouse exited viewport
  * macos: notify core of mouse exit
  * gtk: notify core of cursor leave
  * macos: global keybind event tap only handles events when app is inactive
  * input: function is part of the binding mods
  * gtk: only set initial window size if its the first terminal in a window
  * apprt/gtk: setup window key event infrastructure
  * apprt/gtk: forward window key events to the focused surface
  * apprt/gtk: only run window key events with tab overview shown
  * macos: send mouse cursor position events for right mouse dragged
  * macos: remove the ability to bind fn/globe
  * macos: quick terminal window blur settings take effect properly

  [ Leah Amelia Chen ]
  * gtk: implement splitting leftwards and upwards

  [ Mitchell Hashimoto ]
  * macos: become aware of new split directions left and up

  [ Jeffrey C. Ollie ]
  * gtk: load css when libadwaita is not being used
  * gtk: fix window-theme=ghostty
  * gtk: add `adw` or `gtk` class to top level windows

  [ Mitchell Hashimoto ]
  * input: return a K/V entry for the binding set `get`

  [ Qwerasd ]
  * renderer, shaper: don't use null cells, handle bg and decorations separately
  * coretext: don't emit 0 codepoints for special fonts

  [ Mitchell Hashimoto ]
  * apprt: implement key_sequence action
  * macos: implement key sequence UI
  * core: modifier-only keys do not reset pending key sequences
  * macos: don't swallow flagsChanged events, breaks system bindings
  * core: support mouse button 6/7 for mouse reports

  [ Qwerasd ]
  * test(coretext): add test for high plane padding sprite font behavior
  * renderer: cleanup, reduce nesting, more comments
  * coretext: fix tests to account for removal of null cells
  * harfbuzz: fix tests to account for removal of null cells

  [ Lucy Davinhart || Strawb System ]
  * Include command to run a subset of tests in README

  [ Mitchell Hashimoto ]
  * build: use the native target for generic macos target by default
  * macos: change our minimum version to macOS 13
  * macos: retry focusing the quick terminal to handle focus on other screen
  * core: simplify scroll math, fix horizontal scroll direction on macOS
  * config: add accidentally removed keybinding
  * font/noop: conform to new run struct type

  [ Qwerasd ]
  * font/shaper: explicitly skip invisible cells while shaping

  [ Yi Ming ]
  * renderer: generalize the definition of "space"

  [ Mitchell Hashimoto ]
  * apprt/gtk: adw about dialog introduces in libadw 1.5.0

  [ isabel ]
  * refactor(nix): stdenv.isX -> stdenv.hostPlatform.isX

  [ Mitchell Hashimoto ]
  * input: make clear the open keybinding uses xdg-open

  [ Qwerasd ]
  * font/sprite(underline): add thickness correction to undercurl
  * font/sprite(underline): make undercurl segment symmetrical
  * font/Atlas: add dump method to dump to ppm
  * test(font/sprite): add regression test for box drawing sprites
  * font/sprite: refactor lines and fractional blocks, add ground truth for regression test
  * test(font/sprite): generate diff image on failed regression check
  * font/sprite: refactor box drawing quads/sextants
  * font/sprite: replace pixman with z2d, extend Box coverage
  * font/sprite(Box): refactor smooth mosaic rendering

  [ Jeffrey C. Ollie ]
  * gtk: use CSS variables and color calcs introduced in 4.16

  [ Mitchell Hashimoto ]
  * macos: NSProcessInfo-based arg iterator

  [ Qwerasd ]
  * test(font/sprite): add second size to box regression test
  * font/sprite: fix light arc character for odd thicknesses
  * font/sprite: fix weird code
  * font/sprite: address PR review feedback

  [ Mitchell Hashimoto ]
  * nix hash
  * font/sprite: clarify log
  * font: use explicit error sets where we can
  * build: strip symbols from release builds
  * update file sizes in README.md

  [ Qwerasd ]
  * macOS: fix quicklook position

  [ Jeffrey C. Ollie ]
  * cli: add GTK & libadwaita version info

  [ Mitchell Hashimoto ]
  * apprt/gtk: use stackfallback for runtime CSS, explicit errors

  [ Rick Calixte ]
  * list_fonts and list_keybinds: Fix typos in documentation

  [ Justin Su ]
  * Fix "external affects" typo in documentation

  [ Qwerasd ]
  * font/sprite: undercurl minimum thickness improvement

  [ Mitchell Hashimoto ]
  * expand explicit error set usage
  * config: richer diagnostics for errors
  * config: show filepath and line numbers for config errors
  * config: track the location of CLI argument errors
  * c: remove the config load string API
  * apprt/gtk: support new config diagnostics API
  * cli: positional arguments are invalid when parsing configuration
  * apprt/glfw: exit with invalid CLI args
  * apprt/gtk: exit if there are CLI errors
  * cli: skip argv0 and actions when parsing CLI flags
  * config: change macos-option-as-alt default to left

  [ Tim Culverhouse ]
  * fix: report correct screen pixel size

  [ johnseth97 ]
  * Modified `window-decorations = none` option on macos

  [ Charly Delay ]
  * Tentative fix for unexpected `font-codepoint-map` behavior

  [ Josh ]
  * feat: Update about menu design to match macOS.

  [ Mitchell Hashimoto ]
  * macos: clamp window size to screen size on screen parameter changes
  * cli: +help needs to use the proper args iterator

  [ Josh ]
  * refactor: hide buttons when URLs are invalid and change variable mutability and visibility.
  * style: add line break in the caption of the about dialog.
  * fix: add text-selection back in the about dialoge.

  [ Mitchell Hashimoto ]
  * macos: personal nitpicks and improvements

  [ johnseth97 ]
  * Fixing deprecation warnings, experiencing new errors.

  [ Marijn Besseling ]
  * implement overline decoration (SGR 53/55)

  [ Mitchell Hashimoto ]
  * Revert "config: change macos-option-as-alt default to left"

  [ johnseth97 ]
  * Basic proxy icons showing

  [ Jon Parise ]
  * bash: stop modifying HISTCONTROL in bash-preexec.sh

  [ Mitchell Hashimoto ]
  * macos: use notification to detect when quick terminal shows/hides

  [ Max ]
  * feat: make too big tab indices go to last tab

  [ axdank ]
  * gui: add move_current_tab action
  * removing unnecessary enum

  [ Mohammad Al-Ahdal ]
  * Fix: aerospace no longer resizes quick terminal and instead treats it as float

  [ Mitchell Hashimoto ]
  * build: use Zig system packaging options
  * PACKAGING.md
  * ci: test system package build
  * nix: oniguruma needed for dynamic linking
  * remove -Dstatic
  * build: only default system libs to false on macOS
  * ci: add signing and tarball generation to release-tip workflow

  [ johnseth97 ]
  * added macos-titlebar-proxy-icon to config
  * Reworked proxy icon, added config options.
  * Removed uneeded code
  * Fixed formatting

  [ Mitchell Hashimoto ]
  * macos: fix goto last tab
  * gtk: make goto_tab go to last tab if too large

  [ johnseth97 ]
  * refactored proxyIconURLDidChange to pwdDidChange
  * Converted config declaration to an enum
  * Fixed conversion error between string and enum

  [ Mitchell Hashimoto ]
  * ci: minisign must be run in the nix env
  * ci: install nix for sign tarball action
  * ci: trying to fix signing
  * ci: don't use -Dstatic for releasing
  * ci: try another signing method
  * ci: fix signing
  * ci: sign debugging
  * ci: the fix for signing was to use the secrets directly
  * ci: concurrency control for releases

  [ johnseth97 ]
  * Fixed type conversion garbage

  [ Mitchell Hashimoto ]
  * config: make the proxy icon documentation more detailed
  * macos: nuke the titlebar from orbit when hidden

  [ Mohammad Al-Ahdal ]
  * Suggestion to use window identifier instead of trying to appease heuristics

  [ axdank ]
  * apply review changes

  [ Mohammad Al-Ahdal ]
  * default AXSubrole to .floatingWindow

  [ Mitchell Hashimoto ]
  * input: note that toggle_split_zoom is macOS only
  * macos: make move_tab work

  [ axdank ]
  * fix type mismatch in `moveTab` function parameter

  [ Paul Miller ]
  * add quick-terminal-animate-duration option

  [ Mitchell Hashimoto ]
  * small rename
  * font/coretext: use CTFontCreateForString for final codepoint fallback

  [ Rithul Kamesh ]
  * build: require exact major/minor Zig version

  [ Anmol Wadhwani ]
  * Add an out of bounds check for mouse-selected themes in +list-themes
  * make selection a const

  [ Jeffrey C. Ollie ]
  * core: add a .txt extenstion to scrollback file

  [ Kristófer R ]
  * Make sure a potential port component is considered during hostname validation

  [ Mitchell Hashimoto ]
  * terminal: refactor hyperlink memory management

  [ Qwerasd ]
  * fix(PageList, Page): fix off-by-1 in map capacity checks

  [ CJ van den Berg ]
  * apprt: propagate OSC10/11 (set term fore/background color) through to apprt

  [ Mitchell Hashimoto ]
  * PACKAGING: recommend -Dtarget

  [ Marvin A. Ruder ]
  * fix(macOS): Fix visual glitch when switching between full-screen apps

  [ Mitchell Hashimoto ]
  * apprt: rename set_bg/fg to "color_change" to report all color changes

  [ Marvin A. Ruder ]
  * Replace check

  [ Nyaa97 ]
  * Fix linking freetype and glslang

  [ Mitchell Hashimoto ]
  * comment

  [ Rick Calixte ]
  * Terminal: Reinitialize screens on scrollback reset

  [ Mitchell Hashimoto ]
  * core: show mouse whenever focus state changes on surface
  * macos: setup colorspace in base terminal controller
  * macos: rectangle select only requires option + drag
  * cli: do not parse actions (+command) after -e
  * Revert "macos: setup colorspace in base terminal controller"
  * macos: quick terminal set colorspace
  * core: only do cursor click to move without a mouse selection

  [ CJ van den Berg ]
  * apprt: also send color_change notifications when colors are reset

  [ Mitchell Hashimoto ]
  * CONTRIBUTING.md

  [ Kristófer R ]
  * Update explanation for number of digits in port number
  * Extract OSC 7 hostname parsing into helper functions

  [ Jeffrey C. Ollie ]
  * gtk: use correct function to destroy window

  [ Mitchell Hashimoto ]
  * macos: restore window frame on cascadeTopLeft since macOS 15 moves it
  * font/harfbuzz: force LTR font shaping

  [ FineFindus ]
  * apprt/adw: reapply headerbar colors

  [ Mitchell Hashimoto ]
  * update zig-objc

  [ Emily ]
  * renderer/metal: use `release()` consistently
  * renderer/metal: release device on `deinit()`
  * renderer/metal: prefer low‐power GPUs (Closes: #2572)

  [ Sam Atman ]
  * ECMA 48 is de jure: as stated by law

  [ Mitchell Hashimoto ]
  * README: syntax highlight the config
  * update zig-objc

  [ Kristófer R ]
  * Move hostname helpers to src/os/hostname.zig
  * os/hostname: test isLocalHostname
  * os/hostname: test bufPrintHostnameFromFileUri
  * os/hostname: add better validation for mac-address hostnames
  * os/hostname: add and use explicit error structs

  [ Tristan Partin ]
  * feat: install neovim plugin

  [ Mitchell Hashimoto ]
  * stylistic changes
  * remove refalldecls test

  [ Nico Elbers ]
  * docs: fix the nixos install instructions

  [ Mitchell Hashimoto ]
  * coretext: set variations on deferred face load
  * update iterm2 themes
  * config: add "initial-command" config, "-e" sets that

  [ Paul Berg ]
  * gtk: implement toggle_split_zoom

  [ Mitchell Hashimoto ]
  * font/coretext: always score based on style string length
  * font/coretext: do not set variation axes in discovery

  [ phillip-hirsch ]
  * feat: Add syntax highlighting for bat

  [ Meili C ]
  * font feature: add git branch characters

  [ Qwerasd ]
  * font/sprite: cleanup branch drawing character impl, implement fade-out lines

  [ phillip-hirsch ]
  * feat: Add bat syntax highlighting to macOS package contents

  [ Mitchell Hashimoto ]
  * terminal: PageList rename "page" to "node" everywhere
  * move datastructures to dedicated "datastruct" package
  * datastruct: add intrusive doubly linked list
  * terminal: change pagelist linked list to an intrusive linked list

  [ Kristófer R ]
  * os/hostname: fix mac address handling when last section starts with '0'

  [ Nadir Fejzic ]
  * feat: implement configurable freetype load flags
  * refactor: handle freetype load flags in face instead of renderer
  * chore: remove unused import
  * refactor: make freetype flags void for non-freetype backend
  * docs: describe `load_flags` field in `Face` struct

  [ Jeffrey C. Ollie ]
  * core/gtk: unify libadwaita/adwaita options in the code
  * core: list valid options if an invalid value is detected parsing an enum

  [ Pepper Lebeck-Jobe ]
  * Fix copying the theme name

  [ Nadir Fejzic ]
  * refactor: define `FreetypeLoadFlags` struct and default in `font.face`
  * docs: write documentation for `freetype_load_flags` field
  * chore: fix typo
  * refactor: remove unused imports
  * fix: use ternary if expression and correct types
  * refactor: add default value for `freetype_load_flags'
  * refactor: use if expression instead of switch

  [ Jeffrey C. Ollie ]
  * ci: fix adwaita build
  * core: address review comments

  [ Mitchell Hashimoto ]
  * some tweaks
  * macos: allow additional modifiers through for ctrl+enter
  * build.zig: add -Dpie option for position independent executables

  [ Tim Culverhouse ]
  * deps: update libvaxis to v0.5.1

  [ Mitchell Hashimoto ]
  * deps: update zf and nix hash
  * update zf api
  * deps: update iterm2 color themes
  * termio: handle empty titles (OSC 0/2)
  * apprt: support a pwd change action
  * termio: fix some mild memory corruption
  * libghostty: remove the pwd function
  * macos: use the pwd apprt action to set the proxy icon URL
  * ios surface view needs pwd field
  * terminal: OSC7 with empty URL resets the pwd to nil
  * terminal: parse CSI 22/23 for push/pop title

  [ Anthony ]
  * Update shebangs in installed shellscripts to meet `rpmlint` and match provided paths at [pkgs.org](https://fedora.pkgs.org/41/fedora-x86_64/elvish-0.21.0-4.fc41.x86_64.rpm.html)
  * Revert "Update shebangs in installed shellscripts to meet `rpmlint` and match provided paths at [pkgs.org](https://fedora.pkgs.org/41/fedora-x86_64/elvish-0.21.0-4.fc41.x86_64.rpm.html)"
  * Remove shebangs from non-executable configuration source scripts

  [ Mitchell Hashimoto ]
  * Make all shell integration scripts non-executable
  * build: -Dpie default to true in system package mode
  * renderer: dedicated size struct, defined coordinate spaces
  * core: make surface use only renderer.Size
  * termio: change resize message to use new size struct
  * termio: change all sizes to the new size type
  * renderer: message uses new size struct
  * renderer/metal: use new size struct
  * renderer/opengl: update to new size struct
  * apprt/embedded: fix new size struct
  * apprt/gtk: use new size structs
  * remove some unused structs

  [ AnthonyZhOon ]
  * Remove shebang from non-executable script

  [ Jon Parise ]
  * macos: add rounded corners to the URL hover view
  * macos: reduce the corner radius to 3 pixels
  * macos: only round the opposing corner
  * macos: use a constant for the corner radius

  [ Kevin ]
  * add OFL.txt
  * add accompanying README with license details

  [ Mitchell Hashimoto ]
  * termio: need to update cached size on resize

  [ Mark Peek ]
  * Include font copyright information into OFL.txt and add MIT license

  [ Mitchell Hashimoto ]
  * Balance padding uses the explicit padding value for grid calculations

  [ Jon Parise ]
  * macos: support linkable AboutView properties

  [ Mitchell Hashimoto ]
  * macos: swap out pointerVisible with NSCursor.setHiddenUntilMouseMoves

  [ Jon Parise ]
  * macos: prefer private View structs to functions
  * macos: formatting
  * macos: further simplify using a @ViewBuilder
  * macos: struct attributes can be private

  [ furtidev ]
  * dep: add latest libvaxis and zf
  * port +list-keybinds to latest libvaxis
  * port +list-themes to latest libvaxis
  * fix: +list-themes crashing when there's search result is empty
  * fix: theme search ranking is now case insensitive
  * update nix cache

  [ Tristan Partin ]
  * apprt/gtk: handle pwd action

  [ notcancername ]
  * Append the default value of XDG_DATA_DIRS when setting up shell integration

  [ Mitchell Hashimoto ]
  * termio: tweaks to xdg data dir handling (no logic changes)

  [ Ayman Bagabas ]
  * website: vt/cht: correct v-2 results

  [ Mitchell Hashimoto ]
  * build: always emit-docs in system packaging mode

  [ Gregory Anders ]
  * vim: fix comment syntax pattern

  [ Mitchell Hashimoto ]
  * config: clarify config-file behavior

  [ Jon Parise ]
  * os: replace PATH_SEP with std.fs.path.delimiter

  [ Mitchell Hashimoto ]
  * config: add basic conditional system core logic (no syntax yet)
  * config: Replay.Step supports a conditional arg
  * config: function to change conditional state
  * config: some docs updates
  * config: theme loading unit tests
  * cli: parse auto structs
  * cli: parseCLI form works with optionals
  * config: theme parses light/dark but only loads light for now
  * config: load dark/light theme based on conditional state
  * apprt: action to change conditional state, implement for embedded
  * config: disable window-theme=auto if light/dark mode theme is configured
  * config: macos-titlebar-style transparent disabled with light/dark mode
  * config: update some docs
  * apprt/gtk: support light/dark mode change on the fly
  * macos: enable Metal shader logging

  [ Anthony ]
  * Change oniguruma link target from `oniguruma` to `onig`

  [ Mitchell Hashimoto ]
  * renderer/opengl: fix memory leak when copying font features
  * ci: release job should set xcode version earlier
  * apprt/gtk: set inherited working directory manually
  * Revert "macos: enable Metal shader logging"
  * ci: set xcode 16 on zig builds or macOS
  * cli: parseCLI for optionals should not be null in release modes
  * input: Binding set clone must deep clone actions
  * apprt: add `config_change` action
  * macos: listen for config change and post a notification
  * config: C API ghostty_config_clone
  * macos: change config access to evented, derived config like libghostty
  * macos: terminal controller reacts to surface config changes
  * macos: listen for color change property to update window appearance
  * macos: only color the titlebar of surfaces that border the top
  * macos: use correct title background if top surface
  * macos: OSColor.hexString must be able to compile with UIKit

  [ trag1c ]
  * docs: include valid values for `macos-titlebar-proxy-icon`

  [ Vincent Prigent ]
  * Add two edge cases to the url regex

  [ Mitchell Hashimoto ]
  * config: fix invalid memory access on theme loading
  * macos: add NSAppearance.isDark
  * config: need to apply window-theme for light/dark after loading theme
  * apprt: switch to reload_config action that calls update_config API
  * apprt/glfw: update to new reload config action
  * apprt/gtk: update for new reload config API
  * apprt: remove change conditional state action
  * apprt/gtk: fix build
  * macos: use Ghostty logger not AppDelegate
  * macos: update recommended Xcode settings
  * mode 2031 should send updates on any color palette change

  [ Jon Parise ]
  * doc: remove sixels from the TODO list

  [ Mitchell Hashimoto ]
  * App applies conditional state, supports theme setting
  * config: clone() should run the replay steps
  * config: clone must preserve conditional state
  * termio: copy input command to avoid memory corruption
  * surface needs to preserve original config working-directory
  * apprt/embedded: update our cached config on config_change action
  * config: clone() needs to preserve conditionals of replay steps

  [ Gregory Anders ]
  * termio: track whether fg/bg color is explicitly set

  [ Anmol Wadhwani ]
  * Strip theme location in fish completions

  [ Kyaw ]
  * config: support loading from "Application Support" directory on macOS

  [ Mitchell Hashimoto ]
  * config: only change conditional state if there are relevant changes
  * apprt/gtk: only show config reload toast if app config changes
  * os: more error handling on reading the app support dir
  * try to abstract bundle ID to a zig file

  [ Gregory Anders ]
  * termio: fixes to kitty color reporting

  [ Isaac Mills ]
  * Prevent GTK from initializing Vulkan. This improves startup time

  [ Mitchell Hashimoto ]
  * config: implement `clone` for RepeatableLink
  * apprt/gtk: use proper env var for vulkan disable on <= 4.14
  * terminal: eraseChars was checking wide char split boundary on wrong cell
  * config: clone should copy diagnostics
  * renderer: set QoS class of the renderer thread on macOS
  * README: clarify config docs location
  * apprt/gtk: update app color scheme state
  * macos: disable background opacity/blur in native fullscreen
  * config: need to dupe filepath for diagnostics

  [ Andrej Daskalov ]
  * added right click action for plasma
  * update readme
  * rename file to match package
  * updated permissions and build process
  * Revert "update readme"
  * use cli argument instead of cd

  [ Mitchell Hashimoto ]
  * macos: titlebar tabs can find titlebar container in fullscreen

  [ Mike Hartington ]
  * font/sprite: add missing chevron powerline fonts

  [ Mitchell Hashimoto ]
  * macos: unicode keybindings must convert to string properly
  * terminal: reset should preserve desired default mode values

  [ Andrej Daskalov ]
  * added gtk-single-instance argument

  [ Mitchell Hashimoto ]
  * macos: trigger fullscreenDidChange on any fullscreen event

  [ Valentin Shinkarev ]
  * fix slow scroll in mouseReport

  [ Mitchell Hashimoto ]
  * terminal: failing tracked pin test on fullReset
  * terminal: PageList.reset
  * terminal: fullReset uses the new screen reset methods
  * terminal: PageList.reset has to zero arena memory to avoid reuse
  * terminal: move UTF8 encoding to Page and wrap around it
  * terminal: support cell_map for encodeUtf8
  * terminal: single pagelist node search
  * datastruct: CircBuf can be initialized empty
  * CircBuf: add ensureUnusedCapacity, appendSlice
  * terminal: working on a pagelist sliding window for search
  * terminal: sliding window search starts working
  * terminal: sliding window search can move the cursor
  * terminal: search across two pages and pruning appears to be working
  * terminal: remove unused pagesearch
  * terminal: test no match pruning
  * terminal: search match across page boundary
  * terminal: test for match in second slice of circ buf
  * terminal: search match on overlap case
  * terminal: update comments/docs on sliding window search
  * terminal: PageListSearch works!
  * comments
  * remove unused file
  * apprt/gtk: force X11 backend on GTK 4.14
  * flake: update to Nix 24.11

  [ Dmitry Zhlobo ]
  * fix unwanted resize of non-native fullscreen window
  * found a better explanation for the reason to hide dock before menu
  * doc: remove outdated statement for fullscreen option

  [ moni ]
  * termio: clear kitty images when deleting above the cursor

  [ Mitchell Hashimoto ]
  * macos: prevent moveFocus from being an infinite loop
  * config: title can reload at runtime

  [ Dmitry Zhlobo ]
  * macos: make non-native fullscreen windows not resizeable

  [ Mitchell Hashimoto ]
  * update libxev
  * New Ghostty icon
  * config: "-e" arguments must stay at the end of replay steps

  [ Zerebos ]
  * Add information about community config tool

  [ Qwerasd ]
  * fix(kittygfx): don't respond to T commands with no i or I
  * font/opentype: add table parsing for head, hhea, post, and OS/2

  [ Abhinav Gupta ]
  * keybind: format leader bindings into multiple entries

  [ Khang Nguyen Duy ]
  * command: fix hostname test compatibility

  [ Anund ]
  * zsh: add completions generation
  * fish: reuse Action options iteration code

  [ Abhinav Gupta ]
  * fix: NoSpaceLeft => OutOfMemory

  [ Khang Nguyen Duy ]
  * gtk: pass surface to clipboard window by reference instead of by value

  [ Mitchell Hashimoto ]
  * macOS: "option-as-alt" defaults to "true" for US keyboard layouts
  * apprt/glfw: add noop keyboardLayout func to satisfy tests and builds

  [ Gregory Anders ]
  * mdgen: use bold face for option and action names

  [ Qwerasd ]
  * font: unify metrics calculations & separate sprite metrics

  [ Toby Jaffey ]
  * Add '$' to select boundaries, for same behaviour as iTerm

  [ Qwerasd ]
  * font(coretext): add metrics test case for CT, fix variable font init

  [ Anthony ]
  * Remove executable permission from readonly config file

  [ Mitchell Hashimoto ]
  * Back out "apprt/gtk: force X11 backend on GTK 4.14"

  [ Anthony ]
  * Revert "Change oniguruma link target from `oniguruma` to `onig`"

  [ Josh Mills ]
  * Fix typo in config documentation

  [ Pranav Mangal ]
  * Add delay before a title change to avoid flicker on macOS
  * Move title change timer to SurfaceView and call it from Ghostty.App instead of terminal controllers

  [ Anmol Wadhwani ]
  * Add weekly iterm2-colorschemes update workflow

  [ Toby Jaffey ]
  * Added "selectWord with character boundary" test for dollar sign.

  [ Anmol Wadhwani ]
  * Use git diff --exit-code in conditional

  [ Qwerasd ]
  * font(metrics): always apply minimum values after calculating

  [ Borys Lykah ]
  * Preserve ZSH options in the shell integration

  [ Qwerasd ]
  * fix(kittygfx): load & display command shouldn't respond to i=0,I=0

  [ Mitchell Hashimoto ]
  * unicode: emoji modifier requires emoji modifier base preceding to not break
  * ci: iTerm2 job should run on Namespace and use cache
  * prettier

  [ mitchellh ]
  * deps: Update iTerm2 color schemes

  [ Mitchell Hashimoto ]
  * ci: colorscheme update should verify nix hash and build

  [ Qwerasd ]
  * test: big perf win by pausing integ checks while growing pages

  [ Borys Lykah ]
  * Fix style warning

  [ Mitchell Hashimoto ]
  * macos: move title setting into a function to better encapsulate

  [ Qwerasd ]
  * clarify naming convention
  * font(Box/cursors): properly account for un-adjusted height
  * font(freetype): actually take max ascii width instead of first

  [ Mitchell Hashimoto ]
  * face: add more RLS types and explicit error sets
  * ci: on release, only upload appcast after binaries

  [ Qwerasd ]
  * font/sprite: separate out cursor rendering from Box
  * font: more robust extraction of vertical metrics from tables
  * font: fix sign of usWinDescent interpretation
  * config: add adjust keys for new font metrics
  * build: increase zsh completion gen eval branch quota

  [ Anund ]
  * fish: raise eval quota inline with other completions, add -e
  * zsh: add -e completion, fix incorrectly copied sed expression
  * bash: add bash completion generation

  [ Tristan Partin ]
  * apprt/gtk: add gtk-tabs-location=hidden
  * apprt/gtk: unify tooltip text with AdwTabButton

  [ Jon Parise ]
  * bash: re-enable automatic bash shell detection

  [ mitchellh ]
  * deps: Update iTerm2 color schemes

  [ Anund ]
  * bash: fix incorrect completion for '--key '
  * bash: formatting changes, change to reference binary name via variable
  * bash: add _files and _dirs to correctly add spaces to only the final result

  [ Jeffrey C. Ollie ]
  * font: add sprites for the separated block quadrants

  [ Anund ]
  * bash: remove quoted completions while sorting possible portability issue
  * bash: support short form boolean options

  [ Mitchell Hashimoto ]
  * apprt/gtk: slight style feedback

  [ Tristan Partin ]
  * apprt/gtk: abstract AdwHeaderBar and GtkHeaderBar

  [ Mitchell Hashimoto ]
  * apprt/gtk: stylistic changes

  [ Jeffrey C. Ollie ]
  * simplify the code for separated block quadrants
  * fix sprite drawing test
  * add Box_test*.ppm to .gitignore

  [ Jon Parise ]
  * macos: add our application bundle to XDG_DATA_DIRS

  [ thyttan ]
  * Harmonize README_TESTERS.md and CONTRIBUTING.md

  [ Jon Parise ]
  * macos: add bash-completion to the application bundle
  * os: add prependEnv(), like appendEnv()

  [ Aaron Bull Schaefer ]
  * docs: fix typo

  [ Qwerasd ]
  * font(coretext): tolerate fonts without OS/2 tables
  * font(freetype): tolerate fonts without OS/2 tables
  * fix: sCapHeight and sxHeight only exist when OS/2 version >= 2

  [ Mitchell Hashimoto ]
  * font: style edits for #2985

  [ Jeffrey C. Ollie ]
  * build: allow CLI actions to have enum option values

  [ Jon Parise ]
  * macos: add zsh to the application bundle

  [ Anund ]
  * nix: address warning to use toplevel adwaita-icon-theme

  [ Jon Parise ]
  * terminal: handle consecutive .input's in clearPrompt

  [ Anund ]
  * shell-integration: add bashrc location lookup in Nixos

  [ Jeffrey C. Ollie ]
  * core: allow cli actions to use arg parsing diagnostics
  * core: allow u21 as a cli argument type
  * cli: add +show-face CLI action

  [ Jon Parise ]
  * config: disable forced shell integration for -e
  * bash: improve clearing of multiline prompts

  [ Mitchell Hashimoto ]
  * build: generate reference page for config for website
  * remove website dir

  [ Anund ]
  * nix: support `programs.vim.plugins = [ ghostty.vim ]`

  [ Qwerasd ]
  * renderer: do not constrain color glyphs

  [ Niclas van Eyk ]
  * docs: fix referenced toggle window decorations action name

  [ Qwerasd ]
  * font(coretext): improve atlas padding calculations

  [ Sam Atman ]
  * Docfix: correct comment for modifyOtherKeys sequence
  * Change to F3 legacy encoding with modifiers

  [ Mitchell Hashimoto ]
  * webgen: update config to support callouts, emit keybind actions

  [ Khang Nguyen Duy ]
  * avoid asserting working directory is absolute

  [ Mitchell Hashimoto ]
  * build: change object story domain to ghostty.org
  * macos: add "Docs" button to the About window
  * ci: tagged release workflow

  [ moni ]
  * surface: don't early return when clearing hyperlinks

  [ Mitchell Hashimoto ]
  * ci: release tag workflow
  * Make Ghostty release channel aware
  * ci: generate a correct sparkle version string for tagged releases

  [ Anthony ]
  * Add --prefix option to `git archive` to extract with a top-level directory

  [ Anund ]
  * Revert "bash: remove quoted completions while sorting possible portability issue"
  * bash: document COMP_WORDBREAKS interaction

  [ Mitchell Hashimoto ]
  * ci: release workflows build a dmg for macOS
  * config: blank title docs

  [ Jon Parise ]
  * bash: standardize on shorthand escape sequences

  [ Mitchell Hashimoto ]
  * update README for release
  * update README

  [ Damien MEHALA ]
  * config: quick terminal auto hide

  [ Anund ]
  * bash: move functions and variables out of global scope

  [ mitchellh ]
  * deps: Update iTerm2 color schemes

  [ Qwerasd ]
  * font: add `cursor-height` metric, and `adjust-` config for it.

  [ Mitchell Hashimoto ]
  * macos: colorized Ghostty icon begins!
  * macos: custom app icon goes into About window
  * config: change color to a defined C struct for libghostty
  * config: macos-icon configurations
  * macos: support the macos-icon configurations
  * config: ensure formatting can only return OOM
  * config: additional macos-icon docs
  * macos: add macos-icon-frame and some custom frame styles
  * config: mark as experimental

  [ Troels Thomsen ]
  * Divide red component of unfocused split fill color

  [ Nico Weber ]
  * macos: Make "Settings…" menu item open config file in Application Support
  * comment

  [ Qwerasd ]
  * fix tests for freetype to include cursor_height metric
  * test(metrics): fix to initialize cursor height + add comment
  * fix tests for coretext to include cursor_height

  [ Nico Weber ]
  * add a comment

  [ Jeffrey C. Ollie ]
  * nix: move vimfiles instead of copying
  * core: don't read config files that are not files

  [ Qwerasd ]
  * deps: update z2d to v0.4.0

  [ Mitchell Hashimoto ]
  * macos: set NSAppearance on windowDidLoad
  * macOS: change default keybinds for equalize splits, jump to prompt -1/+1
  * apprt/gtk: prevent a new split from being smaller than 2x2

  [ Qwerasd ]
  * fmt
  * font/sprite: fix z2d StaticPath accounting + undefined use

  [ Iain H ]
  * apprt/gtk: move new tab button to start of header bar

  [ Qwerasd ]
  * RefCountedSet: simplify `insert` logic, cleanup, improve comments
  * Fix a scenario that could cause issues under some conditions

  [ Mitchell Hashimoto ]
  * kittygfx: z-index handling fixes
  * macos: update content scale whenever the screen changes

  [ Qwerasd ]
  * fix(RefCountedSet): Gracefully handle pathological cases

  [ Mitchell Hashimoto ]
  * terminal: PageList.pin doesn't allow out of bounds x values
  * kittygfx: placement with rows (r) param scrolls properly out of viewport
  * terminal: selectionString only applies x offset on first/last page

  [ Iain H ]
  * apprt/gtk: support dark window decorations with GtkWindow

  [ Qwerasd ]
  * perf(RefCountedSet): make swap metric prioritize high refcount items
  * perf(styles): greatly improve style.hash performance

  [ Damien Mehala ]
  * feat: add support for middle position in quick terminal

  [ Mitchell Hashimoto ]
  * Fix UB in style hashing by using autoHash, but keep XxHash3

  [ David Rubin ]
  * optimize `Style` hashing to be single-shot
  * add some comments

  [ Mitchell Hashimoto ]
  * terminal: address typos in style struct
  * config: revert cmd/alt+left/right to legacy encoding on macOS by default

  [ Damien Mehala ]
  * code review

  [ David Rubin ]
  * optimize `Style.eql` using `PackedStyle`

  [ Mitchell Hashimoto ]
  * config: use escaped encoding for macOS cmd+left/right

  [ Ayman Bagabas ]
  * fix: correct handling of CTC and DECST8C

  [ Jan200101 ]
  * terminal: parse ConEmu progress OSC 9
  * terminal: support progress for ConEmu pause and error state

  [ Qwerasd ]
  * test: add failing test for `Screen.cursorAbsolute` memory corruption
  * fix: memory corruption in `Screen.cursorAbsolute`
  * test: add additional checks to scroll above cross-page test
  * fix: memory corruption in `Screen.cursorScrollAboveRotate`
  * improve comments
  * test: correct scroll above dirty assertions
  * fix: unconditionally mark cursor row dirty in `cursorScrollAbove`

  [ Tristan Partin ]
  * apprt/gtk: handle nullable event from event controller

  [ Mitchell Hashimoto ]
  * macos: send a cursor position event on mouseEnter
  * Create LICENSE
  * set version metadata to 1.0.0
  * build.zig: v1.0.0

  [ Clay Risser ]
  * Fixed missing build dep
  * Added prebuilt
  * Fixed debian prebuilt
  * Added build depends

 -- Clay Risser <clay@clayrisser.com>  Thu, 02 Jan 2025 22:31:57 +0300
