fail2zig is a single static binary with bounded parsers instead of a regex engine, SQLite-backed durable state, and nftables enforcement directly through netlink. Also has the ability to inspect and migrate existing fail2ban configurations.
I just release 0.4.0 today which is the point where I'm more comfortable putting it in front of more people.
Source: https://github.com/ul0gic/fail2zig
Wouldn't mind feedback from people running fail2ban today, including reasons you would not switch.