{"record":{"id":"8186636512e2b5ec","repo":"hasura/graphql-engine","slug":"cannot-write-metadata-directory-w","errorCode":null,"errorMessage":"cannot write metadata directory: %w","messagePattern":"cannot write metadata directory: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/commands/init.go","lineNumber":304,"sourceCode":"\tif err != nil {\n\t\treturn errors.E(op, fmt.Errorf(\"cannot write config file: %w\", err))\n\t}\n\n\t// create migrations directory\n\to.EC.MigrationDir = filepath.Join(o.EC.ExecutionDirectory, cli.DefaultMigrationsDirectory)\n\n\terr = os.MkdirAll(o.EC.MigrationDir, os.ModePerm)\n\tif err != nil {\n\t\treturn errors.E(op, fmt.Errorf(\"cannot write migration directory: %w\", err))\n\t}\n\n\tif config.Version >= cli.V2 {\n\t\t// create metadata directory\n\t\to.EC.MetadataDir = filepath.Join(o.EC.ExecutionDirectory, cli.DefaultMetadataDirectory)\n\n\t\terr = os.MkdirAll(o.EC.MetadataDir, os.ModePerm)\n\t\tif err != nil {\n\t\t\treturn errors.E(op, fmt.Errorf(\"cannot write metadata directory: %w\", err))\n\t\t}\n\n\t\terr = o.EC.Version.GetServerFeatureFlags()\n\t\tif err != nil {\n\t\t\to.EC.Logger.Warnf(\"error determining server feature flags: %v\", err)\n\t\t}\n\n\t\t// create metadata files\n\t\tplugins := make(metadataobject.Objects, 0)\n\t\tplugins = append(plugins, querycollections.New(o.EC, o.EC.MetadataDir))\n\t\tplugins = append(plugins, allowlist.New(o.EC, o.EC.MetadataDir))\n\t\tplugins = append(plugins, remoteschemas.New(o.EC, o.EC.MetadataDir))\n\t\tplugins = append(plugins, actions.New(o.EC, o.EC.MetadataDir))\n\n\t\tplugins = append(plugins, crontriggers.New(o.EC, o.EC.MetadataDir))\n\t\tif config.Version == cli.V3 {\n\t\t\tplugins = append(plugins, metadataVersion.New(o.EC, o.EC.MetadataDir))\n\t\t\tplugins = append(plugins, sources.New(o.EC, o.EC.MetadataDir))","sourceCodeStart":286,"sourceCodeEnd":322,"githubUrl":"https://github.com/hasura/graphql-engine/blob/724551b9ae87845594ef0408cff0e50eb6c90dc5/cli/commands/init.go#L286-L322","documentation":"os.MkdirAll failed for the metadata directory (<ExecutionDirectory>/metadata) during init of a config v2+ project. Created only when config.Version >= cli.V2.","triggerScenarios":"Init with config version 2 or 3 where the metadata directory cannot be created (permissions/ENOTDIR/EROFS).","commonSituations":"v2/v3 project init on restricted filesystems; existing file named 'metadata' in the project dir; container read-only mounts.","solutions":["Ensure the project directory is writable and 'metadata' is not a regular file","Fix permissions/disk issues and re-run init","If not needing metadata directory, init with config version 1"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if fi, err := os.Lstat(filepath.Join(dir, \"metadata\")); err == nil && !fi.IsDir() {\n    log.Fatal(\"'metadata' exists but is not a directory\")\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep metadata path clear of file/dir conflicts","Use writable mounts for v2+ projects"],"tags":["hasura","cli","init","metadata","mkdir"],"backgroundTag":"directory-create-failed","analyzedSha":"724551b9ae87845594ef0408cff0e50eb6c90dc5","analyzedAt":"2026-08-28T07:32:55.105Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}