Plugin collection for dinotty -- a set of tools that extend the dinotty desktop application with developer productivity features.
| Plugin | Version | Description | Description (中文) |
|---|---|---|---|
| CC Switch | 2.0.0 | Quick switch Claude Code API Provider (based on cc-switch CLI) | 快速切换 Claude Code API Provider (基于 cc-switch CLI) |
| Command Bookmarks | 1.0.0 | Bookmark and batch-send commands to multiple terminals | 命令收藏夹,支持批量发送到多个终端 |
| Whiteboard | 1.0.0 | Infinite canvas whiteboard with freehand drawing, shapes, text and images | 无限画布白板工具,支持自由绘图、图形、文本和图片 |
| JSON Formatter | 1.0.0 | JSON formatting, minifying and validation tool | JSON 格式化、压缩与验证工具 |
| Skill Manager | 1.0.0 | Manage Claude Code Agent Skills (~/.claude/skills/) | 管理 Claude Code Agent Skills (~/.claude/skills/) |
| Text Diff | 1.0.0 | Text diff comparison tool with line-by-line highlighting | 文本差异对比工具,支持逐行对比与高亮显示 |
| Claude Code | 1.0.0 | Visual conversation manager for Claude Code | Claude Code 可视化对话管理 — 浏览历史、新建和恢复会话 |
Each plugin can be installed independently through the dinotty plugin manager, or by cloning this repository and pointing to the desired plugin subdirectory.
- dinotty desktop application
- Node.js (for plugins that require a build step)
Some plugins have additional dependencies:
| Plugin | Dependencies |
|---|---|
| CC Switch | cc-switch CLI, jq, bash, python3, curl |
| Command Bookmarks | None |
| Whiteboard | Node.js + esbuild (for building from source) |
| JSON Formatter | None |
| Skill Manager | git, curl |
| Text Diff | None |
| Claude Code | claude CLI (in PATH), 需先安装 Claude Code CLI |
Each plugin follows a standard manifest-driven structure:
plugin-name/
plugin.json # Plugin manifest (id, name, version, entry, styles, commands)
main.js # Entry point (or dist/main.js for compiled plugins)
styles.css # Plugin styles
{
"id": "plugin-id",
"name": "Plugin Name",
"version": "1.0.0",
"description": "Short description",
"icon": "icon-name",
"entry": "main.js",
"styles": "styles.css",
"commands": [
{ "id": "command-id", "title": "Command Title" }
]
}Plugins receive a PluginContext object providing access to dinotty's runtime features:
export default function activate(ctx) {
// Reactive state
const count = ctx.ref(0);
const state = ctx.reactive({ items: [] });
const doubled = ctx.computed(() => count.value * 2);
// Command palette
ctx.commands.register('my-command', 'My Command', () => { /* ... */ });
// Persistent storage
ctx.storage.get('key');
ctx.storage.set('key', value);
// Shell execution
ctx.exec.run('echo hello');
// Terminal interaction
ctx.terminal.send(paneId, 'command\n');
ctx.terminal.listPanes();
ctx.terminal.activePaneId();
// UI
ctx.ui.notify('Hello!');
ctx.ui.confirm('Are you sure?').then(ok => { /* ... */ });
// Lifecycle
ctx.onMounted(() => { /* ... */ });
ctx.onUnmounted(() => { /* ... */ });
// Virtual DOM (Vue-like hyperscript)
return () => ctx.h('div', { class: 'my-plugin' }, [
ctx.h('button', { onClick: () => count.value++ }, `Count: ${count.value}`)
]);
}dinotty-plugins/
registry.json # Plugin registry manifest
cc-switch/ # API provider switcher (TypeScript + Bash)
command-bookmarks/ # Terminal command bookmarks (JavaScript)
dinotty-whiteboard/ # Infinite canvas whiteboard (JavaScript, esbuild)
json-formatter/ # JSON tools (JavaScript)
skill-manager/ # Claude Code skill manager (TypeScript)
text-diff/ # Text diff tool (JavaScript)
claude-code/ # Claude Code conversation manager (TypeScript)
Plugins with TypeScript sources need to be compiled before use:
CC Switch
cd cc-switch
esbuild src/ui.ts --bundle --format=esm --outfile=dist/main.jsWhiteboard
cd dinotty-whiteboard
npm install
npm run buildSkill Manager
cd skill-manager
esbuild src/ui.ts --bundle --format=esm --outfile=dist/main.jsClaude Code
cd claude-code
npm install
npm run buildPlugins written in plain JavaScript (Command Bookmarks, JSON Formatter, Text Diff) require no build step -- edit main.js directly.
- Create a directory with your plugin ID
- Add a
plugin.jsonmanifest - Implement the entry point (
main.js) exporting anactivate(ctx)function - Add styles in
styles.css - Register the plugin in
registry.jsonat the repository root
- Runtime: dinotty desktop application (Vue.js-based plugin system)
- Languages: JavaScript, TypeScript, Bash
- Build: esbuild
- DOM: Virtual DOM via
ctx.h()hyperscript
See individual plugin directories for license information.