Skip to content

SDK

JS SDK for the opencode server.

The opencode JS/TS SDK provides a type-safe client for interacting with the opencode server. You can use it to build custom integrations and control opencode programmatically.

Learn more about how the opencode server works.


Install

Install the SDK from npm:

Terminal window
npm install @opencode-ai/sdk

Create client

Create a client instance to connect to your opencode server:

import { createOpencodeClient } from "@opencode-ai/sdk"
const client = createOpencodeClient({
baseUrl: "http://localhost:4096",
})

Options

OptionTypeDescriptionDefault
baseUrlstringURL of the opencode serverhttp://localhost:4096
fetchfunctionCustom fetch implementationglobalThis.fetch

Start server

You can also programmatically start an opencode server:

import { createOpencodeServer } from "@opencode-ai/sdk"
const server = await createOpencodeServer({
host: "127.0.0.1",
port: 4096,
})
console.log(`Server running at ${server.url}`)
server.close()

Types

The SDK includes TypeScript definitions for all API types. Import them directly:

import type { Session, Message, Part } from "@opencode-ai/sdk"

All types are generated from the server’s OpenAPI specification and available in the types file.


Errors

The SDK throws typed errors that you can catch and handle:

try {
const session = await client.session.get({ id: "invalid-id" })
} catch (error) {
console.error("Failed to get session:", error.message)
}

APIs

The SDK exposes all server APIs through a type-safe client interface.


App

MethodDescriptionResponse
app.get()Get app infoApp
app.init()Initialize the appboolean

Examples

const app = await client.app.get()
await client.app.init()

Config

MethodDescriptionResponse
config.get()Get config infoConfig
config.providers()List providers and default models{ providers: Provider[], default: { [key: string]: string } }

Examples

const config = await client.config.get()
const { providers, default: defaults } = await client.config.providers()

Sessions

MethodDescriptionNotes
session.list()List sessionsReturns Session[]
session.get({ id })Get sessionReturns Session
session.children({ id })List child sessionsReturns Session[]
session.create({ parentID?, title? })Create sessionReturns Session
session.delete({ id })Delete sessionReturns boolean
session.update({ id, title? })Update session propertiesReturns Session
session.init({ id, messageID, providerID, modelID })Analyze app and create AGENTS.mdReturns boolean
session.abort({ id })Abort a running sessionReturns boolean
session.share({ id })Share sessionReturns Session
session.unshare({ id })Unshare sessionReturns Session
session.summarize({ id, providerID, modelID })Summarize sessionReturns boolean
session.messages({ id })List messages in a sessionReturns { info: Message, parts: Part[]}[]
session.message({ id, messageID })Get message detailsReturns { info: Message, parts: Part[]}
session.chat({ id, ...chatInput })Send chat messageReturns Message
session.shell({ id, agent, command })Run a shell commandReturns Message
session.revert({ id, messageID, partID? })Revert a messageReturns Session
session.unrevert({ id })Restore reverted messagesReturns Session
session.permissions.respond({ id, permissionID, response })Respond to a permission requestReturns boolean

Examples

// Create and manage sessions
const session = await client.session.create({ title: "My session" })
const sessions = await client.session.list()
// Send messages
const message = await client.session.chat({
id: session.id,
providerID: "anthropic",
modelID: "claude-3-5-sonnet-20241022",
parts: [{ type: "text", text: "Hello!" }]
})

Files

MethodDescriptionResponse
find.text({ pattern })Search for text in filesArray of match objects with path, lines, line_number, absolute_offset, submatches
find.files({ query })Find files by namestring[] (file paths)
find.symbols({ query })Find workspace symbolsSymbol[]
file.read({ path })Read a file{ type: "raw" | "patch", content: string }
file.status()Get status for tracked filesFile[]

Examples

// Search and read files
const textResults = await client.find.text({ pattern: "function.*opencode" })
const files = await client.find.files({ query: "*.ts" })
const content = await client.file.read({ path: "src/index.ts" })

Logging

MethodDescriptionResponse
log.write({ service, level, message, extra? })Write log entryboolean

Examples

await client.log.write({
service: "my-app",
level: "info",
message: "Operation completed"
})

Agents

MethodDescriptionResponse
agent.list()List all available agentsAgent[]

Examples

const agents = await client.agent.list()

TUI

MethodDescriptionResponse
tui.appendPrompt({ text })Append text to the promptboolean
tui.openHelp()Open the help dialogboolean
tui.openSessions()Open the session selectorboolean
tui.openThemes()Open the theme selectorboolean
tui.openModels()Open the model selectorboolean
tui.submitPrompt()Submit the current promptboolean
tui.clearPrompt()Clear the promptboolean
tui.executeCommand({ command })Execute a commandboolean
tui.showToast({ title?, message, variant })Show toast notificationboolean
tui.control.next()Wait for the next control requestControl request object
tui.control.response({ body })Respond to a control requestboolean

Examples

// Control TUI interface
await client.tui.appendPrompt({ text: "Add this to prompt" })
await client.tui.showToast({
message: "Task completed",
variant: "success"
})

Auth

MethodDescriptionResponse
auth.set({ id, ...authData })Set authentication credentialsboolean

Examples

await client.auth.set({
id: "anthropic",
type: "api",
key: "your-api-key"
})

Events

MethodDescriptionResponse
event.subscribe()Server-sent events streamServer-sent events stream

Examples

// Listen to real-time events
const eventStream = await client.event.subscribe()
for await (const event of eventStream) {
console.log("Event:", event.type, event.properties)
}