benbjohnson/litestream · error
failed to create JetStream context: %w
Error message
failed to create JetStream context: %w
What it means
After a successful NATS connection, connect() creates a JetStream context with jetstream.New(nc). This error wraps that failure. It means the NATS client library could not initialize JetStream — nearly always because JetStream is disabled or unsupported on the connected server.
Source
Thrown at nats/replica_client.go:165
return nil
}
// connect establishes a connection to NATS server with proper configuration.
func (c *ReplicaClient) connect(_ context.Context) error {
url := c.URL
if url == "" {
url = nats.DefaultURL
}
nc, err := nats.Connect(url, c.options()...)
if err != nil {
return fmt.Errorf("failed to connect to NATS server: %w", err)
}
js, err := jetstream.New(nc)
if err != nil {
nc.Close()
return fmt.Errorf("failed to create JetStream context: %w", err)
}
c.nc = nc
c.js = js
return nil
}
func (c *ReplicaClient) options() []nats.Option {
opts := []nats.Option{
nats.MaxReconnects(c.MaxReconnects),
nats.ReconnectWait(c.ReconnectWait),
nats.ReconnectJitter(c.ReconnectJitter, c.ReconnectJitter*2),
nats.Timeout(c.Timeout),
nats.PingInterval(c.PingInterval),
nats.MaxPingsOutstanding(c.MaxPingsOut),
nats.ReconnectBufSize(c.ReconnectBufSize),
}
View on GitHub (pinned to 4ed7a308f6)
Solutions
- Enable JetStream in nats-server config and restart: jetstream { store_dir: "/data/jetstream" }
- Verify with `nats -s <url> server info` that JetStream reports enabled/available
- Upgrade nats-server if the version lacks JetStream support
- Check account/operator JetStream limits if using a managed NATS
Example fix
// nats-server.conf
// before
port: 4222
// after
port: 4222
jetstream {
store_dir: "/var/lib/nats/jetstream"
} Defensive patterns
Strategy: try-catch
Validate before calling
// verify JetStream is enabled before configuring litestream
info, err := exec.Command("nats", "-s", natsURL, "server", "info").Output()
if err != nil || !strings.Contains(string(info), "JetStream") {
return fmt.Errorf("enable JetStream in nats-server config")
} Try / catch
if err := client.Init(ctx); err != nil {
if strings.Contains(err.Error(), "failed to create JetStream context") {
return fmt.Errorf("JetStream unavailable on server; enable jetstream { } in nats-server.conf: %w", err)
}
return err
} Prevention
- Enable JetStream in nats-server configuration before pointing litestream at it
- Check account-level JetStream limits on managed NATS
- Keep nats-server versions current enough for the jetstream client API
When it happens
Trigger: jetstream.New(nc) returns an error inside connect() (called by Init): server started without JetStream enabled, server version too old for the jetstream client API, or the account lacks JetStream usage rights.
Common situations: Default nats-server config without `jetstream { enabled: true }`; embedded/old NATS servers without JetStream; operator/account JetStream disabled in a managed NATS.
Related errors
- nats: failed to initialize object store: %w
- invalid NATS URL: %w
- invalid scheme for NATS replica: %s
- bucket required for NATS replica
- client-cert and client-key must both be specified for mutual
AI-assisted analysis of benbjohnson/litestream@4ed7a308f6 (2026-09-06).
Data as JSON: /api/errors/f720ebb05f6dd941.
Report an issue: GitHub.