Toolkit Versioning

View as markdown

Toolkit versioning ensures your tools behave consistently across deployments. You can pin specific versions in production, test new releases in development, and roll back when needed.

Starting from Python SDK v0.9.0 and TypeScript SDK v0.2.0, specifying versions is required for manual tool execution.

Configuration methods

Configure toolkit versions using one of three methods:

SDK initialization

from composio import Composio

# Pin specific versions for each toolkit
composio = Composio(
    api_key="YOUR_API_KEY",
    toolkit_versions={
        "github": "20251027_00",
        "slack": "20251027_00",
        "gmail": "20251027_00"
    }
)
import { class Composio<TProvider extends BaseComposioProvider<unknown, unknown, unknown> = OpenAIProvider>
This is the core class for Composio. It is used to initialize the Composio SDK and provide a global configuration.
Composio
} from "@composio/core";
// Pin specific versions for each toolkit const const composio: Composio<OpenAIProvider>composio = new new Composio<OpenAIProvider>(config?: ComposioConfig<OpenAIProvider> | undefined): Composio<OpenAIProvider>
Creates a new instance of the Composio SDK. The constructor initializes the SDK with the provided configuration options, sets up the API client, and initializes all core models (tools, toolkits, etc.).
@paramconfig - Configuration options for the Composio SDK@paramconfig.apiKey - The API key for authenticating with the Composio API@paramconfig.baseURL - The base URL for the Composio API (defaults to production URL)@paramconfig.allowTracking - Whether to allow anonymous usage analytics@paramconfig.provider - The provider to use for this Composio instance (defaults to OpenAIProvider)@example```typescript // Initialize with default configuration const composio = new Composio(); // Initialize with custom API key and base URL const composio = new Composio({ apiKey: 'your-api-key', baseURL: 'https://api.composio.dev' }); // Initialize with custom provider const composio = new Composio({ apiKey: 'your-api-key', provider: new CustomProvider() }); ```
Composio
({
apiKey?: string | null | undefined
The API key for the Composio API.
@example'sk-1234567890'
apiKey
: "YOUR_API_KEY",
toolkitVersions?: "latest" | Record<string, string> | undefined
The versions of the toolkits to use for tool execution and retrieval. Omit to use 'latest' for all toolkits. **Version Control:** When executing tools manually (via `tools.execute()`), if this resolves to "latest", you must either: - Set `dangerouslySkipVersionCheck: true` in the execute params (not recommended for production) - Specify a concrete version here or in environment variables - Pass a specific `version` parameter to the execute call Defaults to 'latest' if nothing is provided. You can specify individual toolkit versions via environment variables: `COMPOSIO_TOOLKIT_VERSION_GITHUB=20250902_00`
@exampleGlobal version for all toolkits, omit to use 'latest' ```typescript const composio = new Composio(); ```@exampleSpecific versions for different toolkits (recommended for production) ```typescript const composio = new Composio({ toolkitVersions: { github: '20250909_00', slack: '20250902_00' } }); ```@exampleSet via environment variables ```typescript // Set environment variables: // COMPOSIO_TOOLKIT_VERSION_GITHUB=20250909_00 // COMPOSIO_TOOLKIT_VERSION_SLACK=20250902_00 const composio = new Composio(); // Will use env variables ```
toolkitVersions
: {
github: stringgithub: "20251027_00", slack: stringslack: "20251027_00", gmail: stringgmail: "20251027_00" } });

Environment variables

# Set versions for specific toolkits
export COMPOSIO_TOOLKIT_VERSION_GITHUB="20251027_00"
export COMPOSIO_TOOLKIT_VERSION_SLACK="20251027_00"
export COMPOSIO_TOOLKIT_VERSION_GMAIL="20251027_00"

Per-execution override

from composio import Composio

composio = Composio(api_key="YOUR_API_KEY")

