Migration Guide 
This guide helps you migrate between different versions of Trae and upgrade your extensions, configurations, and projects.
Overview 
Trae provides migration tools and guides to help you:
- Upgrade from older versions to newer versions
- Migrate extensions and plugins
- Update configuration files and settings
- Convert legacy projects and workspaces
- Handle breaking changes and deprecated features
- Preserve custom configurations and data
Version Migration 
Trae 2.x to 3.x 
Breaking Changes 
- API Changes: Several APIs have been updated with new signatures
- Configuration Format: Settings format has been modernized
- Extension System: New extension architecture with improved capabilities
- Plugin Interface: Updated plugin interface for better performance
Migration Steps 
- Backup Your Data bash- # Backup your workspace cp -r ~/.trae ~/.trae-backup # Backup project configurations find . -name ".trae" -type d -exec cp -r {} {}.backup \;
- Update Configuration Files typescript- // Old format (v2.x) { "editor": { "fontSize": 14, "theme": "dark" } } // New format (v3.x) { "editor.fontSize": 14, "workbench.colorTheme": "dark" }
- Update Extensions bash- # List installed extensions trae --list-extensions # Update all extensions trae --update-extensions # Reinstall incompatible extensions trae --reinstall-extensions
- Migrate Custom Settings typescript- import { MigrationTool } from '@trae/migration'; const migrator = new MigrationTool(); // Migrate settings await migrator.migrateSettings({ from: '2.x', to: '3.x', settingsPath: '~/.trae/settings.json' }); // Migrate keybindings await migrator.migrateKeybindings({ from: '2.x', to: '3.x', keybindingsPath: '~/.trae/keybindings.json' });
Trae 1.x to 2.x 
Major Changes 
- Workspace Format: New workspace file structure
- Theme System: Enhanced theming capabilities
- Language Support: Improved language server integration
- Debug Configuration: Updated debugging interface
Migration Process 
- Convert Workspace Files typescript- import { WorkspaceMigrator } from '@trae/migration'; const migrator = new WorkspaceMigrator(); // Convert workspace await migrator.convertWorkspace({ source: './project.trae-workspace', target: './project.code-workspace', version: '2.x' });
- Update Launch Configurations json- // Old format (v1.x) { "version": "0.1.0", "configurations": [ { "name": "Launch", "type": "node", "program": "${workspaceRoot}/app.js" } ] } // New format (v2.x) { "version": "0.2.0", "configurations": [ { "name": "Launch", "type": "node", "program": "${workspaceFolder}/app.js", "console": "integratedTerminal" } ] }
Extension Migration 
API Updates 
Command Registration 
typescript
// Old API (v2.x)
context.subscriptions.push(
  trae.commands.registerCommand('extension.myCommand', () => {
    // Command logic
  })
);
// New API (v3.x)
context.subscriptions.push(
  trae.commands.registerCommand('extension.myCommand', {
    handler: () => {
      // Command logic
    },
    enablement: 'editorHasSelection'
  })
);Configuration Access 
typescript
// Old API (v2.x)
const config = trae.workspace.getConfiguration('myExtension');
const value = config.get('setting');
// New API (v3.x)
const config = trae.workspace.getConfiguration();
const value = config.get('myExtension.setting');Event Handling 
typescript
// Old API (v2.x)
trae.workspace.onDidChangeTextDocument((event) => {
  // Handle change
});
// New API (v3.x)
trae.workspace.onDidChangeTextDocument((event) => {
  // Handle change with improved event data
}, null, context.subscriptions);Extension Manifest Updates 
json
// Old manifest (v2.x)
{
  "name": "my-extension",
  "version": "1.0.0",
  "engines": {
    "trae": "^2.0.0"
  },
  "activationEvents": [
    "onLanguage:javascript"
  ]
}
// New manifest (v3.x)
{
  "name": "my-extension",
  "version": "2.0.0",
  "engines": {
    "trae": "^3.0.0"
  },
  "activationEvents": [
    "onLanguage:javascript"
  ],
  "capabilities": {
    "virtualWorkspaces": true,
    "untrustedWorkspaces": {
      "supported": true
    }
  }
}Configuration Migration 
Settings Migration 
typescript
import { SettingsMigrator } from '@trae/migration';
class SettingsMigrator {
  async migrateSettings(options: MigrationOptions): Promise<void> {
    const oldSettings = await this.loadSettings(options.from);
    const newSettings = this.transformSettings(oldSettings, options.to);
    await this.saveSettings(newSettings, options.to);
  }
  private transformSettings(oldSettings: any, targetVersion: string): any {
    const newSettings: any = {};
    
    // Transform editor settings
    if (oldSettings.editor) {
      newSettings['editor.fontSize'] = oldSettings.editor.fontSize;
      newSettings['editor.fontFamily'] = oldSettings.editor.fontFamily;
      newSettings['editor.tabSize'] = oldSettings.editor.tabSize;
    }
    
    // Transform workbench settings
    if (oldSettings.workbench) {
      newSettings['workbench.colorTheme'] = oldSettings.workbench.theme;
      newSettings['workbench.iconTheme'] = oldSettings.workbench.iconTheme;
    }
    
    // Transform extension settings
    if (oldSettings.extensions) {
      for (const [key, value] of Object.entries(oldSettings.extensions)) {
        newSettings[`extensions.${key}`] = value;
      }
    }
    
    return newSettings;
  }
}Keybindings Migration 
typescript
import { KeybindingsMigrator } from '@trae/migration';
class KeybindingsMigrator {
  async migrateKeybindings(options: MigrationOptions): Promise<void> {
    const oldKeybindings = await this.loadKeybindings(options.from);
    const newKeybindings = this.transformKeybindings(oldKeybindings);
    await this.saveKeybindings(newKeybindings, options.to);
  }
  private transformKeybindings(oldKeybindings: any[]): any[] {
    return oldKeybindings.map(binding => {
      // Update command names
      if (binding.command === 'workbench.action.files.openFile') {
        binding.command = 'workbench.action.files.openFileFolder';
      }
      
      // Update key combinations
      if (binding.key === 'ctrl+shift+p') {
        binding.key = 'cmd+shift+p';
      }
      
      return binding;
    });
  }
}Data Migration 
Workspace Data 
typescript
import { WorkspaceDataMigrator } from '@trae/migration';
class WorkspaceDataMigrator {
  async migrateWorkspaceData(workspacePath: string): Promise<void> {
    const workspaceData = await this.loadWorkspaceData(workspacePath);
    
    // Migrate project settings
    if (workspaceData.settings) {
      workspaceData.settings = this.migrateProjectSettings(workspaceData.settings);
    }
    
    // Migrate launch configurations
    if (workspaceData.launch) {
      workspaceData.launch = this.migrateLaunchConfigurations(workspaceData.launch);
    }
    
    // Migrate tasks
    if (workspaceData.tasks) {
      workspaceData.tasks = this.migrateTasks(workspaceData.tasks);
    }
    
    await this.saveWorkspaceData(workspacePath, workspaceData);
  }
  private migrateProjectSettings(settings: any): any {
    // Transform project-specific settings
    const migratedSettings = { ...settings };
    
    // Update file associations
    if (settings.files?.associations) {
      migratedSettings['files.associations'] = settings.files.associations;
      delete migratedSettings.files;
    }
    
    return migratedSettings;
  }
  private migrateLaunchConfigurations(launch: any): any {
    return {
      ...launch,
      version: '0.2.0',
      configurations: launch.configurations.map((config: any) => ({
        ...config,
        program: config.program?.replace('${workspaceRoot}', '${workspaceFolder}'),
        console: config.console || 'integratedTerminal'
      }))
    };
  }
}Extension Data 
typescript
import { ExtensionDataMigrator } from '@trae/migration';
class ExtensionDataMigrator {
  async migrateExtensionData(extensionId: string): Promise<void> {
    const extensionData = await this.loadExtensionData(extensionId);
    
    // Migrate extension state
    if (extensionData.state) {
      extensionData.state = this.migrateExtensionState(extensionData.state);
    }
    
    // Migrate extension settings
    if (extensionData.settings) {
      extensionData.settings = this.migrateExtensionSettings(extensionData.settings);
    }
    
    await this.saveExtensionData(extensionId, extensionData);
  }
  private migrateExtensionState(state: any): any {
    // Transform extension state data
    const migratedState = { ...state };
    
    // Update state structure
    if (state.version === '1.0') {
      migratedState.version = '2.0';
      migratedState.data = this.transformStateData(state.data);
    }
    
    return migratedState;
  }
}Migration Tools 
CLI Migration Tool 
bash
# Install migration tool
npm install -g @trae/migration-cli
# Run migration
trae-migrate --from 2.x --to 3.x --workspace ./my-project
# Dry run (preview changes)
trae-migrate --from 2.x --to 3.x --workspace ./my-project --dry-run
# Migrate specific components
trae-migrate --from 2.x --to 3.x --settings-only
trae-migrate --from 2.x --to 3.x --extensions-only
trae-migrate --from 2.x --to 3.x --workspace-onlyProgrammatic Migration 
typescript
import { MigrationManager } from '@trae/migration';
const migrationManager = new MigrationManager();
// Run full migration
await migrationManager.migrate({
  from: '2.x',
  to: '3.x',
  workspace: './my-project',
  backup: true,
  dryRun: false
});
// Run selective migration
await migrationManager.migrateSelective({
  from: '2.x',
  to: '3.x',
  components: ['settings', 'keybindings', 'extensions'],
  workspace: './my-project'
});Troubleshooting 
Common Issues 
- Extension Compatibility - Check extension compatibility with new version
- Update or replace incompatible extensions
- Report issues to extension authors
 
- Configuration Conflicts - Review migrated settings for conflicts
- Reset problematic settings to defaults
- Manually adjust complex configurations
 
- Data Loss Prevention - Always backup before migration
- Verify migration results
- Keep backups until migration is confirmed successful
 
Recovery Procedures 
bash
# Restore from backup
cp -r ~/.trae-backup ~/.trae
# Reset to defaults
trae --reset-settings
trae --reset-keybindings
# Reinstall extensions
trae --uninstall-all-extensions
trae --install-extensions-from-backupBest Practices 
- Pre-Migration - Create complete backups
- Document custom configurations
- Test migration on non-production environments
- Review breaking changes documentation
 
- During Migration - Run dry-run first
- Migrate incrementally
- Verify each step
- Keep detailed logs
 
- Post-Migration - Test all functionality
- Update documentation
- Train team members on changes
- Monitor for issues
 
Related Resources 
- Version History - Detailed version information
- Extensions API - Extension development guide
- Settings API - Configuration management
- Workspace API - Workspace configuration
- Commands API - Command system updates