Good question.
Before I answer it directly, please allow me to share some history about GraphQL.
Back 2016, I felt the pain of maintaining different versions of RESTful api for both web application and mobile application. I believed GraphQL was the answer. So I tried to look around, there was no available GraphQL implementation in Clojure Community.I loved GraphQL so much, so I decided to implement one in Clojure.
I started with GraphQL parser, it was done very quickly with the help of Instaparse. In the middle of 2016, the 0.1.0 version of graphq-clj was released. After the release, a lot of people from the community helped building this library, especially from Edward in Nebank. Early 2017, myself and one of my team member JeffI started rewriting the parser and validator. The purpose of the rewrite was to simplify the implementation and make validation process more predictable and robust.
Here are few main ideas about graphql-clj:
1. Provides parser and validator for GraphQL schema langurage. User don't need to learn anything new other than GraphQL schema spec. This is probably one major difference.
2. Simple API. To start using GraphQL with graphql-clj, only two API functions(resolver and execution) are needed.
graphql-clj is still evolving, any comments and advices are very welcome.
Lacinia was just open sourced recently, I only read some document about it.
There is also another option named alumbra worth trying as well. It is good to have options.