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 (opens in new tab) 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 (opens in new tab). 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 (opens in new tab)
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:
- .NET SDK (opens in new tab)
- Go SDK (opens in new tab)
- iOS SDK (opens in new tab)
- Java SDK (opens in new tab)
- Javascript SDK (opens in new tab)
- PHP SDK (opens in new tab)
- Python SDK (opens in new tab)
- Ruby SDK (opens in new tab)
- OpenAPI Spec (opens in new tab)
Testing tools
- gunit (opens in new tab) - xUnit-style testing in Go.
- assertions (opens in new tab) - Comprehensive assertion functions for Go.
- scantest (opens in new tab) - Auto test runner (with web UI) for Go tests.
- GoConvey (opens in new tab) - BDD testing for Go in the browser.
Libraries that facilitate testing
- clock (opens in new tab) - Drop-in replacement for time.Now, time.Sleep allowing control over time in tests.
- logging (opens in new tab) - Drop-in replacement for the Go log package which captures log statements.
- random (opens in new tab) - Generates randomized values in production, deterministic values for testing.
Utility libraries
- version-tools (opens in new tab) - 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 (opens in new tab) - Variations on the bufio.Scanner interface over various types of sources (csv, strings.Fields, fixed-width, etc.).
- nu (opens in new tab) - Convenient constructor functions for Go standard library types.
The web
- detour (opens in new tab) - An alternate, MVC-based, approach to HTTP applications in Go.
- s3 (opens in new tab) - Signs requests to Amazon S3. A near drop-in replacement for http.NewRequest.
Wireup and devops
- configo (opens in new tab) - Flexible application configuration for Go programs.
- metrics (opens in new tab) - Instrumentation for Go applications.
- go-packaging (opens in new tab) - Various packaging tools for Go.
- apt-transport-s3 (opens in new tab) - S3 transport for APT.
- raptr (opens in new tab) - A simple, shell-based APT Repository builder and updater.
Research and development
- go-disruptor (opens in new tab) - A port of the LMAX Disruptor to the Go language.
- mafsa (opens in new tab) - Minimal Acyclic Finite State Automata in Go. Sounds fancy, huh?