# Ghostty Config: A Schema-Driven Web Generator for Ghostty Terminal Settings

> Ghostty Config is a Svelte and TypeScript web app that edits Ghostty terminal settings visually and exports only the values that differ from the defaults. It is the right tool for people who find hand-editing key-value config files tedious, and the wrong tool for anyone who wants the app to touch the config file itself.

**zerebos/ghostty-config** — A beautiful config generator for Ghostty terminal.

- Repository: https://github.com/zerebos/ghostty-config
- Website: http://ghostty.zerebos.com/
- Stars: 4,244 · Forks: 84
- Language: TypeScript
- License: Apache-2.0
- Published: 2026-09-23 · Updated: 2026-09-23 · Language: en
- Canonical page: https://hysenlabs.com/projects/zerebos-ghostty-config

## What Ghostty Config solves, and who it is for

Ghostty is configured through a text file of key-value settings. That is fast once you know the keys, but it means remembering option names, valid value types, which platform a setting applies to, and which Ghostty version introduced it. Ghostty Config replaces that memory work with a form. Every setting is driven by a typed schema derived from Ghostty's own config specification, and the app organizes settings into categories that also derive from that config. Each setting carries inline documentation, platform restrictions and version metadata from the schema. The audience is anyone who wants a working Ghostty config without reading the full option list first: new users moving from another terminal, people who want to compare themes quickly, and users who need to build keybindings and would rather validate them in a UI than debug a silent parse failure. The project describes itself as still under active development, with features subject to change.

## How the schema-driven generator keeps the exported config minimal

The mechanism that matters here is default tracking. The README states that the tool tracks only the values that differ from Ghostty's defaults, so the exported config stays minimal. In practice that means the editor holds a full settings model, compares each value against the schema's default, and serializes only the differences. That is a deliberate inversion of how most config editors behave: instead of dumping every field, the output is a diff against the baseline. The schema also supplies the metadata that drives the UI. Platform badges come from platform restrictions in the schema, and version badges come from version metadata, so a control can tell you it needs macOS, Linux or GTK, or a minimum Ghostty version, before you copy the setting into your file. Themes are handled separately: the project syncs hundreds of Ghostty color themes automatically from the upstream iTerm2 Color Schemes repository. The app is built with Svelte, TypeScript, Vite and Bun, and the hosted version is deployed through Cloudflare Workers. One design consequence worth naming: because the export is a diff, a config produced by this tool is not a complete record of your terminal setup. If you later change a Ghostty default, settings you never touched will not appear in the file.

## Running Ghostty Config locally with Bun

The README gives a local development path rather than a package install. You need Bun, and you clone the repository directly. The four commands below install dependencies and start the Vite dev server.

```bash
git clone https://github.com/zerebos/ghostty-config.git
cd ghostty-config
bun install
bun run dev
```

The README says to open http://localhost:5173 in your browser when prompted. That is the dev server, not the hosted site, and it is the same interface you see at ghostty.zerebos.com. If you only want the generator, the hosted version needs no install at all. If you want your own copy, the repository also lists build, preview, check, lint and test scripts, and the production output lands under build/ so it can be served as static files. The only automated deployment built in is Cloudflare Workers, which deploys on every push to main. Self-hosting means taking the build/ directory and serving it yourself; the README does not document a rollback path for the Cloudflare deployment, so treat that as unverified.

## A first real use: pick a theme, adjust a font, export the diff

The workflow the project is built around is edit, preview, export. Start by choosing a color theme from the built-in set, which the project keeps in sync with upstream. Then adjust settings such as font family, font size, cursor style, transparency or blur using the purpose-built controls: sliders, linked number inputs, color pickers and duration fields. Repeatable settings such as font features get a dedicated list editor instead of a single text field. The interactive terminal preview is the part that separates this from a static form. It is a DOM-based terminal you can type in, and it re-themes live as you change settings, so existing output such as colors, the prompt and ls results updates in place rather than being torn down and rebuilt. When the preview looks right, use import and export to copy or download the config. Only settings that differ from defaults are included. If you want a second opinion, the share feature produces a shareable URL, falling back to clipboard copy for large configs. The keybinding builder covers the settings most likely to be mistyped by hand: it validates trigger and action pairs and supports sequences, prefixes and chained actions.

