Categorygithub.com/nats-io/nats-architecture-and-design
modulepackage
0.0.0-20241010144650-182511d95a2e
Repository: https://github.com/nats-io/nats-architecture-and-design.git
Documentation: pkg.go.dev

# README

NATS

NATS Architecture And Design

This repository captures Architecture, Design Specifications and Feature Guidance for the NATS ecosystem.

Architecture Decision Records

Client

IndexTagsDescription
ADR-1jetstream, client, serverJetStream JSON API Design
ADR-2jetstream, server, clientNATS Typed Messages
ADR-4server, clientNATS Message Headers
ADR-5server, clientLame Duck Notification
ADR-6server, clientNaming Rules
ADR-7server, client, jetstreamNATS Server Error Codes
ADR-8jetstream, client, kv, specJetStream based Key-Value Stores
ADR-9server, client, jetstreamJetStream Consumer Idle Heartbeats
ADR-10server, client, jetstreamJetStream Extended Purge
ADR-11clientHostname resolution
ADR-13jetstream, clientPull Subscribe internals
ADR-14client, securityJWT library free jwt user generation
ADR-17jetstream, clientOrdered Consumer
ADR-18clientURL support for all client options
ADR-19jetstream, client, kv, objectstoreAPI prefixes for materialized JetStream views
ADR-20jetstream, client, objectstore, specJetStream based Object Stores
ADR-21clientNATS Configuration Contexts
ADR-22jetstream, clientJetStream Publish Retries on No Responders
ADR-31jetstream, client, serverJetStream Direct Get
ADR-32client, specService API
ADR-33jetstream, client, serverMetadata for Stream and Consumer
ADR-34jetstream, client, serverJetStream Consumers Multiple Filters
ADR-36jetstream, client, serverSubject Mapping Transforms in Streams
ADR-37jetstream, client, specJetStream Simplification
ADR-40client, server, specNATS Connection
ADR-43jetstream, client, serverJetStream Per-Message TTL
ADR-47client, spec, orbitRequest Many

Jetstream

IndexTagsDescription
ADR-1jetstream, client, serverJetStream JSON API Design
ADR-2jetstream, server, clientNATS Typed Messages
ADR-7server, client, jetstreamNATS Server Error Codes
ADR-8jetstream, client, kv, specJetStream based Key-Value Stores
ADR-9server, client, jetstreamJetStream Consumer Idle Heartbeats
ADR-10server, client, jetstreamJetStream Extended Purge
ADR-12jetstreamJetStream Encryption At Rest
ADR-13jetstream, clientPull Subscribe internals
ADR-17jetstream, clientOrdered Consumer
ADR-19jetstream, client, kv, objectstoreAPI prefixes for materialized JetStream views
ADR-20jetstream, client, objectstore, specJetStream based Object Stores
ADR-22jetstream, clientJetStream Publish Retries on No Responders
ADR-28jetstream, serverJetStream RePublish
ADR-31jetstream, client, serverJetStream Direct Get
ADR-33jetstream, client, serverMetadata for Stream and Consumer
ADR-34jetstream, client, serverJetStream Consumers Multiple Filters
ADR-36jetstream, client, serverSubject Mapping Transforms in Streams
ADR-37jetstream, client, specJetStream Simplification
ADR-42jetstream, serverPull Consumer Priority Groups
ADR-43jetstream, client, serverJetStream Per-Message TTL
ADR-44jetstream, serverVersioning for JetStream Assets

Kv

IndexTagsDescription
ADR-8jetstream, client, kv, specJetStream based Key-Value Stores
ADR-19jetstream, client, kv, objectstoreAPI prefixes for materialized JetStream views

Objectstore

IndexTagsDescription
ADR-19jetstream, client, kv, objectstoreAPI prefixes for materialized JetStream views
ADR-20jetstream, client, objectstore, specJetStream based Object Stores

Observability

IndexTagsDescription
ADR-3observability, serverNATS Service Latency Distributed Tracing Interoperability
ADR-41observability, serverNATS Message Path Tracing

Orbit

IndexTagsDescription
ADR-47client, spec, orbitRequest Many

Security

IndexTagsDescription
ADR-14client, securityJWT library free jwt user generation
ADR-38server, securityOCSP Peer Verification
ADR-39server, securityCertificate Store

Server

IndexTagsDescription
ADR-1jetstream, client, serverJetStream JSON API Design
ADR-2jetstream, server, clientNATS Typed Messages
ADR-3observability, serverNATS Service Latency Distributed Tracing Interoperability
ADR-4server, clientNATS Message Headers
ADR-5server, clientLame Duck Notification
ADR-6server, clientNaming Rules
ADR-7server, client, jetstreamNATS Server Error Codes
ADR-9server, client, jetstreamJetStream Consumer Idle Heartbeats
ADR-10server, client, jetstreamJetStream Extended Purge
ADR-26serverNATS Authorization Callouts
ADR-28jetstream, serverJetStream RePublish
ADR-30serverSubject Transform
ADR-31jetstream, client, serverJetStream Direct Get
ADR-33jetstream, client, serverMetadata for Stream and Consumer
ADR-34jetstream, client, serverJetStream Consumers Multiple Filters
ADR-36jetstream, client, serverSubject Mapping Transforms in Streams
ADR-38server, securityOCSP Peer Verification
ADR-39server, securityCertificate Store
ADR-40client, server, specNATS Connection
ADR-41observability, serverNATS Message Path Tracing
ADR-42jetstream, serverPull Consumer Priority Groups
ADR-43jetstream, client, serverJetStream Per-Message TTL
ADR-44jetstream, serverVersioning for JetStream Assets

Spec

IndexTagsDescription
ADR-8jetstream, client, kv, specJetStream based Key-Value Stores
ADR-20jetstream, client, objectstore, specJetStream based Object Stores
ADR-32client, specService API
ADR-37jetstream, client, specJetStream Simplification
ADR-40client, server, specNATS Connection
ADR-47client, spec, orbitRequest Many

Deprecated

IndexTagsDescription
ADR-15deprecatedJetStream Subscribe Workflow

When to write an ADR

We use this repository in a few ways:

  1. Design specifications where a single document captures everything about a feature, examples are ADR-8, ADR-32, ADR-37 and ADR-40
  2. Guidance on conventions and design such as ADR-6 which documents all the valid naming rules
  3. Capturing design that might impact many areas of the system such as ADR-2

We want to move away from using these to document individual minor decisions, moving instead to spec like documents that are living documents and can change over time. Each capturing revisions and history.

Template

Please see the template. The template body is a guideline. Feel free to add sections as you feel appropriate. Look at the other ADRs for examples. However, the initial Table of metadata and header format is required to match.

After editing / adding a ADR please run go run main.go > README.md to update the embedded index. This will also validate the header part of your ADR.

# Structs

No description provided by the author
No description provided by the author