Skip to main content

The NATS Ecosystem

NATS is more than the nats-server binary. Around it sits a set of officially maintained clients, extension libraries, command-line and Kubernetes tooling, identity tools, and integrations.

This page is the map of those pieces — what each repository is, who maintains it, and where to look first.

If you only want to pick a client and start building, jump to Tier 1 clients.

Server

The single binary that does all message routing. Clustering, JetStream persistence, leaf nodes, MQTT, and WebSocket are all enabled through configuration on the same nats-server — there are no separate components to install.

NameDescription
nats-serverThe NATS server itself

Clients

NATS clients come in three categories: Tier 1 (Synadia-maintained, track new server features at release), Tier 2 (Synadia-maintained, may lag behind on new server features), and community (third-party).

Tier 1 clients — track server releases

These are the ones the NATS team ships first when a new server feature lands. If a tier 1 client is available for your language, prefer it.

LanguageRepoDescription
Gonats-io/nats.goReference implementation
JavaScript / TypeScriptnats-io/nats.jsNode, Deno, Bun, browser (WebSocket). Supersedes the archived nats.node, nats.deno, nats.ws, nats.ts
Pythonnats-io/nats.pyasyncio-based, Python 3 only
Javanats-io/nats.javaJVM; usable from Kotlin and Scala
Rustnats-io/nats.rsThe async-nats crate
C# / .NETnats-io/nats.net.NET 6+. Modern async client
Cnats-io/nats.cEmbedded systems and FFI consumers

Tier 2 clients — Synadia-maintained, feature-lag possible

Maintained by Synadia but not guaranteed to expose every new server feature on day one. Production-ready for the features they do cover; check each repo's README for current feature coverage.

LanguageRepoDescription
Zignats-io/nats.zigNewer addition
Swiftnats-io/nats.swiftiOS, macOS, and server-side Swift
Rubynats-io/nats-pure.rbPure Ruby — preferred Ruby client
Ruby (legacy)nats-io/nats.rbEventMachine-based; use nats-pure.rb for new code
Elixirnats-io/nats.exReplaces the archived elixir-nats

Community clients

Third-party implementations exist for languages including Crystal, Dart, Kotlin, and PHP. Feature coverage and maintenance status vary — evaluate per project. These docs do not cover community clients.

Orbit — extensions and incubator per language

Orbit repositories live under the synadia-io org. They contain optional higher-level utilities and experimental features built on top of the matching tier 1 client. Pull in only the modules you need.

Typical Orbit contents include extra JetStream helpers (request-many, batch publish, scheduled messages), partitioned consumer groups, encoded KV / KV codecs, distributed counters, and retry / chaos utilities. Successful patterns may eventually graduate into the core client. Exact module set differs per language — check each Orbit repo's README.

LanguageRepoDescription
Gosynadia-io/orbit.goExtensions for nats.go
JavaScript / TypeScriptsynadia-io/orbit.jsExtensions for nats.js
Pythonsynadia-io/orbit.pyExtensions for nats.py
Javasynadia-io/orbit.javaExtensions for nats.java
Rustsynadia-io/orbit.rsExtensions for async-nats
C# / .NETsynadia-io/orbit.netExtensions for nats.net
Csynadia-io/orbit.cExtensions for nats.c

Command-line tooling

NameDescription
natscliThe everyday nats CLI. Publish, subscribe, manage streams and consumers, inspect a running server. Most examples in these docs use it
nats-toptop-style live view of server activity
nats-boxContainer image bundling the common NATS utilities (nats, nsc, nk) for ad-hoc shells in Kubernetes

Identity & authentication

Tools and libraries for managing operators, accounts, users, and signing keys with NKeys + JWTs.

NameDescription
nscCLI for managing operators, accounts, and users
synadia-io/jwt-auth-builder.goProgrammatic builder for accounts and users (alternative to driving nsc from code)
synadia-io/callout.goGo SDK for writing auth-callout services
synadia-io/callout.net.NET SDK for writing auth-callout services

NKey libraries

Per-language implementations of the NKey signing and key-handling primitives.

LanguageRepo
Gonats-io/nkeys
JavaScript / TypeScriptnats-io/nkeys.js
Javanats-io/nkeys.java
C# / .NETnats-io/nkeys.net
Pythonnats-io/nkeys.py
Rubynats-io/nkeys.rb
Swiftnats-io/nkeys.swift
Elixirnats-io/nkeys.ex

JWT libraries

Per-language implementations for issuing and verifying NATS account / user JWT claims.

LanguageRepo
Gonats-io/jwt
JavaScript / TypeScriptnats-io/jwt.js
Javanats-io/jwt.java
C# / .NETnats-io/jwt.net

Kubernetes

NameDescription
k8sOfficial Helm charts for deploying nats-server clusters, surveyor, and related components
nackKubernetes controllers and CRDs for managing JetStream streams, consumers, and KV / Object stores declaratively. Successor to the archived nats-operator

Observability

NameDescription
prometheus-nats-exporterPrometheus exporter for varz, connz, routez, and JetStream stats
nats-surveyorCluster-wide monitoring; aggregates stats across servers and exposes them as Prometheus metrics. Pairs with the exporter for full-cluster observability

Schemas & API definitions

NameDescription
jsm.goCanonical source of JetStream API JSON schemas used by tooling and the reference docs in this site. Also contains a Go JetStream management library (alternative to nats.go with a different API surface)

Bridges & integrations

NameDescription
nats-kafkaKafka ↔ NATS bridge
nats-spark-connectorApache Spark structured-streaming source
synadia-io/flink-connector-natsApache Flink connector
nats-java-vertx-clientVert.x integration
terraform-provider-jetstreamManage JetStream resources as IaC