Packages
opencode_sdk
0.1.1
0.1.84
0.1.83
0.1.82
0.1.81
0.1.80
0.1.79
0.1.78
0.1.77
0.1.76
0.1.75
0.1.74
0.1.73
0.1.72
0.1.71
0.1.70
0.1.69
0.1.68
0.1.67
0.1.66
0.1.65
0.1.64
0.1.63
0.1.62
0.1.61
0.1.60
0.1.59
0.1.58
0.1.57
0.1.56
0.1.55
0.1.54
0.1.53
0.1.52
0.1.51
0.1.50
0.1.49
0.1.48
0.1.47
0.1.46
0.1.45
0.1.44
0.1.43
0.1.42
0.1.41
0.1.40
0.1.39
0.1.38
0.1.37
0.1.36
0.1.35
0.1.34
0.1.33
0.1.32
0.1.31
0.1.30
0.1.29
0.1.28
0.1.27
0.1.26
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Unofficial OpenCode SDK for Elixir. A complete Elixir SDK for OpenCode, providing server creation, session management, messaging, file operations, and more. Mirrors the functionality of the official JavaScript SDK (@opencode-ai/sdk). Not affiliated with or built by the OpenCode team.
Current section
Files
Jump to
Current section
Files
opencode_sdk
README.md
README.md
# OpenCode SDK for Elixir
An unofficial Elixir SDK for OpenCode that mirrors the JS SDK (`@opencode-ai/sdk`).
The client and types are generated from the OpenCode OpenAPI spec.
hex.pm link: https://hex.pm/packages/opencode_sdk/
## Installation
Add `opencode_sdk` to your dependencies in `mix.exs`:
```elixir
def deps do
[
{:opencode_sdk, "~> 0.1.1"}
]
end
```
## Quickstart
Start an OpenCode server and get a connected client:
```elixir
{:ok, %{client: client, server: server}} = OpenCode.create()
{:ok, health} = OpenCode.Generated.Operations.global_health(client)
IO.inspect(health, label: "health")
OpenCode.close(%{server: server})
```
Connect to an existing server:
```elixir
client = OpenCode.create_client(base_url: "http://127.0.0.1:4096")
{:ok, projects} = OpenCode.Generated.Operations.project_list(client)
```
## Create API
### `OpenCode.create/1` options
`OpenCode.create/1` forwards to `OpenCode.create_server/1` and returns `%{client, server}`.
| Option | Type | Description | Default |
| --- | --- | --- | --- |
| `:hostname` | `String.t()` | Server hostname | `"127.0.0.1"` |
| `:port` | `integer()` | Server port | `4096` |
| `:timeout` | `integer()` | Startup timeout in ms | `5000` |
| `:config` | `map()` | Config passed via `OPENCODE_CONFIG_CONTENT` | `%{}` |
### `OpenCode.create_client/1` options
| Option | Type | Description | Default |
| --- | --- | --- | --- |
| `:base_url` | `String.t()` | OpenCode server URL | `"http://127.0.0.1:4096"` |
| `:directory` | `String.t()` | Project directory sent via `x-opencode-directory` | `nil` |
| `:headers` | `map() \| keyword()` | Extra HTTP headers | `[]` |
| `:timeout` | `integer() \| :infinity` | Request timeout | `:infinity` |
## Common Workflows
### Sessions and prompts
```elixir
{:ok, session} =
OpenCode.Generated.Operations.session_create(%{title: "SDK walkthrough"}, client)
{:ok, reply} =
OpenCode.Generated.Operations.session_prompt(
session.id,
%{
parts: [%{type: "text", text: "Summarize this project in 3 bullets."}]
},
client
)
IO.inspect(reply.info)
```
### Real-time events (SSE)
```elixir
{:ok, %{stream: stream}} = OpenCode.Generated.Operations.event_subscribe(client)
Enum.each(stream, fn event ->
IO.inspect(event.type, label: "event")
end)
```
### TUI process lifecycle
```elixir
{:ok, tui} = OpenCode.create_tui(project: "/path/to/project")
OpenCode.Tui.close(tui)
```
## Capability Guide
The generated operations module includes much more than sessions. Key groups:
- App: `app_agents/1`, `app_log/2`, `app_skills/1`
- Projects and config: `project_*`, `config_*`, `provider_*`
- Files and search: `file_*`, `find_*`, `path_get/1`
- Session control: `session_*`, `part_*`, `permission_*`, `question_*`
- MCP: `mcp_*`, `mcp_auth_*`
- PTY: `pty_*`
- TUI control endpoints: `tui_*`
Examples:
```elixir
# Permissions
{:ok, pending} = OpenCode.Generated.Operations.permission_list(client)
# Questions
{:ok, questions} = OpenCode.Generated.Operations.question_list(client)
# MCP status
{:ok, mcp} = OpenCode.Generated.Operations.mcp_status(client)
# PTY sessions
{:ok, ptys} = OpenCode.Generated.Operations.pty_list(client)
# Providers
{:ok, providers} = OpenCode.Generated.Operations.provider_list(client)
```
## Types and Docs
All OpenAPI types are generated under `OpenCode.Generated.*` (for example, `OpenCode.Generated.Session`).
API functions and types are documented in generated module docs, primarily:
- `OpenCode`
- `OpenCode.Generated.Operations`
- `OpenCode.Generated.*` type modules
## Regenerating
The OpenAPI spec is at `priv/opencode_openapi.json`.
Regenerate the client with:
```bash
mix opencode.gen.client --spec priv/opencode_openapi.json
```
## Note
This project is unofficial and is not affiliated with the OpenCode team.