gofr-dev/gofr · error

jStream is not configured

Error message

jStream is not configured

What it means

errJetStreamNotConfigured (errors.go:13) is returned by the connection manager's jetStream()/validateJetStream helpers when JetStream was never initialized on the client. gofr requires the NATS connection to have a JetStream context before any JetStream-backed operation (publish, subscribe, streams, health). It is a programming/lifecycle error, not a network error.

Source

Thrown at pkg/gofr/datasource/pubsub/nats/errors.go:13

package nats

import "errors"

var (
	// Client Errors.
	errServerNotProvided       = errors.New("client server address not provided")
	errSubjectsNotProvided     = errors.New("subjects not provided")
	errConsumerNotProvided     = errors.New("consumer name not provided")
	errConsumerCreationError   = errors.New("consumer creation error")
	errFailedToDeleteStream    = errors.New("failed to delete stream")
	errPublishError            = errors.New("publish error")
	errJetStreamNotConfigured  = errors.New("jStream is not configured")
	errJetStreamCreationFailed = errors.New("jStream creation failed")
	errJetStream               = errors.New("jStream error")
	errCreateStream            = errors.New("create stream error")
	errDeleteStream            = errors.New("delete stream error")
	errGetStream               = errors.New("get stream error")
	errCreateOrUpdateStream    = errors.New("create or update stream error")
	errHandlerError            = errors.New("handler error")
	errConnectionError         = errors.New("connection error")
	errSubscriptionError       = errors.New("subscription error")
)

View on GitHub (pinned to 187eb24962)

Solutions

  1. Ensure connManager.Connect() (via client Connect/app bootstrap) succeeds before any publish/subscribe call.
  2. Provide a jetStreamCreator (DefaultJetStreamCreator) when constructing the client so JetStream is initialized.
  3. Verify the NATS server has JetStream enabled (-js flag / jetstream config block); without it JetStream() cannot be created.
  4. Check Connect() error handling — a swallowed connect error leaves jetStream nil, producing this error later.

Example fix

// before: using client before connection is established
client.Subscribe(ctx, "orders", handler)
// after: connect first, then subscribe
if err := client.Connect(); err != nil { return err }
client.Subscribe(ctx, "orders", handler)
Defensive patterns

Strategy: validation

Validate before calling

if !clientConnected || js == nil {
    return errors.New("NATS client not connected/JetStream not configured; call Connect() first")
}

Try / catch

if err := client.Publish(ctx, topic, msg); err != nil {
    if strings.Contains(err.Error(), "jStream is not configured") {
        // re-init: call Connect() before retrying
    }
    return err
}

Prevention

When it happens

Trigger: Calling jetStream() or validateSubscribePrerequisites before connManager.Connect() succeeded, or when the Client was constructed with a nil jetStreamCreator / JetStream was never created; also asserted in ConnectionManager tests.

Common situations: Using the client before app.Start()/Connect completes; building a Client manually without wiring NewConnectionManager; calling Subscribe/Publish during initialization failure paths; tests instantiating Client{} directly.

Related errors


AI-assisted analysis of gofr-dev/gofr@187eb24962 (2026-09-01). Data as JSON: /api/errors/d32ae7f7b86fa3f3. Report an issue: GitHub.