Nov 28, 2014 · Updated Sep 14, 2026

<span aria-hidden="true" id="launching-official-go-sdk-for-enhanced-integration"></span>

# Launching official Go SDK for enhanced integration

![Kevin van Zonneveld](/assets/images/teammates/avatar-kvz-4.jpg)

**Kevin van Zonneveld**

Co-founder · Amsterdam, The Netherlands · Show bio

[](https://x.com/kvz)[](https://github.com/kvz)

This is our 2014 launch announcement. Its examples show the original SDK API; for new integrations, follow the current [Go SDK documentation](/docs/sdks/go-sdk.md) instead.

Today, our team is excited to announce the launch of the official Transloadit Go SDK. If you are not familiar with [Go⁠](https://golang.org/), it is a really powerful open source language that is growing fast. Even though our API is written in Node.js, we have been happily using Go internally for scaling and system utilities. We are, therefore, always looking for more ways to leverage the power of this fun language.

![Gopher](/_next/static/immutable/media/gopher-600x600.1roqy-19rtfog.png)

While it was already possible to talk to our REST API using any language, we are hoping that this release will make it easier than ever for developers with an interest in Go to integrate our file import & encoding services into their own projects.

The code and docs are up on [GitHub⁠](https://github.com/transloadit/go-sdk) and [Godoc⁠](https://godoc.org/github.com/transloadit/go-sdk), but we would also like to give you an idea of how our SDK could be used to resize a `lol_cat.jpg` image to 75×75 pixels.

After a quick `go get github.com/transloadit/go-sdk`, this is what the integration code could look like:

```go
import "github.com/transloadit/go-sdk"
import "fmt"

// Create client
options := transloadit.DefaultConfig
options.AuthKey = "YOUR_TRANSLOADIT_KEY"
options.AuthSecret = "YOUR_TRANSLOADIT_SECRET"
client, err := transloadit.NewClient(options)
if err != nil {
    panic(err)
}

// Initialize new assembly
assembly := client.CreateAssembly()

// Add file to upload
err = assembly.AddFile("./lol_cat.jpg")
if err != nil {
    panic(err)
}

// Add Instructions, e.g. resize image to 75x75px
assembly.AddStep("resize", map[string]interface{}{
    "robot":           "/image/resize",
    "width":           75,
    "height":          75,
    "resize_strategy": "crop",
})

// Wait until Transloadit is done processing all uploads
// and is ready for you to download the results
assembly.Blocking = true

// Start the upload
info, err := assembly.Upload()
if err != nil {
    panic(err)
}

fmt.Printf("You can view the result at: %s\n", info.Results["resize"][0].Url)

```

While this may seem like a lot of trouble to simply resize an image, it should be noted that this same snippet could also be used to optimize video for tablets, convert to [HLS⁠](https://en.wikipedia.org/wiki/HTTP%5FLive%5FStreaming) in order to prepare your app's videos for submission to the App Store, generate animated gif previews of documents, and to work with all other [cool conversions](/demos.md) that Transloadit's Robots can do for you.

As a bonus, this SDK ships with a built-in feature that allows you to automatically create Assemblies from a local directory. It will not only upload all files to Transloadit and convert them using the Steps you supplied, but also immediately download all the results. In addition to that, this function can **monitor a directory for changes** and automatically process them as they occur. Let's have a look at the code needed for that:

```go
options := &transloadit.WatchOptions{
    // Use Encoding instructions as stored in a Template in your Transloadit Account
    TemplateId: "02a8693053cd11e49b9ba916b58830db",
    // The directory which the files will be taken from
    Input: "./input",
    // The directory where the results are downloaded into
    Output: "./output",
    // Watch the input directory for changes
    Watch: true,
    // Put the original files from the input directory
    // into the output directory (recommended as the input dir gets cleared)
    Preserve: true,
}

watcher := client.Watch(options)

```

Now you can just drop files in the `./input` directory and the converted results will then be saved in `./output`. Pretty convenient, right? 😄

To a degree, yes. But not yet as convenient as we would like, because you will still have to write a few lines of code to profit from this.

That is why we have collaborated with the young and gifted [Acconut⁠](https://github.com/Acconut) to not only build this SDK, but also build a CLI tool based on this SDK that lets you use Transloadit on your own servers / workstations **without writing a single line of code**. Stay tuned for a separate blog post that will give this tool the attention that it deserves!

If you have any feedback, we would love to hear from you either in the project's [GitHub issues⁠](https://github.com/transloadit/go-sdk/issues), the comments section here, or in our inbox over at [hello@transloadit.com⁠](mailto:hello@transloadit.com).

Lastly, we would like to give a shout-out to our emeritus [Felix⁠](https://twitter.com/felixge) who did a thorough review on this project. 😄

[#integrations](/blog/tags/integrations.md)

### Join 25k+ developers

Sign up for our [monthly newsletter](/newsletters.md) to receive direct links to 3 exclusive tech — and 2 product updates. No less, no more.

Email address

Subscribe

One email a month. Unsubscribe anytime.

## File uploading and encoding. Made simple.

Trusted by Coursera and The New York Times for a reliable API, top-notch support, and open source like [Uppy⁠](https://uppy.io) and [Tus⁠](https://tus.io).

[Try it free](/c/signup/)[Request a demo](/request-demo.md)

No credit card needed · Cancel anytime
