厌倦了在编辑器、终端和浏览器之间频繁切换?试试这个基于无限画布(类Figma风格)的下一代开源桌面开发环境“Cate”
在日常开发中,编辑器、终端、浏览器、文档查看器——这些工具各自打开一扇窗口,堆叠在屏幕上的结果,就是一场没完没了的 Alt+Tab 循环。一名开发者正是受够了这种体验,干脆动手做了一个类 Figma 风格的画布 IDE,将所有工作窗口放到同一块无限延展的画布上。
这个项目叫 Cate,其核心理念一句话就能概括:把整个工作区变成一块可以自由排布面板的画布,而不是一堆可以切换的窗口。用户可以在画布上拖入代码编辑器、终端、浏览器、PDF 文档,各自放在任意位置,用缩放和平移来组织它们之间的空间关系。重要的是,这些布局可以被保存,下次打开时整个工作区状态可以一键恢复——相当于给你的每个项目或每个工作会话,各自配备一套专属的"桌面布局"。
Cate 整体架构如下:
src/ ├── agent/ # Embedded Pi coding-agent integration │ ├── main/ # Agent process manager, auth, marketplace, session files │ ├── renderer/ # Agent panel UI, chat thread, providers, model prefs │ └── extensions/ # Bundled Cate plan-mode Pi extension ├── main/ # Electron main process │ ├── ipc/ # IPC handlers (filesystem, git, terminal, menu, drag) │ ├── analytics # Update/app event analytics helpers │ ├── appContext # Shared main-process app state │ ├── featureFlags # Runtime feature flags │ ├── shellEnv # Login-shell environment capture │ ├── shellResolver # Shell path resolution with fallback chain │ ├── workspaceManager# Workspace lifecycle and session persistence │ ├── workspaceRoots # Allowed-roots registration and validation │ ├── windowRegistry # Window management (main, dock, detached) │ ├── webSecurity # Webview hardening and CSP │ ├── auto-updater # Update checks and release fetch │ ├── sentry # Sentry integration │ ├── store # electron-store persistence │ ├── jsonFileStore # JSON-backed file persistence helpers │ ├── menu # Application menu │ └── sessionTrust # Session restore validation ├── preload/ # Context-isolated bridge exposed to the renderer ├── renderer/ # React 18 application │ ├── assets/ # Renderer images and asset declarations │ ├── canvas/ # Infinite canvas rendering, drag, resize, placement │ ├── docking/ # Tabs, splits, detached dock windows, drag/drop │ ├── drag/ # Cross-window drag-and-drop runtime and state │ ├── panels/ # Terminal, Editor, Browser, Document, Git, Explorer, │ │ # Projects, Canvas panel registry/components │ ├── sidebar/ # Workspace, File Explorer, Source Control, │ │ # Parallel Work, Project List, fileClipboard │ ├── dialogs/ # Saved layouts and post-update feedback dialogs │ ├── settings/ # Settings window sections and shortcut recorder │ ├── ui/ # CommandPalette, GlobalSearch, NodeSwitcher, │ │ # WelcomePage, ShortcutHintOverlay │ ├── shells/ # Main, panel, and dock window shells │ ├── stores/ # Zustand stores (canvas, app, dock, settings, │ │ # shortcut, status, ui, update, url prompt) │ ├── hooks/ # Custom React hooks (shortcuts, canvas interaction) │ ├── lib/ # Utilities (coordinates, routing, terminal registry) │ ├── workers/ # Monaco/editor workers │ └── styles/ # Tailwind/global styles └── shared/ # IPC channel definitions and shared TypeScript types从技术实现来看,Cate 基于 Electron 41 + React 18,引入了 Monaco Editor(VS Code 的编辑器内核)作为代码面板,终端则使用了 xterm.js + node-pty 的组合来保证原生体验。PDF 和 DOCX 文档有专门的渲染面板,Git 操作也有内置的文件监视和版本控制视图。AI 辅助编程则以"Pi Agent 面板"的形式集成在画布上。Cate 支持 macOS、Windows 和 Linux,提供了预编译包,用户也可以直接拉取源码自行构建。
这种 spatial IDE 的思路,本质上是在解决多任务工作流中的空间记忆问题。当一个开发者同时处理前端、数据库查询、API 调试等多个上下文时,各工具之间的空间位置关系本身就是一种信息。例如,将"调试终端"固定在左侧、"数据库 UI"固定在右侧,这种布局本身就承载了工作状态的意义,下次恢复时无需重新安排,直接进入状态。
当然,这类探索并非新鲜事。Niri 等平铺式窗口管理器已经在 Linux 上探索过类似的方向,VS Code 的 Remote SSH 也部分解决了跨设备工作区同步的问题。但 Cate 将这套理念直接落地到了本地桌面开发环境,并且加入了画布持久化和跨会话恢复的能力,在工程化和产品化上往前走了一步。开发者在 Reddit 上也提到,虽然借鉴了平铺窗口管理器的工作流思路,但最大区别在于这是一个围绕项目的持久化画布,而非单纯的窗口放置工具。
当前 Cate 仍处于积极开发阶段,用户反馈主要集中在两点:一是新窗口打开时的位置策略(是否应该自动排列而非用户手动拖放),二是批量操作多个窗口时的体验优化(比如框选多个面板后弹出操作菜单)。作者在 Reddit 上也明确表示,这些反馈都被认真对待并计划纳入迭代。对于一个刚公开不久的项目来说,这种开放态度和迭代速度是积极的信号。
参考来源:
Reddit - r/coolgithubprojects(https://www.reddit.com/r/coolgithubprojects/comments/1tdt4qt/i_got_tired_of_alttabbing_so_i_built_a_figmastyle/)
Cate GitHub(https://github.com/0-AI-UG/cate)
