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
- 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)
- Set `min_ver` to at least 2.2.0 in the phishlet YAML
- Download an updated version of the phishlet from the author's repository if available
- 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
- Only download phishlets from sources keeping pace with evilginx2 releases
- Check the `min_ver` field at the top of each phishlet before importing
- Run the migration checklist (triggers_on, orig_sub, credentials section) once when porting old phishlets
- Pin phishlet collections to a known compatible version
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
- this phishlet is incompatible with current version of evilgi
- enabling phishlet '%s' requires its hostname to be set up
- phishlet '%s' is a template - you have to 'create' child phi
- phishlet '%s' already exists
- missing custom parameter values during initalization: %v
AI-assisted analysis of kgretzky/evilginx2@4c0988a1d9 (2026-09-05).
Data as JSON: /api/errors/1054b76c0e167a85.
Report an issue: GitHub.