{"record":{"id":"08d7d8bddf62ab3a","repo":"kovidgoyal/kitty","slug":"failed-to-find-the-kitty-executable-this-kitten-r","errorCode":null,"errorMessage":"Failed to find the kitty executable, this kitten requires the kitty executable to be present. You can use the environment variable KITTY_PATH_TO_KITTY_EXE to specify the path to the kitty executable","messagePattern":"Failed to find the kitty executable, this kitten requires the kitty executable to be present\\. You can use the environment variable KITTY_PATH_TO_KITTY_EXE to specify the path to the kitty executable","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"kittens/choose_fonts/backend.go","lineNumber":38,"sourceCode":"\tto                      io.WriteCloser\n\tjson_decoder            *json.Decoder\n\tcmd                     *exec.Cmd\n\tstderr                  strings.Builder\n\tlock                    sync.Mutex\n\tr                       io.ReadCloser\n\tw                       io.WriteCloser\n\twait_for_exit           chan error\n\tstarted, exited, failed bool\n\ttimeout                 time.Duration\n}\n\nfunc (k *kitty_font_backend_type) start() (err error) {\n\texe := utils.KittyExe()\n\tif exe == \"\" {\n\t\texe = utils.Which(\"kitty\")\n\t}\n\tif exe == \"\" {\n\t\treturn fmt.Errorf(\"Failed to find the kitty executable, this kitten requires the kitty executable to be present. You can use the environment variable KITTY_PATH_TO_KITTY_EXE to specify the path to the kitty executable\")\n\t}\n\n\tk.cmd = exec.Command(exe, \"+runpy\", \"from kittens.choose_fonts.backend import main; main()\")\n\tk.cmd.Stderr = &k.stderr\n\n\tif k.r, k.to, err = os.Pipe(); err != nil {\n\t\treturn err\n\t}\n\tk.cmd.Stdin = k.r\n\tif k.from, k.w, err = os.Pipe(); err != nil {\n\t\treturn err\n\t}\n\tk.cmd.Stdout = k.w\n\tk.json_decoder = json.NewDecoder(k.from)\n\tif err = k.cmd.Start(); err != nil {\n\t\treturn err\n\t}\n\tk.started = true","sourceCodeStart":20,"sourceCodeEnd":56,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kittens/choose_fonts/backend.go#L20-L56","documentation":"The choose-fonts kitten needs a kitty executable to launch its font-backend subprocess ('kitty +runpy ...') and could not find one: KITTY_PATH_TO_KITTY_EXE is unset, utils.KittyExe() returned empty, and 'kitty' is not on PATH.","triggerScenarios":"Calling choose_fonts in an environment where kitty was launched via a renamed binary, a container with kitty libs but no exe on PATH, or KITTY_PATH_TO_KITTY_EXE points nowhere.","commonSituations":"Custom builds where the binary is not named 'kitty' or not on PATH; SSH/remote sessions with stripped PATH; Nix/GNU Guix style installs needing explicit env vars.","solutions":["Set KITTY_PATH_TO_KITTY_EXE to the full path of the kitty binary","Ensure 'kitty' is on PATH (symlink or add install dir to PATH)","Reinstall/locate kitty: 'which kitty' or check your package manager"],"exampleFix":"# before\nkitten choose_fonts\n# after\nexport KITTY_PATH_TO_KITTY_EXE=/usr/local/bin/kitty\nkitten choose_fonts","handlingStrategy":"validation","validationCode":"if os.Getenv(\"KITTY_PATH_TO_KITTY_EXE\") == \"\" { exe, err := exec.LookPath(\"kitty\"); if err != nil { /* fail fast with clear message */ } }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Set KITTY_PATH_TO_KITTY_EXE in wrapper scripts","Ensure kitty's bin dir is on PATH in remote/SSH sessions"],"tags":["kitty","missing-executable","environment","choose-fonts"],"backgroundTag":"missing-env-var","analyzedSha":"6d5d0c440603ad9bdf6dcd599f73f6dde21acb44","analyzedAt":"2026-08-27T14:20:20.142Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}