Interactive terminal canvases for OpenCode - spawn rich TUI interfaces for calendars, documents, flight bookings, and more directly from your AI coding assistant.
opencode-canvas gives OpenCode its own display. Instead of text-only responses, the AI can spawn interactive terminal interfaces in tmux split panes. This enables:
- Calendar views - Visual date pickers and event displays
- Document editors - Rich text editing with selections
- Flight booking - Interactive flight search and selection
- Custom canvases - Build your own TUI interfaces
npm install @mailshieldai/opencode-canvas
# or
bun add @mailshieldai/opencode-canvasgit clone https://github.com/mailshieldai/opencode-canvas
cd opencode-canvas
bun install
bun run buildAdd to your opencode.jsonc (in project root or ~/.config/opencode/config.json):
The plugin provides 4 tools:
| Tool | Description |
|---|---|
canvas_spawn |
Create a new canvas (calendar, document, or flight) |
canvas_update |
Update canvas state via IPC |
canvas_selection |
Get current selection from canvas |
canvas_close |
Close a canvas session |
Spawns a new canvas in a tmux split pane.
canvas_spawn({
canvas_type: "calendar" | "document" | "flight",
initial_state: { /* canvas-specific state */ }
})Updates the state of an existing canvas.
canvas_update({
session_id: "canvas-abc123",
state: { /* new state */ }
})Retrieves the current selection from a canvas (e.g., selected date, highlighted text).
canvas_selection({
session_id: "canvas-abc123"
})Closes a canvas and cleans up resources.
canvas_close({
session_id: "canvas-abc123"
})The plugin includes skills that teach OpenCode how to use each canvas type:
canvas- General canvas usage patternscalendar- Calendar-specific interactionsdocument- Document editing patternsflight- Flight booking workflows
┌─────────────────┐ IPC (Unix Socket) ┌─────────────────┐
│ OpenCode │◄──────────────────────────►│ Canvas TUI │
│ (Controller) │ │ (React/Ink) │
└─────────────────┘ └─────────────────┘
│ │
│ tool calls │ renders in
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ opencode-canvas│ │ tmux split │
│ plugin │ │ pane │
└─────────────────┘ └─────────────────┘
# Install dependencies
bun install
# Build plugin
bun run build
# Run tests
bun test
# Lint
bun run lint# Login to npm (one-time)
npm login
# Build and publish
bun run build
npm publishMIT - See LICENSE for details.
Based on claude-canvas by David Siegel, adapted for OpenCode by MailShield AI.

{ "plugin": ["@mailshieldai/opencode-canvas"], "permission": { "canvas_*": "allow" } }