SPIRE (spiffe/spire): SPIFFE IDs and SVIDs for Workload Identity
The SPIFFE Runtime Environment
At a glance
- What is it?
- SPIRE is the SPIFFE Runtime Environment, a CNCF graduated project that attests running software and issues it SPIFFE IDs and SVIDs. It is a control plane for machine identity, not a certificate manager you point at a domain, and that distinction decides whether it fits.
- Who is it for?
- Adopt SPIRE if you run workloads whose identity should follow the process rather than a hostname or a pre-shared secret, and you are willing to run a server, an agent per node and the attestation plugins that match your platform. Do not adopt it if you only need TLS certificates for public DNS names, or if you cannot operate a stateful control plane.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Go, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The problem: workloads need identities that are not secrets you copy around
Most systems that want mutual TLS start by generating a private key, getting it signed, and then distributing that key and certificate to every process that needs it. The distribution step is the weak point. A certificate copied into a container image, a config map or a shared volume is a bearer token, and rotating it means touching every consumer.
SPIRE takes a different position. The README describes it as a toolchain of APIs for establishing trust between software systems across a wide variety of hosting platforms. Instead of you deciding which certificate belongs to which process, an agent running on the node attests the process that is asking, and the server issues it a SPIFFE ID and an SVID. The identity is derived from what the workload demonstrably is (its Kubernetes service account, its Unix UID, its AWS instance identity document), not from a file someone placed there.
That makes SPIRE interesting to platform teams running Kubernetes, to operators with mixed VM and container estates, and to anyone who needs a workload to authenticate to a secret store, a database or a cloud provider without a long-lived credential. The README names exactly those cases.
How the server, agent and Workload API fit together
The architecture has two long-running components and one API surface. SPIRE Server holds the signing authority and the registration entries. SPIRE Agent runs on each node where workloads execute and exposes the SPIFFE Workload API over a Unix domain socket. Workloads do not talk to the server; they talk to the local agent.
The flow is: a workload connects to the Workload API socket, the agent attests that workload using a node attestor and a workload attestor, and if a registration entry matches, the agent returns an SVID and the trust bundle. The README states that this lets two workloads establish trust, for example by establishing an mTLS connection or by signing and verifying a JWT token. It also notes that SPIRE can enable workloads to authenticate to a secret store, a database, or a cloud provider service.
Two design consequences are worth stating plainly. First, the agent is a per-node dependency: if it is not running, workloads on that node cannot obtain or renew SVIDs. Second, the registration entry is the actual authorization decision. Attestation proves what a workload is; the entry decides what identity it receives. Getting that mapping wrong is the most common way to hand out an identity you did not intend.
On the integration side, the README points to official client libraries for the Workload API in Go and Java, and to an implementation of the Envoy Secret Discovery Service, which can install and rotate TLS certificates and trust bundles in Envoy.
Installing SPIRE and getting a first SVID
The README gives three distribution routes. Pre-built releases at the releases page contain both the SPIRE Server and SPIRE Agent binaries. Container images are published for spire-server, spire-agent and oidc-discovery-provider. Building from source is documented in CONTRIBUTING.md.
If you build from the repository, the Makefile's default target is build, which the help text describes as building all SPIRE binaries. The Dockerfile passes a git_tag build argument through to that target, so the Makefile is the supported path rather than a raw go build invocation.
make buildThe output lands in bin/, which the Dockerfile walks when it verifies the static binaries. If you prefer containers, the README names the published images and their registry paths, which is the shorter route.
Configuration lives under conf/ in the repository, split into server and agent trees, and the Dockerfile creates directories for both at /opt/spire, /etc/spire/server and /run/spire/server/private. The README does not reproduce a full server or agent config in the text available here; it directs readers to the Quickstart Guides for Kubernetes, Linux and MacOS at spiffe.io/spire/try/ for the first run. Follow those rather than assembling a config from the directory listing, because the plugin blocks are where the details live.
Once an agent is running and a registration entry exists, a workload reads its SVID from the Workload API socket. The README points to the SPIRE tutorials and examples repositories for working code, and to the SPIFFE Library Usage Examples page for the list of official and community libraries.
Where SPIRE is the wrong tool
SPIRE issues SPIFFE IDs, which are URI-shaped identities such as spiffe://trust-domain/path. They are not DNS names, and the trust domain is not a public domain you can get a certificate authority to validate for you. If your requirement is a publicly trusted TLS certificate for a public DNS name, SPIRE is solving a different problem.
The operational weight is the second constraint. You are running a server with a signing authority and a datastore, plus an agent on every node that hosts workloads. That is a control plane, and it needs the same care as any other: backup, upgrade sequencing, and a plan for what happens when the server is unreachable while SVIDs are expiring. The README does not document rollback procedures, and the repository files here do not describe what happens to in-flight SVID rotation during a server outage. Treat that as something to establish from the project's own documentation before you depend on it.
There is also a scope mismatch worth naming. If every workload already runs in one cluster and the cluster's own service account token is enough for the systems you talk to, the attestation layer SPIRE adds is overhead. SPIRE earns its place when identities must be comparable across clusters, clouds or a mix of VMs and containers, which is precisely the wide variety of hosting platforms the README mentions.
SPIRE compared with running cert-manager alone
The closest thing many Kubernetes teams already run is cert-manager, which watches resources and writes issued certificates into Secrets. The difference in approach is the identity model, not the certificate format.
cert-manager answers the question "what certificate should exist for this object?" It reconciles a desired certificate against an issuer and stores the result where the pod can mount it. The pod's claim to that certificate is whatever RBAC allowed it to mount the Secret. SPIRE answers "what is this process, and what identity does that entitle it to?" The workload never holds a stored credential to present; it asks the local agent, which attests it. Renewal is a property of the agent's connection, not a mounted file that must be replaced.
That does not make cert-manager obsolete. For ingress certificates, for certificates bound to DNS names, and for teams that want issuance to be a Kubernetes reconciliation loop, cert-manager is the simpler fit. SPIRE's advantage shows up when the consumer is not a Kubernetes object with a mountable volume, or when the same identity concept has to work on a VM outside the cluster. The README's Envoy SDS implementation is the clearest illustration: certificates and trust bundles are installed and rotated in Envoy transparently, without a Secret in the path.
Upgrades, licence and what maintenance looks like
SPIRE is licensed under Apache-2.0, which permits commercial use and modification and requires that you preserve the licence and notices. That is a permissive licence, and this is not legal advice; check it against your own policy.
The repository shows a conventional Go release cadence. Releases v1.15.1, v1.15.2 and v1.15.3 landed on 2026-05-28, 2026-07-09 and 2026-08-21, and the last push to main was on 2026-09-26. The project is not archived. There is a CHANGELOG.md at the repository root, and RELEASING.md documents the release process, so upgrade notes have a home.
The upgrade cost is not the binary swap. It is the trust bundle and the plugin configuration. Server and agent versions have to be compatible, and the go.mod file shows the breadth of the plugin surface: AWS, Azure, Google Cloud, Keyfactor EJBCA and more are compiled in. A version bump can move those SDK dependencies, which matters if you rely on a cloud attestor or key manager. Read the CHANGELOG for the release you are moving to and check whether your attestation and key manager plugins are affected before rolling agents.
Editorial conclusion
Adopt SPIRE if you run workloads whose identity should follow the process rather than a hostname or a pre-shared secret, and you are willing to run a server, an agent per node and the attestation plugins that match your platform. Do not adopt it if you only need TLS certificates for public DNS names, or if you cannot operate a stateful control plane. Before committing, check the attestation plugins your platform needs in conf/, confirm the datastore choice, and read how upgrades handle the trust bundle in the release notes.
Frequently asked questions
What is SPIRE?
SPIRE is the SPIFFE Runtime Environment, a CNCF graduated project. The README describes it as a toolchain of APIs for establishing trust between software systems across a wide variety of hosting platforms, exposing the SPIFFE Workload API to attest workloads and issue SPIFFE IDs and SVIDs.
How do you install SPIRE?
The README lists three routes: pre-built releases containing the SPIRE Server and SPIRE Agent binaries, container images for spire-server, spire-agent and oidc-discovery-provider, or building from source as described in CONTRIBUTING.md. It directs first-time users to the Quickstart Guides for Kubernetes, Linux and MacOS.
How does SPIRE differ from cert-manager?
SPIRE attests a running workload and issues it a SPIFFE ID and SVID through the local agent, while cert-manager reconciles Kubernetes resources into Secrets. The README's Envoy SDS support installs and rotates certificates and trust bundles in Envoy without a Secret in the path.
What licence is SPIRE under?
The repository is licensed under Apache-2.0.
Does SPIRE integrate with Envoy?
Yes. The README states that SPIRE provides an implementation of the Envoy Secret Discovery Service, which can be used to transparently install and rotate TLS certificates and trust bundles in Envoy.
Which client libraries are available for the SPIFFE Workload API?
The README names officially maintained libraries in Go and Java, and points to the SPIFFE Library Usage Examples page for the full list of official and community libraries along with code samples.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/spiffe-spire)