Skip to content

Instantly share code, notes, and snippets.

@lgw4
Created May 13, 2026 22:05
Show Gist options
  • Select an option

  • Save lgw4/cda00073f097b5ecaf63281ea0d7b39c to your computer and use it in GitHub Desktop.

Select an option

Save lgw4/cda00073f097b5ecaf63281ea0d7b39c to your computer and use it in GitHub Desktop.
Uninstall Native Instruments software (macOS)
#!/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