Webinar
Smarty

We ❤️ open source

Few things are more fun than discovering that someone has already gone to the trouble of solving your problem for you in the form of an open-source software project.

In the case that no one has solved your problem yet, it can be very satisfying to invent a solution in the form of an open-source software project—especially if your project becomes successful.

We've experienced both scenarios in our work on address verification software, and we've created some successful open-source projects that we've shared with the world. In some cases, "successful" is a word which means that we had a need, wrote some software which met the need, and eventually published the code to GitHub. Here is a listing of some of that code, grouped according to a few simple categories. Feel free to check out the code. We hope it's helpful!

Changelogs

Much of our code is actually closed-source, but that hasn't stopped us from publishing an open-source changelog for said closed-source software:

github.com/smartystreets/changelog

Smarty SDKs

We've built SDKs that allow easy integration with each of our cloud APIs. Each is completely open-source and hosted on Github:

Testing tools

  • gunit - xUnit-style testing in Go.
  • assertions - Comprehensive assertion functions for Go.
  • scantest - Auto test runner (with web UI) for Go tests.
  • GoConvey - BDD testing for Go in the browser.

Libraries that facilitate testing

  • clock - Drop-in replacement for time.Now, time.Sleep allowing control over time in tests.
  • logging - Drop-in replacement for the Go log package which captures log statements.
  • random - Generates randomized values in production, deterministic values for testing.

Utility libraries

  • version-tools - POSIX-compatible shell scripts with no dependencies to facilitate calculation of semantic version values and to tag SCM (Git, etc.) repositories with a version.
  • scanners - Variations on the bufio.Scanner interface over various types of sources (csv, strings.Fields, fixed-width, etc.).
  • nu - Convenient constructor functions for Go standard library types.

The web

  • detour - An alternate, MVC-based, approach to HTTP applications in Go.
  • s3 - Signs requests to Amazon S3. A near drop-in replacement for http.NewRequest.

Wireup and devops

  • configo - Flexible application configuration for Go programs.
  • metrics - Instrumentation for Go applications.
  • go-packaging - Various packaging tools for Go.
  • apt-transport-s3 - S3 transport for APT.
  • raptr - A simple, shell-based APT Repository builder and updater.

Research and development

  • go-disruptor - A port of the LMAX Disruptor to the Go language.
  • mafsa - Minimal Acyclic Finite State Automata in Go. Sounds fancy, huh?