waypoint

Announcing HashiCorp Waypoint

A consistent developer workflow to build, deploy, and release applications across any platform.

Today, we are happy to announce HashiCorp Waypoint, a new open source project that provides developers a consistent workflow to build, deploy, and release applications across any platform. Waypoint enables developers to get their applications from development to production in a single file and deploy using a single command: waypoint up.

Out of the box, Waypoint supports Kubernetes, HashiCorp Nomad, Amazon ECS, Google Cloud Run, Azure Container Instances, Docker, Buildpacks, and more. Waypoint is fully extensible and is based on a plugin system which allows Waypoint to work with any tool or platform. After deployment, Waypoint provides features such as logs, exec, and more to validate and debug any deployments. 

Waypoint is software you download and self-host to manage the deployment of applications that run on your own infrastructure or platforms. Waypoint does not require any HashiCorp-provided services.

Download and try Waypoint now from the Waypoint project website. Continue reading to learn more about what Waypoint is, the problems it solves, the features it has, and an example.

waypoint up workflow

Addressing Deployment Complexity

We built Waypoint for one simple reason: developers just want to deploy.

At HashiCorp, we have the opportunity to work with all types of organizations and individuals in our community, exposing us to a range of challenges facing developers in getting applications deployed and available to users. We talk with dozens of individual users every day through GitHub Issues, discussion forums, email, etc. We meet with over 500 companies every single week to discuss their ongoing development and operational challenges.

Through these interactions, we saw a pattern of developers (especially in medium-sized and larger organizations) being inundated with complexity: containers, schedulers, YAML files, serverless, and more. This complexity has improved the capability of our applications in many ways, but the cost can be seen in the learning curve required to just get your first application deployed. 

Another challenge we saw is that depending on where you want to deploy your application, the tool you use is often different — Docker and kubectl for Kubernetes, HashiCorp Packer and Terraform for VMs, custom CLIs for each serverless platform, etc. For the individual, this fragmentation again poses a learning curve challenge. For teams, it’s a challenge in consistency and complexity.

With Waypoint, we aim to solve these two challenges. Waypoint provides one easy-to-use command to get any application deployed: waypoint up. This workflow is consistent across any platform, including Kubernetes, Nomad, EC2, Google Cloud Run, and over a dozen more at launch. Waypoint can be extended with plugins to target any build/deploy/release logic. 

Developers just want to deploy. Waypoint gets you there.

Features

Waypoint provides a range of features that provide a workflow for deploying your applications as well as validating and debugging deployments. These features make Waypoint a powerful deployment tool for any application on any platform.

  • waypoint up: A single command that builds, deploys, and releases your application. Waypoint uses a configuration file, stored with your app’s code, to define how this works. We go into more detail about the Waypoint app lifecycle in the Waypoint documentation.
  • Automatic Per-App and Per-Deployment URLs: Applications deployed with Waypoint receive a public `waypoint.run` URL with a valid TLS certificate automatically generated via Let's Encrypt. Use this URL to quickly view your deployed applications and share your applications with others.
  • Exec: You can execute commands in the context of a deployed application using waypoint exec. You can use exec to open up a shell in your app, which you can use for debugging, executing database migrations, and many other purposes. Learn more about waypoint exec.
  • Logs: Waypoint gives you access to a real-time snapshot of your application’s logs. These logs are helpful when you need to debug emergent application behavior. They do not, however, replace comprehensive logging solutions like Datadog or Splunk. Waypoint app logs are aggregated and available to view via the CLI and the web-based UI. Learn more about logs.
  • Web UI: In addition to a simple and powerful command-line interface, Waypoint also includes a web-based user interface that allows you to view builds, deployments, and releases for projects and applications. The UI is read-only today and we will be continuously developing it to support more functionality in the future. We have also included tips within the UI on how to complete Waypoint workflows in the CLI.
  • Plugins: The build, deploy, and release logic is fully extensible using plugins. Waypoint ships with over a dozen built-in plugins, and anyone is welcome to extend Waypoint by writing their own plugins.

An Example Workflow

We will use an example to showcase the various features of Waypoint. This skips some setup steps, so if you'd like to try a full example on your own, please see our Getting Started guides. For this example, we'll deploy an application to Kubernetes. Alongside our app, we'll create a waypoint.hcl file. This file describes how to build, deploy, and release our application.

  1. project = "HashiCorp Waypoint"
  2. app "waypoint-up" {
  3. build {
  4. use "docker" {}
  5. registry {
  6. use "docker" {
  7. image = "hashicorp/wpmini"
  8. tag = gitrefpretty()
  9. }
  10. }
  11. }
  12. deploy {
  13. use "kubernetes" {
  14. probe_path="/"
  15. service_port=80
  16. }
  17. }
  18. release {
  19. use "kubernetes" {
  20. load_balancer=true
  21. port=80
  22. }
  23. }
  24. }

Build, Deploy, Release

The Waypoint configuration file describes three main stages of the application lifecycle: build, deploy, and release.

The build stage takes application source code and converts it to an artifact. The build process may also include an optional registry configuration to push the built artifact to a registry so that it is available for the deployment platform. For example, this stage converts your source to a Docker  image, an EC2 AMI, etc.

