Self-hosted service
siderolabs/talos avatar
siderolabs/talos

Talos Linux: a Kubernetes OS with no shell, no SSH, and an mTLS API

Talos Linux is a modern Linux distribution built for Kubernetes.

11,259 stars905 forksGoMPL-2.0

At a glance

What is it?
Talos Linux is an immutable Linux distribution built only for running Kubernetes, where every management action goes through an API secured with mutual TLS. Here is what it does well, where the trade-offs bite, and what its documentation covers.
Who is it for?
Adopt Talos Linux when you run Kubernetes clusters and want node configuration to be declarative, immutable and API-driven, and when your team is comfortable giving up SSH and interactive debugging on nodes. Do not adopt it when you need a general-purpose host for non-Kubernetes workloads, or when your operations model depends on logging into machines to fix them by hand.
Can I use it commercially?
Yes, with conditions. MPL-2.0 is a weak copyleft licence: you can use it inside commercial and closed-source software, but if you distribute changes to its own files, you must publish those changes under the same licence.
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 September 29, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The problem Talos Linux solves: a Kubernetes node that cannot drift

Most Kubernetes distributions are installed on top of a general-purpose Linux. That host comes with a package manager, a shell, a long list of system services and a configuration surface that grows over time. Every one of those is a place where a node can diverge from its siblings, and divergence is what makes a cluster hard to reason about. Talos takes the opposite position. The README describes it as "a modern OS for running Kubernetes: secure, immutable, and minimal", and the design follows from that sentence: the node exists to run Kubernetes and almost nothing else.

The audience is specific. This is for platform teams that already treat servers as replaceable units and want the same treatment applied to the node OS itself. It is not for someone who wants a Linux box that happens to run containers. The README makes the boundary explicit: "All system management is done via an API - there is no shell or interactive console." That single constraint is the whole product. If you accept it, node state becomes declarative and reproducible. If you do not, every other feature is irrelevant.

How Talos works: an API-first node with no login path

The architecture is visible in the repository layout. The api/ directory holds the machine API definitions, cmd/ holds the entry points, pkg/ holds the machinery, and pkg/machinery is a separately versioned Go module that clients import. The go.mod pins Kubernetes libraries at v0.37.0 across api, apiserver, client-go, kubelet, kube-proxy, kube-scheduler and kubectl, which tells you Talos tracks Kubernetes versions as a unit rather than assembling them from unrelated releases.

The runtime side is assembled from packages, not from a distribution's package manager. The Makefile defines one image reference per component (PKG_CONTAINERD, PKG_KERNEL, PKG_MUSL, PKG_CNI, PKG_RUNC, PKG_GRUB and many more), all resolved from ghcr.io/siderolabs with a shared PKGS version tag. The Dockerfile declares the same set as build arguments and copies them into the final image. So the OS you boot is a fixed set of pinned artifacts, and upgrading means booting a different set, not running an upgrade command against a live filesystem. The README calls this "atomic updates" and pairs it with "immutable infrastructure ideology".

Access is the other half. The README states that "All API access is secured with mutual TLS (mTLS) authentication." There is no SSH daemon to reach, no console login to type into. You talk to the machine API with a client, and the client's certificate is the credential. That is why the tooling matters more than usual here: if your client configuration is wrong, you have no fallback path onto the box.

Where the Talos Linux install path is documented

The README does not carry install steps. It says plainly: "For instructions on deploying and managing Talos, see the Documentation", linking to docs.siderolabs.com/talos. That is the only authoritative source in the repository for a first deployment, and it is worth respecting the boundary rather than inventing a sequence.

What the repository does tell you about installation is structural. The Makefile sets FACTORY ?= factory.talos.dev and resolves every runtime component from ghcr.io/siderolabs under a shared PKGS tag, so an installed system is a fixed set of pinned images rather than a distribution assembled at install time. The Dockerfile declares the same components as build arguments (PKG_KERNEL, PKG_CONTAINERD, PKG_MUSL, PKG_CNI, PKG_RUNC, PKG_GRUB and the rest) and copies them into the final image. That is the mechanism behind the README's claim of atomic updates.

For the client side, the README points at the same documentation and at the community channels: GitHub Discussions for questions, bugs and feature requests, and a Slack channel with access requested through inviter.co. There is also a monthly office hours meeting, the second Monday of every month at 16:30 UTC, on Google Meet. If you are evaluating Talos before committing hardware, that meeting is a cheaper first step than a rack of machines.

Where Talos Linux is the wrong tool

