命令行工具
s4wave/spacewave avatar
s4wave/spacewave

Spacewave:把云盘和协作空间装进浏览器,不碰服务器

该项目围绕「s4wave/spacewave」构建,面向真实业务场景提供可复用的开源实践方案,支持稳定落地与可扩展的项目实践。

591 个 Star10 个 ForkGoApache-2.0

秒懂

它是什么?
Spacewave 是一个本地优先的浏览器端自托管工作区,用 WebAssembly、WebRTC 和 IndexedDB 把数据留在自己手里。它做的事情很诱人,但你要先弄清楚它适合谁,以及它和传统云盘的根本差异。
适合谁用?
Spacewave 适合那些已经接受本地优先理念、愿意自己管理数据存储和同步网络的开发者或小团队。它不适合需要稳定托管服务、不想碰浏览器兼容性问题的普通用户,也不适合需要强一致性的多人协作场景。
能商用吗?
可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 1 天前。
用什么语言写的?
主要是 Go(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决的是服务器依赖问题,而不是云盘问题

Spacewave 的定位很明确:传统 Web 应用把数据和逻辑放在服务器上,前端只负责显示。它想改变这个模式,让应用完全在浏览器里运行,数据存在本地,同步走点对点。这不是一个普通的网盘工具,而是一个本地优先的应用运行环境。它面向的是受够了自建服务器繁琐流程的人,以及那些想要离线可用、数据自主的开发者。README 里反复强调“no account, no server”,这既是卖点,也是它存在的理由。它不是要替代 Dropbox,而是要改变应用构建的方式。

浏览器里的 Go 生态:WebAssembly 与 Worker 的配合

Spacewave 的架构核心是把应用逻辑放进 WebWorkers 或 SharedWorkers,在桌面端则作为原生进程运行。这样做的目的是把 Go 生态带到浏览器。它用 GoScript 把 Go 模块编译成 TypeScript,让 Go 的算法和数据结构能在浏览器里复用,而不需要重新实现。数据层叫 Hydra,支持 SQL、K/V、GraphDB 等多种结构,存储后端可插拔,浏览器里用 IndexedDB,服务器上可以用 BadgerDB 或 Redis。网络层叫 Bifrost,负责 WebRTC、WebSocket 和 LAN 之间的点对点通信。这个组合意味着一个应用可以在不同平台间切换存储后端,而不用改代码。听起来很美好,但这也意味着每个组件都需要单独维护和调试,复杂度并不低。

从零开始跑起来:bun 命令与 Protobuf 生成

想从源码跑起来,需要先装 bun,然后执行 bun install。桌面应用用 bun run start:desktop,Web 应用有两种模式:bun run start:web 使用 GoScript 编译的浏览器 Go 插件,bun run start:web:wasm 则用标准 Go/WASM 插件。测试套件有 bun run test 和 bun run test:go,代码检查用 bun run lint 和 bun run typecheck。消息编码使用 Protobuf,改过 .proto 文件后要运行 bun run gen 重新生成。这些命令很直接,但注意它没有提供 Docker 镜像或一键部署脚本,自托管的方式就是打开浏览器访问 spacewave.app,或者在本地起一个开发服务器。如果你指望像安装 Nextcloud 那样有完整的安装向导,这里没有。

存储与同步的抽象层:灵活,但也是负担

Hydra 的抽象层让应用可以分配一个 SQL 数据库,然后把它存到 Redis、BadgerDB 或 IndexedDB,切换后端时不用改一行代码。这个设计很有野心,但也带来了实际代价。不同存储后端的一致性模型和性能特征完全不同,IndexedDB 和 BadgerDB 的行为差异会让调试变得困难。README 没有说明这些后端之间的同步冲突如何解决,也没有提到数据迁移工具。如果你在浏览器里存了数据,后来想迁移到服务器上的 BadgerDB,没有现成的命令可用。这个抽象层是 Spacewave 的核心卖点,但也可能是最需要谨慎对待的部分。

点对点同步的现实:网络依赖与中继

Spacewave 的同步走 WebRTC、WebSocket、LAN 或中继。这听起来很灵活,但实际效果取决于你的设备能到达的网络。WebRTC 在 NAT 穿透失败时会退回到中继服务器,而中继服务器如果由 Spacewave 官方提供,那就不是完全无服务器了。README 提到付费账户提供托管存储和中继,每月 8 美元 100GB,这说明免费模式下中继可能不稳定或不可用。离线模式是支持的,但离线时的数据变更如何在多个设备间合并,文档没有详细说明。对于需要多人实时协作的场景,点对点同步的延迟和一致性可能不如中心化服务器可靠。这是一个需要实测的领域,但 README 没有给出任何性能数据。

插件生态与 SkiffOS:从文件到设备管理

Spacewave 的插件系统覆盖了文件、数据库、笔记、聊天、终端访问和远程控制。最特殊的是 SkiffOS,它可以构建和管理 Linux 设备,支持 40 多种设备类型。这意味着 Spacewave 不只是浏览器里的云盘,还能成为设备管理的控制平面。插件用 Go、TypeScript、React 和 WebAssembly 编写,和主应用使用相同的技术栈。这个设计鼓励开发者用与主应用相同的方式扩展功能,减少学习成本。但插件生态的成熟度未知,README 没有列出任何第三方插件的例子。如果你需要的是一个开箱即用的文件同步工具,插件反而增加了选择的负担。

许可证与维护成本:Apache-2.0 的宽松与依赖的多样性

项目采用 Apache-2.0 许可证,这对商业使用友好,没有 GPL 的传染性约束。但要注意,它依赖的组件包括 GoScript、SkiffOS 等,这些项目各自的许可证需要单独确认。开发依赖包括 bun、esbuild、vite、Protobuf,工具链比较复杂。维护成本方面,项目更新频繁,v0.57.0 在 2026 年 7 月发布,说明开发活跃。但版本号仍为 0.x,意味着 API 可能不稳定,插件接口可能随时变化。如果你打算基于它构建产品,要准备好跟随上游更新的节奏。

编辑结论

Spacewave 适合那些已经接受本地优先理念、愿意自己管理数据存储和同步网络的开发者或小团队。它不适合需要稳定托管服务、不想碰浏览器兼容性问题的普通用户,也不适合需要强一致性的多人协作场景。在采用之前,先确认你的目标设备支持 WebRTC 和 IndexedDB,并测试一下在局域网和跨网络环境下同步的稳定性。如果你能接受它还在快速迭代、API 可能变动,那么它值得一试。它的核心价值在于把 Go 生态带进浏览器,这一点目前没有多少项目能做到。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记