  jq is a widely used tool that provides a programming language to manipulate
JSON data. However, the jq language is currently only specified by its
implementation, making it difficult to reason about its behaviour. To this end,
we provide a formal syntax and denotational semantics for a large subset of the
jq language. Our most significant contribution is to provide a new way to
interpret updates that allows for more predictable and performant execution.
