goa v3.0.0

Announcing Goa v3.0.0

After more than 2 years of work and contributions from 40 different authors, I am really proud to announce the official release of Goa v2 (and v3 see Go Modules Support below). This release includes many improvements, bug fixes and new features. Most notably Goa v2 focuses on defining a clean separation of layers both in designs and in generated code. One concrete result of this clean separation is the ability to define services that serve both HTTP and gRPC requests. Other major improvements include a more idiomatic package and generated code with fewer dependencies. The generated code is completely modular making it possible to override specific endpoints at any level (transport, endpoint or business logic level).

Goa v2 is already used in production in a number of companies running business critical applications. The teams using Goa benefit from the ability to design the APIs of the services explicitly and to review the designs with other teams prior to starting implementation. When implementing the services, the Goa tool considerably accelerates development by generating both the server and client code that marshals, unmarshals and validates the requests. With v2 the developers can override any part of the generated code and still get the benefit of always up-to-date specification via the generated OpenAPI specification and proto files.

Go Modules Support

But wait there’s more! :) With the release of Goa v2 also comes the release of Goa v3! Goa v3 is functionally identical to v2 but adds support for Go modules. We didn’t want to introduce incompatibilities in v2 given that it is already used in production so are releasing v3 instead. The goa tool in v3 is able to generate code for both v2 and v3 designs making it convenient for existing v2 users to embrace v3. Both versions can be used concurrently with v2 being installed in the $GOPATH and v3 as a module. Going forward improvements will go to both the v2 and v3 branches until such times when the use of $GOPATH becomes obsolete.

Goa Source Code

The Goa source code is available in Github: There are three branches, one for each major version (v1, v2 and v3). The v3 branch is now the default branch so that users browsing the source code can see the latest and greatest by default. Users that are still using the master branch and don’t want to upgrade must now vendor Goa (the master branch while still available for vendoring is now deprecated).

Contributions

As always, we love getting pull requests! In particular, an area that would benefit a lot from your contributions is the website and the Goa documentation hosted there. The source code for the website can be found in Github at https://github.com/goadesign/goa.design. Just fork the source code, make your changes or additions and submit a PR – we will happily review and merge your submissions.

Thank you!

As mentioned above 40 authors contributed to Goa v2. Thank you all for the support and great work! You are the reason Goa is what it is today. A special mention goes to Nitin Mohan who implemented the bulk of the gRPC support and fixed countless issues as teams initially embraced v2. We have had numerous design sessions sometimes reverting previously made decisions and Nitin has been extremely supportive keeping a positive attitude throughout the entire process. Thank you Nitin!

The Future is Bright

Now that v2 and v3 are officially released the team is committing to keeping the framework backwards compatible as improvements and additions are made. There is a lot more than can be done, especially given the more powerful plugin support implemented in v2. There are already a few plugins in place including the goa-kit plugin which makes it possible to generate Go kit compliant microservices. The sky is the limit, plugins for building client mocks? consumer driven contracts? Kubernetes templates? Service maps? JavaScript clients? all of these and an infinity more are possible. So take a look, feel inspired and make contributions back to the community!