tauri-apps/tauri · error
failed to generate plugin documentation page
Error message
failed to generate plugin documentation page
What it means
Panic when tauri_utils::acl::build::generate_docs fails to render the permission documentation pages for a core plugin into the autogenerated docs directory. generate_docs writes markdown reference files from the parsed ACL permission definitions; an I/O or generation error propagates as this panic and aborts the build.
Solutions
- Restore the pristine permissions/*.toml files for the affected plugin
- Clear the autogenerated docs directory and rebuild
- Check disk space and directory write permissions
- Pin a working Tauri version if a regression in generate_docs causes it
Example fix
// before # hand-edited, malformed permission toml crates/tauri/permissions/dialog/default.toml # broken schema // after git checkout -- crates/tauri/permissions/dialog/default.toml cargo build
Defensive patterns
Strategy: validation
Validate before calling
for toml_file in glob("crates/tauri/permissions/**/*.toml") {
let content = std::fs::read_to_string(toml_file?)?;
toml::from_str::<serde_yaml::Value>(&content) // parse-check with the ACL schema in CI
.map_err(|e| format!("invalid permission toml {}: {}", toml_file?, e))?;
} Prevention
- Don't hand-edit permission .toml files in the tauri crate
- Validate ACL schemas in CI before building
- Clean autogenerated/ directories after interrupted builds
When it happens
Trigger: The permissions data for a plugin is valid enough to parse but generate_docs cannot write its output (unwritable docs directory, disk full), or the ACL schema content is malformed in a way generate_docs rejects after parse.
Common situations: A modified or broken permissions .toml file in a local tauri checkout, read-only build environments, or partially written autogenerated docs from a previously interrupted build.
Understand the failure class
Background: "failed to write file", "Could not save figure", "Error saving remote file" — file write failed: causes and fixes across languages and libraries — this error's family across 38 libraries.
Related errors
- failed to create plugin documentation directory
- unable to autogenerate
- failed to create core:default permissions directory
- failed to resolve ACL
- invalid identifier in permission set?
AI-assisted analysis of tauri-apps/tauri@460ec35447 (2026-09-18).
Data as JSON: /api/errors/3146c332e1941fea.
Report an issue: GitHub.
Appendix: source
Thrown at crates/tauri/build.rs:433
.join("**")
.join("*.toml")
.to_string_lossy(),
&format!("tauri:{plugin}"),
out_dir,
|_| true,
)
.unwrap_or_else(|e| panic!("failed to define permissions for {plugin}: {e}"));
let docs_out_dir = Path::new("permissions")
.join(plugin_directory_name)
.join("autogenerated");
fs::create_dir_all(&docs_out_dir).expect("failed to create plugin documentation directory");
tauri_utils::acl::build::generate_docs(
&permissions,
&docs_out_dir,
plugin.strip_prefix("tauri-plugin-").unwrap_or(plugin),
)
.expect("failed to generate plugin documentation page");
all_permissions.insert(plugin.to_string(), permissions);
}
let default_permissions = define_default_permission_set(out_dir);
all_permissions.insert("core".to_string(), default_permissions);
all_permissions
}
fn define_default_permission_set(
out_dir: &Path,
) -> Vec<tauri_utils::acl::manifest::PermissionFile> {
let permissions_out_dir = out_dir.join("permissions");
fs::create_dir_all(&permissions_out_dir)
.expect("failed to create core:default permissions directory");
let default_toml = permissions_out_dir.join("default.toml");
let toml_content = format!(View on GitHub (pinned to 460ec35447)