IDA Pro Python environment toolkit for macOS. Manage IDA's Python runtime — venv, idapyswitch, LaunchAgent, plugins.
For AI agent integration: skills/ida-setup/SKILL.md.
Python must be built as a framework for idapyswitch to work. With pyenv:
PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.12.xOther Python distributions (Homebrew, system, conda) are untested and likely won't work.
git clone https://github.com/cellebrite-labs/ida-setup.git
cd ida-setup
uv tool install -e .# Create venv — runs idapyswitch, installs idapro, activates idalib, sets up LaunchAgent.
ida-setup venv --yes --python "$(pyenv which python)"
# Install packages into IDA's venv
ida-setup pip install foo bar--ida (IDA selection) — Most commands need an IDA installation. Default: newest IDA Professional*.app via Spotlight. Use --ida /path/to/IDA.app to pin a specific one.
--python — pip, python, and plugin install/relink commands need an interpreter:
- Omit
--python— readsIDAPYTHON_VENV_EXECUTABLEas configured by LaunchAgent (default~/.idapro/venv). --python ida— launch IDA, probe its runtime, use that interpreter. Slow: launches IDA each time.--python /path/to/python3— explicit path
venv — ~/.idapro/venv is the shared Python environment for both UI IDA and headless idalib. The supported setup is pyenv framework Python. idapro is installed/upgraded and IDA's idapyswitch setting is refreshed each time you run ida-setup venv.
Show overall setup state (IDA, venv, LaunchAgent, idapro).
ida-setup status
With --probe, launches IDA and reports its Python runtime. Use --import to verify package visibility:
ida-setup status --probe
ida-setup --verbose status --probe
ida-setup status --probe --import foo --import barCreate or update ~/.idapro/venv. Installs/upgrades idapro, activates idalib, runs idapyswitch and sets up LaunchAgent. Idempotent — safe to re-run after IDA upgrades.
# First time: create venv from pyenv's framework Python
ida-setup venv --python "$(pyenv which python)"
# After IDA upgrade: re-run to update idapro
ida-setup venvRun pip or python using the selected interpreter.
ida-setup pip install foo
ida-setup --python ida python -c 'import sys; print(sys.executable)'
ida-setup --python /path/to/python3 pip listManage ~/.idapro/plugins and ~/.idapro/loaders.
ida-setup plugin list # shows both plugins/ and loaders/
ida-setup plugin link /path/to/plugin.py # -> ~/.idapro/plugins
ida-setup plugin link /path/to/loader.py --loader # -> ~/.idapro/loaders
ida-setup plugin unlink plugin.py
ida-setup plugin unlink loader.py --loaderInstall a package that declares ida_plugins or ida_loaders entry points in its pyproject.toml. Installs the package via uv pip install and symlinks the entry point modules into ~/.idapro/plugins and ~/.idapro/loaders.
ida-setup plugin install keypatch
ida-setup plugin install -e /path/to/keypatchRecreate all entry point symlinks (e.g. after manually removing one):
ida-setup plugin relinkplugin install uses standard Python packaging instead of custom metadata formats. A plugin is a normal Python package that declares ida_plugins or ida_loaders entry points in pyproject.toml:
[project.entry-points."ida_plugins"]
keypatch = "keypatch.keypatch"The tool installs the package via uv pip install and symlinks the entry point modules into ~/.idapro/plugins (or loaders). Any source pip supports works: PyPI, git URLs, local paths.
For the full details — motivation, packaging guide, naming conventions, and comparison with hex-rays' hcli — see docs/plugin-packaging.md.
--yes— skip prompts; required for non-interactive runs--verbose— debug logging; withstatus --probealso prints full probe JSON--force(onplugin link/plugin unlink) — allow overwriting existing symlinks or deleting real files and directories
If you previously used ~/.idapro/idalib-venv, run ida-setup status — it will flag the old directory as stale and safe to remove:
rm -rf ~/.idapro/idalib-venvuv run --group test pytest -q tests/