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

  1. Restore the pristine permissions/*.toml files for the affected plugin
  2. Clear the autogenerated docs directory and rebuild
  3. Check disk space and directory write permissions
  4. 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

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


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)