Skip to content

API Reference

Welcome to the Trae IDE API Reference. This comprehensive guide covers all available APIs, SDKs, and integration methods for extending and customizing Trae IDE.

Overview

Trae IDE provides multiple APIs and extension points to help you:

  • Create custom extensions and plugins
  • Integrate with external tools and services
  • Automate development workflows
  • Customize the IDE behavior
  • Build AI-powered development tools

API Categories

Core APIs

  • Editor API - Control the code editor, manage documents, and handle text operations
  • Workspace API - Manage projects, files, and workspace settings
  • UI API - Create custom panels, dialogs, and interface elements
  • Commands API - Register custom commands and keyboard shortcuts

AI & Intelligence

Development Tools

  • Terminal API - Control integrated terminals and execute commands
  • Debugger API - Integrate debugging capabilities
  • Git API - Access version control functionality
  • Build API - Manage build processes and tasks

Extensions & Plugins

Quick Start

Creating Your First Extension

typescript
import { TraeAPI } from '@trae/api';

export function activate(context: TraeAPI.ExtensionContext) {
  // Register a command
  const disposable = TraeAPI.commands.registerCommand('myExtension.helloWorld', () => {
    TraeAPI.window.showInformationMessage('Hello from Trae!');
  });

  context.subscriptions.push(disposable);
}

export function deactivate() {
  // Cleanup when extension is deactivated
}

Basic API Usage

typescript
// Get the active editor
const editor = TraeAPI.window.activeTextEditor;
if (editor) {
  const document = editor.document;
  const selection = editor.selection;
  
  // Get selected text
  const selectedText = document.getText(selection);
  console.log('Selected text:', selectedText);
}

// Show a notification
TraeAPI.window.showInformationMessage('Operation completed!');

// Execute a command
TraeAPI.commands.executeCommand('workbench.action.files.save');

Authentication

Some APIs require authentication for external services:

typescript
// AI API authentication
const aiClient = new TraeAPI.AI.Client({
  apiKey: process.env.TRAE_AI_API_KEY,
  endpoint: 'https://api.trae.ai'
});

// GitHub integration
const githubAuth = await TraeAPI.auth.getSession('github');
if (githubAuth) {
  const octokit = new Octokit({
    auth: githubAuth.accessToken
  });
}

Error Handling

All APIs use consistent error handling patterns:

typescript
try {
  const result = await TraeAPI.workspace.openFolder('/path/to/project');
  console.log('Folder opened:', result);
} catch (error) {
  if (error instanceof TraeAPI.FileSystemError) {
    TraeAPI.window.showErrorMessage(`Failed to open folder: ${error.message}`);
  } else {
    console.error('Unexpected error:', error);
  }
}

Event System

Trae IDE uses an event-driven architecture:

typescript
// Listen to file changes
TraeAPI.workspace.onDidChangeTextDocument((event) => {
  console.log('Document changed:', event.document.fileName);
});

// Listen to editor selection changes
TraeAPI.window.onDidChangeTextEditorSelection((event) => {
  console.log('Selection changed in:', event.textEditor.document.fileName);
});

// Listen to AI chat events
TraeAPI.ai.onDidReceiveMessage((message) => {
  console.log('AI message:', message.content);
});

Configuration

Extension Manifest

Every extension needs a package.json manifest:

json
{
  "name": "my-trae-extension",
  "displayName": "My Trae Extension",
  "description": "A sample extension for Trae IDE",
  "version": "1.0.0",
  "engines": {
    "trae": "^1.0.0"
  },
  "categories": [
    "Other"
  ],
  "activationEvents": [
    "onCommand:myExtension.helloWorld"
  ],
  "main": "./out/extension.js",
  "contributes": {
    "commands": [
      {
        "command": "myExtension.helloWorld",
        "title": "Hello World"
      }
    ]
  },
  "scripts": {
    "compile": "tsc -p ./",
    "watch": "tsc -watch -p ./"
  },
  "devDependencies": {
    "@trae/api": "^1.0.0",
    "typescript": "^4.9.0"
  }
}

TypeScript Configuration

json
{
  "compilerOptions": {
    "module": "commonjs",
    "target": "ES2020",
    "outDir": "out",
    "lib": ["ES2020"],
    "sourceMap": true,
    "rootDir": "src",
    "strict": true
  },
  "exclude": ["node_modules", ".trae-test"]
}

Testing

Trae provides testing utilities for extensions:

typescript
import * as assert from 'assert';
import { TraeAPI } from '@trae/api';

suite('Extension Test Suite', () => {
  test('Sample test', async () => {
    // Test your extension functionality
    const result = await TraeAPI.commands.executeCommand('myExtension.helloWorld');
    assert.strictEqual(result, true);
  });
});

Publishing

Publish your extension to the Trae Marketplace:

bash
# Install the Trae CLI
npm install -g @trae/cli

# Package your extension
trae package

# Publish to marketplace
trae publish

Best Practices

Performance

  • Use lazy loading for heavy operations
  • Dispose of resources properly
  • Avoid blocking the main thread
  • Cache expensive computations

User Experience

  • Provide clear error messages
  • Show progress for long operations
  • Follow Trae's design guidelines
  • Support keyboard shortcuts

Security

  • Validate all user inputs
  • Use secure communication protocols
  • Don't store sensitive data in plain text
  • Follow the principle of least privilege

Migration Guide

From VS Code Extensions

Trae IDE is designed to be compatible with many VS Code extensions:

typescript
// VS Code API
import * as vscode from 'vscode';

// Trae API (similar structure)
import { TraeAPI } from '@trae/api';

// Most VS Code patterns work directly
const editor = TraeAPI.window.activeTextEditor; // Same as vscode.window.activeTextEditor

Breaking Changes

See the Migration Guide for detailed information about API changes and migration steps.

Support

Examples

Explore our collection of example extensions:


This documentation is for Trae IDE API version 1.0. For older versions, see the version archive.

Your Ultimate AI-Powered IDE Learning Guide