goss is a free, open source cloud infrastructure management project written in Go and released under Apache-2.0. It has 5,971 GitHub stars, 501 forks and 57 open issues, and was last pushed 4 days ago. On this registry it ranks #23 of 43 tracked projects in Cloud Infrastructure Management, with 5 head-to-head comparisons available. It gained 3 stars over the last 3 tracked days.

What is goss?

Goss is an Apache-2.0 licensed, Go-based YAML test runner that validates the configuration of a server or container and can expose the result as a health endpoint, built for DevOps engineers and SREs who need fast, repeatable checks on Linux hosts, Docker containers, and Kubernetes workloads.

What it is

Goss lives in the infrastructure-as-code and DevOps tooling ecosystem, alongside the CI pipelines and monitoring systems that consume its output. It is a YAML-based alternative to serverspec, the Ruby tool that validates a server's configuration through a domain-specific language. Where serverspec asks the operator to write every assertion by hand, Goss starts from the live system: it inspects the current state of a machine and derives a test suite from it, so the known-good configuration is captured first and asserted later.

The concrete problem it solves is configuration drift and untested provisioning. After a machine is built, an image is baked, or a container starts, something has to confirm that the sshd configuration, the listening ports, the packages, and the services are still what they were meant to be. Goss turns that verification into a file that can be executed on demand, waited on until it passes, or served as an HTTP health endpoint for external monitors. Small to medium suites are near instantaneous, and the whole tool ships as a single small binary, which keeps it usable inside restricted hosts and container images where a full test framework would not fit.

Key capabilities

  • YAML test suites generated from current system state using the add command, so assertions begin as a snapshot of a working machine.
  • Three execution modes for one suite: run it once, wait on it with retries, or serve it as a health endpoint.
  • dgoss wrapper for testing containers, with additional user-submitted wrappers kgoss for Kubernetes and dcgoss for Docker Compose.
  • Distribution as a release tarball, for example goss_0.4.10_linux_x86_64.tar.gz from the GitHub releases page, extracted directly to /usr/local/bin/goss.
  • Build from source with make build, or with goreleaser using goreleaser build, --single-target, --clean, and --snapshot flags.
  • Published container image for running Goss inside containerized environments.
  • Health endpoint output aimed at monitoring tooling, reflected in the project's Nagios and Sensu topics.

Who uses it and how

  • CI pipelines that validate a freshly provisioned host or image; the README warns explicitly that pipelines should pin a specific release tag such as v0.4.10 rather than download latest, because the latest release may behave unexpectedly.
  • Container workflows using the dgoss wrapper to assert the contents and behaviour of a built image before it is promoted.
  • Kubernetes and Docker Compose teams using kgoss and dcgoss for container ordering and healthcheck examples, as described in the maintainer's blog post on simplified health checks.
  • Monitoring-driven operations teams that pull Goss output into existing alerting through the health endpoint rather than authoring separate checks.
  • Infrastructure-as-code practitioners who keep the YAML suite in version control next to provisioning code, so a machine build and its acceptance criteria travel together.

Getting started

The documented path is a manual install from a pinned GitHub release, streaming the tarball into /usr/local/bin/goss and optionally the dgoss wrapper into the same directory. Building from source is also supported through make build or goreleaser.

How it compares

The README positions Goss directly as a YAML-based alternative to serverspec, which is the closest comparable tool named in the project's own facts. The practical contrast is authoring model and footprint: Goss generates a starting suite from the machine's current state and ships as a single small Go binary, while serverspec expects assertions to be written by hand in a Ruby-based test framework.

When to use it — and when not to

A self-hoster needs to run a binary and keep a YAML file under version control; nothing in the facts indicates a required database, object store, or SMTP dependency, and suites can simply be executed, waited on, or served over HTTP. It is the wrong choice for anyone expecting configuration management or remediation, because Goss validates state rather than converging it, and pipelines that ignore the warning about latest will get unpredictable behaviour. The README itself is brief and defers heavily to documentation hosted on Read the Docs, so teams wanting everything explained in-repo should expect to follow external links, and the tracker carries 57 open issues at the time of writing.

project readme (upstream, from github) — read inline

Goss - Quick and Easy server validation

Integration tests Github All Releases Documentation Status ** Blog

Goss in 45 seconds

asciicast

Note: For testing containers see the dgoss wrapper. Also, user submitted wrapper scripts for Kubernetes kgoss and Docker Compose dcgoss.

Note: For some Docker/Kubernetes healthcheck, health endpoint, and container ordering examples, see [my blog post][kubernetes-simplified-health-checks].

Introduction

What is Goss?

Goss is a YAML based serverspec alternative tool for validating a server's configuration. It eases the process of writing tests by allowing the user to generate tests from the current system state. Once the test suite is written they can be executed, waited-on, or served as a health endpoint.

Why use Goss?

  • Goss is EASY! - Goss in 45 seconds
  • Goss is FAST! - small-medium test suites are near instantaneous, see benchmarks
  • Goss is SMALL! - makes it easier to edit simple goss.yaml files in IDEs, providing usual coding assistance such as inline documentation, completion and static analysis. See #793 for screenshots.

For example, to configure the Json schema in JetBrains intellij IDEA, follow documented instructions, with arguments such as:

  • schema url=https://goss.readthedocs.io/en/stable/schema.yaml
  • schema version=Json schema version 7
  • file path pattern=*/goss.yaml

In addition, Goss files can also be further manually edited (without yet full json support) to use:

Some examples:

user:
  sshd:
    title: UID must be between 50-100, GID doesn't matter. home is flexible
    meta:
      desc: Ensure sshd is enabled and running since it's needed for system management
      sev: 5
    exists: true
    uid:
      # Validate that UID is between 50 and 100
      and:
        gt: 50
        lt: 100
    home:
      # Home can be any of the following
      or:
      - /var/empty/sshd
      - /var/run/sshd

package:
  kernel:
    installed: true
    versions:
      # Must have 3 kernels and none of them can be 4.4.0
      and:
      - have-len: 3
      - not:
          contain-element: 4.4.0

  # Loaded from --vars YAML/JSON file
  {{.Va

readme truncated — read the full docs on github

Frequently asked questions

Is goss free to use?

goss is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does goss do?

Quick and Easy server testing/validation

What is goss written in?

goss is primarily written in Go. Its source is publicly available at https://github.com/goss-org/goss, and it has 5,971 GitHub stars.