https://www.evrete.org/
It's a little strange, but very flexible. I'd like to try adapting it to evaluate rules specified using annotated Kotlin.