Skip to content

Document Go language support for polyglot AppHosts #700

@edmondshtogu

Description

@edmondshtogu

Overview

Go has been added as an experimental polyglot AppHost language in .NET Aspire, reaching parity with the existing TypeScript, Python, and Java AppHost implementations. The Aspire docs need to be updated to cover this new language option.

What changed

PR: microsoft/aspire#16038

New capabilities

  • Go AppHost support: Users can now create Aspire AppHosts using Go, with full code generation for the Aspire SDK
  • Fluent builder API: The generated Go SDK supports idiomatic method chaining with error accumulation:
    if err := builder.AddRedis("cache", nil, nil).WithDataVolume(nil, nil).Err(); err != nil {
        log.Fatalf("cache setup: %v", err)
    }
  • CLI scaffolding: aspire init --language go generates a Go AppHost project with apphost.go, go.mod, and aspire.config.json
  • SDK code generation: aspire restore --apphost apphost.go generates the Go SDK in .modules/
  • Feature flag: Go support is experimental and requires enabling via:
    aspire config set features:experimentalPolyglot:go true --global

Documentation areas to cover

  1. Getting started with Go AppHosts — prerequisites (Go 1.26+), project setup, running
  2. Go SDK API patterns — fluent chaining with .Err(), CreateBuilder, Build, Run
  3. aspire.config.json"language": "go" configuration
  4. Available integrations — all Aspire.Hosting.* integrations are available via code generation
  5. Update the polyglot/multi-language overview page to include Go alongside TypeScript, Python, Java

Example Go AppHost

package main

import (
    "log"
    "apphost/modules/aspire"
)

func main() {
    builder, err := aspire.CreateBuilder(nil)
    if err != nil {
        log.Fatalf("Failed to create builder: %v", err)
    }

    cache := builder.AddRedis("cache", nil, nil).WithDataVolume(nil, nil)
    if cache.Err() != nil {
        log.Fatalf("Failed to add Redis: %v", cache.Err())
    }

    app, err := builder.Build()
    if err != nil {
        log.Fatalf("Build: %v", err)
    }
    if err := app.Run(nil); err != nil {
        log.Fatalf("Run: %v", err)
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions