spicetify/cli · error
custom app not found
Error message
custom app not found
What it means
GetCustomAppPath resolves the install directory of a custom app by name. It probes the spicetify CustomApps folder (and config-declared locations); if the app's folder cannot be found in any expected location, it returns "custom app not found" from src/utils/path-utils.go. It's invoked via GetAppManifest when applying/loading apps.
Source
Thrown at src/utils/path-utils.go:207
if _, err := os.Stat(customAppFolderPath); err == nil {
customAppActualFolderPath := GetCustomAppSubfolderPath(customAppFolderPath)
if customAppActualFolderPath != "" {
return customAppActualFolderPath, nil
}
return customAppFolderPath, nil
}
customAppFolderPath = filepath.Join(GetExecutableDir(), "CustomApps", name)
if _, err := os.Stat(customAppFolderPath); err == nil {
customAppActualFolderPath := GetCustomAppSubfolderPath(customAppFolderPath)
if customAppActualFolderPath != "" {
return customAppActualFolderPath, nil
}
return customAppFolderPath, nil
}
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
- Ensure the app is installed: clone it into <spicetify-folder>/CustomApps/<name>
- Verify the folder name matches the name used in `spicetify config customapp <name>`
- Re-check config-xpui.ini custom_apps list for typos
- Run `spicetify path userdata` to confirm the spicetify folder you're placing apps in is the one being read
Example fix
// before custom_apps = lyrics-plus,new-yt // "new-yt" not in CustomApps // after git clone https://github.com/.../new-yt.git ~/.config/spicetify/CustomApps/new-yt spicetify apply
Defensive patterns
Strategy: validation
Validate before calling
appFolder := filepath.Join(utils.GetSpicetifyFolder(), "CustomApps", appName)
if info, err := os.Stat(appFolder); err != nil || !info.IsDir() {
return fmt.Errorf("custom app %q not installed under %s", appName, appFolder)
} Try / catch
_, err := utils.GetCustomAppPath(name)
if err != nil && err.Error() == "custom app not found" {
// clone the app into CustomApps/<name> or fix the custom_apps config, then retry
return fmt.Errorf("install app first: git clone <repo> <spicetify>/CustomApps/%s", name)
} Prevention
- Ensure the CustomApps/<name> folder exists and matches the configured name exactly
- Keep custom_apps entries in config-xpui.ini in sync with installed folders
- Clone app repos with the folder name matching the app's manifest name
- Verify the spicetify userdata folder with `spicetify path userdata` when apps go missing
When it happens
Trigger: Running `spicetify config customapp <name>` + `spicetify apply`, or calling GetCustomAppPath/GetAppManifest directly, when no directory named <name> exists under the spicetify CustomApps folder (or the path recorded in config is missing).
Common situations: Typoed app name in the customapp config; app repo cloned under a different folder name than the manifest name; CustomApps folder wiped by reinstall; app never downloaded (missing `spicetify config customapp` setup step); case-sensitivity issues on Linux.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
AI-assisted analysis of spicetify/cli@1f13f73616 (2026-08-31).
Data as JSON: /api/errors/0be25968bbc371a9.
Report an issue: GitHub.