{"record":{"id":"f720ebb05f6dd941","repo":"benbjohnson/litestream","slug":"failed-to-create-jetstream-context-w","errorCode":null,"errorMessage":"failed to create JetStream context: %w","messagePattern":"failed to create JetStream context: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"nats/replica_client.go","lineNumber":165,"sourceCode":"\treturn nil\n}\n\n// connect establishes a connection to NATS server with proper configuration.\nfunc (c *ReplicaClient) connect(_ context.Context) error {\n\turl := c.URL\n\tif url == \"\" {\n\t\turl = nats.DefaultURL\n\t}\n\n\tnc, err := nats.Connect(url, c.options()...)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to connect to NATS server: %w\", err)\n\t}\n\n\tjs, err := jetstream.New(nc)\n\tif err != nil {\n\t\tnc.Close()\n\t\treturn fmt.Errorf(\"failed to create JetStream context: %w\", err)\n\t}\n\n\tc.nc = nc\n\tc.js = js\n\treturn nil\n}\n\nfunc (c *ReplicaClient) options() []nats.Option {\n\topts := []nats.Option{\n\t\tnats.MaxReconnects(c.MaxReconnects),\n\t\tnats.ReconnectWait(c.ReconnectWait),\n\t\tnats.ReconnectJitter(c.ReconnectJitter, c.ReconnectJitter*2),\n\t\tnats.Timeout(c.Timeout),\n\t\tnats.PingInterval(c.PingInterval),\n\t\tnats.MaxPingsOutstanding(c.MaxPingsOut),\n\t\tnats.ReconnectBufSize(c.ReconnectBufSize),\n\t}\n","sourceCodeStart":147,"sourceCodeEnd":183,"githubUrl":"https://github.com/benbjohnson/litestream/blob/4ed7a308f6271ebfd2b0a6e4b70b03011a37e4a3/nats/replica_client.go#L147-L183","documentation":"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.","triggerScenarios":"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.","commonSituations":"Default nats-server config without `jetstream { enabled: true }`; embedded/old NATS servers without JetStream; operator/account JetStream disabled in a managed NATS.","solutions":["Enable JetStream in nats-server config and restart:\n  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"],"exampleFix":"// nats-server.conf\n// before\nport: 4222\n// after\nport: 4222\njetstream {\n  store_dir: \"/var/lib/nats/jetstream\"\n}","handlingStrategy":"try-catch","validationCode":"// verify JetStream is enabled before configuring litestream\ninfo, err := exec.Command(\"nats\", \"-s\", natsURL, \"server\", \"info\").Output()\nif err != nil || !strings.Contains(string(info), \"JetStream\") {\n\treturn fmt.Errorf(\"enable JetStream in nats-server config\")\n}","typeGuard":null,"tryCatchPattern":"if err := client.Init(ctx); err != nil {\n\tif strings.Contains(err.Error(), \"failed to create JetStream context\") {\n\t\treturn fmt.Errorf(\"JetStream unavailable on server; enable jetstream { } in nats-server.conf: %w\", err)\n\t}\n\treturn err\n}","preventionTips":["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"],"tags":["nats","jetstream","config","server"],"backgroundTag":"feature-not-enabled","analyzedSha":"4ed7a308f6271ebfd2b0a6e4b70b03011a37e4a3","analyzedAt":"2026-09-06T18:29:25.564Z","contentChangedAt":"2026-09-06T18:29:25.564Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}