spicetify/cli · error

extension not found

Error message

extension not found

What it means

GetExtensionPath resolves an extension by name to a file inside the <executable-dir>/Extensions directory. It joins the executable directory with "Extensions" and the given name, then os.Stat checks existence. If the file does not exist, it returns this error instead of a path. It is the library's way of saying the requested extension is not installed.

Source

Thrown at src/utils/path-utils.go:223

	}

	return "", errors.New("custom app not found")
}

func GetExtensionPath(name string) (string, error) {
	extFilePath := filepath.Join(userExtensionsFolder, name)

	if _, err := os.Stat(extFilePath); err == nil {
		return extFilePath, nil
	}

	extFilePath = filepath.Join(GetExecutableDir(), "Extensions", name)

	if _, err := os.Stat(extFilePath); err == nil {
		return extFilePath, nil
	}

	return "", errors.New("extension not found")
}

View on GitHub (pinned to 1f13f73616)

Solutions

  1. Verify the exact file name exists: list the Extensions directory next to the spicetify executable.
  2. Install/copy the extension file into <spicetify-executable-dir>/Extensions/.
  3. Check for case-sensitivity mismatches (Linux is case-sensitive).
  4. If using a custom install location, ensure GetExecutableDir() points at the directory that actually contains Extensions.

Example fix

// before
path, err := utils.GetExtensionPath("myext")
// after (fail fast with a clear message)
path, err := utils.GetExtensionPath("myext.js")
if err != nil {
    utils.Fatal(fmt.Errorf("extension not installed; put myext.js in the Extensions dir: %w", err))
}
Defensive patterns

Strategy: validation

Validate before calling

if _, err := os.Stat(filepath.Join(utils.GetExecutableDir(), "Extensions", "myext.js")); err != nil {
    return fmt.Errorf("extension myext.js is not installed in Extensions dir")
}
path, err := utils.GetExtensionPath("myext.js")

Try / catch

if err != nil {
    if strings.Contains(err.Error(), "extension not found") {
        // install or prompt user
    }
    return err
}

Prevention

When it happens

Trigger: Calling GetExtensionPath(name) when no file named `name` exists under GetExecutableDir()/Extensions, or when the Extensions directory itself is missing.

Common situations: Typo in the extension name or wrong file extension (e.g. "mymod" vs "mymod.js"); extension not downloaded/installed yet; custom SPICETIFY_DIR or portable install where Extensions lives elsewhere; a fresh checkout where the Extensions folder was not copied.

Understand the failure class

Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.

Related errors


AI-assisted analysis of spicetify/cli@1f13f73616 (2026-08-31). Data as JSON: /api/errors/3228870d5b8eb556. Report an issue: GitHub.