WeKan 设计演进史:与 Trello、Jira 的功能借鉴对比与技术溯源
【免费下载链接】wekanThe Open Source kanban, built with Meteor. GitHub issues/PRs are only for FLOSS Developers, not for support, support is at https://wekan.fi/commercial-support/ . PR source translation to imports/i18n/data/en.i18n.json, other translations at https://app.transifex.com/wekan/wekan项目地址: https://gitcode.com/GitHub_Trending/we/wekan
导读
本文以仓库 docs/Design/Design-WeKan-Trello-Jira.md 为主线,梳理 WeKan 看板软件的 UI 设计演进脉络:从最初借鉴 Trello、到 2015 年 DMCA 事件后独立重设计,再到其原创功能(如 Maximize Card、Linked Cards)被 Trello 反向借鉴的完整时间线。同时结合仓库源码(卡片链接、最大化卡片、IFTTT 规则等实现)验证文档中的功能主张,并盘点 Trello 有而 WeKan 尚未实现的功能清单。读完本文,你将理解 WeKan 的设计哲学、核心原创功能在源码中的落点,以及它与主流商业看板工具的真实差异。
看板方法起源于丰田的纸质卡片
看板(Kanban)并非软件发明,它源自日本丰田生产系统中的"看板卡片"(看板信号卡)实践。几乎所有看板软件都实现了类似的功能,这些功能或是原创,或是受其他看板软件启发。理解这一点,就能理解 WeKan、Trello、Jira 之间"功能互相借鉴"的现象其实是看板软件生态中的常态。
WeKan 与 Trello 的设计渊源:借鉴、DMCA 与独立重设计
早期借鉴与 2015 年的转折点
按文档记载,WeKan 最初借鉴了 Trello 的设计,随后 WeKan 进行了重新设计,再往后 Trello 反而开始借鉴 WeKan 的原创设计。其中的关键转折点是2015-01-20 的 DMCA 通知事件(详见 FAQ 中"Weren't you called LibreBoard before"一节),此事直接促使了 WeKan 的 UI 重新设计。
这次重新设计由两位关键人物完成:
- mquandalle:WeKan 的原作者,主导了最初的重新设计(详见 FAQ 相关章节);
- xet7:WeKan 的现任维护者,在此基础之上持续改进,相关设计原则可参考 Design-Principles.md 与 Monkey-Proof-Software.md。
开源代码的独立性
一个容易被忽略但很重要的事实是:WeKan 全部为 MIT 协议许可的开源代码,与 Trello 的专有(proprietary)代码在实现上完全不同。即便两者在交互设计上有相似之处,WeKan 的实现细节、数据模型和整体架构都是独立开发的原创代码,这一点可以直接在仓库源码中得到印证——例如卡片模型中的isLinkedCard()、getRealId()、getRealCard()等方法(见 models/cards.js),都是 WeKan 自有的实现,而非对任何商业产品的代码移植。
Trello 反向借鉴 WeKan 的功能(附源码佐证)
文档记载了多个"Trello 借鉴 WeKan 原创功能"的具体案例,其中部分功能已在 WeKan 源码中落地,可以逐一验证。
2025-04:卡片评论显示在右侧(Maximize Card 溯源)
文档记载,2025 年 4 月 Trello 将已打开的卡片评论移动到右侧侧边栏展示,该交互源于 WeKan 的原创功能Maximize Card(最大化卡片),该功能早在 2021-06-14 的 WeKan v5.35 版本中就已发布(见 CHANGELOG.md#v535-2021-06-14-wekan-release)。Trello 目前没有对应的 "Minimize Card"(最小化卡片)功能。
该功能在 WeKan 源码中的落点非常清晰:
- 前端模板事件
click .js-maximize-card-details处理卡片的最大化/还原操作(见 client/components/cards/cardDetails.js); cardMaximized()助手函数判断当前用户是否开启了最大化模式:已登录用户读取其profile.cardMaximized字段,未登录用户则读取window.localStorage中的cardMaximized标记(见 cardDetails.js);- 用户的该偏好被持久化在
profile.cardMaximized上,并提供hasCardMaximized()读取方法与对应的更新方法(见 models/users.js)。
从源码结构可以推断,WeKan 将"最大化卡片"设计为一种用户级偏好设置:一旦开启,卡片详情会脱离弹窗(popup)形态,以最大化窗口展示,把评论等内容排列在卡片主体的右侧,这正是文档所述交互模式的实现基础。
2025-02:Mirror Card(镜像卡片)与 Linked Cards 溯源
文档记载,2025 年 2 月 Trello 推出的 "Mirror Card" 功能,其原型是 WeKan 早在 2018-04-18 就实现的Linked Cards(链接卡片)功能。
在 WeKan 源码中,链接卡片是一等公民的数据模型。卡片对象的link(boardId, swimlaneId, listId)方法会以当前卡片为深拷贝来源,在目标位置创建一张类型为cardType-linkedCard的新卡片,并通过linkedId字段指向原始卡片(见 models/cards.js)。与之配套的核心机制包括:
getRealId():返回链接卡片背后真实卡片的_id(见 models/cards.js);getRealCard():链接卡片只拥有自己的位置信息(看板、泳道、列表),展示的内容始终来自源卡片,从而保证链接是"活的镜像"而非"过期的快照"(见 models/cards.js)。
此外,models/lib/linkedCardTitle.js 记录了链接卡片在重命名时的一个重要修复(对应 issue #4249):此前重命名链接卡片只更新链接目标(getRealId()/linkedId)的标题,导致链接卡片自身的title字段过期,进而使"按标题过滤卡片"功能失效。修复后的computeTitleUpdateTargets()会同时更新链接卡片自身文档(保证可被标题过滤检索)以及链接目标文档(保留原有镜像行为)。
2021-02:新建看板按钮位置
文档记载,2021 年 2 月 Trello 将"新建看板"按钮移动到顶部,该布局源于 WeKan 在 2018-09-28 的 v15.11 Edge 版本中就已实现的原创功能(见 CHANGELOG.md#v1511-2018-09-28-wekan-edge-release)。这是一个典型的"交互布局被同行借鉴"的案例——虽然按钮位置本身看似微不足道,但它反映了 WeKan 在 UI 细节上的原创投入。
WeKan 已提出但尚未实现的想法
文档还记录了 WeKan 社区已经提出、但当前尚未在 WeKan 中落地的两个设计想法,它们同样被 Trello 率先实现:
- 2025-01-28:Sync Jira Lists to Trello(同步 Jira 列表到 Trello)——源于 WeKan 在 2022-07-14 提出的WeKan Multiverse(多元宇宙)构想,即跨看板、跨实例同步列表的能力;
- 2021-02:Map Card(地图卡片)——源于 WeKan 在 2017-01-06 提出的功能请求(issue #755)。
这两个案例说明:WeKan 的"功能路线图"有时会先以社区提案的形式存在,而同类商业产品会更快将其落地;WeKan 自身的落地则需要社区贡献者持续推进。
Trello 有而 WeKan 尚未实现的功能清单
文档同样客观记录了 Trello 具备、但 WeKan 截至写作时尚未实现的功能:
| 时间 | 功能 | 说明 |
|---|---|---|
| 2025-05-21 | Email Inbox | Trello 的邮件收件箱能力,WeKan 尚未实现 |
| 2025-02 | Complete Card Checkbox(完成卡片复选框) | 对应 issue #5818 的功能请求 |
| 2021-05 | Workspaces(工作区) | Trello 的工作区组织能力,WeKan 尚未实现 |
| 2018 | Butler 定时/重复任务 | WeKan 已实现 IFTTT 规则,但尚不支持定时或重复执行规则 |
| 2016-12 | Card Repeater PowerUp(卡片重复器) | 按日/周/月/年复制卡片的能力 |
重点展开:Butler 定时任务 vs WeKan 的 IFTTT 规则
在上述清单中,与 WeKan 源码关联最直接的是IFTTT 规则。WeKan 早在 2018-09-16 的 v1.4.7 版本就加入了 IFTTT 规则机制(见 CHANGELOG.md#v147-2018-09-16-wekan-release),但它目前只支持"触发后立即执行动作",尚未支持 Trello Butler 式的**定时(Scheduled)或重复(Repeating)**执行。
从源码看,WeKan 的规则模型以"触发器 + 动作"为核心:Rules集合持有triggerId与actionId字段,分别关联Triggers和Actions集合,并提供getTrigger()、getAction()等解析方法(见 models/rules.js 与 models/rules.js)。这一"触发器-动作"架构天然具备扩展为"定时触发器"(如 cron 表达式)的空间,但文档明确记载该能力尚未实现。相关需求在 server/scheduledRules.js 等文件中已有规划痕迹,说明项目维护者关注这一方向,具体进展需以仓库最新代码为准。
Jira 的设计来源:ClickUp 的左侧边栏
文档最后一条记载涉及 Jira:2025-06-29,Jira 采用了源自 ClickUp 的 UI 设计——左侧边栏菜单。这条信息与本仓库无直接代码关联,但它补充了看板/项目管理软件生态中"设计互相借鉴"的整体图景:不仅是 WeKan 与 Trello 之间存在借鉴关系,整个行业(包括 Jira、ClickUp)都在互相影响。
总结:从设计史看 WeKan 的定位
纵观整份设计文档,可以得出几条对使用者有实际参考价值的结论:
- WeKan 是独立的开源实现:与 Trello 的专有代码不同,WeKan 全部功能都是 MIT 协议下的原创代码,任何 UI 相似性都不影响其代码的完全独立性;
- WeKan 贡献了若干被行业采纳的原创交互:Maximize Card(卡片最大化/评论右栏)、Linked Cards(链接/镜像卡片)、顶部新建看板按钮等,均已通过社区验证并被商业产品借鉴;
- WeKan 与商业产品存在明确的功能差距清单:邮件收件箱、工作区、卡片完成复选框、定时/重复规则、卡片周期复制等仍待社区实现,其中"IFTTT 规则扩展为定时/重复执行"最值得关注,因为它有明确的源码基础(触发器-动作模型);
- 设计借鉴是看板软件生态的常态:从丰田纸质看板到 ClickUp、Trello、Jira、WeKan,功能互相启发贯穿了整个行业历史。
对于希望深入代码的读者,建议从三个文件入手:卡片链接机制见 models/cards.js 与 models/lib/linkedCardTitle.js,最大化卡片偏好见 models/users.js,规则系统见 models/rules.js。设计原则的完整阐述可继续阅读 Design-Principles.md 与 Monkey-Proof-Software.md。
【免费下载链接】wekanThe Open Source kanban, built with Meteor. GitHub issues/PRs are only for FLOSS Developers, not for support, support is at https://wekan.fi/commercial-support/ . PR source translation to imports/i18n/data/en.i18n.json, other translations at https://app.transifex.com/wekan/wekan项目地址: https://gitcode.com/GitHub_Trending/we/wekan
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考