The deploy stage takes a previously built artifact and stages it onto the target deployment platform and is available via deployment URLs or other internal means. Waypoint supports Kubernetes, Nomad, EC2, ECS, Google Cloud Run, and more.

The release stage activates a previously staged deployment and opens it to general traffic. We will be adding support to the project in the future for promoting applications between environments, rolling back deployments and releases, and for progressively moving traffic between servers following a release.

Waypoint up

The waypoint up command runs the entire build, deploy, and release stages to deploy the application. At the end, it outputs one or more URLs you can use to access your application. No matter what application you're deploying or to what platform, you always use waypoint up to deploy.

Running waypoint up

You can also use Waypoint to run the build, deploy, and release steps separately, which can be helpful for integrating with GitHub Actions and CI/CD tools like CircleCI and Jenkins. Learn more about automating your application workflow with Waypoint.

App and Deployment URLs

Applications deployed with Waypoint will receive a public waypoint.run URL with a valid TLS certificate automatically generated via Let's Encrypt. Use this URL to quickly view your deployed applications and share your applications with others. We provide this URL via a free, public service hosted by HashiCorp. This feature is optional and can be disabled.

In the example above, the URL is https://recently-pleasant-duck--v1.waypoint.run. (Note that this URL will not work anymore since we only kept the app running while we were authoring this blog post.) 

You can also browse to specific deployment versions using the syntax https://recently-pleasant-duck--vN.waypoint.run where N is the deployment version number. This is a very useful feature to share pre-release versions of your application with team members.

App deployed with Waypoint

Waypoint Logs

Waypoint gives you access to a real-time snapshot of your application’s logs.

These logs are helpful when you need to debug emergent application behavior. They do not, however, replace comprehensive logging solutions. Waypoint app logs are aggregated and available to view via the CLI and the web-based UI.

This log feature works no matter what platform you're using. Whether you're on Kubernetes, EC2, Google Cloud Run, or any other platform, you can view your logs in a consistent way. Using the UI, you can view logs across multiple applications that may be deployed to different platforms.

Waypoint Web UI

Waypoint Exec

You can execute commands in the context of a deployed application using waypoint exec.

This feature lets you open a shell, run scripts, or do anything else you'd like to do to your deployments. Just like logs, this feature works across all platforms supported by Waypoint.

waypoint exec command

Even More Capabilities

This list is just a glimpse of some of the features Waypoint supports. 

Waypoint can be used to manage application configuration through environment variables, you can integrate Waypoint with your CI or GitHub, you can use workspaces to create branch-specific environments, you can write your own plugins, and more. Additionally, Waypoint is a brand new project. We expect to continue to add more features to Waypoint over the coming months.

Waypoint with Existing Applications

If you have existing apps and a deployment workflow, you might feel uncertain that you can easily make use of Waypoint. We do not expect that teams are immediately going to rebuild their existing workflows from scratch using Waypoint.

Instead, we have plugins such as "docker-pull" and a local execution mode that enable you to adopt Waypoint into applications that have previously defined workflows. Additionally, we have documentation that describes how to integrate Waypoint into CI systems such as CircleCI and Jenkins.

This feature lets you get your application deployment history into the Waypoint UI and can enable exec, logs, configuration, and more for your app. With a small amount of effort, you get the immediate benefit of using Waypoint while you consider whether you'd like to move to a more managed plugin.

And, if you have multiple applications, this approach lets you mix and match: some applications with predefined deployment logic may use the "exec" plugin, while newer applications might opt to using a buildpack-based approach. Either way, `waypoint up` gets your applications to production.

Fully Extensible via Plugins

The build, deploy, and release logic is fully extensible using plugins. Waypoint is built on the same plugin system as Terraform, and we believe it is just as easy, if not easier, to write plugins for Waypoint.

Waypoint ships with over a dozen built-in plugins to start, and we hope and expect that over time, with the help of the open source community, this number will grow dramatically. When we first released Terraform, we shipped around 6 providers. Today, there are over 300 Terraform providers. We believe Waypoint has the opportunity to do the same for application deployment. 

If you're interested in writing plugins, please read our plugin authoring guide and take a look at the source for the plugins that are built-in to the Waypoint 0.1 release.

Learn More

To learn more about Waypoint, please visit the Waypoint website. The following pages in particular are also good next steps:

  • Try Waypoint. Try out Waypoint by visiting the Getting Started page to view a quick start demo or follow step-by-step tutorials that reference our example apps written in NodeJS, Python, Ruby, Java, and many other languages, frameworks, and cloud platforms.  
  • Give us feedback. Waypoint as a project is still in its early phase and we would like to ask the community for feedback using the HashiCorp Discuss forum. You can also visit the Community page to learn about how to contribute to the project.
  • Write a Waypoint plugin. We’d love your help to continue to build and improve Waypoint. If you have an idea for a Waypoint plugin, post your idea as a GitHub Issue or propose the idea to the Waypoint forum in HashiCorp Discuss.
  • Share your app. If you’ve deployed your app with Waypoint, take a screenshot of it running with your Waypoint URL and post it to Twitter, tagged with #WaypointUp @HashiCorp. If you’d like others to see your app running, share your Waypoint URL, too. We will be highlighting community apps in the coming weeks.

Sign up for the latest HashiCorp news