# What's new in the Go Cloud Development Kit
4 Mar 2019
Summary: Recent changes to the Go Cloud Development Kit (Go CDK).

The Go Cloud Development Kit team at Google

## Introduction

Last July, we [introduced](https://blog.golang.org/go-cloud) the [Go Cloud Development Kit](https://gocloud.dev)
(previously referred to as simply "Go Cloud"),
an open source project building libraries and tools to improve the experience
of developing for the cloud with Go.
We've made a lot of progress since then -- thank you to early contributors!
We look forward to growing the Go CDK community of users and contributors,
and are excited to work closely with early adopters.

## Portable APIs

Our first initiative is a set of portable APIs for common cloud services.
You write your application using these APIs,
and then deploy it on any combination of providers,
including AWS, GCP, Azure, on-premise, or on a single developer machine for testing.
Additional providers can be added by implementing an interface.

These portable APIs are a great fit if any of the following are true:

  - You develop cloud applications locally.
  - You have on-premise applications that you want to run in the cloud (permanently, or as part of a migration).
  - You want portability across multiple clouds.
  - You are creating a new Go application that will use cloud services.

Unlike traditional approaches where you would need to write new application
code for each cloud provider,
with the Go CDK you write your application code once using our portable
APIs to access the set of services listed below.
Then, you can run your application on any supported cloud with minimal config changes.

Our current set of APIs includes:

  - [blob](https://godoc.org/gocloud.dev/blob),
    for persistence of blob data.
    Supported providers include: AWS S3, Google Cloud Storage (GCS),
    Azure Storage, the filesystem, and in-memory.
  - [pubsub](https://godoc.org/gocloud.dev/pubsub) for publishing/subscribing
    of messages to a topic.
    Supported providers include: Amazon SNS/SQS,
    Google Pub/Sub, Azure Service Bus, RabbitMQ, and in-memory.
  - [runtimevar](https://godoc.org/gocloud.dev/runtimevar),
    for watching external configuration variables.
    Supported providers include AWS Parameter Store,
    Google Runtime Configurator, etcd, and the filesystem.
  - [secrets](https://godoc.org/gocloud.dev/secrets),
    for encryption/decryption.
    Supported providers include AWS KMS, GCP KMS,
    Hashicorp Vault, and local symmetric keys.
  - Helpers for connecting to cloud SQL providers. Supported providers include AWS RDS and Google Cloud SQL.
  - We are also working on a document storage API (e.g. MongoDB, DynamoDB, Firestore).

## Feedback

We hope you're as excited about the Go CDK as we are -- check out our [godoc](https://godoc.org/gocloud.dev),
walk through our [tutorial](https://github.com/google/go-cloud/tree/master/samples/tutorial),
and use the Go CDK in your application(s).
We'd love to hear your ideas for other APIs and API providers you'd like to see.

If you're digging into Go CDK please share your experiences with us:

  - What went well?
  - Were there any pain points using the APIs?
  - Are there any features missing in the API you used?
  - Suggestions for documentation improvements.

To send feedback, you can:

  - Submit issues to our public [GitHub repository](https://github.com/google/go-cloud/issues/new/choose).
  - Email [go-cdk-feedback@google.com](mailto:go-cdk-feedback@google.com).
  - Post to our [public Google group](https://groups.google.com/forum/#!forum/go-cloud).

Thanks!