The absence of a shell is not a philosophical preference you can opt out of; it is the product. Any workflow that assumes you can SSH into a node, install a debugging agent, run tcpdump, mount a filesystem by hand or patch a config file in place does not transfer. If your incident response playbook ends with "log in and look around", Talos will force you to rewrite that playbook around the API and around logs and metrics exported from the node.

There is a second, quieter limitation. Talos is a Kubernetes OS, so workloads that are not Kubernetes workloads have no natural home on it. The package list in the Makefile is a Kubernetes node's dependency set: containerd, runc, CNI plugins, kubelet-adjacent tooling, filesystem and boot utilities. It is not a general server image, and treating it as one means fighting the design.

The repository also shows a multi-line release cadence. At the time of writing the recent releases include v1.14.1, v1.12.12 and a v1.15.0-alpha.0 pre-release. Running the pre-release line means tracking a moving target; running the older line means accepting a longer gap to current Kubernetes libraries. Neither is wrong, but the choice is yours to make deliberately rather than by default.

Talos Linux compared with kubeadm on a general-purpose distribution

The obvious alternative is installing Kubernetes on a conventional distribution with kubeadm. The difference is not a feature list; it is where configuration lives. With kubeadm on Ubuntu or similar, the host is a mutable system you administer, and Kubernetes is one more thing installed onto it. You upgrade the OS with the OS's package manager and Kubernetes separately, and the two can drift apart. You can also log in, which is exactly what many teams want during an incident.

Talos inverts that relationship. The node image is the unit of upgrade, the machine configuration is the unit of change, and the API is the only door. You gain a small, pinned, mTLS-only surface and lose the ability to improvise on a host. Teams that already run immutable infrastructure tend to find the second half acceptable. Teams whose operational muscle memory is SSH-based will find it expensive, and no amount of documentation removes that cost.

There is a middle position worth naming: keep a general-purpose distribution for the workloads that need a real host, and use Talos only for the Kubernetes nodes. Nothing in the design prevents that split.

Maintenance, releases and the MPL-2.0 licence

The repository is not archived and the last push was on 2026-09-21, so the project is being worked on. That does not by itself tell you which version to run. The recent releases show three lines in flight: v1.14.1 as the current stable, v1.12.12 as an older maintained release, and v1.15.0-alpha.0 as a pre-release. The Makefile's TOOLS and PKGS variables are themselves versioned against the v1.15.0-alpha.0 line, which is how the build tracks the upcoming release.

Upgrade cost is shaped by the atomic-update model. Because the OS is a pinned set of package images rather than a mutable root filesystem, moving between versions is a boot into a different set, and the Kubernetes libraries move with it. The practical work is in reading the release notes for the version you target and re-validating your machine configuration against it, not in running a sequence of package upgrades.

Licensing: the repository is under MPL-2.0. The README adds a note that some distributed software falls under the GPL family or other licences requiring source disclosure, and offers to provide that source on request via info at SideroLabs.com. If you redistribute Talos images, that note is the part to read with your own counsel rather than skim.

Editorial conclusion

Adopt Talos Linux when you run Kubernetes clusters and want node configuration to be declarative, immutable and API-driven, and when your team is comfortable giving up SSH and interactive debugging on nodes. Do not adopt it when you need a general-purpose host for non-Kubernetes workloads, or when your operations model depends on logging into machines to fix them by hand. Before committing, verify that your hardware or hypervisor is covered by the platform documentation, confirm which installer image and schematic you will use from factory.talos.dev, and check the release notes for the version you intend to run, since the repository shows a stable line (v1.14.1), an older maintained line (v1.12.12) and a v1.15.0-alpha.0 pre-release moving in parallel.

Frequently asked questions

How do I install Talos Linux on bare metal?

The README does not contain install steps and points to the documentation at docs.siderolabs.com/talos. The repository shows the build produces installer images from a pinned package set, and the Makefile references factory.talos.dev, so the documented path runs through an installer image plus a machine configuration.

How do I use Talos Linux once a node is running?

All management goes through the API, because the README states there is no shell or interactive console. The README directs you to docs.siderolabs.com/talos for managing Talos, and describes all API access as secured with mutual TLS authentication.

How do I access a Talos Linux node?

There is no SSH or console login. The README says all API access is secured with mutual TLS authentication, so access means presenting a client certificate to the machine API.

How do I install Talos Linux on Proxmox?

The README does not describe a Proxmox installation; it directs readers to the documentation at docs.siderolabs.com/talos for deployment instructions, and the repository shows installer images are built from a pinned package set.

Official sources

  1. License: MPL-2.0
  2. Project website
  3. README
  4. Releases
  5. siderolabs/talos on GitHub
For maintainers

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.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/siderolabs-talos.svg)](https://hysenlabs.com/projects/siderolabs-talos)
Community notes

Community notes