digitalocean/godo sits at 1.5k stars on GitHub, written primarily in Go. DigitalOcean Go API client
Snapshot summary built from the project's own GitHub metadata — there's no written TopGit review yet. The page will update automatically when a full review is published.
WHY NO REVIEW YET
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then — see the READ ME tab for the original README in full.
Godo is a Go client library for accessing the DigitalOcean V2 API.
You can view the client API docs here: http://godoc.org/github.com/digitalocean/godo
You can view DigitalOcean API docs here: https://docs.digitalocean.com/reference/api/api-reference/
🚀 New in v1.191.0 — AI & Inference support
godo now ships first-class support for DigitalOcean's
Gradient AI Platform: chat
completions (with streaming), image generation, embeddings, batch inference,
model listing, and more — all from the same Client. Jump to
AI & Inference to get started.
A PAT created with full access scope, or a Gradient Model Access Key.
If you only have a limited-scope PAT, infrastructure calls will work but
inference calls will fail with 401. Create a new PAT with full access, or use
a Model Access Key instead.
// Either credential works with godo.NewFromToken:
client := godo.NewFromToken(os.Getenv("DIGITALOCEAN_TOKEN")) // full-access PAT
client := godo.NewFromToken(os.Getenv("MODEL_ACCESS_KEY")) // Gradient model access key
If you need to provide a context.Context to your new client, you should use godo.NewClient to manually construct a client instead.
AI & Inference
Talk to models on DigitalOcean's Gradient AI Platform with the same godo.Client.
The Serverless Inference API is available at https://inference.do-ai.run/. Use a DigitalOcean PAT with full access scope or a Gradient Model Access Key — see the credentials note above.
Chat completion
completion, _, err := client.Chat.Completions.New(ctx, &godo.ChatCompletionNewParams{
Model: "llama3.3-70b-instruct",
Messages: []godo.ChatCompletionMessage{
godo.UserMessage("Write me a haiku"),
},
})
List models
page, _, err := client.Models.List(ctx)
for _, m := range page.Data {
fmt.Println(m.ID)
}
Image generation
image, _, err := client.ImageGenerations.Generate(ctx, &godo.ImageGenerateParams{
Model: "stable-diffusion-3.5-large",
Prompt: "A friendly cartoon shark typing on a laptop at a sunny beach",
N: 1,
})
For streaming, embeddings, messages, responses, async invocations, batch inference, agent inference, and full runnable programs, see examples/serverless-inference/ and examples/agent-inference/.
If a list of items is paginated by the API, you must request pages individually. For example, to fetch all Droplets:
func DropletList(ctx context.Context, client *godo.Client) ([]godo.Droplet, error) {
// create a list to hold our droplets
list := []godo.Droplet{}
// create options. initially, these will be blank
opt := &godo.ListOptions{}
for {
droplets, resp, err := client.Droplets.List(ctx, opt)
if err != nil {
return nil, err
}
// append the current page's droplets to our list
list = append(list, droplets...)
// if we are at the last page, break out the for loop
if resp.Links == nil || resp.Links.IsLastPage() {
break
}
page, err := resp.Links.CurrentPage()
if err != nil {
return nil, err
}
// set the page we want for the next request
opt.Page = page + 1
}
return list, nil
}
Some endpoints offer token based pagination. For example, to fetch all Registry Repositories:
func ListRepositoriesV2(ctx context.Context, client *godo.Client, registryName string) ([]*godo.RepositoryV2, error) {
// create a list to hold our registries
list := []*godo.RepositoryV2{}
// create options. initially, these will be blank
opt := &godo.TokenListOptions{}
for {
repositories, resp, err := client.Registry.ListRepositoriesV2(ctx, registryName, opt)
if err != nil {
return nil, err
}
// append the current page's registries to our list
list = append(list, repositories...)
// if we are at the last page, break out the for loop
if resp.Links == nil || resp.Links.IsLastPage() {
break
}
// grab the next page token
nextPageToken, err := resp.Links.NextPageToken()
if err != nil {
return nil, err
}
// provide the next page token for the next request
opt.Token = nextPageToken
}
return list, nil
}
Automatic Retries and Exponential Backoff
The Godo client can be configured to use automatic retries and exponentional backoff for requests that fail with 429 or 500-level response codes via go-retryablehttp. To configure Godo to enable usage of go-retryablehttp, the RetryConfig.RetryMax must be set.
The most recent commit recorded on digitalocean/godo was 21 days ago, based on the GitHub push timestamp. The repository has 384 forks — one of the better signals of community interest.
How does digitalocean/godo compare to other Backend projects?
digitalocean/godo is tracked by TopGit in the Backend category, with 1.5k GitHub stars and written in Go. Browse the Backend topic page on TopGit to compare it against similar projects by stars and activity.
How many stars does digitalocean/godo have?
digitalocean/godo has 1.5k GitHub stars — refresh the page for the live number, or check github.com/digitalocean/godo. TopGit mirrors GitHub's count but does not claim minute-by-minute accuracy.
Is digitalocean/godo open source?
TopGit's metadata for digitalocean/godo does not record a license. Most public repositories on GitHub ARE open source, but the exact terms vary — verify by opening the LICENSE file directly.
What is digitalocean/godo?
digitalocean/godo (digitalocean/godo) is a Go project on GitHub. From the project's own README: DigitalOcean Go API client
Where do I read more about digitalocean/godo?
This TopGit page is a snapshot — the READ ME tab shows the project's own README content (links stripped, images preserved). The GitHub repository at github.com/digitalocean/godo is the definitive source.
Read full README in the tab above.
Still deciding about godo?
One click hands the question to an AI along with this page — see what it says about godo.