GopeedLab/gopeed · error

extension title is required

Error message

extension title is required

What it means

Extension.validate() requires a non-empty title in manifest.json. The title is the human-readable display name shown in the extensions UI, so an empty one fails install even when name and version are present. It is checked second, after name.

Source

Thrown at pkg/download/extension.go:441

	Scripts    []*Script   `json:"scripts"`
	Settings   []*Setting  `json:"settings"`
	// Disabled if true, this extension will be ignored
	Disabled bool `json:"disabled"`

	DevMode bool `json:"devMode"`
	// DevPath is the local path of extension source code
	DevPath string `json:"devPath"`

	CreatedAt time.Time `json:"createdAt"`
	UpdatedAt time.Time `json:"updatedAt"`
}

func (e *Extension) validate() error {
	if e.Name == "" {
		return fmt.Errorf("extension name is required")
	}
	if e.Title == "" {
		return fmt.Errorf("extension title is required")
	}
	if e.Version == "" {
		return fmt.Errorf("extension version is required")
	}
	return nil
}

func (e *Extension) buildIdentity() string {
	if e.Author == "" {
		return e.Name
	}
	return e.Author + "@" + e.Name
}

func (e *Extension) buildInstallUrl() string {
	if e.Repository == nil || e.Repository.Url == "" {
		return ""
	}

View on GitHub (pinned to 7b7327ffb3)

Solutions

  1. Add a non-empty "title" to manifest.json
  2. Double-check exact key spelling and top-level placement
  3. Reinstall the extension after fixing the manifest

Example fix

// before (manifest.json)
{ "name": "my-extension", "version": "1.0.0" }
// after
{ "name": "my-extension", "title": "My Extension", "version": "1.0.0" }
Defensive patterns

Strategy: validation

Validate before calling

// Go: pre-validate manifest title
var m map[string]any
_ = json.Unmarshal(raw, &m)
if s, _ := m["title"].(string); strings.TrimSpace(s) == "" {
    return fmt.Errorf("manifest.json: 'title' is required")
}

Prevention

When it happens

Trigger: manifest.json with a "name" but missing or empty "title"; title key misspelled ("label", "Title") so the field stays zero after unmarshal.

Common situations: Minimal manifests written quickly for testing; converting another format's manifest and dropping the display-name field; templates where title defaults to a placeholder that was cleared.

Related errors


AI-assisted analysis of GopeedLab/gopeed@7b7327ffb3 (2026-08-16). Data as JSON: /api/errors/7ff4775970dbae59. Report an issue: GitHub.