Skip to main content
Glama
Czaruno

tui-canvas

by Czaruno

TUI Canvas

Framework-agnostic interactive terminal canvases for AI coding assistants.

Works with OpenCode, Claude Code, Cursor, Gemini CLI, Grok CLI, and any MCP-compatible AI harness.

Supports multiple TUI frameworks: OpenTUI (primary), Ink, and more.

Features

  • Protocol-first design - Any TUI framework can implement canvases

  • Multiple implementations - Same canvas in OpenTUI, Ink, Bubbletea, etc.

  • MCP integration - Works with any AI coding assistant via MCP

  • tmux integration - Canvases spawn in split panes

Built-in Canvases

  • Calendar - Weekly view with events, meeting time picker

  • Document - Markdown viewer/editor with text selection

  • Flight - Cyberpunk-themed flight booking with seatmaps

Related MCP server: Forge

Quick Start

Install

# Run without installing globally
bunx tui-canvas list

MCP Configuration

OpenCode (opencode.json in this repo):

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "tui-canvas": {
      "type": "local",
      "command": ["bun", "run", "packages/mcp/src/index.ts"],
      "enabled": true
    }
  }
}

Other MCP clients:

{
  "mcpServers": {
    "tui-canvas": {
      "command": "bunx",
      "args": ["tui-canvas"]
    }
  }
}

CLI Usage

# List available canvases
bunx tui-canvas list

# Spawn a canvas (must be in tmux)
bunx tui-canvas spawn calendar --scenario display
bunx tui-canvas spawn document --scenario edit --config '{"content": "# Hello"}'

# Use specific implementation
bunx tui-canvas spawn calendar --implementation ink
bunx tui-canvas spawn calendar --implementation opentui

Project Structure

tui-canvas/
├── packages/
│   ├── protocol/         # Protocol specification & types
│   ├── cli/              # Unified CLI
│   ├── mcp/              # MCP server
│   └── runtime/          # Framework adapters
│       ├── opentui/      # OpenTUI runtime (primary)
│       └── ink/          # Ink runtime
│
├── canvases/             # Canvas implementations
│   ├── calendar/
│   │   ├── manifest.json # Canvas manifest
│   │   ├── opentui/      # OpenTUI implementation
│   │   └── ink/          # Ink implementation
│   ├── document/
│   └── flight/

Supported Frameworks

Framework

Status

Description

OpenTUI

Primary

TypeScript TUI framework (anomalyco/opentui)

Ink

Secondary

React for terminals

Bubbletea

Planned

Go TUI framework

Textual

Planned

Python TUI framework

Supported AI Harnesses

Harness

Detection

OpenCode

OPENCODE env

Claude Code

CLAUDE_CODE env

Cursor

CURSOR_SESSION env

Gemini CLI

GEMINI_CLI / GEMINI_API_KEY env

Grok CLI

GROK_CLI / XAI_API_KEY env

Generic

Fallback for any MCP client

Creating Canvases

Canvas Manifest

Each canvas has a manifest.json:

{
  "id": "my-canvas",
  "name": "My Canvas",
  "description": "A custom canvas",
  "version": "1.0.0",
  
  "scenarios": {
    "default": {
      "description": "Default scenario",
      "configSchema": { ... },
      "resultSchema": { ... }
    }
  },
  
  "implementations": {
    "opentui": {
      "framework": "opentui",
      "reconciler": "solid",
      "entrypoint": "./opentui/index.ts"
    },
    "ink": {
      "framework": "ink",
      "entrypoint": "./ink/index.tsx"
    }
  },
  
  "defaultImplementation": "opentui"
}

Protocol

Canvases communicate via Unix sockets using the TUI Canvas Protocol:

Canvas → Controller:

{ type: "ready", scenario: string }
{ type: "selected", data: unknown }
{ type: "cancelled", reason?: string }

Controller → Canvas:

{ type: "update", config: unknown }
{ type: "close" }

Development

# Clone and install
git clone https://github.com/anomalyco/tui-canvas.git
cd tui-canvas
bun install

# Test CLI
bun run packages/cli/src/index.ts list
bun run packages/cli/src/index.ts spawn calendar

# Start MCP server
bun run packages/mcp/src/index.ts

Requirements

  • Bun runtime

  • tmux for pane spawning

  • Terminal with mouse support (recommended)

License

MIT

Credits

Originally based on Claude Canvas. OpenTUI framework: github.com/anomalyco/opentui

A
license - permissive license
-
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    -
    quality
    D
    maintenance
    MCP server enabling AI agents to interact with terminal applications through structured Terminal State Tree representation. Works with any AI assistant that supports the Model Context Protocol.
    Last updated
    114
    18
    MIT
  • A
    license
    -
    quality
    C
    maintenance
    Terminal MCP server for AI coding agents with persistent PTY sessions, ring-buffer incremental reads, headless xterm screen capture, multi-agent orchestration, and a real-time web dashboard.
    Last updated
    45
    22
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for terminal control enabling AI to manage terminal sessions via iTerm2 or tmux, with features like screen reading, keyboard/mouse input, and background execution.
    Last updated
    9
    60
    21
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    A comprehensive MCP server for driving tmux sessions, windows, panes, sending keystrokes, and reading pane output locally or over SSH, enabling real-time collaborative pairing with AI.
    Last updated
    71
    1
    MIT

View all related MCP servers

Related MCP Connectors

  • A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…

  • MCP server for AI dialogue using various LLM models via AceDataCloud

  • MCP server for Gainium — manage trading bots, deals, and balances via AI assistants

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Czaruno/tui-canvas'

If you have feedback or need assistance with the MCP directory API, please join our Discord server