Getting ready for a Pluggable Transports project

As you start to build your own Pluggable Transports projects, you’re going to need some supporting tools. Most tools have step-by-step guides for implementation, but some assume that you will already have these essentials installed. You will most likely be building a client / server configuration - this means you will have a machine acting as a server (receiving data from a censored location and forwarding it to the open internet), and a machine acting as a client (from with a censored location, talking to your server).

Here are some of the ways to configure the environment you’re using:


This could be on your local machine, or installed in a data center somewhere. Our instructions for OpenVPN assume that you will be using an Ubuntu server (version 16.04.1 LTS). If you’re looking to install Ubuntu in the cloud, consider using DigitalOcean, who offer a range of pre-configured server setups depending on your needs. They also have their own basic configuration guide for setting up the server and setting up a firewall.

Digital Ocean also offer CentOS, which is the server platform used for building the Marionette binary.

You can also follow our guide to setting up a server for Plugable Transports here


Our list of Transports will tell you which ones work on which platform. If you’re going to compile the software yourself, you will most likely need a Linux-style environment. The marionette project fully tested their build process on both Mac OSX and CentOS. In some cases, such as a mobile deployment, the software will be built on a desktop computer before being transferred to a mobile device.


The Go toolchain is the most commonly used language for Pluggable Transports. To install Go, you will need to follow the instructions at

To get started with a Go program, you will make sure you have a GOPATH variable set, for example:

export GOPATH=~/goprojects

You then download the go package from its URL

go get

This will download the package you are going to install (into $GOPATH\src), and all of the dependencies that the developer has linked to in their code. When you are ready to build and install, follow the instructions from the developer. These instructions will usually include the command

go install package

This will compile the package and its dependencies, with the resulting binary located in the directory $GOPATH\bin

We also have a more in-depth look at Go, which teachees developers how to implement transports in their own applications.

Other libraries

Most other libraries will be retrieved and installed as part of an installation script. Marionette’s instructions include running a file called before building the Go package. This is a shell script that downloads and compiles third-party binary files needed for Marionette (openfst, re2, and gmp-6.1.2). Always check the developer’s instructions to make sure you have any dependencies installed before you perform the build.