kgretzky/evilginx2 · error

this phishlet is incompatible with current version of evilgi

Error message

this phishlet is incompatible with current version of evilginx.
please do the following modifications to update it:

- in each `sub_filters` item change `hostname` to `triggers_on`
- in each `sub_filters` item change `sub` to `orig_sub`
- rename section `user_regex` to `username`
- rename section `pass_regex` to `password`
- rename field `re` in both `username` and `password` to `search`
- field `key` in both `username` and `password` must be a regexp by default
- move `username` and `password` into new `credentials` section
- add `type` field to `username` and `password` with value 'post' or 'json'
- change `min_ver` to at least `2.2.0`
you can find the phishlet 2.2.0 file format documentation here: https://github.com/kgretzky/evilginx2/wiki/Phishlet-File-Format-(2.2.0)

What it means

When loading a phishlet, parseVersion reads `min_ver` and the loader rejects phishlets whose declared minimum version is below 2.2.0. The long message is a migration checklist transforming a legacy (pre-2.2.0) phishlet into the 2.2.0 format. Evilginx changed the phishlet schema and requires authors to upgrade their files.

Source

Thrown at core/phishlet.go:293

	c.SetConfigType("yaml")
	c.SetConfigFile(path)

	err := c.ReadInConfig()
	if err != nil {
		return err
	}

	p.Name = site
	p.Path = path
	p.ParentName = ""
	p.Author = c.GetString("author")
	p.RedirectUrl = c.GetString("redirect_url")
	p.Version, err = p.parseVersion(c.GetString("min_ver"))
	if err != nil {
		return err
	}
	if !p.isVersionHigherEqual(&p.Version, "2.2.0") {
		return fmt.Errorf("this phishlet is incompatible with current version of evilginx.\nplease do the following modifications to update it:\n\n" +
			"- in each `sub_filters` item change `hostname` to `triggers_on`\n" +
			"- in each `sub_filters` item change `sub` to `orig_sub`\n" +
			"- rename section `user_regex` to `username`\n" +
			"- rename section `pass_regex` to `password`\n" +
			"- rename field `re` in both `username` and `password` to `search`\n" +
			"- field `key` in both `username` and `password` must be a regexp by default\n" +
			"- move `username` and `password` into new `credentials` section\n" +
			"- add `type` field to `username` and `password` with value 'post' or 'json'\n" +
			"- change `min_ver` to at least `2.2.0`\n" +
			"you can find the phishlet 2.2.0 file format documentation here: https://github.com/kgretzky/evilginx2/wiki/Phishlet-File-Format-(2.2.0)")
	}
	if !p.isVersionHigherEqual(&p.Version, "2.3.0") {
		return fmt.Errorf("this phishlet is incompatible with current version of evilginx.\nplease do the following modifications to update it:\n\n" +
			"- replace `landing_path` with `login` section\n" +
			"- change `min_ver` to at least `2.3.0`\n" +
			"you can find the phishlet 2.3.0 file format documentation here: https://github.com/kgretzky/evilginx2/wiki/Phishlet-File-Format-(2.3.0)")
	}

View on GitHub (pinned to 4c0988a1d9)

Solutions

  1. Update the phishlet to the 2.2.0 format following the checklist in the message (triggers_on, orig_sub, credentials section with username/password having type+search fields)
  2. Set `min_ver` to at least 2.2.0 in the phishlet YAML
  3. Download an updated version of the phishlet from the author's repository if available
  4. Use the official phishlet 2.2.0 format docs: https://github.com/kgretzky/evilginx2/wiki/Phishlet-File-Format-(2.2.0)

Example fix

# before (legacy)
min_ver: 2.1.0
user_regex:
  key: '(login)'
  re: '(.*)'
# after
min_ver: 2.3.0
credentials:
  username:
    type: 'post'
    key: 'login'
    search: '(.*)'
  password:
    type: 'post'
    key: 'password'
    search: '(.*)'
Defensive patterns

Strategy: validation

Validate before calling

// check min_ver before loading
if v, _ := parseVersion(yaml "min_ver"); !isVersionHigherEqual(v, "2.2.0") {
    return fmt.Errorf("phishlet %s must declare min_ver >= 2.2.0", name)
}

Type guard

func isPhishlet22Compatible(minVer string) bool {
    v, err := parseVersion(minVer)
    return err == nil && isVersionHigherEqual(&v, "2.2.0")
}

Try / catch

if err := cfg.LoadPhishlet(name, path, nil); err != nil {
    if strings.Contains(err.Error(), "incompatible with current version") {
        log.Error("upgrade the phishlet to 2.2.0 format before use: %v", err)
    }
}

Prevention

When it happens

Trigger: Calling LoadPhishlet / parsing a .yaml/.yml phishlet whose `min_ver` is absent or less than 2.2.0 (legacy 2.0/2.1 files with `user_regex`/`pass_regex` sections and `sub_filters` using `hostname`/`sub` keys).

Common situations: Downloading old phishlets from pre-2.2 era repos/collections, reusing a phishlet authored for evilginx 2.1, or a phishlet missing `min_ver` entirely so parseVersion yields a version below 2.2.0.

Related errors


AI-assisted analysis of kgretzky/evilginx2@4c0988a1d9 (2026-09-05). Data as JSON: /api/errors/1054b76c0e167a85. Report an issue: GitHub.