{"record":{"id":"3b64ba6f387d1f2e","repo":"tauri-apps/tauri","slug":"unable-to-autogenerate-default-permissions","errorCode":null,"errorMessage":"unable to autogenerate default permissions","messagePattern":"unable to autogenerate default permissions","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/tauri/build.rs","lineNumber":409,"sourceCode":"\n    let all_enable_by_default = if all_commands_enabled_by_default {\n      \", which enables all commands\"\n    } else {\n      \"\"\n    };\n\n    let default_toml = format!(\n      r#\"{LICENSE_HEADER}# Automatically generated - DO NOT EDIT!\n\n[default]\ndescription = \"Default permissions for the plugin{all_enable_by_default}.\"\npermissions = [{default_permissions}]\n\"#,\n    );\n\n    let out_path = autogenerated.join(\"default.toml\");\n    write_if_changed(out_path, default_toml)\n      .unwrap_or_else(|_| panic!(\"unable to autogenerate default permissions\"));\n\n    let permissions = tauri_utils::acl::build::define_permissions(\n      &PathBuf::from(glob::Pattern::escape(\n        &permissions_out_dir.to_string_lossy(),\n      ))\n      .join(\"**\")\n      .join(\"*.toml\")\n      .to_string_lossy(),\n      &format!(\"tauri:{plugin}\"),\n      out_dir,\n      |_| true,\n    )\n    .unwrap_or_else(|e| panic!(\"failed to define permissions for {plugin}: {e}\"));\n\n    let docs_out_dir = Path::new(\"permissions\")\n      .join(plugin_directory_name)\n      .join(\"autogenerated\");\n    fs::create_dir_all(&docs_out_dir).expect(\"failed to create plugin documentation directory\");","sourceCodeStart":391,"sourceCodeEnd":427,"githubUrl":"https://github.com/tauri-apps/tauri/blob/460ec35447493200d64290dd7f015d5a91d0fd58/crates/tauri/build.rs#L391-L427","documentation":"During a plugin/app build, `define_permissions` autogenerates a `default.toml` permission file by writing it with `write_if_changed`. If the write fails, the build script panics. This is a filesystem failure while materializing autogenerated ACL permission files.","triggerScenarios":"`define_permissions` calls `write_if_changed(autogenerated/default.toml, default_toml)`; the write fails because the `permissions/autogenerated` directory is read-only, missing (creation failed earlier), the path is invalid, or the disk is full.","commonSituations":"Read-only source checkout or CI workspace; files locked by an editor/antivirus on Windows; building from a package manager cache with a read-only crate directory; disk quota exceeded.","solutions":["Check filesystem permissions on the crate's `permissions/` directory and make it writable for the build user.","Ensure no other process (editor, antivirus, another cargo build) holds the default.toml file locked.","Verify free disk space and that the build directory is not mounted read-only.","Restore the `permissions/autogenerated` directory if it was deleted (git checkout / rebuild)."],"exampleFix":"// before\nchmod -w permissions/autogenerated\n// after\nchmod -R u+w permissions/ && cargo build","handlingStrategy":"validation","validationCode":"# ensure permissions dir is writable before build\n[ -w permissions/autogenerated ] || chmod -R u+w permissions/","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Build from a writable checkout; avoid read-only mounts in CI","Reserve adequate disk space/quota on build machines","Exclude source directories from antivirus/indexer file locking on Windows"],"tags":["filesystem","build","permissions","acl"],"backgroundTag":"file-write-failed","analyzedSha":"460ec35447493200d64290dd7f015d5a91d0fd58","analyzedAt":"2026-09-18T23:55:51.277Z","contentChangedAt":"2026-09-18T23:55:51.277Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}