## Where Ghostty Config stops: no file access, no full config

The limitation is structural, not a missing feature that a setting can fix. Ghostty Config runs in a browser and produces text. It does not read your existing Ghostty config, and it does not write to your config file. The roadmap lists a desktop version for direct config file integration under long-term items, which confirms that direct file handling is not present today. So the loop is manual: export from the app, paste into your config file, reload Ghostty. That also means the tool has no view of settings you wrote by hand that are not in its schema, and custom settings are handled through a custom settings feature rather than by parsing your file. A second boundary is version coupling. Version badges tell you the minimum Ghostty version for a setting, but the project tracks Ghostty releases including nightly (the roadmap lists updates through Ghostty 1.4-nightly), so a config exported against a newer schema can contain keys your installed Ghostty does not recognize. If you run a packaged or older build, check the badges before exporting. Finally, the README says the tool is still under active development and that not everything on the roadmap is implemented; the command palette builder and community presets are listed as near-term, not done.

## How it compares to hand-editing the Ghostty config file

The real alternative is the config file itself plus the Ghostty documentation. The difference in approach is directness versus validation. Hand-editing gives you the complete file, including comments, which the generator does not produce because it emits only non-default values. Hand-editing also works offline, on any machine, with no Bun install and no browser, and it is the only path that can express a setting before this project's schema has caught up with a Ghostty release. The generator's advantage is feedback: typed inputs prevent invalid value types, platform and version badges prevent settings that cannot work on your system, the terminal preview shows the result before you commit it, and the keybinding builder catches malformed bindings that Ghostty would otherwise reject quietly. For a single font-size change, the file wins. For a first config, a theme swap, or a set of keybindings, the generator saves a round of trial and error. Note that the exported diff is a starting point, not a replacement for the file: you still own the file, its comments and its ordering.

## Maintenance, licensing and what the release history shows

The repository is not archived and the last push was on 2026-09-22, so it is currently being worked on. That matters for a schema-driven tool, because the schema has to track Ghostty's own config specification and its theme set has to track the upstream iTerm2 Color Schemes repository. The maintenance cost for a self-hoster is therefore not just dependency updates: it is rebuilding whenever Ghostty adds or renames options. The project eases this with automated theme sync and with roadmap entries for each Ghostty version update, but the sync is upstream-driven, so a new Ghostty release can land before the schema reflects it. Package version is 0.3.0, and no GitHub releases were retrieved, so there is no tagged release channel to pin against; the practical unit of upgrade is a commit on main. The licence is Apache-2.0, which permits use, modification and redistribution under its terms, including a patent grant, and requires that you keep the licence and notice files and state significant changes. That is a summary, not legal advice; read the LICENSE file in the repository if you plan to redistribute a modified build.

## Conclusion

Adopt Ghostty Config if you want to explore Ghostty's settings, themes and keybindings visually and export a minimal config, and if you are comfortable pasting that output into your own config file by hand. Skip it if you want a tool that writes directly to your Ghostty config or syncs changes back, because the roadmap lists a desktop version for direct config file integration as a long-term item that is not implemented. Before relying on it, check that the setting you need carries a version badge for your installed Ghostty release, and confirm the export contains only the keys you changed.

## FAQ

### How do I install Ghostty Config?

There is no package install. The README says to clone the repository, run bun install, then bun run dev, and open http://localhost:5173. If you only want to use the generator, the hosted version at ghostty.zerebos.com needs no installation.

### What is the best configuration for Ghostty?

The project does not publish a recommended configuration. Its approach is to let you adjust settings such as fonts, colors, cursor styles, transparency and blur with live previews, then export only the values you changed from the defaults.

### How do I apply a config exported from Ghostty Config?

The README does not document applying the export. The app produces config text through its import and export feature, and the roadmap states that direct config file integration is a long-term desktop item, so pasting the output into your own config file is the documented path.

## Sources

- [Issues](https://github.com/zerebos/ghostty-config/issues)
- [License: Apache-2.0](https://github.com/zerebos/ghostty-config/blob/main/LICENSE)
- [Project website](http://ghostty.zerebos.com/)
- [README](https://github.com/zerebos/ghostty-config/blob/main/README.md)
- [zerebos/ghostty-config on GitHub](https://github.com/zerebos/ghostty-config)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/zerebos-ghostty-config
