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.


The client also allow you to instance an Iterator object and iterate over the tree on several predefined orders:

To check the exact way to use an iterator you must consult the readme of the specific language client you're using, but they're generally easy to use as this Python example shows:

import bblfsh
client = bblfsh.BblfshClient("")
root = client.parse("/path/to/")

for node in bblfsh.iterator(root, bblfsh.TreeOrder.PRE_ORDER):
    #... do stuff with the node

results matching ""

    No results matching ""