{"record":{"id":"818e9d6303e61964","repo":"nats-io/nats-server","slug":"stream-name-is-too-long-maximum-allowed-is-d","errorCode":null,"errorMessage":"stream name is too long, maximum allowed is %d","messagePattern":"stream name is too long, maximum allowed is (.+?)","errorType":"error_code","errorClass":"JSStreamInvalidConfigError","httpStatus":null,"severity":"error","filePath":"server/stream.go","lineNumber":1877,"sourceCode":"\tif js := s.getJetStream(); js != nil {\n\t\tjs.mu.RLock()\n\t\tdefer js.mu.RUnlock()\n\t}\n\treturn s.checkStreamCfgLocked(config, acc, pedantic)\n}\n\n// jetStream lock (read or write) should be held, if JetStream is enabled.\nfunc (s *Server) checkStreamCfgLocked(config *StreamConfig, acc *Account, pedantic bool) (StreamConfig, *ApiError) {\n\tlim := &s.getOpts().JetStreamLimits\n\n\tif config == nil {\n\t\treturn StreamConfig{}, NewJSStreamInvalidConfigError(fmt.Errorf(\"stream configuration invalid\"))\n\t}\n\tif !isValidAssetName(config.Name) {\n\t\treturn StreamConfig{}, NewJSStreamInvalidConfigError(fmt.Errorf(\"stream name is required and can not contain '.', '*', '>', '\\\\', '/'\"))\n\t}\n\tif len(config.Name) > JSMaxNameLen {\n\t\treturn StreamConfig{}, NewJSStreamInvalidConfigError(fmt.Errorf(\"stream name is too long, maximum allowed is %d\", JSMaxNameLen))\n\t}\n\tif len(config.Description) > JSMaxDescriptionLen {\n\t\treturn StreamConfig{}, NewJSStreamInvalidConfigError(fmt.Errorf(\"stream description is too long, maximum allowed is %d\", JSMaxDescriptionLen))\n\t}\n\n\tvar metadataLen int\n\tfor k, v := range config.Metadata {\n\t\tmetadataLen += len(k) + len(v)\n\t}\n\tif metadataLen > JSMaxMetadataLen {\n\t\treturn StreamConfig{}, NewJSStreamInvalidConfigError(fmt.Errorf(\"stream metadata exceeds maximum size of %d bytes\", JSMaxMetadataLen))\n\t}\n\n\tcfg := *config\n\n\tif _, err := cfg.Retention.MarshalJSON(); err != nil {\n\t\treturn cfg, NewJSStreamInvalidConfigError(fmt.Errorf(\"invalid retention\"))\n\t}","sourceCodeStart":1859,"sourceCodeEnd":1895,"githubUrl":"https://github.com/nats-io/nats-server/blob/3a66a489d262bf89b71a71c955c94920394532f3/server/stream.go#L1859-L1895","documentation":"checkStreamCfgLocked: the stream's Name/identifier field exceeds the server's maximum asset-name length (JSMaxNameLen). Streams, consumers and other JetStream assets share a length cap because names are embedded in subjects and file paths; a longer name is rejected with the allowed maximum printed.","triggerScenarios":"Creating a stream whose Name is longer than 255 bytes; programmatically generated names (uuid + prefixes + timestamps) exceeding 255; user-supplied names without client-side length checks.","commonSituations":"Concatenating tenant prefixes and IDs into the stream name; hashing libraries producing long base64 names; application passing a description into the name field by mistake.","solutions":["Shorten the stream name to <=255 bytes.","Truncate or hash long identifiers (e.g. sha256 hex) before using them as stream names.","Add a client-side check len(name) <= 255 before sending the create request.","Move extra identifying data into StreamConfig.Description or Metadata instead of the name."],"exampleFix":"// before\nname := tenant + \"-\" + longUUID + \"-\" + timestamp // > 255 chars\njs.CreateStream(ctx, jetstream.StreamConfig{Name: name})\n// after\nname := tenant + \"-\" + hashHex(longUUID)[:16]\njs.CreateStream(ctx, jetstream.StreamConfig{Name: name, Description: longUUID})","handlingStrategy":"validation","validationCode":"func validStreamNameLen(name string) error {\n  if len(name) > 255 {\n    return fmt.Errorf(\"stream name too long: %d > 255\", len(name))\n  }\n  return nil\n}","typeGuard":"func nameFits(name string) bool { return len(name) <= 255 }","tryCatchPattern":null,"preventionTips":["Check len(name) <= 255 before every create/update.","Hash long identifiers instead of embedding them in names.","Keep descriptive data in Description/Metadata, not the name.","Beware multi-byte UTF-8: len() counts bytes, matching the server's rule."],"tags":["jetstream","stream-name","length-limit","validation"],"backgroundTag":"stream-name-too-long","analyzedSha":"3a66a489d262bf89b71a71c955c94920394532f3","analyzedAt":"2026-09-02T04:41:54.247Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}