Customer Story How Miro builds and tests agentic features at scale while saving millions on test infrastructure

Signadot vs Garden.io:
Which Kubernetes Environment Model Fits Your Team?

Comparing Signadot and Garden.io comes down to two different answers to the same question: how should a team running microservices on Kubernetes get environments for development and testing?

Garden builds and deploys a complete copy of your stack for every environment, with a dependency graph and caching to make repeat runs fast. Signadot deploys only the services you changed into Sandboxes, lightweight ephemeral environments on a shared cluster, and routes requests to a single shared set of stable dependencies for everything else.

Neither model wins everywhere. Garden is stronger when you need reproducible environments built from zero, isolation of stateful services without extra configuration, and build and test caching across development and CI. Signadot is stronger when the stack is large, the number of concurrent environments is high, and provisioning time and infrastructure cost are the constraints.

This article explains how each tool works, compares them feature by feature, and closes with a decision framework by team size and use case.

The problems that push teams to either tool

The trigger is usually one of four problems, and which one it is matters for the choice.

  • A shared staging environment has become a queue. Teams wait for a turn to test, and one broken deploy blocks everyone.
  • CI takes too long to produce a testable environment, so end-to-end tests run after merge instead of before.
  • Preview environments exist but cost too much. Every open pull request duplicates the full stack, and the bill scales with PR volume.
  • Local development stopped working because the stack outgrew laptops, and mocks have drifted from the real services.

Garden and Signadot both address these problems. They differ in the mechanism, and the mechanism determines the cost curve and suitability for your stack.

How Garden works

Garden is a DevOps automation tool that describes your entire system as a graph and can build, deploy, and test it from a single command. You define actions of four kinds, Build, Deploy, Test, and Run, in garden.yml files, and Garden assembles them into a dependency graph it calls the Stack Graph. Because the graph knows what depends on what, Garden caches aggressively: the same image is never built twice, and the same test never reruns against unchanged code.

Environments are full deployments of that graph. Garden templates a unique Kubernetes namespace per developer, CI run, or pull request, and each namespace receives its own copy of every service in the project, datastores included. Sync mode live-reloads code changes into a running service without a rebuild or redeploy. Plugins cover Helm charts, Kustomize, plain manifests, and container builds, and Terraform and Pulumi actions can provision infrastructure as part of the same graph.

The core is open source under the Mozilla Public License 2.0. Garden’s hosted offering adds team-wide result caches shared across clusters and a remote container build service.

Repogarden.ymlStack GraphBuildDeployTestRundev-aliceapiwebjobsdbpr-101apiwebjobsdbpr-102apiwebjobsdb
One graph, but every namespace receives a full copy of every service and datastore.
Repogarden.ymlStack GraphBuildDeployTestRundev-aliceapiwebjobsdbpr-101apiwebjobsdbpr-102apiwebjobsdb
One graph, but every namespace receives a full copy of every service and datastore.

Where Garden fits:

  • One configuration drives development, CI, and preview environments, so the environment a developer tests in matches what CI runs.
  • Dependency-aware caching cuts repeat build and test time, which compounds in CI.
  • It reuses the Helm charts, Dockerfiles, and Terraform you already have.
  • Every environment is fully isolated, including its own datastores, with no extra per-resource setup.
  • Environments build from zero, so you do not need an existing healthy cluster to point at.

Where it strains:

  • Every environment carries the full stack. Twenty services means twenty deployments, plus datastores, per developer and per open PR.
  • A cold environment still has to deploy and start every service, which takes minutes even when caching skips the builds.
  • Each service needs garden.yml actions written and maintained, and the configuration has a documented learning curve.
  • Infrastructure cost scales with the number of concurrent environments, which is roughly developers plus open PRs.

That last point is the same ceiling any duplication-based approach runs into, whether the boundary is a namespace, a virtual cluster, or a whole cluster. Namespace-based environments hit it first because the cost is multiplicative rather than additive.

How Signadot works

Signadot is a Kubernetes-native validation platform built around Sandboxes, lightweight ephemeral environments that share one cluster. A Sandbox deploys only the services a change touches. Requests carry a routing key in a header, and the routing layer sends matching traffic through the sandboxed service versions while every other hop is served by the shared stable versions already running on the cluster. Because nothing else is duplicated, a Sandbox is ready in seconds and hundreds can run concurrently at marginal cost.

requestrouting key: alice-1Kubernetes clusterSandboxorders v2frontendorderspaymentsdatastore
The routing key sends one hop through a Sandbox. Every other hop uses the shared stable version, so the greyed service is never duplicated.
requestrouting key: alice-1Kubernetes clusterfrontendordersSandboxorders v2paymentsdatastore
The routing key sends one hop through a Sandbox. Every other hop uses the shared stable version, so the greyed service is never duplicated.

Testing runs where the environments are. Jobs execute existing Playwright, Cypress, or k6 suites inside the cluster against a Sandbox. Smart Tests run the same API calls against the PR version and the stable version of a service and flag behavioral differences. Plans package validation workflows so CI pipelines and coding agents can run them by name, and an MCP server lets agents create Sandboxes and validate their own changes.

Where Signadot fits:

  • Environments arrive in seconds at marginal cost, which makes one per pull request, per developer, and per agent task affordable.
  • Changes are tested against real running dependencies rather than mocks, because the shared cluster runs the real services.
  • It works with your existing manifests. There is no per-service configuration format to adopt.
  • Concurrency scales past what duplication can afford. Brex replaced namespace-based preview environments with Sandboxes and cut preview infrastructure costs by 99 percent, about 2 million dollars a year.

