{"record":{"id":"890dd3c543aa3691","repo":"glzr-io/glazewm","slug":"accessibility-permissions-are-not-granted-in-syst","errorCode":null,"errorMessage":"Accessibility permissions are not granted. In System Preferences, go to Privacy & Security > Accessibility and enable GlazeWM.","messagePattern":"Accessibility permissions are not granted\\. In System Preferences, go to Privacy & Security > Accessibility and enable GlazeWM\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"packages/wm/src/main.rs","lineNumber":116,"sourceCode":"    rt.block_on(wm_cli::start(args))\r\n  }\r\n}\r\n\r\n#[allow(clippy::too_many_lines)]\r\nasync fn start_wm(\r\n  config_path: Option<PathBuf>,\r\n  verbosity: Verbosity,\r\n  dispatcher: &Dispatcher,\r\n) -> anyhow::Result<()> {\r\n  setup_logging(&verbosity)?;\r\n\r\n  // Ensure that only one instance of the WM is running.\r\n  let _single_instance = SingleInstance::new()?;\r\n\r\n  #[cfg(target_os = \"macos\")]\r\n  {\r\n    if !dispatcher.has_ax_permission(true) {\r\n      anyhow::bail!(\r\n        \"Accessibility permissions are not granted. In System Preferences, \\\r\n         go to Privacy & Security > Accessibility and enable GlazeWM.\"\r\n      );\r\n    }\r\n  }\r\n\r\n  // Parse and validate user config.\r\n  let mut config = UserConfig::new(config_path)?;\r\n\r\n  // Add application icon to system tray.\r\n  let mut tray = SystemTray::new(&config.path, dispatcher.clone())?;\r\n\r\n  let mut wm = WindowManager::new(&mut config, dispatcher.clone())?;\r\n\r\n  let mut ipc_server = IpcServer::start().await?;\r\n\r\n  // On Windows, start watcher process for restoring hidden windows on\r\n  // crash. macOS' hidden windows are always accessible.\r","sourceCodeStart":98,"sourceCodeEnd":134,"githubUrl":"https://github.com/glzr-io/glazewm/blob/5709ad0a3c7c386bbc3e38166a865ffc12937515/packages/wm/src/main.rs#L98-L134","documentation":"On macOS, `start_wm` checks accessibility (AX) permissions before initializing the window manager. If `dispatcher.has_ax_permission(true)` returns false, GlazeWM cannot observe/control other windows, so it bails with instructions to grant permission in System Preferences.","triggerScenarios":"Running GlazeWM on macOS the first time, or after the app binary changes and macOS revokes/reset accessibility grants; running via a path not present in the Accessibility allowlist.","commonSituations":"Fresh installs, moving or rebuilding the binary (its code signature/path changes), macOS updates resetting privacy permissions, or running under a terminal not itself granted accessibility.","solutions":["Open System Settings > Privacy & Security > Accessibility and enable GlazeWM (and your terminal if launching from it)","Re-add the binary after rebuilding/moving it (toggle off/on)","Restart GlazeWM after granting permission"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"let has_ax = dispatcher.has_ax_permission(true);\nif !has_ax {\n  eprintln!(\"Grant GlazeWM accessibility permissions in System Settings > Privacy & Security > Accessibility, then restart.\");\n  std::process::exit(1);\n}","typeGuard":null,"tryCatchPattern":"match start_wm() {\n  Err(e) if e.to_string().contains(\"Accessibility permissions\") => {\n    eprintln!(\"Enable GlazeWM under Privacy & Security > Accessibility and retry.\");\n  }\n  r => r?,\n}","preventionTips":["Prompt users for accessibility permission on first macOS launch","Re-request the permission prompt after binary rebuilds or moves","Document the requirement in install instructions and preflight-check at startup"],"tags":["macos","permissions","accessibility"],"backgroundTag":"permission-denied","analyzedSha":"5709ad0a3c7c386bbc3e38166a865ffc12937515","analyzedAt":"2026-09-08T03:26:40.288Z","contentChangedAt":"2026-09-08T03:26:40.288Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}