{"record":{"id":"e591204c364233d7","repo":"benbjohnson/litestream","slug":"directory-path-is-required-for-directory-replicati","errorCode":null,"errorMessage":"directory path is required for directory replication","messagePattern":"directory path is required for directory replication","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/litestream/main.go","lineNumber":817,"sourceCode":"\tif dbc.Replica != nil {\n\t\trc = dbc.Replica\n\t} else {\n\t\trc = dbc.Replicas[0]\n\t}\n\n\tr, err := NewReplicaFromConfig(rc, db)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdb.Replica = r\n\n\treturn db, nil\n}\n\n// NewDBsFromDirectoryConfig scans a directory and creates DB instances for all SQLite databases found.\nfunc NewDBsFromDirectoryConfig(dbc *DBConfig) ([]*litestream.DB, error) {\n\tif dbc.Dir == \"\" {\n\t\treturn nil, fmt.Errorf(\"directory path is required for directory replication\")\n\t}\n\n\tif dbc.Pattern == \"\" {\n\t\treturn nil, fmt.Errorf(\"pattern is required for directory replication\")\n\t}\n\tif dbc.MetaPath != nil && dbc.MetaDir != nil {\n\t\treturn nil, fmt.Errorf(\"cannot specify both 'meta-path' and 'meta-dir'\")\n\t}\n\n\tdirPath, err := expand(dbc.Dir)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Find all SQLite databases in the directory\n\tdbPaths, err := FindSQLiteDatabases(dirPath, dbc.Pattern, dbc.Recursive)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to scan directory %s: %w\", dirPath, err)","sourceCodeStart":799,"sourceCodeEnd":835,"githubUrl":"https://github.com/benbjohnson/litestream/blob/4ed7a308f6271ebfd2b0a6e4b70b03011a37e4a3/cmd/litestream/main.go#L799-L835","documentation":"NewDBsFromDirectoryConfig scans a directory and creates DB instances for all SQLite databases found; it first verifies that dbc.Dir is non-empty. An empty dir means there is nothing to scan, so directory replication cannot proceed and this error is returned before the pattern check.","triggerScenarios":"Calling NewDBsFromDirectoryConfig (from startDirectoryMonitor or Run) with a DBConfig whose Dir field is \"\" — e.g. a databases[] entry intended for directory replication that only sets `pattern:` or neither `path:` nor `dir:`.","commonSituations":"YAML entry with `watch: true`/`pattern:` but the `dir:` key missing or misspelled (`directory:`); env-expansion of dir resolved to empty string.","solutions":["Add `dir: /path/to/directory` to the databases entry.","Check for misspelled keys (`directory` vs `dir`) and verify env variables used in the dir value are non-empty.","If you meant a single database, use `path:` instead of directory options."],"exampleFix":"# before\ndatabases:\n  - pattern: \"*.db\"\n# after\ndatabases:\n  - dir: /var/db\n    pattern: \"*.db\"","handlingStrategy":"validation","validationCode":"if dbc.Dir == \"\" {\n    return fmt.Errorf(\"directory replication requires 'dir'\")\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Set dir (exact key name) on directory-replication entries","Verify env-expanded dir values are non-empty","Validate configs before start"],"tags":["config","directory","validation","litestream"],"backgroundTag":"missing-required-config-field","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"}