# Specify version directly in execute call
result = composio.tools.execute(
    "GITHUB_LIST_STARGAZERS",
    arguments={
        "owner": "ComposioHQ",
        "repo": "composio"
    },
    user_id="user-k7334",
    version="20251027_00"  # Override version for this execution
)
print(result)
import { class Composio<TProvider extends BaseComposioProvider<unknown, unknown, unknown> = OpenAIProvider>
This is the core class for Composio. It is used to initialize the Composio SDK and provide a global configuration.
Composio
} from "@composio/core";
const const composio: Composio<OpenAIProvider>composio = new new Composio<OpenAIProvider>(config?: ComposioConfig<OpenAIProvider> | undefined): Composio<OpenAIProvider>
Creates a new instance of the Composio SDK. The constructor initializes the SDK with the provided configuration options, sets up the API client, and initializes all core models (tools, toolkits, etc.).
@paramconfig - Configuration options for the Composio SDK@paramconfig.apiKey - The API key for authenticating with the Composio API@paramconfig.baseURL - The base URL for the Composio API (defaults to production URL)@paramconfig.allowTracking - Whether to allow anonymous usage analytics@paramconfig.provider - The provider to use for this Composio instance (defaults to OpenAIProvider)@example```typescript // Initialize with default configuration const composio = new Composio(); // Initialize with custom API key and base URL const composio = new Composio({ apiKey: 'your-api-key', baseURL: 'https://api.composio.dev' }); // Initialize with custom provider const composio = new Composio({ apiKey: 'your-api-key', provider: new CustomProvider() }); ```
Composio
({ apiKey?: string | null | undefined
The API key for the Composio API.
@example'sk-1234567890'
apiKey
: "YOUR_API_KEY" });
// Specify version directly in execute call const
const result: {
    error: string | null;
    data: Record<string, unknown>;
    successful: boolean;
    logId?: string | undefined;
    sessionInfo?: unknown;
}
result
= await const composio: Composio<OpenAIProvider>composio.Composio<OpenAIProvider>.tools: Tools<unknown, unknown, OpenAIProvider>
List, retrieve, and execute tools
tools
.Tools<unknown, unknown, OpenAIProvider>.execute(slug: string, body: ToolExecuteParams, modifiers?: ExecuteToolModifiers): Promise<ToolExecuteResponse>
Executes a given tool with the provided parameters. This method calls the Composio API or a custom tool handler to execute the tool and returns the response. It automatically determines whether to use a custom tool or a Composio API tool based on the slug. **Version Control:** By default, manual tool execution requires a specific toolkit version. If the version resolves to "latest", the execution will throw a `ComposioToolVersionRequiredError` unless `dangerouslySkipVersionCheck` is set to `true`. This helps prevent unexpected behavior when new toolkit versions are released.
@paramslug - The slug/ID of the tool to be executed@parambody - The parameters to be passed to the tool@parambody.version - The specific version of the tool to execute (e.g., "20250909_00")@parambody.dangerouslySkipVersionCheck - Skip version validation for "latest" version (use with caution)@parambody.userId - The user ID to execute the tool for@parambody.connectedAccountId - The connected account ID to use for authenticated tools@parambody.arguments - The arguments to pass to the tool@parammodifiers - Optional modifiers to transform the request or response@returns- The response from the tool execution@throws{ComposioCustomToolsNotInitializedError} If the CustomTools instance is not initialized@throws{ComposioConnectedAccountNotFoundError} If the connected account is not found@throws{ComposioToolNotFoundError} If the tool with the given slug is not found@throws{ComposioToolVersionRequiredError} If version resolves to "latest" and dangerouslySkipVersionCheck is not true@throws{ComposioToolExecutionError} If there is an error during tool execution@exampleExecute with a specific version (recommended for production) ```typescript const result = await composio.tools.execute('GITHUB_GET_REPOS', { userId: 'default', version: '20250909_00', arguments: { owner: 'composio' } }); ```@exampleExecute with dangerouslySkipVersionCheck (not recommended for production) ```typescript const result = await composio.tools.execute('HACKERNEWS_GET_USER', { userId: 'default', arguments: { userId: 'pg' }, dangerouslySkipVersionCheck: true // Allows execution with "latest" version }); ```@exampleExecute with SDK-level toolkit versions configuration ```typescript // If toolkitVersions are set during Composio initialization, no need to pass version const composio = new Composio({ toolkitVersions: { github: '20250909_00' } }); const result = await composio.tools.execute('GITHUB_GET_REPOS', { userId: 'default', arguments: { owner: 'composio' } }); ```@exampleExecute with modifiers ```typescript const result = await composio.tools.execute('GITHUB_GET_ISSUES', { userId: 'default', version: '20250909_00', arguments: { owner: 'composio', repo: 'sdk' } }, { beforeExecute: ({ toolSlug, toolkitSlug, params }) => { console.log(`Executing ${toolSlug} from ${toolkitSlug}`); return params; }, afterExecute: ({ toolSlug, toolkitSlug, result }) => { console.log(`Completed ${toolSlug}`); return result; } }); ```
execute
("GITHUB_LIST_STARGAZERS", {
userId?: string | undefineduserId: "user-k7334", arguments?: Record<string, unknown> | undefinedarguments: { owner: stringowner: "ComposioHQ", repo: stringrepo: "composio" }, version?: string | undefinedversion: "20251027_00" // Override version for this execution }); var console: Console
The `console` module provides a simple debugging console that is similar to the JavaScript console mechanism provided by web browsers. The module exports two specific components: * A `Console` class with methods such as `console.log()`, `console.error()` and `console.warn()` that can be used to write to any Node.js stream. * A global `console` instance configured to write to [`process.stdout`](https://nodejs.org/docs/latest-v24.x/api/process.html#processstdout) and [`process.stderr`](https://nodejs.org/docs/latest-v24.x/api/process.html#processstderr). The global `console` can be used without importing the `node:console` module. _**Warning**_: The global console object's methods are neither consistently synchronous like the browser APIs they resemble, nor are they consistently asynchronous like all other Node.js streams. See the [`note on process I/O`](https://nodejs.org/docs/latest-v24.x/api/process.html#a-note-on-process-io) for more information. Example using the global `console`: ```js console.log('hello world'); // Prints: hello world, to stdout console.log('hello %s', 'world'); // Prints: hello world, to stdout console.error(new Error('Whoops, something bad happened')); // Prints error message and stack trace to stderr: // Error: Whoops, something bad happened // at [eval]:5:15 // at Script.runInThisContext (node:vm:132:18) // at Object.runInThisContext (node:vm:309:38) // at node:internal/process/execution:77:19 // at [eval]-wrapper:6:22 // at evalScript (node:internal/process/execution:76:60) // at node:internal/main/eval_string:23:3 const name = 'Will Robinson'; console.warn(`Danger ${name}! Danger!`); // Prints: Danger Will Robinson! Danger!, to stderr ``` Example using the `Console` class: ```js const out = getStreamSomehow(); const err = getStreamSomehow(); const myConsole = new console.Console(out, err); myConsole.log('hello world'); // Prints: hello world, to out myConsole.log('hello %s', 'world'); // Prints: hello world, to out myConsole.error(new Error('Whoops, something bad happened')); // Prints: [Error: Whoops, something bad happened], to err const name = 'Will Robinson'; myConsole.warn(`Danger ${name}! Danger!`); // Prints: Danger Will Robinson! Danger!, to err ```
@see[source](https://github.com/nodejs/node/blob/v24.x/lib/console.js)
console
.Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)
Prints to `stdout` with newline. Multiple arguments can be passed, with the first used as the primary message and all additional used as substitution values similar to [`printf(3)`](http://man7.org/linux/man-pages/man3/printf.3.html) (the arguments are all passed to [`util.format()`](https://nodejs.org/docs/latest-v24.x/api/util.html#utilformatformat-args)). ```js const count = 5; console.log('count: %d', count); // Prints: count: 5, to stdout console.log('count:', count); // Prints: count: 5, to stdout ``` See [`util.format()`](https://nodejs.org/docs/latest-v24.x/api/util.html#utilformatformat-args) for more information.
@sincev0.1.100
log
(
const result: {
    error: string | null;
    data: Record<string, unknown>;
    successful: boolean;
    logId?: string | undefined;
    sessionInfo?: unknown;
}
result
);

Version format

Versions follow the format YYYYMMDD_NN:

  • YYYYMMDD: Release date
  • NN: Sequential release number
# Production
toolkit_versions = {"github": "20251027_00"}

# Development
toolkit_versions = {"github": "latest"}

Never use latest in production. It can introduce breaking changes.

Version resolution order

  1. Per-execution version (highest priority)
  2. SDK initialization version
  3. Environment variable (toolkit-specific)

Managing versions

Check available versions using:

# Get toolkit information including available versions
toolkit = composio.toolkits.get(slug="github")

# Extract and print version information
print(f"Toolkit: {toolkit.name}")
print(f"Current Version: {toolkit.meta.version}")
print(f"Available Versions: {toolkit.meta.available_versions}")
// Get toolkit information including available versions
const 
const toolkit: {
    slug: string;
    name: string;
    meta: {
        description?: string | undefined;
        logo?: string | undefined;
        availableVersions?: string[] | undefined;
        createdAt?: string | undefined;
        updatedAt?: string | undefined;
        categories?: {
            slug: string;
            name: string;
        }[] | undefined;
        appUrl?: string | undefined;
        toolsCount?: number | undefined;
        triggersCount?: number | undefined;
    };
    isLocalToolkit: boolean;
    composioManagedAuthSchemes?: string[] | undefined;
    baseUrl?: string | undefined;
    authConfigDetails?: {
        name: string;
        mode: string;
        fields: {
            authConfigCreation: {
                required: {
                    name: string;
                    description: string;
                    type: string;
                    required: boolean;
                    displayName: string;
                    default?: string | null | undefined;
                }[];
                optional: {
                    name: string;
                    description: string;
                    type: string;
                    required: boolean;
                    displayName: string;
                    default?: string | null | undefined;
                }[];
            };
            connectedAccountInitiation: {
                required: {
                    name: string;
                    description: string;
                    type: string;
                    required: boolean;
                    displayName: string;
                    default?: string | null | undefined;
                }[];
                optional: {
                    name: string;
                    description: string;
                    type: string;
                    required: boolean;
                    displayName: string;
                    default?: string | null | undefined;
                }[];
            };
        };
        proxy?: {
            baseUrl?: string | undefined;
        } | undefined;
    }[] | undefined;
    getCurrentUserEndpoint?: string | undefined;
}
toolkit
= await const composio: Composio<OpenAIProvider>composio.Composio<OpenAIProvider>.toolkits: Toolkits
Retrieve toolkit metadata and authorize user connections
toolkits
.Toolkits.get(slug: string): Promise<ToolkitRetrieveResponse> (+1 overload)
Retrieves a specific toolkit by its slug identifier.
@paramslug - The unique slug identifier of the toolkit to retrieve@returnsThe toolkit object with detailed information@throws{ComposioToolNotFoundError} If no toolkit with the given slug exists@example```typescript // Get a specific toolkit const githubToolkit = await composio.toolkits.get('github'); console.log(githubToolkit.name); // GitHub console.log(githubToolkit.authConfigDetails); // Authentication configuration details ```
get
("github");
// Extract and print version information var console: Console
The `console` module provides a simple debugging console that is similar to the JavaScript console mechanism provided by web browsers. The module exports two specific components: * A `Console` class with methods such as `console.log()`, `console.error()` and `console.warn()` that can be used to write to any Node.js stream. * A global `console` instance configured to write to [`process.stdout`](https://nodejs.org/docs/latest-v24.x/api/process.html#processstdout) and [`process.stderr`](https://nodejs.org/docs/latest-v24.x/api/process.html#processstderr). The global `console` can be used without importing the `node:console` module. _**Warning**_: The global console object's methods are neither consistently synchronous like the browser APIs they resemble, nor are they consistently asynchronous like all other Node.js streams. See the [`note on process I/O`](https://nodejs.org/docs/latest-v24.x/api/process.html#a-note-on-process-io) for more information. Example using the global `console`: ```js console.log('hello world'); // Prints: hello world, to stdout console.log('hello %s', 'world'); // Prints: hello world, to stdout console.error(new Error('Whoops, something bad happened')); // Prints error message and stack trace to stderr: // Error: Whoops, something bad happened // at [eval]:5:15 // at Script.runInThisContext (node:vm:132:18) // at Object.runInThisContext (node:vm:309:38) // at node:internal/process/execution:77:19 // at [eval]-wrapper:6:22 // at evalScript (node:internal/process/execution:76:60) // at node:internal/main/eval_string:23:3 const name = 'Will Robinson'; console.warn(`Danger ${name}! Danger!`); // Prints: Danger Will Robinson! Danger!, to stderr ``` Example using the `Console` class: ```js const out = getStreamSomehow(); const err = getStreamSomehow(); const myConsole = new console.Console(out, err); myConsole.log('hello world'); // Prints: hello world, to out myConsole.log('hello %s', 'world'); // Prints: hello world, to out myConsole.error(new Error('Whoops, something bad happened')); // Prints: [Error: Whoops, something bad happened], to err const name = 'Will Robinson'; myConsole.warn(`Danger ${name}! Danger!`); // Prints: Danger Will Robinson! Danger!, to err ```
@see[source](https://github.com/nodejs/node/blob/v24.x/lib/console.js)
console
.Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)
Prints to `stdout` with newline. Multiple arguments can be passed, with the first used as the primary message and all additional used as substitution values similar to [`printf(3)`](http://man7.org/linux/man-pages/man3/printf.3.html) (the arguments are all passed to [`util.format()`](https://nodejs.org/docs/latest-v24.x/api/util.html#utilformatformat-args)). ```js const count = 5; console.log('count: %d', count); // Prints: count: 5, to stdout console.log('count:', count); // Prints: count: 5, to stdout ``` See [`util.format()`](https://nodejs.org/docs/latest-v24.x/api/util.html#utilformatformat-args) for more information.
@sincev0.1.100
log
("Toolkit:",
const toolkit: {
    slug: string;
    name: string;
    meta: {
        description?: string | undefined;
        logo?: string | undefined;
        availableVersions?: string[] | undefined;
        createdAt?: string | undefined;
        updatedAt?: string | undefined;
        categories?: {
            slug: string;
            name: string;
        }[] | undefined;
        appUrl?: string | undefined;
        toolsCount?: number | undefined;
        triggersCount?: number | undefined;
    };
    isLocalToolkit: boolean;
    composioManagedAuthSchemes?: string[] | undefined;
    baseUrl?: string | undefined;
    authConfigDetails?: {
        name: string;
        mode: string;
        fields: {
            authConfigCreation: {
                required: {
                    name: string;
                    description: string;
                    type: string;
                    required: boolean;
                    displayName: string;
                    default?: string | null | undefined;
                }[];
                optional: {
                    name: string;
                    description: string;
                    type: string;
                    required: boolean;
                    displayName: string;
                    default?: string | null | undefined;
                }[];
            };
            connectedAccountInitiation: {
                required: {
                    name: string;
                    description: string;
                    type: string;
                    required: boolean;
                    displayName: string;
                    default?: string | null | undefined;
                }[];
                optional: {
                    name: string;
                    description: string;
                    type: string;
                    required: boolean;
                    displayName: string;
                    default?: string | null | undefined;
                }[];
            };
        };
        proxy?: {
            baseUrl?: string | undefined;
        } | undefined;
    }[] | undefined;
    getCurrentUserEndpoint?: string | undefined;
}
toolkit
.name: stringname);
var console: Console
The `console` module provides a simple debugging console that is similar to the JavaScript console mechanism provided by web browsers. The module exports two specific components: * A `Console` class with methods such as `console.log()`, `console.error()` and `console.warn()` that can be used to write to any Node.js stream. * A global `console` instance configured to write to [`process.stdout`](https://nodejs.org/docs/latest-v24.x/api/process.html#processstdout) and [`process.stderr`](https://nodejs.org/docs/latest-v24.x/api/process.html#processstderr). The global `console` can be used without importing the `node:console` module. _**Warning**_: The global console object's methods are neither consistently synchronous like the browser APIs they resemble, nor are they consistently asynchronous like all other Node.js streams. See the [`note on process I/O`](https://nodejs.org/docs/latest-v24.x/api/process.html#a-note-on-process-io) for more information. Example using the global `console`: ```js console.log('hello world'); // Prints: hello world, to stdout console.log('hello %s', 'world'); // Prints: hello world, to stdout console.error(new Error('Whoops, something bad happened')); // Prints error message and stack trace to stderr: // Error: Whoops, something bad happened // at [eval]:5:15 // at Script.runInThisContext (node:vm:132:18) // at Object.runInThisContext (node:vm:309:38) // at node:internal/process/execution:77:19 // at [eval]-wrapper:6:22 // at evalScript (node:internal/process/execution:76:60) // at node:internal/main/eval_string:23:3 const name = 'Will Robinson'; console.warn(`Danger ${name}! Danger!`); // Prints: Danger Will Robinson! Danger!, to stderr ``` Example using the `Console` class: ```js const out = getStreamSomehow(); const err = getStreamSomehow(); const myConsole = new console.Console(out, err); myConsole.log('hello world'); // Prints: hello world, to out myConsole.log('hello %s', 'world'); // Prints: hello world, to out myConsole.error(new Error('Whoops, something bad happened')); // Prints: [Error: Whoops, something bad happened], to err const name = 'Will Robinson'; myConsole.warn(`Danger ${name}! Danger!`); // Prints: Danger Will Robinson! Danger!, to err ```
@see[source](https://github.com/nodejs/node/blob/v24.x/lib/console.js)
console
.Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)
Prints to `stdout` with newline. Multiple arguments can be passed, with the first used as the primary message and all additional used as substitution values similar to [`printf(3)`](http://man7.org/linux/man-pages/man3/printf.3.html) (the arguments are all passed to [`util.format()`](https://nodejs.org/docs/latest-v24.x/api/util.html#utilformatformat-args)). ```js const count = 5; console.log('count: %d', count); // Prints: count: 5, to stdout console.log('count:', count); // Prints: count: 5, to stdout ``` See [`util.format()`](https://nodejs.org/docs/latest-v24.x/api/util.html#utilformatformat-args) for more information.
@sincev0.1.100
log
("Available Versions:",
const toolkit: {
    slug: string;
    name: string;
    meta: {
        description?: string | undefined;
        logo?: string | undefined;
        availableVersions?: string[] | undefined;
        createdAt?: string | undefined;
        updatedAt?: string | undefined;
        categories?: {
            slug: string;
            name: string;
        }[] | undefined;
        appUrl?: string | undefined;
        toolsCount?: number | undefined;
        triggersCount?: number | undefined;
    };
    isLocalToolkit: boolean;
    composioManagedAuthSchemes?: string[] | undefined;
    baseUrl?: string | undefined;
    authConfigDetails?: {
        name: string;
        mode: string;
        fields: {
            authConfigCreation: {
                required: {
                    name: string;
                    description: string;
                    type: string;
                    required: boolean;
                    displayName: string;
                    default?: string | null | undefined;
                }[];
                optional: {
                    name: string;
                    description: string;
                    type: string;
                    required: boolean;
                    displayName: string;
                    default?: string | null | undefined;
                }[];
            };
            connectedAccountInitiation: {
                required: {
                    name: string;
                    description: string;
                    type: string;
                    required: boolean;
                    displayName: string;
                    default?: string | null | undefined;
                }[];
                optional: {
                    name: string;
                    description: string;
                    type: string;
                    required: boolean;
                    displayName: string;
                    default?: string | null | undefined;
                }[];
            };
        };
        proxy?: {
            baseUrl?: string | undefined;
        } | undefined;
    }[] | undefined;
    getCurrentUserEndpoint?: string | undefined;
}
toolkit
.
meta: {
    description?: string | undefined;
    logo?: string | undefined;
    availableVersions?: string[] | undefined;
    createdAt?: string | undefined;
    updatedAt?: string | undefined;
    categories?: {
        slug: string;
        name: string;
    }[] | undefined;
    appUrl?: string | undefined;
    toolsCount?: number | undefined;
    triggersCount?: number | undefined;
}
meta
.availableVersions?: string[] | undefinedavailableVersions);
var console: Console
The `console` module provides a simple debugging console that is similar to the JavaScript console mechanism provided by web browsers. The module exports two specific components: * A `Console` class with methods such as `console.log()`, `console.error()` and `console.warn()` that can be used to write to any Node.js stream. * A global `console` instance configured to write to [`process.stdout`](https://nodejs.org/docs/latest-v24.x/api/process.html#processstdout) and [`process.stderr`](https://nodejs.org/docs/latest-v24.x/api/process.html#processstderr). The global `console` can be used without importing the `node:console` module. _**Warning**_: The global console object's methods are neither consistently synchronous like the browser APIs they resemble, nor are they consistently asynchronous like all other Node.js streams. See the [`note on process I/O`](https://nodejs.org/docs/latest-v24.x/api/process.html#a-note-on-process-io) for more information. Example using the global `console`: ```js console.log('hello world'); // Prints: hello world, to stdout console.log('hello %s', 'world'); // Prints: hello world, to stdout console.error(new Error('Whoops, something bad happened')); // Prints error message and stack trace to stderr: // Error: Whoops, something bad happened // at [eval]:5:15 // at Script.runInThisContext (node:vm:132:18) // at Object.runInThisContext (node:vm:309:38) // at node:internal/process/execution:77:19 // at [eval]-wrapper:6:22 // at evalScript (node:internal/process/execution:76:60) // at node:internal/main/eval_string:23:3 const name = 'Will Robinson'; console.warn(`Danger ${name}! Danger!`); // Prints: Danger Will Robinson! Danger!, to stderr ``` Example using the `Console` class: ```js const out = getStreamSomehow(); const err = getStreamSomehow(); const myConsole = new console.Console(out, err); myConsole.log('hello world'); // Prints: hello world, to out myConsole.log('hello %s', 'world'); // Prints: hello world, to out myConsole.error(new Error('Whoops, something bad happened')); // Prints: [Error: Whoops, something bad happened], to err const name = 'Will Robinson'; myConsole.warn(`Danger ${name}! Danger!`); // Prints: Danger Will Robinson! Danger!, to err ```
@see[source](https://github.com/nodejs/node/blob/v24.x/lib/console.js)
console
.Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)
Prints to `stdout` with newline. Multiple arguments can be passed, with the first used as the primary message and all additional used as substitution values similar to [`printf(3)`](http://man7.org/linux/man-pages/man3/printf.3.html) (the arguments are all passed to [`util.format()`](https://nodejs.org/docs/latest-v24.x/api/util.html#utilformatformat-args)). ```js const count = 5; console.log('count: %d', count); // Prints: count: 5, to stdout console.log('count:', count); // Prints: count: 5, to stdout ``` See [`util.format()`](https://nodejs.org/docs/latest-v24.x/api/util.html#utilformatformat-args) for more information.
@sincev0.1.100
log
("Latest Version:",
const toolkit: {
    slug: string;
    name: string;
    meta: {
        description?: string | undefined;
        logo?: string | undefined;
        availableVersions?: string[] | undefined;
        createdAt?: string | undefined;
        updatedAt?: string | undefined;
        categories?: {
            slug: string;
            name: string;
        }[] | undefined;
        appUrl?: string | undefined;
        toolsCount?: number | undefined;
        triggersCount?: number | undefined;
    };
    isLocalToolkit: boolean;
    composioManagedAuthSchemes?: string[] | undefined;
    baseUrl?: string | undefined;
    authConfigDetails?: {
        name: string;
        mode: string;
        fields: {
            authConfigCreation: {
                required: {
                    name: string;
                    description: string;
                    type: string;
                    required: boolean;
                    displayName: string;
                    default?: string | null | undefined;
                }[];
                optional: {
                    name: string;
                    description: string;
                    type: string;
                    required: boolean;
                    displayName: string;
                    default?: string | null | undefined;
                }[];
            };
            connectedAccountInitiation: {
                required: {
                    name: string;
                    description: string;
                    type: string;
                    required: boolean;
                    displayName: string;
                    default?: string | null | undefined;
                }[];
                optional: {
                    name: string;
                    description: string;
                    type: string;
                    required: boolean;
                    displayName: string;
                    default?: string | null | undefined;
                }[];
            };
        };
        proxy?: {
            baseUrl?: string | undefined;
        } | undefined;
    }[] | undefined;
    getCurrentUserEndpoint?: string | undefined;
}
toolkit
.
meta: {
    description?: string | undefined;
    logo?: string | undefined;
    availableVersions?: string[] | undefined;
    createdAt?: string | undefined;
    updatedAt?: string | undefined;
    categories?: {
        slug: string;
        name: string;
    }[] | undefined;
    appUrl?: string | undefined;
    toolsCount?: number | undefined;
    triggersCount?: number | undefined;
}
meta
.availableVersions?: string[] | undefinedavailableVersions?.[0]);