Created
May 13, 2026 22:05
-
-
Save lgw4/cda00073f097b5ecaf63281ea0d7b39c to your computer and use it in GitHub Desktop.
Uninstall Native Instruments software (macOS)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env bash | |
| # Uninstall Native Instruments and iZotope software from macOS. | |
| # - Native Instruments: Native Access + everything it manages (Kontakt, | |
| # Massive, Maschine, Komplete Kontrol, plug-ins, prefs, libraries) | |
| # - iZotope: standalone apps (RX, Ozone, Neutron, etc.), plug-ins, prefs, | |
| # caches, presets | |
| # | |
| # Sources: | |
| # https://support.native-instruments.com/hc/en-us/articles/210291865 | |
| # https://support.izotope.com/hc/en-us/articles/6657943352081 | |
| # | |
| # Usage: | |
| # ./uninstall-native-instruments.sh # dry-run, shows what would go | |
| # ./uninstall-native-instruments.sh --execute # actually delete | |
| # | |
| # WARNING: removes Kontakt libraries, Maschine expansions, samples, iZotope | |
| # presets, and any other paid content under standard install folders. Back up | |
| # anything you want to keep first. | |
| set -u | |
| dry_run=1 | |
| [[ "${1:-}" == "--execute" ]] && dry_run=0 | |
| run() { | |
| if (( dry_run )); then | |
| printf '[DRY] ' | |
| else | |
| printf '[RUN] ' | |
| fi | |
| printf '%q ' "$@" | |
| printf '\n' | |
| (( dry_run )) || "$@" | |
| } | |
| remove_path() { | |
| local p="$1" | |
| [[ -e "$p" || -L "$p" ]] || return 0 | |
| run sudo rm -rf "$p" | |
| } | |
| quit_ni_processes() { | |
| echo "-- Quitting Native Instruments processes" | |
| pkill -f "Native Access" 2>/dev/null || true | |
| pkill -f "NIHostIntegrationAgent" 2>/dev/null || true | |
| pkill -f "Native Instruments" 2>/dev/null || true | |
| } | |
| # Native Instruments data in /Users/Shared. Catches: | |
| # - Folders named "Native Instruments", "NI Resources", "NI <anything>" | |
| # - Library folders containing a .nicnt content marker (Kontakt libraries, | |
| # Maschine expansions, etc. that may have non-obvious names) | |
| remove_users_shared_ni() { | |
| echo "-- Removing Native Instruments data from /Users/Shared" | |
| shopt -s nullglob nocaseglob | |
| local by_name=( | |
| "/Users/Shared/Native Instruments" | |
| /Users/Shared/NI\ * | |
| /Users/Shared/NI_* | |
| ) | |
| local by_marker=() nicnt rel | |
| for nicnt in /Users/Shared/*/*.nicnt /Users/Shared/*/*/*.nicnt; do | |
| rel="${nicnt#/Users/Shared/}" | |
| by_marker+=("/Users/Shared/${rel%%/*}") | |
| done | |
| shopt -u nullglob nocaseglob | |
| local p | |
| for p in "${by_name[@]}" "${by_marker[@]}"; do | |
| remove_path "$p" | |
| done | |
| } | |
| # Top-level apps, support folders, shared resources | |
| remove_ni_directories() { | |
| echo "-- Removing application and support directories" | |
| local paths=( | |
| "/Applications/Native Access.app" | |
| "/Applications/Native Instruments" | |
| "/Library/Application Support/Native Instruments" | |
| "$HOME/Library/Application Support/Native Instruments" | |
| "$HOME/Library/Caches/com.native-instruments.NativeAccess" | |
| "$HOME/Library/Caches/com.native-instruments.NIHostIntegrationAgent" | |
| ) | |
| for p in "${paths[@]}"; do | |
| remove_path "$p" | |
| done | |
| } | |
| # All com.native-instruments.* preference files | |
| remove_ni_plists() { | |
| echo "-- Removing preference files" | |
| shopt -s nullglob | |
| local plists=( | |
| /Library/Preferences/com.native-instruments.* | |
| "$HOME"/Library/Preferences/com.native-instruments.* | |
| /var/db/receipts/com.native-instruments.* | |
| ) | |
| shopt -u nullglob | |
| for p in "${plists[@]}"; do | |
| remove_path "$p" | |
| done | |
| } | |
| quit_izotope_processes() { | |
| echo "-- Quitting iZotope processes" | |
| pkill -f "iZotope" 2>/dev/null || true | |
| pkill -f "iZotope Product" 2>/dev/null || true | |
| } | |
| # iZotope standalone apps (detected by bundle id), support folders, presets | |
| remove_izotope_directories() { | |
| echo "-- Removing iZotope application and support directories" | |
| local paths=( | |
| "/Library/Application Support/iZotope" | |
| "$HOME/Library/Application Support/iZotope" | |
| "$HOME/Documents/iZotope" | |
| ) | |
| local p | |
| for p in "${paths[@]}"; do | |
| remove_path "$p" | |
| done | |
| # Standalone apps in /Applications — covers RX, Ozone, Neutron, Nectar, | |
| # VocalSynth, Insight, Tonal Balance Control, etc. without hardcoding names. | |
| shopt -s nullglob | |
| local app id | |
| for app in /Applications/*.app; do | |
| id=$(defaults read "$app/Contents/Info" CFBundleIdentifier 2>/dev/null) || continue | |
| [[ "$id" == com.izotope.* ]] && remove_path "$app" | |
| done | |
| shopt -u nullglob | |
| } | |
| # All com.izotope.* preferences, caches, and installer receipts | |
| remove_izotope_plists() { | |
| echo "-- Removing iZotope preferences and caches" | |
| shopt -s nullglob | |
| local items=( | |
| /Library/Preferences/com.izotope.* | |
| "$HOME"/Library/Preferences/com.izotope.* | |
| "$HOME"/Library/Caches/com.izotope.* | |
| /var/db/receipts/com.izotope.* | |
| ) | |
| shopt -u nullglob | |
| local p | |
| for p in "${items[@]}"; do | |
| remove_path "$p" | |
| done | |
| } | |
| # Audio plug-in bundles where CFBundleIdentifier starts with any of the given | |
| # prefixes. Catches AU .component, VST .vst, VST3 .vst3, AAX .aaxplugin. | |
| remove_vendor_plugins() { | |
| echo "-- Removing plug-in bundles matching: $*" | |
| local prefixes=("$@") | |
| local plugin_dirs=( | |
| "/Library/Audio/Plug-Ins/Components" | |
| "/Library/Audio/Plug-Ins/VST" | |
| "/Library/Audio/Plug-Ins/VST3" | |
| "/Library/Application Support/Avid/Audio/Plug-Ins" | |
| "/Library/Application Support/Digidesign/Plug-Ins" | |
| "$HOME/Library/Audio/Plug-Ins/Components" | |
| "$HOME/Library/Audio/Plug-Ins/VST" | |
| "$HOME/Library/Audio/Plug-Ins/VST3" | |
| ) | |
| local dir bundle id prefix | |
| for dir in "${plugin_dirs[@]}"; do | |
| [[ -d "$dir" ]] || continue | |
| shopt -s nullglob | |
| for bundle in "$dir"/*; do | |
| id=$(defaults read "$bundle/Contents/Info" CFBundleIdentifier 2>/dev/null) || continue | |
| for prefix in "${prefixes[@]}"; do | |
| if [[ "$id" == "$prefix"* ]]; then | |
| remove_path "$bundle" | |
| break | |
| fi | |
| done | |
| done | |
| shopt -u nullglob | |
| done | |
| } | |
| main() { | |
| if (( dry_run )); then | |
| echo "=== DRY RUN — nothing will be deleted ===" | |
| echo "Re-run with --execute to actually remove files." | |
| echo | |
| else | |
| cat <<'EOF' | |
| === EXECUTE MODE === | |
| This will permanently delete: | |
| Native Instruments: | |
| - Native Access and every Native Instruments application | |
| - All preferences, caches, and installer receipts (com.native-instruments.*) | |
| - Everything under /Library/Application Support/Native Instruments | |
| (Kontakt libraries, Maschine expansions, etc.) | |
| - Everything under ~/Library/Application Support/Native Instruments | |
| - Everything in /Users/Shared matching NI names (Native Instruments, | |
| NI Resources, NI *) or marked as NI content (.nicnt libraries) | |
| iZotope: | |
| - Standalone apps (RX, Ozone, Neutron, etc.) in /Applications | |
| - Everything under /Library/Application Support/iZotope | |
| - Everything under ~/Library/Application Support/iZotope | |
| - ~/Documents/iZotope (presets) | |
| - All preferences, caches, and installer receipts (com.izotope.*) | |
| Both vendors: | |
| - All matching plug-ins (AU, VST, VST3, AAX) in /Library and ~/Library | |
| Back up anything you want to keep before continuing. | |
| EOF | |
| read -r -p "Type 'yes' to proceed: " confirm | |
| [[ "$confirm" == "yes" ]] || { echo "Aborted."; exit 1; } | |
| sudo -v || { echo "sudo authentication failed."; exit 1; } | |
| echo | |
| fi | |
| quit_ni_processes | |
| quit_izotope_processes | |
| remove_ni_directories | |
| remove_users_shared_ni | |
| remove_ni_plists | |
| remove_izotope_directories | |
| remove_izotope_plists | |
| remove_vendor_plugins com.native-instruments. com.izotope. | |
| echo | |
| if (( dry_run )); then | |
| echo "Dry run complete." | |
| else | |
| echo "Done. Restart your Mac to finalize the changes." | |
| fi | |
| } | |
| main "$@" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment