At present, we have 4 internal types (3 related to ACL, and one for GraphQL):
and all these types are composed of some predicates like
The problem with current implementation is that if someone wanted to create a type called
User in their application, then it would result in collision with our internal ACL
User type, and their queries may not work as expected. Specifically, in GraphQL this results in an issue, as queries are performed using type filter.
To overcome this problem, we are going to prefix dgraph’s internal types with
dgraph.; so, ACL
User will become
dgraph.User (more accurately, we have renamed it as
dgraph.graphql remains as is. Same goes for other internal types which are not namespaced. All the current internal predicates are already prefixed with
dgraph. and, then we won’t allow anyone to create types/predicates which start with
dgraph.; so, this basically reserves
dgraph. as the namespace for any internal types/predicates used by dgraph. This change is supposed to go as a breaking change in 20.07 release.
On a side note, we also have this issue regarding export, where exporting internal predicates causes live loading to fail (specifically,
dgraph.graphql.schema). I feel both these issues are somehow related a bit.
I am writing this post in order to notify everyone regarding this breaking change. So, in future we create internal types/predicates in
Any suggestions/comments regarding this or thoughts about conflicts resulting from this are welcome.