Go HTTP Client

Manage Traverse databases, queries, and imports from Go over HTTP.

Install

Copy the go/http package into your project. The client is in a private repository and is not published on pkg.go.dev.

cp -r traverse/go/http ./internal/traverse

Note: Standard library only — zero external dependencies. Requires Go 1.22+.

Connect

import traversehttp "your/module/internal/traverse"

client := traversehttp.NewClient("http://localhost:7691", nil)
defer client.Close()

// With API key authentication
client := traversehttp.NewClient("http://localhost:7691", &traversehttp.Options{
    ApiKey: "tvs_your_api_key",
})

Health Check

health, err := client.Health()
if err != nil {
    log.Fatal(err)
}
fmt.Println(health.Status)     // "ok"
fmt.Println(health.Version)    // server version
fmt.Println(health.UptimeSecs) // seconds since start

// Quick readiness probe (returns bool, never returns error)
if client.Ready() {
    fmt.Println("Server is ready")
}

List Databases

databases, err := client.ListDatabases()
if err != nil {
    log.Fatal(err)
}
for _, db := range databases {
    fmt.Println(db.Name, db.Default)
}

Create & Drop Database

err := client.CreateDatabase("mydb")
err = client.DropDatabase("mydb")

Run a Query

result, err := client.Query(
    "MATCH (n:Person) WHERE n.age > $min_age RETURN n.name, n.age",
    map[string]any{"min_age": 25},
    "mydb",
)
if err != nil {
    log.Fatal(err)
}
for _, row := range result.Rows {
    fmt.Println(row)
}

fmt.Println(result.Columns) // [n.name n.age]
fmt.Println(result.TimeMs)  // query time in milliseconds

Import Cypher

result, err := client.ImportCypher(
    "CREATE (a:Person {name: 'Alice'});\nCREATE (b:Person {name: 'Bob'});",
    "mydb",
)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("%d of %d statements\n", result.Executed, result.TotalStatements)

Schema

schema, err := client.GetSchema("mydb")
if err != nil {
    log.Fatal(err)
}
fmt.Println(schema.Labels)
fmt.Println(schema.RelationshipTypes)
fmt.Println(schema.Indexes)

Aliases

// Create an alias
err := client.CreateAlias("production", "mydb")

// List aliases
aliases, err := client.ListAliases()
for _, a := range aliases {
    fmt.Printf("%s -> %s\n", a.Alias, a.Database)
}

// Update and drop
err = client.AlterAlias("production", "mydb_v2")
err = client.DropAlias("production")

File Upload

data, err := os.ReadFile("backup.tvdb")
if err != nil {
    log.Fatal(err)
}
result, err := client.UploadFile("backup.tvdb", data)
fmt.Println(result.SizeBytes)

Save & Close

// Persist all databases to disk
err := client.Save()

// Release resources
client.Close()

Constructor Options

import "time"

client := traversehttp.NewClient("https://traverse.example.com", &traversehttp.Options{
    ApiKey:                    "tvs_...",
    Timeout:                   30 * time.Second,   // API request timeout (default: 100s)
    TransferTimeout:           10 * time.Minute,   // file upload/download timeout (default: 1h)
    AllowUntrustedCertificate: true,               // skip TLS verification
})