Why We Chose to Write Our CLI in Go

Currently, Cronally does not have a web UI. Instead, we chose to focus on a CLI for a number reasons:

  • Quicker development
  • More stable MVP
  • Easier to use
  • Fits into end-user CI/CD model

We considered a few different languages for development, including Python and Ruby, but ultimately chose Go.

Go provides us with some unique features that we really value.

Static binaries

By default, Go creates a static binary. At the expense of larger filesizes, a Go binary can run on virtually any architecture it was compiled for without worrying about a shared library being outdated or a Python module being too old.

Static binaries also eliminate client-side dependencies. No gems to install and you won’t see a single pip install in our docs.


Building architecture-specific versions of a binary simply requires Go to be built with each particular OS/architecture combination that you desire. Afterwards, the native Go toolset will produce a binary based on GOOS and GOARCH environment variables you provide.

Building our CLI for OS X looks like this: GOOS=darwin go install [package]

CLI framework

There’s no lack of CLI frameworks for most modern languages, and the same is true for Go. Using https://github.com/codegangsta/cli gives us a simple API for defining commands and options, and it also generates nice help text.

Back-end compatibility

Cronally’s back-end is written entirely in Go, so it was a natural transition to write our CLI in the same language.

Interested in Cronally? Check it out!