Skip to main content

Overview

BD2 Mod Manager offers two methods for syncing mods to your game directory: Copy and Symlink. Each method has different performance characteristics, disk space requirements, and permission needs. Choosing the right sync method depends on your priorities:
  • Copy - Simple, compatible, no admin rights required
  • Symlink - Fast, space-efficient, requires admin rights

Sync method comparison

FeatureCopySymlink
SpeedSlowerMuch faster
Disk spaceUses more space (duplicates files)Saves space (creates shortcuts)
Admin rightsNot requiredRequired
Drag & dropAvailableNot available
CompatibilityWorks everywhereWindows restrictions

Copy method

The Copy method physically copies all enabled mod files from your staging directory to the game’s mods folder.

How Copy works

1

Scan enabled mods

The manager identifies all mods enabled in your current profile.
2

Compare with game folder

Compares enabled mods with what’s currently in the game’s BD2MM folder.
3

Remove outdated mods

Deletes mods that are no longer enabled or have been updated.
4

Copy new and updated mods

Copies mod folders from staging to the game directory using shutil.copytree().
From src/models/mod_manager_model.py:1300-1322:
for mod_relpath in mods_to_add:
    current_step += 1
    update_progress(
        f"Installing '{mod_relpath}'", current_step, total_steps)
    try:
        mod_staging_path = enabled_mods_by_relpath[mod_relpath]
        mod_game_path = self._game_mods_directory / mod_relpath
        
        if mod_game_path.exists():
            logger.warning(
                "Mod '%s' already exists in game directory. It will be replaced.",
                mod_relpath,
            )
            remove_folder(mod_game_path)
        
        mod_game_path.parent.mkdir(parents=True, exist_ok=True)
        shutil.copytree(mod_staging_path, mod_game_path)

Advantages of Copy

No admin rights required

Copy method works without administrator privileges, making it accessible for all users.

Full compatibility

Works on all Windows systems without restrictions or special configurations.

Drag and drop support

You can drag and drop mod files directly into the manager.

Disadvantages of Copy

Slower sync times - Copying hundreds of mods can take several minutes, especially with large texture files.
More disk space - Each enabled mod is duplicated, consuming additional disk space. With 359 mods, this can be several gigabytes.

Copy method performance

The Copy method includes optimizations:
  • Incremental syncing - Only copies mods that changed
  • Folder comparison - Checks if mods are already up-to-date (see src/models/mod_manager_model.py:1259-1276):
mods_to_check = installed_relpaths & enabled_relpaths
for mod_relpath in mods_to_check:
    update_progress(f"Checking '{mod_relpath}'", 0, 0)
    
    installed_path = installed_mods[mod_relpath]
    staging_path = enabled_mods_by_relpath[mod_relpath]
    
    if installed_path.is_symlink():
        logger.warning(
            "Mod '%s' is a symlink; will be replaced with a copy.", mod_relpath)
        mods_to_remove.add(mod_relpath)
        mods_to_add.add(mod_relpath)
        continue
    
    if not are_folders_identical(installed_path, staging_path):
        logger.info(
            "Mod '%s' has updates. Staged version is newer.", mod_relpath)
        mods_to_remove.add(mod_relpath)
        mods_to_add.add(mod_relpath)
This means if you sync again without changes, it completes almost instantly. The Symlink method creates symbolic links (shortcuts) from the game’s mods folder to your staging directory instead of copying files.
1

Scan enabled mods

Identifies all enabled mods in your current profile.
2

Compare with game folder

Checks which symlinks exist and which need to be created or removed.
3

Remove outdated symlinks

Deletes symlinks for disabled mods or broken links.
4

Create new symlinks

Creates symbolic links pointing to mod folders in staging using Path.symlink_to().
From src/models/mod_manager_model.py:1195-1210:
for mod_relpath in mods_to_link:
    current_step += 1
    update_progress(f"Linking '{mod_relpath}'",
                    current_step, total_steps)
    try:
        mod_staging_path = staging_mods_by_relpath[mod_relpath]
        mod_game_path = self._game_mods_directory / mod_relpath
        
        mod_game_path.parent.mkdir(parents=True, exist_ok=True)
        
        mod_game_path.symlink_to(
            mod_staging_path, target_is_directory=True)
        logger.debug("Linked mod '%s' to '%s'.",
                      mod_game_path, mod_staging_path)
    except Exception as e:
        logger.error("Failed to link '%s': %s", mod_relpath, e)

Much faster

Syncing is nearly instantaneous - creating symlinks takes milliseconds compared to minutes of file copying.

