乐于分享
好东西不私藏

厌倦了在编辑器、终端和浏览器之间频繁切换?试试这个基于无限画布(类Figma风格)的下一代开源桌面开发环境“Cate”

厌倦了在编辑器、终端和浏览器之间频繁切换?试试这个基于无限画布(类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)