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
- Ensure connManager.Connect() (via client Connect/app bootstrap) succeeds before any publish/subscribe call.
- Provide a jetStreamCreator (DefaultJetStreamCreator) when constructing the client so JetStream is initialized.
- Verify the NATS server has JetStream enabled (-js flag / jetstream config block); without it JetStream() cannot be created.
- 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
- Always run Connect()/app bootstrap before any publish or subscribe call.
- Fail fast at startup if Connect() returns an error; never swallow it.
- Construct the client through gofr's datasource wiring so jetStreamCreator is set.
- Add a unit/integration test that asserts publish works after a fresh Connect.
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.