nats-io /nats.go

Golang client for NATS, the cloud native messaging system.

★ 6,797⑂ 851👁 154⑃ 1,236● 681▤ 74
GoCreated 2012-08-15nats.io
6,797
stars
+0+-1+24
851
forks
154
watchers
1,236
prs
681
issues
74
releases
–
discussions

README

NATS - Go Client
A Go client for the NATS messaging system.

[![License Apache 2][License-Image]][License-Url] [![Go Report Card][ReportCard-Image]][ReportCard-Url] [![Build Status][Build-Status-Image]][Build-Status-Url] [![GoDoc][GoDoc-Image]][GoDoc-Url] [![Coverage Status][Coverage-image]][Coverage-Url]

[License-Url]: https://www.apache.org/licenses/LICENSE-2.0
[License-Image]: https://img.shields.io/badge/License-Apache2-blue.svg
[ReportCard-Url]: https://goreportcard.com/report/github.com/nats-io/nats.go
[ReportCard-Image]: https://goreportcard.com/badge/github.com/nats-io/nats.go
[Build-Status-Url]: https://github.com/nats-io/nats.go/actions/workflows/ci.yaml?query=event%3Arelease
[Build-Status-Image]: https://github.com/nats-io/nats.go/actions/workflows/ci.yaml/badge.svg?event=release
[GoDoc-Url]: https://pkg.go.dev/github.com/nats-io/nats.go
[GoDoc-Image]: https://img.shields.io/badge/GoDoc-reference-007d9c
[Coverage-Url]: https://coveralls.io/r/nats-io/nats.go?branch=main
[Coverage-image]: https://coveralls.io/repos/github/nats-io/nats.go/badge.svg?branch=main

Check out NATS by example - An evolving collection of runnable, cross-client reference examples for NATS.

 Installation

bash
 To get the latest released Go client:
go get github.com/nats-io/nats.go@latest

 To get a specific version:
go get github.com/nats-io/[email protected]

 Note that the latest major version for NATS Server is v2:
go get github.com/nats-io/nats-server/v2@latest


 Basic Usage

go
import "github.com/nats-io/nats.go"

// Connect to a server
nc, _ := nats.Connect(nats.DefaultURL)

// Simple Publisher
nc.Publish("foo", []byte("Hello World"))

// Simple Async Subscriber
nc.Subscribe("foo", func(m nats.Msg) {
    fmt.Printf("Received a message: %s\n", string(m.Data))
})

// Responding to a request message
nc.Subscribe("request", func(m nats.Msg) {
    m.Respond([]byte("answer is 42"))
})

// Simple Sync Subscriber
sub, err := nc.SubscribeSync("foo")
m, err := sub.NextMsg(timeout)

// Channel Subscriber
ch := make(chan nats.Msg, 64)
sub, err := nc.ChanSubscribe("foo", ch)
msg :=  The current JetStream API replaces the legacy JetStream API

 Service API

The service API (micro) allows you to easily build NATS services The
services API is currently in beta release.

 New Authentication (Nkeys and User Credentials)
This requires server with version = 2.0.0

NATS servers have a new security and authentication mechanism to authenticate with user credentials and Nkeys.
The simplest form is to use the helper method UserCredentials(credsFilepath).
go
nc, err := nats.Connect(url, nats.UserCredentials("user.creds"))


The helper method creates two callback handlers to present the user JWT and sign the nonce challenge from the server.
The core client library never has direct access to your private key and simply performs the callback for signing the server challenge.
The helper will load and wipe and erase memory it uses for each connect or reconnect.

The helper also can take

Snapshot: 2026-11-04T14:00:00Z · Data license Apache-2.0 · JSON