在日常开发中,编辑器、终端、浏览器、文档查看器——这些工具各自打开一扇窗口,堆叠在屏幕上的结果,就是一场没完没了的 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)