Saves disk space

No file duplication. Hundreds of mods use almost no additional space in the game folder.

Instant updates

Changes to mod files in staging are immediately reflected in the game without re-syncing.
Requires administrator privileges - Windows requires admin rights to create symbolic links for security reasons.
The manager checks for admin rights before attempting symlink sync (see src/models/mod_manager_model.py:557-562):
if symlink and not is_running_as_admin():
    logger.error(
        "Administrator privileges are required to use symlinks.")
    raise AdminRequiredError(
        "Administrator privileges are required to use symlinks."
    )
No drag and drop - Windows security restrictions prevent drag and drop when running as administrator.
From the README (line 62):
- ❌ Drag & Drop not available (Windows restrictions)

Performance comparison

Real-world testing with 359 mods shows significant performance differences:

Copy method performance

  • Several minutes to complete
  • Progress bar shows each mod being copied
  • Disk usage increases significantly (duplicates all mod files)
  • Example: 359 mods taking multiple minutes to sync
  • Completes in seconds
  • Symlinks created almost instantly
  • Minimal disk usage (only creates shortcuts)
  • Example: 359 mods syncing in under 10 seconds
The performance difference becomes more noticeable as your mod collection grows. With hundreds of mods, Symlink mode can be 10-20x faster than Copy mode.

Choosing a sync method

Use Copy if:

  • You don’t have or don’t want to use admin rights
  • You want to use drag and drop for adding mods
  • You have plenty of disk space
  • You prefer simplicity over performance
  • You sync mods infrequently
  • You can run the manager as administrator
  • You have limited disk space
  • You sync mods frequently
  • You want the fastest possible sync times
  • You test and modify mods often
If you frequently test different mod combinations or switch profiles often, Symlink mode will save you significant time.

Switching sync methods

You can change your sync method in the settings:
1

Open settings

Navigate to the settings menu in BD2 Mod Manager.
2

Find sync method option

Locate the Sync Method setting.
3

Select method

Choose either Copy or Symlink.
4

Re-sync mods

After changing methods, click Unsync to remove old mods, then Sync to apply the new method.
When switching from Symlink to Copy or vice versa, the manager automatically detects and replaces the old method’s files/links.
From src/models/mod_manager_model.py:1265-1270:
if installed_path.is_symlink():
    logger.warning(
        "Mod '%s' is a symlink; will be replaced with a copy.", mod_relpath)
    mods_to_remove.add(mod_relpath)
    mods_to_add.add(mod_relpath)
    continue

Sync destination

Regardless of sync method, both create a folder named BD2MM inside the BrownDustX mods directory:
BrownDust II/
└── BepInEx/
    └── plugins/
        └── BrownDustX/
            └── mods/
                └── BD2MM/        ← Your synced mods go here
                    ├── mod1/
                    ├── mod2/
                    └── mod3/
This is defined in src/models/mod_manager_model.py:75 and 115-121:
BD2MM_MODS_FOLDER = "BD2MM"

self._game_mods_directory = (
    self._game_directory
    / "BepInEx"
    / "plugins"
    / "BrownDustX"
    / "mods"
    / BD2MM_MODS_FOLDER
)

Unsyncing mods

Both methods support unsyncing, which removes all mods from the game folder:
  • Copy method - Deletes all copied mod folders
  • Symlink method - Removes all symbolic links
Unsyncing is useful when:
  • You want to play without mods temporarily
  • You’re troubleshooting game issues
  • You want to clear everything before a fresh sync
The unsync process (see src/models/mod_manager_model.py:593-637):
  1. Lists all items in the BD2MM folder
  2. Removes each item (files, folders, or symlinks)
  3. Shows progress for each removal
  4. Handles errors gracefully
To use Symlink mode:

Running as administrator

1

Close BD2 Mod Manager

If it’s currently running, close it completely.
2

Right-click the executable

Right-click on BD2ModManager.exe in Windows Explorer.
3

Select 'Run as administrator'

Choose Run as administrator from the context menu.
4

Confirm UAC prompt

Click Yes on the User Account Control dialog.

Creating a shortcut

For permanent admin access:
  1. Right-click BD2ModManager.exeCreate shortcut
  2. Right-click the shortcut → Properties
  3. Click Advanced button
  4. Check Run as administrator
  5. Click OK and Apply
Now launching via this shortcut always runs as admin.
You can tell if the manager is running as admin by checking the title bar - Windows usually adds “Administrator” to the window title.

Build docs developers (and LLMs) love