Skip to content

How to Fix macOS zsh compinit: insecure directories

DodaTech Updated 2026-06-24 2 min read

In this tutorial, you'll learn about How to Fix macOS zsh compinit: insecure directories. We cover key concepts, practical examples, and best practices.

The Problem

Every time you open a new terminal:

zsh compinit: insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]?

Or:

zsh compinit: insecure files and directories, run compaudit to see them.

The zsh completion system detects directories or files with insecure permissions (world-writable or group-writable by non-root groups).

Quick Fix

Step 1: Run compaudit to list insecure items

compaudit

Expected output shows the offending directories, typically:

/usr/local/share/zsh/site-functions
/usr/local/share/zsh/functions

Step 2: Fix permissions on the listed directories

sudo chmod -R 755 /usr/local/share/zsh/site-functions
sudo chmod -R 755 /usr/local/share/zsh/functions

755 means owner can write, group and others can only read and execute.

Step 3: Change ownership to root

sudo chown -R root:staff /usr/local/share/zsh/site-functions
sudo chown -R root:staff /usr/local/share/zsh/functions

Step 4: Fix Homebrew's zsh directories

sudo chmod -R 755 $(brew --prefix)/share/zsh
sudo chown -R root:staff $(brew --prefix)/share/zsh

Homebrew installations often leave directories with overly permissive settings.

Step 5: Delete insecure completion files (if safe)

sudo rm -rf /usr/local/share/zsh/site-functions

The directory is regenerated by Homebrew when needed.

Step 6: Disable the insecure directory check (alternative)

Add to ~/.zshrc:

ZSH_DISABLE_COMPFIX=true

This bypasses the compinit security check entirely. Use only if you cannot fix the underlying permissions.

Step 7: Rebuild zcompdump

rm -f ~/.zcompdump
exec zsh

This forces zsh to rebuild its completion cache with the fixed permissions.

Step 8: Check for user-writable directories in the fpath

echo $fpath

Any directory in fpath that is world-writable triggers the warning. Ensure all directories are owned by root or your user with restricted group permissions.

Prevention

  • Do not run sudo chmod 777 on any system directory.
  • When installing Homebrew formulas, run brew cleanup to fix permissions.
  • Set umask 022 in your shell profile to create files with secure defaults.

Common Mistakes with zsh compinit

  1. Using head and tail instead of pattern matching, causing runtime errors on empty lists
  2. Forgetting that lazy evaluation defers computation until the value is forced, causing space leaks with unevaluated thunks
  3. Using return to exit a function early instead of wrapping a pure value in the monad

These mistakes appear frequently in real-world MACOS code. DodaTech's contributors have identified these patterns through analysis of open-source projects and production systems.

Practice Exercise

Write a pure function that safely divides two integers using Maybe, then test it with edge cases like division by zero and negative numbers.

This exercise reinforces the concepts covered in this guide. Try implementing it before checking online solutions.

FAQ

### What is compinit?

compinit is the zsh completion initialization system. It loads completion functions from directories listed in fpath.

Why are insecure directories a security risk?

A world-writable directory in fpath allows any user to add a malicious completion function that runs arbitrary code when you press Tab.

Can I ignore the warning permanently?

Yes, set ZSH_DISABLE_COMPFIX=true in ~/.zshrc. However, fixing the permissions is the correct solution.

DodaTech Tool Reference

Durga Antivirus Pro's Shell Security Scanner audits zsh configuration files and completion directories for insecure permissions that could enable code injection.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro