API Reference

Complete API documentation for OpenCode's programmatic interface.

JavaScript API

Use OpenCode programmatically in Node.js:

import { build, createServer, defineConfig } from 'opencode';

// Build for production
await build({
  root: process.cwd(),
  build: {
    outDir: 'dist'
  }
});

// Start dev server
const server = await createServer({
  root: process.cwd(),
  server: {
    port: 3000
  }
});

await server.listen();

build()

Build your project for production.

Signature

async function build(config?: InlineConfig): Promise<BuildResult>

Options

interface InlineConfig {
  root?: string;          // Project root directory
  base?: string;          // Base public path
  mode?: string;          // 'development' | 'production'
  configFile?: string;    // Path to config file
  logLevel?: 'info' | 'warn' | 'error' | 'silent';
  build?: BuildOptions;
  plugins?: Plugin[];
}

Example

import { build } from 'opencode';

const result = await build({
  root: './src',
  build: {
    outDir: '../dist',
    minify: true,
    sourcemap: true,
    rollupOptions: {
      input: {
        main: './src/main.ts',
        admin: './src/admin.ts'
      }
    }
  }
});

console.log('Build complete:', result.output);

createServer()

Create a development server instance.

Signature

async function createServer(config?: InlineConfig): Promise<DevServer>

DevServer Methods

MethodDescription
listen(port?)Start the server
close()Stop the server
restart()Restart the server
printUrls()Print server URLs

Example

import { createServer } from 'opencode';

const server = await createServer({
  server: {
    port: 3000,
    open: true,
    cors: true
  }
});

await server.listen();
server.printUrls();

// Later: graceful shutdown
process.on('SIGTERM', async () => {
  await server.close();
  process.exit(0);
});

defineConfig()

Helper for defining configuration with TypeScript support.

Signature

function defineConfig(config: UserConfig): UserConfig;
function defineConfig(config: (env: ConfigEnv) => UserConfig): (env: ConfigEnv) => UserConfig;

Example

import { defineConfig } from 'opencode';

export default defineConfig(({ command, mode }) => {
  if (command === 'serve') {
    return {
      // dev specific config
    };
  } else {
    return {
      // build specific config
    };
  }
});

resolveConfig()

Resolve and merge configuration from all sources.

import { resolveConfig } from 'opencode';

const config = await resolveConfig(
  { /* inline config */ },
  'build',  // command
  'production'  // mode
);

console.log(config.build.outDir);

transformWithEsbuild()

Transform code using esbuild.

import { transformWithEsbuild } from 'opencode';

const result = await transformWithEsbuild(
  code,
  'file.tsx',
  {
    loader: 'tsx',
    target: 'es2020'
  }
);

console.log(result.code);

Plugin API

Create plugins with these hooks:

interface Plugin {
  name: string;
  enforce?: 'pre' | 'post';
  apply?: 'build' | 'serve';
  
  // Config hooks
  config?(config, env): UserConfig | null | void;
  configResolved?(config): void;
  
  // Build hooks
  buildStart?(options): void;
  resolveId?(source, importer): ResolveIdResult;
  load?(id): LoadResult;
  transform?(code, id): TransformResult;
  buildEnd?(error?): void;
  
  // Dev server hooks
  configureServer?(server): void;
  handleHotUpdate?(ctx): HmrContext;
}

Type Definitions

Full TypeScript definitions are included:

// Import types
import type {
  UserConfig,
  Plugin,
  BuildOptions,
  ServerOptions,
  ResolvedConfig
} from 'opencode';

// Use in your code
const config: UserConfig = {
  build: {
    target: 'es2020'
  }
};