nats-io/nats-server · error

the path [%s] is not a file

Error message

the path [%s] is not a file

What it means

Directory JWT store path validation: a directory was found where a file was required (dir=false), the inverse of the directory check — the path resolves to a directory instead of a file.

Source

Thrown at server/dirstore.go:64

	if err != nil {
		return _EMPTY_, fmt.Errorf("error parsing path [%s]: %v", abs, err)
	}

	var finfo os.FileInfo
	if finfo, err = os.Stat(abs); err != nil {
		if os.IsNotExist(err) {
			return _EMPTY_, fmt.Errorf("the path [%s] doesn't exist", abs)
		}
		return _EMPTY_, fmt.Errorf("error accessing path [%s]: %v", abs, err)
	}

	mode := finfo.Mode()
	if dir && mode.IsRegular() {
		return _EMPTY_, fmt.Errorf("the path [%s] is not a directory", abs)
	}

	if !dir && mode.IsDir() {
		return _EMPTY_, fmt.Errorf("the path [%s] is not a file", abs)
	}

	return abs, nil
}

// ValidateDirPath checks that the provided path exists and is a dir
func validateDirPath(path string) (string, error) {
	return validatePathExists(path, true)
}

// JWTChanged functions are called when the store file watcher notices a JWT changed
type JWTChanged func(publicKey string)

// DirJWTStore implements the JWT Store interface, keeping JWTs in an optionally sharded
// directory structure
type DirJWTStore struct {
	sync.Mutex
	directory  string

View on GitHub (pinned to 3a66a489d2)

Solutions

  1. Provide a file path instead of a directory
  2. Adjust the caller to request the correct path type
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at server/dirstore.go:64 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of nats-io/nats-server@3a66a489d2 (2026-09-02). Data as JSON: /api/errors/3ebc3a46de142f85. Report an issue: GitHub.