Skip to content

temporalio/sdk-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

31c4c30 · Mar 28, 2025
Mar 27, 2025
Feb 11, 2025
Mar 17, 2025
Mar 17, 2025
Mar 27, 2025
Feb 25, 2025
Mar 28, 2025
Sep 5, 2023
May 31, 2024
Feb 22, 2025
Sep 3, 2024
Mar 12, 2025
Mar 28, 2025
Feb 8, 2025
Mar 17, 2025
Mar 17, 2025
Jun 7, 2024
Aug 6, 2024
Apr 9, 2020
Feb 11, 2025
Mar 13, 2025
Mar 13, 2025

Repository files navigation

Temporal Go SDK Build Status PkgGoDev

Temporal is a distributed, scalable, durable, and highly available orchestration engine used to execute asynchronous long-running business logic in a scalable and resilient way.

"Temporal Go SDK" is the framework for authoring workflows and activities using Go language.

How to use

Clone this repo into the preferred location.

git clone https://github.com/temporalio/sdk-go.git

See samples to get started.

Documentation is available here. You can also find the API documentation here.

Using slog

If using Go version 1.21+ the Go SDK provides built in integration with the standard slog package.

package main
import (
	"log/slog"
	"os"

	"go.temporal.io/sdk/client"
	"go.temporal.io/sdk/log"
	"go.temporal.io/sdk/worker"
)

func main() {
	clientOptions := client.Options{
		Logger: log.NewStructuredLogger(
			slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
				AddSource: true,
				Level:     slog.LevelDebug,
			}))),
	}
	temporalClient, err := client.Dial(clientOptions)
	// ...
}

Workflow determinism checker

See contrib/tools/workflowcheck for a tool to detect non-determinism in Workflow Definitions.

Contributing

We'd love your help in making the Temporal Go SDK great. Please review our contribution guidelines.

Go SDK upgrading past v1.25.1

Go SDK version v1.26.0 switched from using https://github.com/gogo/protobuf to https://github.com/golang/protobuf. While this migration is mostly internal there are a few user visible changes to be aware of:

Change in types

Incompatible proto/json encoding

Proto enums will, when formatted to JSON, now be in SCREAMING_SNAKE_CASE rather than PascalCase. * If trying to deserialize old JSON with PascalCase to proto use go.temporal.io/api/temporalproto.

If users used Temporal proto types in their Workflows, such as for activity output, users may need to modify the default data converter to handle these payloads.

	converter.NewProtoJSONPayloadConverterWithOptions(converter.ProtoJSONPayloadConverterOptions{
		LegacyTemporalProtoCompat: true,
	}),

While upgrading from Go SDK version < 1.26.0 to a version >= 1.26.0 users may want to also bias towards using proto binary to avoid any potential incompatibilities due to having clients serialize messages with incompatible proto/json format.

On clients running Go SDK < 1.26.0

converter.NewCompositeDataConverter(
		converter.NewNilPayloadConverter(),
		converter.NewByteSlicePayloadConverter(),
		converter.NewProtoPayloadConverter(),
		converter.NewProtoJSONPayloadConverterWithOptions(),
		converter.NewJSONPayloadConverter(),
	)

On clients running Go SDK >= 1.26.0

converter.NewCompositeDataConverter(
		converter.NewNilPayloadConverter(),
		converter.NewByteSlicePayloadConverter(),
		converter.NewProtoPayloadConverter(),
		converter.NewProtoJSONPayloadConverterWithOptions(converter.ProtoJSONPayloadConverterOptions{
			LegacyTemporalProtoCompat: true,
		}),
		converter.NewJSONPayloadConverter(),
	)

Note: Payloads encoded with proto/binary will not be readable in the Temporal web UI.

License

MIT License, please see LICENSE for details.