Babelfish clients

There are some clients in different languages that provide a higher level API, built on top of gRPC and libuast.

These clients make it easier to both parse and analyze the resulting UAST, abstracting from network communication and providing a query language to filter UASTs.

Existing clients

There are clients for the following languages:

Language Status Libuast URL
Python Beta
Go Beta
Scala Beta


The client API's differ to adapt to their language specific idioms, the following code shows a simple example with the Go client that parsers a Python file and applies a filter to return all the simple identifiers:

package main

import (


func main() {
    client, err := bblfsh.NewClient("localhost:9432")
    if err != nil {

    res, err := client.NewParseRequest().ReadFile("").Do()
    if err != nil {
    if reflect.TypeOf(res.UAST).Name() != "Node" {
        fmt.Errorf("Node must be the root of a UAST")

    query := "//*[@roleIdentifier and not(@roleQualified)]"
    nodes, _ := tools.Filter(res.UAST, query)
    for _, n := range nodes {

Query language

When using one of the clients that support libuast you can query the UAST result nodes using an xpath-like query language. Check the UAST querying page in this documentation for the details.

results matching ""

    No results matching ""