Backend update Oct 277th 2018

Arithmetic operators, improved API CDN caching, and more

Data Store

GROQ now supports standard arithmetic operators: + (addition), - (subtraction), * (multiplication), / (division), ** (exponentiation), and % (modulo). Additionally, + can be used to concatenate strings, arrays, and objects. Note that usage of arithmetic operators in filters has not yet been optimized, so we recommend only using them in projections unless the dataset is very small. We also added the round() function to round numbers.

Query performance with large documents has been improved significantly for simple queries without joins. We have also introduced some technical limits to ensure fair and reliable operation for all users (see separate page for details), and made several reliability improvements under the hood.

Fixed bugs include:

  • Grant filters in custom group permissions are now validated properly.
  • The ! operator now has higher precedence than the == operator, so !a == b is parsed as (!a) == b rather than !(a == b).
  • Inequalities (> and <) with attributes on the right-hand side now work properly.
  • Several mutation errors that previously returned 500 error codes now properly return 400.


The cache time for our API CDN has been increased from 15 seconds to 1 hour. All cached entries for a dataset are automatically invalidated whenever there is a write to a non-draft document in the dataset, but invalidation can take up to 30 seconds to propagate completely.

We also introduced API CDN nodes in Singapore, and added serving of stale objects while fetching updated objects in the background to improve client response times during invalidation.