diff --git a/content/go-cloud.article b/content/go-cloud.article
new file mode 100644
index 0000000..b61b318
--- /dev/null
+++ b/content/go-cloud.article
@@ -0,0 +1,99 @@
+Portable Cloud Programming with Go Cloud
+24 Jul 2018
+
+Eno Compton
+
+Cassandra Salisbury
+
+* Introduction
+
+Today, the Go team at Google is releasing a new open source project, [[https://github.com/google/go-cloud][Go Cloud]], a library and tools for developing on the [[https://cloud.google.com/open-cloud/][open cloud]]. With this project, we aim to make Go the language of choice for developers building portable cloud applications.
+
+This post explains why we started this project, the details of how Go Cloud works, and how to get involved.
+
+* Why portable cloud programming? Why now?
+
+We estimate there are now [[https://research.swtch.com/gophercount][over one million]] Go developers worldwide. Go powers many of the most critical cloud infrastructure projects, including Kubernetes, Istio, and Docker. Companies like Lyft, Capital One, Netflix and [[https://github.com/golang/go/wiki/GoUsers][many more]] are depending on Go in production. Over the years, we've found that developers love Go for cloud development because of its efficiency, productivity, built-in concurrency, and low latency.
+
+As part of our work to support Go's rapid growth, we have been interviewing teams who work with Go to understand how they use the language and how the Go ecosystem can improve further. One common theme with many organizations is the need for portability across cloud providers. These teams want to deploy robust applications in [[https://en.wikipedia.org/wiki/Cloud_computing#Multicloud][multi-cloud]] and [[https://en.wikipedia.org/wiki/Cloud_computing#Hybrid_cloud][hybrid-cloud]] environments, and migrate their workloads between cloud providers without significant changes to their code.
+
+To achieve this, some teams attempt to decouple their applications from provider-specific APIs in order to produce simpler and more portable code. However the short-term pressure to ship features means teams often sacrifice longer-term efforts toward portability. As a result, most Go applications running in the cloud are tightly coupled to their initial cloud provider.
+
+As an alternative, teams can use Go Cloud, a set of open generic cloud APIs, to write simpler and more portable cloud applications. Go Cloud also sets the foundation for an ecosystem of portable cloud libraries to be built on top of these generic APIs. Go Cloud makes it possible for teams to meet their feature development goals while also preserving the long-term flexibility for multi-cloud and hybrid-cloud architectures. Go Cloud applications can also migrate to the cloud providers that best meet their needs.
+
+* What is Go Cloud?
+
+We have identified common services used by cloud applications and have created generic APIs to work across cloud providers. Today, Go Cloud is launching with blob storage, MySQL database access, runtime configuration, and an HTTP server configured with request logging, tracing, and health checking. Go Cloud offers support for Google Cloud Platform (GCP) and Amazon Web Services (AWS). We plan to work with cloud industry partners and the Go community to add support for additional cloud providers very soon.
+
+Go Cloud aims to develop vendor-neutral generic APIs for the most-used services across cloud providers such that deploying a Go application on another cloud is simple and easy. Go Cloud also lays the foundation for other open source projects to write cloud libraries that work across providers. Community feedback, from all types of developers at all levels, will inform the priority of future APIs in Go Cloud.
+
+* How does it work?
+
+At the core of Go Cloud is a collection of generic APIs for portable cloud programming. Let's look at an example of using blob storage. You can use the generic type [[https://godoc.org/github.com/google/go-cloud/blob#Bucket][`*blob.Bucket`]] to copy a file from a local disk to a cloud provider. Let's start by opening an S3 bucket using the included [[https://godoc.org/github.com/google/go-cloud/blob/s3blob][s3blob package]]:
+
+    // setupBucket opens an AWS bucket.
+    func setupBucket(ctx context.Context) (*blob.Bucket, error) {
+        // Obtain AWS credentials.
+        sess, err := session.NewSession(&aws.Config{
+            Region: aws.String("us-east-2"),
+        })
+        if err != nil {
+            return nil, err
+        }
+        // Open a handle to s3://go-cloud-bucket.
+        return s3blob.OpenBucket(ctx, sess, "go-cloud-bucket")
+    }
+
+Once a program has a `*blob.Bucket`, it can create a `*blob.Writer`, which implements `io.Writer`. From there, the program can use the `*blob.Writer` to write data to the bucket, checking that `Close` does not report an error.
+
+    ctx := context.Background()
+    b, err := setupBucket(ctx)
+    if err != nil {
+        log.Fatalf("Failed to open bucket: %v", err)
+    }
+    data, err := ioutil.ReadFile("gopher.png")
+    if err != nil {
+        log.Fatalf("Failed to read file: %v", err)
+    }
+    w, err := b.NewWriter(ctx, "gopher.png", nil)
+    if err != nil {
+        log.Fatalf("Failed to obtain writer: %v", err)
+    }
+    _, err = w.Write(data)
+    if err != nil {
+        log.Fatalf("Failed to write to bucket: %v", err)
+    }
+    if err := w.Close(); err != nil {
+        log.Fatalf("Failed to close: %v", err)
+    }
+
+Notice how the logic of using the bucket does not refer to AWS S3. Go Cloud makes swapping out cloud storage a matter of changing the function used to open the `*blob.Bucket`. The application could instead use Google Cloud Storage by constructing a `*blob.Bucket` using [[https://godoc.org/github.com/google/go-cloud/blob/gcsblob#OpenBucket][`gcsblob.OpenBucket`]] without changing the code that copies the file:
+
+    // setupBucket opens a GCS bucket.
+    func setupBucket(ctx context.Context) (*blob.Bucket, error) {
+        // Open GCS bucket.
+        creds, err := gcp.DefaultCredentials(ctx)
+        if err != nil {
+            return nil, err
+        }
+        c, err := gcp.NewHTTPClient(gcp.DefaultTransport(), gcp.CredentialsTokenSource(creds))
+        if err != nil {
+            return nil, err
+        }
+        // Open a handle to gs://go-cloud-bucket.
+        return gcsblob.OpenBucket(ctx, "go-cloud-bucket", c)
+    }
+
+While different steps are needed to access buckets on different cloud providers, the resulting type used by your application is the same: `*blob.Bucket`. This isolates application code from cloud-specific code. To increase interoperability with existing Go libraries, Go Cloud leverages established interfaces like `io.Writer`, `io.Reader`, and `*sql.DB`.
+
+The setup code needed to access cloud services tends to follow a pattern: higher abstractions are constructed from more basic abstractions. While you could write this code by hand, Go Cloud automates this with *Wire*, a tool that generates cloud-specific setup code for you. The [[https://github.com/google/go-cloud/tree/master/wire][Wire documentation]] explains how to install and use the tool and the [[https://github.com/google/go-cloud/tree/master/samples/guestbook][Guestbook sample]] shows Wire in action.
+
+* How can I get involved and learn more?
+
+To get started, we recommend following [[https://github.com/google/go-cloud/tree/master/samples/tutorial][the tutorial]] and then trying to build an application yourself. If you're already using AWS or GCP, you can try migrating parts of your existing application to use Go Cloud. If you're using a different cloud provider or an on-premise service, you can extend Go Cloud to support it by implementing the driver interfaces (like [[https://godoc.org/github.com/google/go-cloud/blob/driver#Bucket][`driver.Bucket`]]).
+
+We appreciate any and all input you have about your experience. [[https://github.com/google/go-cloud][Go Cloud's]] development is conducted on GitHub. We are looking forward to contributions, including pull requests. [[https://github.com/google/go-cloud/issues/new][File an issue]] to tell us what could be better or what future APIs the project should support. For updates and discussion about the project, join [[https://groups.google.com/forum/#!forum/go-cloud][the project's mailing list]].
+
+The project requires contributors to sign the same Contributor License Agreement as that of the Go project. Read the [[https://github.com/google/go-cloud/blob/master/CONTRIBUTING.md][contribution guidelines]] for more details. Please note, Go Cloud is covered by the Go [[https://github.com/google/go-cloud/blob/master/CODE_OF_CONDUCT.md][Code of Conduct]].
+
+Thank you for taking the time to learn about Go Cloud, we are excited to work with you to make Go the language of choice for developers building portable cloud applications.