What it requires:

  • A shared cluster, usually staging, that runs stable versions of every service, and an owner who keeps it healthy. Signadot installs as an operator on that cluster.
  • Services must propagate request headers, typically trace context. Teams already running distributed tracing have this. Teams that do not must add propagation.
  • Isolating stateful resources is explicit. Resource plugins create per-Sandbox databases, queues, or other dependencies where a test needs them, instead of every environment getting copies by default.
  • Signadot is not a build tool. Images come from your existing CI, and Signadot does not build or cache them.
  • The platform is a commercial product rather than an open source core.

The deeper version of this tradeoff is a question about where the isolation boundary sits, which is covered in infra-level vs request-level isolation.

Signadot vs Garden.io: feature by feature

CapabilityGardenSignadot
Environment modelFull copy of the stack per namespaceOnly changed services deploy, the rest is shared
Time to a ready environmentMinutes for a cold environment, caching speeds repeatsSeconds
Cost per concurrent environmentFull-stack resource costMarginal, only the changed services
Build and test cachingCore strength, dependency-awareNone, uses your CI builds
Local developmentSync mode reloads code into a deployed environmentLocal process joins the cluster and receives routed requests
Datastore isolationEvery environment gets its own copies by defaultExplicit per-resource setup through resource plugins
Configurationgarden.yml actions per serviceWorks with existing manifests
Infrastructure provisioningTerraform and Pulumi actions in the same graphOut of scope
Coding agentsNo per-agent isolation modelOne Sandbox per agent task, MCP server built in
LicensingOpen source core, hosted paid tiersCommercial

The caching rows favor Garden and the environment rows favor Signadot, and that split summarizes the comparison. Garden optimizes the work of producing an environment. Signadot reduces how much environment there is to produce.

Signadot vs Garden.io by team size and use case

Choose Garden when:

  • Your stack is small enough that a full copy per environment fits comfortably in your cluster budget. At that scale duplication is simple and the isolation is complete.
  • You have no stable shared cluster to route against, and environments must be built from zero, infrastructure included.
  • Reproducibility is the goal: one command that takes a fresh cluster to a running, tested system.
  • CI build and test time is your bottleneck, and dependency-aware caching would remove most of it.
  • Policy requires an open source, self-hostable core.

Choose Signadot when:

  • The stack is too large to duplicate per change. The cost is multiplicative: services times concurrent environments, and it grows with the team.
  • You want an environment per pull request, per developer, and per coding agent at the same time, without the bill scaling the same way.
  • You already run a staging cluster and want every change validated against real dependencies before merge.
  • Time to environment is your bottleneck: reviews and tests wait on provisioning, not on builds.
What is thebottleneck?Start withGardenShared clusteralready running?Start withSignadotbuild and test timeenvironment availabilityyesno
Two questions decide it: what is slow, and whether a stable shared cluster already exists.
What is the bottleneck?build and test timeenvironmentavailabilityStart withGardenShared clusteralready running?noyesStart withSignadot
Two questions decide it: what is slow, and whether a stable shared cluster already exists.

Team size is a workable proxy for stack size and concurrency. A team of five with eight services can run either model, and Garden’s single-config simplicity and caching may win outright. A team of fifty with forty services and coding agents opening PRs cannot afford a full stack per change, and the shared-cluster model becomes the only affordable way to give every change its own environment. The duplication versus routing tradeoff, alongside two other approaches, is covered in more depth in the guide to ephemeral environments in Kubernetes.

The two tools also do not solve identical problems. Garden’s center of gravity is the build and deploy pipeline. Signadot’s is validation against real dependencies. A team whose pain is slow CI builds should evaluate Garden first, and a team whose pain is environment scarcity should evaluate Signadot first.

How to choose

Count your services, count your concurrent changes, and check whether a healthy shared cluster exists. A small stack, no shared cluster, or a build-time bottleneck points to Garden. A large stack, high concurrency, agents in the loop, and an existing staging cluster point to Signadot. For a product-level breakdown of the same comparison, see the Signadot vs Garden comparison page.

Further reading:

Frequently asked questions

What is the difference between Signadot and Garden.io?

Garden builds and deploys a complete copy of your stack into a dedicated Kubernetes namespace for every environment, using a dependency graph and aggressive caching to make repeat runs fast. Signadot deploys only the services a change touches into a Sandbox on a shared cluster and routes requests to the stable shared versions for every other hop, so nothing else is duplicated.

Which is cheaper, Garden or Signadot?

Cost depends on stack size and concurrency. Garden's cost per environment is the full resource cost of the stack, so the bill scales with services multiplied by concurrent environments. Signadot's cost per environment is marginal because only the changed services are deployed. Below roughly ten services with low concurrency the difference is small. At forty services with dozens of open pull requests the gap is large, and Brex cut preview infrastructure cost by 99 percent moving from namespace duplication to Sandboxes.

Can you use Garden and Signadot together?

Yes. Signadot is not a build tool and consumes images produced by your existing CI, which Garden can be. Teams commonly keep Garden or their current pipeline for building and caching, and replace full environment duplication with Sandboxes for per-pull-request testing.

Does Signadot require a shared staging cluster?

Yes. Signadot needs a cluster running stable versions of every service, usually staging, with an owner who keeps it healthy. Garden has no such requirement because each environment is built from zero, which is why Garden fits teams with no stable shared cluster to route against.

Does Signadot require changes to my services?

Services must propagate request headers, typically trace context, so the routing layer can follow a request through the call graph. Teams already running distributed tracing usually have this. Teams that do not must add propagation before Sandboxes will route correctly.

Stay in the loop

Get the latest updates from Signadot

Validate code as fast as agents write it.