PromptFloe Developer Docs
Client SDKs

Go SDK

The github.com/promptfloe/go-sdk module — context-aware, channel-based event streams, no cgo. Go 1.21+.

#Install

bash
go get github.com/promptfloe/go-sdk/promptfloe

#Basic usage

main.go
package main

import (
    "context"
    "fmt"
    "log"
    "os"

    "github.com/promptfloe/go-sdk/promptfloe"
)

func main() {
    c := promptfloe.NewClient(os.Getenv("PROMPTFLOE_API_KEY"))

    app, err := c.Apps.Generate(context.Background(), &promptfloe.GenerateAppRequest{
        Prompt: "A pricing page for a CRM SaaS",
    })
    if err != nil { log.Fatal(err) }

    fmt.Println(app.PreviewURL)
}

#Streaming with channels

go
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
defer cancel()

events, err := c.Apps.GenerateStream(ctx, &promptfloe.GenerateAppRequest{
    Prompt: "landing page",
})
if err != nil { log.Fatal(err) }

for ev := range events {
    switch e := ev.(type) {
    case *promptfloe.PlanEvent:
        fmt.Println("plan:", e.Summary)
    case *promptfloe.FileEvent:
        fmt.Println("file:", e.Path)
    case *promptfloe.ReadyEvent:
        fmt.Println("ready:", e.PreviewURL)
    case *promptfloe.ErrorEvent:
        log.Fatal(e.Message)
    }
}

#Error handling

go
var apiErr *promptfloe.APIError
var rateErr *promptfloe.RateLimitError

if _, err := c.Apps.Generate(ctx, req); err != nil {
    switch {
    case errors.As(err, &rateErr):
        time.Sleep(rateErr.RetryAfter)
    case errors.As(err, &apiErr):
        log.Printf("%s: %s (request %s)", apiErr.Code, apiErr.Message, apiErr.RequestID)
    default:
        log.Fatal(err)
    }
}

#Custom HTTP client

Pass a custom http.Client via options for retries, telemetry, or proxy support:

go
c := promptfloe.NewClient(
    apiKey,
    promptfloe.WithHTTPClient(&http.Client{Timeout: 60 * time.Second}),
    promptfloe.WithBaseURL("https://api.promptfloe.com"),
)

#Where to go next

PromptFloe developer docs