| Crates.io | bn-loader |
| lib.rs | bn-loader |
| version | 0.1.2 |
| created_at | 2026-01-05 00:59:29.406748+00 |
| updated_at | 2026-01-05 02:17:52.976198+00 |
| description | A profile launcher for Binary Ninja that manages multiple configurations |
| homepage | https://github.com/alecnunn/bn-loader |
| repository | https://github.com/alecnunn/bn-loader |
| max_upload_size | |
| id | 2022879 |
| size | 89,981 |
A profile launcher for Binary Ninja that lets you manage multiple configurations. If you work with different Binary Ninja setups (personal vs commercial licenses, different plugin sets, separate configs for development), this tool makes switching between them painless.
cargo install bn-loader
git clone https://github.com/alecnunn/bn-loader
cd bn-loader
cargo install --path .
Download from the releases page for Windows, Linux, and macOS.
example.config.toml to ~/.config/bn-loader.tomlbn-loader <profile-name> to launchbn-loader looks for its config file in these locations (in order):
~/.config/bn-loader.toml (recommended)A basic config looks like this:
[global]
default_profile = "personal"
check_updates = true
[profiles.personal]
install_dir = "C:\\Program Files\\Binary Ninja Personal"
config_dir = "C:\\Users\\You\\AppData\\Roaming\\Binary Ninja Personal"
[profiles.commercial]
install_dir = "C:\\Program Files\\Binary Ninja"
config_dir = "C:\\Users\\You\\AppData\\Roaming\\Binary Ninja"
See example.config.toml for a full example with Linux and macOS paths.
# Launch a profile
bn-loader personal
# Launch default profile (if configured)
bn-loader
# List available profiles
bn-loader --list
# Launch with debug output
bn-loader personal --debug
# Check for updates
bn-loader --check-update
init - Create a new profile from an existing one:
bn-loader init dev --template personal --config-dir ~/bn-dev-config
This copies the license and install directory from the template but gives the new profile its own config directory.
sync - Copy settings between profiles:
# Sync from personal to all other profiles
bn-loader sync --from personal
# Sync to a specific profile
bn-loader sync --from personal --to commercial
# Preview changes without applying
bn-loader sync --from personal --dry-run
License files and other sensitive data are excluded by default. You can add more exclusions in the [sync] section of your config.
plugins - List installed plugins for a profile:
bn-loader plugins personal
diff - Compare two profiles:
bn-loader diff personal commercial
completions - Set up shell completions:
bn-loader completions bash
bn-loader completions zsh
bn-loader completions fish
bn-loader completions powershell
bn-loader supports tab completion for profile names and commands. Run bn-loader completions <shell> for setup instructions specific to your shell.
These go in the [global] section:
| Option | Default | Description |
|---|---|---|
default_profile |
none | Profile to launch when no argument given |
color |
"auto" |
Color output: "auto", "always", "never" |
check_updates |
true |
Check GitHub for new releases on launch |
backup_retention |
5 |
Number of sync backups to keep (0 = unlimited) |
debug |
false |
Enable debug logging globally |
| Option | Required | Description |
|---|---|---|
install_dir |
yes | Path to Binary Ninja installation |
config_dir |
yes | Path to user data directory |
executable |
no | Binary name (defaults to binaryninja.exe on Windows, binaryninja elsewhere) |
debug |
no | Enable debug logging for this profile |
The sync command copies settings, plugins, and other configuration between profiles.
These items are synced from the source profile (if they exist):
plugins/ - Manual plugin installationsrepositories/ - Plugin manager datasignatures/ - Custom signaturesthemes/ - UI themessnippets/ - Code snippetstypes/ - Type librariessettings.json - Binary Ninja settingsstartup.py - Startup scriptkeybindings.json - Key bindingsThese patterns are always excluded to protect license files:
license.dat, license.txt, user.id, keychain/, __pycache__/, *.pyc
Add your own exclusions in your config (these merge with the defaults):
[sync]
exclusions = ["my-custom-dir/", "*.tmp"]
Or use the --exclude flag for one-off exclusions:
bn-loader sync --from personal --exclude "temp/"
BSD-3-Clause. See LICENSE for details.