Skip to content

@pawanrawal pawanrawal released this Nov 14, 2017 · 1411 commits to master since this release

The released binaries would not work with data from older versions. You can follow these instructions to upgrade Dgraph.

The latest release has a lot of breaking changes but also brings powerful features like Transactions, support for CJK and custom tokenization.

Note: Starting from this release, every read and write is done via transactions. You could run read-only transactions, read-write or write-only transactions; but there's no way to avoid transactional behavior.


  • Dgraph adds support for distributed ACID transactions (a blog post is in works). Transactions can be done via the Go, Java or HTTP clients (JS client coming). See docs here.
  • Support for Indexing via Custom tokenizers.
  • Support for CJK languages in the full-text index.

Breaking changes

Running Dgraph

  • We have consolidated all the server, zero, live/bulk-loader binaries into a single dgraph binary for convenience. Instructions for running Dgraph can be found in the docs.
  • For Dgraph server, Raft ids can be assigned automatically. A user can optionally still specify an ID, via --idx flag.
  • --peer flag which was used to specify another Zero instance’s IP address is being replaced by --zero flag to indicate the address corresponds to Dgraph zero.
  • port, grpc_port and worker_port flags have been removed from Dgraph server and Zero. The ports are:
  • Internal Grpc: 7080
  • HTTP: 8080
  • External Grpc: 9080 (Dgraph server only)

Users can set port_offset flag, to modify these fixed ports.


  • Queries, mutations and schema updates are done through separate endpoints. Queries can no longer have a mutation block.
  • Queries can be done via Query Grpc endpoint (it was called Run before) or the /query HTTP handler.
  • _uid_ is renamed to uid. So queries now need to request for uid. Example
  bladerunner(func: eq(name@en, "Blade Runner")) {
  • Facets response structure has been modified and is a lot flatter. Facet key is now predicate|facet_name.
    Examples for Go client and HTTP.
  • Query latency is now returned as numeric (ns) instead of string.
  • Recurse is now a directive. So queries with recurse keyword at root won't work anymore.
  • Syntax for count at root has changed. You need to ask for count(uid), instead of count().


  • Mutations can only be done via Mutate Grpc endpoint or via /mutate HTTP handler.
  • Mutate Grpc endpoint can be used to set/ delete JSON, or set/ delete a list of NQuads and set/ delete raw RDF strings.
  • Mutation blocks don't require the mutation keyword anymore. Here is an example of the new syntax.
  set {
    <name> <is> <something> .
    <hometown> <is> "San Francisco" .
  • Upsert directive and mutation variables go away. Both these functionalities can now easily be achieved via transactions.


  • <*> <pred> <*> operations, that is deleting a predicate can't be done via mutations anymore. They need to be done via Alter Grpc endpoint or via the /alter HTTP handler.
  • Drop all is now done via Alter.
  • Schema updates are now done via Alter Grpc endpoint or via /alter HTTP handler.

Go client

  • Query Grpc endpoint returns response in JSON under Json field instead of protocol buffer. client.Unmarshal method also goes away from the Go client. Users can use json.Unmarshal for unmarshalling the response.
  • Response for predicate of type geo can be unmarshalled into a struct. Example here.
  • Node and Edge structs go away along with the SetValue... methods. We recommend using SetJson and DeleteJson fields to do mutations.
  • Examples of how to use transactions using the client can be found at

Embedded Dgraph

Embedded dgraph goes away. We haven’t seen much usage of this feature. And it adds unnecessary maintenance overhead to the code.


  • Dgraph live no longer stores external ids. And hence the xid flag is gone.


Assets 8
You can’t perform that action at this time.