Skip to content

History

Origin

NATS was created by Derek Collison. It began around 2010 as the messaging control plane for Cloud Foundry at VMware, written in Ruby (RedMonk interview, Wikipedia). The goal was an internal nervous system for a platform: a fast, simple way for components to talk without a heavy broker in the middle.

When Collison founded Apcera, NATS was rewritten in Go as gnatsd. The motivation was not raw speed but escaping the dependency-management pain of Ruby and getting a static binary with a real stack, which cut garbage-collection pressure. The Go rewrite also dropped the regular-expression parser in favor of a hand-written, near-zero-allocation parser (RedMonk interview). That parser still drives the protocol path today (server/parser.go:137).

Timeline

YearMilestone
2010First Ruby implementation as the Cloud Foundry messaging control plane (RedMonk interview)
2012nats-io/nats-server repository created on GitHub (2012-10-29) (repo)
2018Accepted into CNCF as an Incubating project (2018-03-15) (CNCF project page)
~2021JetStream becomes the built-in, recommended path for persistence in the 2.2 line (JetStream docs)
2025Governance dispute with Synadia resolved; trademarks transferred to the Linux Foundation, project stays Apache-2.0 (CNCF announcement)
2026v2.14.2 released (2026-06-02); graduation application open (cncf/toc#2042)

How it evolved

Two shifts matter. The first was the Ruby-to-Go rewrite, which set the performance character of the project: a single static binary, a hand-written parser, and a focus on tail latency. After Apcera was sold to Ericsson, Collison founded Synadia and continued NATS there, writing most of the server code himself (RedMonk interview).

The second was persistence. Early durable messaging lived in a separate layer called NATS Streaming (STAN), which was later deprecated. JetStream replaced it by building persistence directly into the server, with its own append-only file store and Raft-based replication (JetStream docs). This kept the single-binary, no-external-dependency model intact while adding at-least-once delivery, replay, key/value, and object storage.

Where it stands now

In 2025 a governance dispute surfaced when Synadia notified the community of intent to pull NATS from CNCF and relicense it under BUSL. It was resolved: Synadia transferred two NATS trademarks to the Linux Foundation, CNCF kept the domain and GitHub organization, and the code stayed Apache-2.0 (CNCF announcement, CNCF blog).

The project remains CNCF Incubating with an open graduation application (cncf/toc#2042). The latest release is v2.14.2 (2026-06-02), and the source on the default branch carries VERSION 2.15.0-dev (server/const.go:69).