最近一直在维护自己开发的开源多云对象存储管理工具 Nebula。
今天正式发布 v1.14.0,同时也宣布一个重要变化:
Nebula 正式更名为 BucketForge!
这次更新不仅完成了项目品牌的全面升级,还带来了一项由社区开发者贡献的重要功能:指定 Bucket 访问。
现在,即使 AccessKey 只拥有某个 Bucket 的访问权限,没有 ListBuckets 权限,也可以正常连接和管理该存储桶。
此外,本次还修复了多项界面问题,完善了英文和日文国际化支持,并引入了全新的 BF 品牌标志。
🚀 一、关于 BucketForge
BucketForge 是一款基于 Rust + Tauri 构建的开源、跨平台多云对象存储管理工具。
项目希望解决一个实际问题:
能不能像操作本地文件管理器一样,统一管理不同云厂商的对象存储?
在日常开发中,我们可能同时使用阿里云 OSS、腾讯云 COS、华为云 OBS、AWS S3 或 MinIO。
不同厂商有各自的管理控制台,操作方式不尽相同。
如果经常需要上传文件、下载资源、管理 Bucket 或在不同云存储之间迁移数据,频繁切换控制台并不是很方便。
BucketForge 希望通过一个统一的桌面应用,让这些操作变得更加简单。
目前项目已支持 14 种云存储服务,包括:
-
阿里云 OSS
-
腾讯云 COS
-
华为云 OBS
-
AWS S3
-
Cloudflare R2
-
七牛云 Kodo
-
MinIO
-
Backblaze B2
-
Wasabi
-
DigitalOcean Spaces
-
Scaleway Object Storage
-
UCloud US3
-
京东云 OSS
-
又拍云 UPYUN
除了基本的文件浏览、上传和下载,项目还在持续完善跨云文件迁移、对象管理、文件预览、数据同步等功能。
项目地址:
https://github.com/devlive-community/bucketforge
官方网站:
https://bucketforge.devlive.org/
🎨 二、为什么从 Nebula 更名为 BucketForge?
最初选择 Nebula 作为项目名称,主要是希望通过「星云」表达多云统一管理的概念。
但随着项目逐渐完善,也发现了一个实际问题:
Nebula 这个名字实在太常见了。
无论是 GitHub 还是搜索引擎,都存在不少使用 Nebula 命名的项目和产品。
这让项目的搜索辨识度受到了一定影响。
因此,决定将其正式更名为 BucketForge。
新的名称由两个部分组成:
-
Bucket:对象存储中的存储桶。
-
Forge:构建、锻造,代表工具与工程能力。
相比 Nebula,BucketForge 能够更直接地表达项目的核心定位。
这次更名涉及:
-
GitHub 仓库
-
项目名称
-
Rust Crate
-
npm 包
-
桌面应用标识符
-
官方网站
-
应用图标
-
启动画面
-
产品品牌资源
全新的 Logo 采用 BF 字母与 Bucket 桶形元素结合的设计,替换了此前的星云标志。
同时,启动界面的进度条也调整为与新品牌一致的蓝青渐变色。
⚠️ 三、项目更名涉及 Breaking Change,但旧数据可以自动迁移
需要特别说明的是,本次更名涉及桌面应用的 Bundle Identifier 变更。
旧标识符:
org.devlive.nebula
新标识符:
org.devlive.bucketforge
由于应用标识符发生变化,系统中的应用数据目录、SQLite 数据库位置及钥匙串条目也会随之变化。
不过,针对已经使用 Nebula 的用户,本次版本提供了自动迁移能力。
首次启动 BucketForge v1.14.0 时,应用会自动尝试迁移旧版本数据。
迁移内容包括:
-
原有 SQLite 数据库
nebula.db -
数据库 WAL、SHM、Journal 伴随文件
-
插件目录
plugins/ -
系统钥匙串中的账号凭据信息
应用会将原有数据复制到新的数据目录,并通过兼容读取旧钥匙串条目完成凭据迁移。
整个过程不需要用户手动导出、导入账号。
另外,为了保留回退能力,迁移过程中不会直接删除旧版本数据。
如果需要重新使用旧版 Nebula,原来的数据仍然保留。
对于历史版本的下载资源,官方网站也继续保留 Nebula_ 前缀,避免旧版本下载链接失效。
需要注意的是,自动迁移不等同于新旧版本之间持续同步数据。升级后仍建议做好重要数据备份。
🔐 四、新增指定 Bucket:解决最小权限 AK 无法连接的问题
这是本次版本中我认为最有实际价值的一项功能。
而且,这项功能来自社区贡献者提交的 PR #4。
1. 之前遇到的问题
在对象存储使用过程中,出于安全考虑,很多团队不会直接给开发人员完整的账号权限。
例如,管理员可能只授权某个 AccessKey 访问指定的 Bucket。
假设有一个存储桶:
example-assets
对应的 AK 仅具有该 Bucket 中对象的读写权限。
这种授权方式符合最小权限原则:
只授予完成工作所必需的权限,而不是直接开放整个账号的存储资源。
但这也带来了一个问题。
一些对象存储管理工具在连接账号时,首先会调用 ListBuckets 接口,尝试列出账号下所有存储桶。
由于该 AK 没有账号级的存储桶列表权限,请求就可能返回:
403 AccessDenied
实际上,这个 AK 并不是没有权限。
它只是没有权限列出所有 Bucket,但完全可以访问指定的存储桶。
此前,这类账号在应用中可能表现为连接失败。
2. 现在可以直接指定 Bucket
BucketForge v1.14.0 在账号配置表单中新增了一个可选字段:
指定 Bucket(Pinned Bucket)
用户可以在添加账号时直接填写已经获得授权的 Bucket 名称。
配置完成后:
-
点击账号直接进入指定 Bucket。
-
启动应用时可以直接打开该 Bucket。
-
保存账号后自动定位到对应存储桶。
-
切换账号时正确处理指定 Bucket。
-
不再调用无权限的
ListBuckets接口。
例如:
账号 AK 只能访问 example-assets。
只需要在账号设置中填写:
example-assets
之后就可以直接进入对应的存储桶进行操作。
不需要额外申请整个账号的 ListBuckets 权限。
3. 将指定 Bucket 作为账号根目录
为了让操作体验更加自然,本次还调整了导航逻辑。
配置指定 Bucket 后,该 Bucket 的根目录会成为账号的有效根目录。
包括:
-
点击「上一层」
-
使用返回上级快捷键
-
通过命令面板返回上级
-
点击面包屑导航
-
从书签或历史记录恢复路径
这些操作都会受到根目录约束,不会跳转到当前 AK 无权限访问的账号级 Bucket 列表。
同时,指定的 Bucket 名称可以随时修改,不需要重新输入账号凭据。
如果不填写该字段,则继续使用原有的账号连接和 Bucket 发现方式。
4. 实现上没有修改云厂商 SDK
这项功能在技术实现上也很有意思。
BucketForge 没有针对每一家云厂商分别修改实现,而是增加了一个通用包装器:
PinnedBucketProvider
它在账号根路径上拦截:
-
list -
list_page
然后返回一个代表指定 Bucket 的目录条目。
其余操作仍然交给底层 Provider 执行。
例如:
-
对象上传与下载
-
分片上传
-
ACL 管理
-
对象标签
-
生命周期管理
-
对象版本管理
这样既保持了原有 Provider 的独立性,也避免了为了一个功能而修改多个云厂商的代码。
需要说明的是,指定 Bucket 不会绕过云厂商权限控制。
如果 AK 确实没有某项操作权限,云厂商仍会返回对应的权限错误。
它解决的是工具对 ListBuckets 的不必要依赖,而不是突破云存储本身的权限限制。
这里也特别感谢 PR #4 的社区贡献者!
开源项目能够收到来自社区的功能贡献,是非常值得高兴的事情。
🛠️ 五、修复多项界面问题
本次版本还修复了此前反馈的几个界面问题。
1. 修复文件网格卡片塌陷
此前,在网格模式下,当文件数量比较多时,部分卡片可能被压缩成很细的条状。
问题与 CSS Grid 的自动行高计算有关。
本次调整了 grid-auto-rows,让网格行根据内容确定高度。
文件数量较多时,卡片也可以保持正常展示。
2. 修复详情抽屉操作按钮溢出
此前,文件详情抽屉宽度约为 380px。
当操作按钮数量较多时,最后的按钮可能超出容器范围。
本次将操作按钮调整为双列布局,改善窄空间下的显示效果。
3. 修复窄窗口工具栏换行
在较窄的应用窗口中,工具栏末尾的部分按钮可能无法正常显示。
现在工具栏支持自动换行,让操作按钮在不同窗口宽度下保持可见。
相关问题:
-
GitHub Issue #6
-
GitHub Issue #7
🌍 六、完善英文与日文国际化
此前 BucketForge 已经支持多语言界面,但部分组件仍然存在未翻译的中文文案。
例如:
-
账号配置表单
-
文件详情抽屉
-
应用更新弹窗
-
确认与输入对话框
-
下拉框占位符
-
应用通知
-
文件选择器
-
欢迎页面
-
云厂商名称
-
存储类型标签
本次将相关文案统一接入国际化系统,并补齐英文和日文翻译。
同时,也对部分云厂商 ID 输入框中的示例文案进行了调整。
例如,原本固定显示中文「例如」的占位符,现在可以根据界面语言正确切换。
目前应用内使用的 t() 国际化键已经补齐对应的英文和日文翻译。
希望让不同语言的开发者都能获得更加完整的使用体验。
⚙️ 七、其他改进
除了上述功能,本次还包括一些细节调整。
品牌资源更新
-
重新设计 BF 桶形 Logo。
-
更新 macOS、Windows 和 Linux 应用图标。
-
更新启动画面和侧边栏标志。
-
更新官方网站品牌资源。
-
更新 favicon。
-
更新社交分享 OG 图片。
-
调整启动进度条渐变配色。
Rust 依赖维护
将 async-trait 更新至 0.1.92。
修复 Rust 1.99 环境下的相关 Clippy 告警。
🌱 八、关于项目后续
BucketForge 依然是一个持续开发中的开源项目。
目前已经支持多种对象存储服务,并逐步完善文件管理、传输、同步和存储资源管理等能力。
我希望它不仅仅是一个对象存储文件浏览器,而是逐步发展为一个更加完整的多云对象存储管理平台。
未来还会继续关注:
-
不同云厂商之间的功能兼容性。
-
更完善的最小权限访问场景。
-
跨云文件管理和迁移体验。
-
大文件传输及数据同步。
-
更好的文件预览与编辑能力。
-
插件扩展及整体使用体验。
当然,项目还有不少需要改进的地方,也欢迎大家提出建议。
📦 九、下载与体验
项目名称: BucketForge
当前版本: v1.14.0
发布日期: 2026 年 10 月 13 日
技术栈: Rust + Tauri
支持平台: macOS / Windows / Linux
GitHub:
https://github.com/devlive-community/bucketforge
官方网站:
https://bucketforge.devlive.org/
版本下载:
https://github.com/devlive-community/bucketforge/releases
如果你之前使用过 Nebula,可以升级到 BucketForge v1.14.0。
首次启动会自动尝试迁移原有账号与配置数据,不需要重新手动添加账号。
如果你还没有使用过,也欢迎下载体验。
❤️ 最后
这次 v1.14.0 对我来说有两个比较特别的意义。
第一个是项目正式更名。
从 Nebula 到 BucketForge,希望通过一个更清晰、更有辨识度的品牌,继续完善这款开源工具。
第二个是收到了社区贡献的功能。
PR #4 带来的指定 Bucket 功能,解决了一个真实的最小权限访问问题。
这也让我更加坚定继续维护和开放项目的想法。
一个开源项目的成长,不应该只有作者一个人的想法,也应该有来自实际使用者的反馈和贡献。
如果 BucketForge 对你有所帮助,欢迎在 GitHub 点个 Star。
也欢迎通过 Issue 和 Pull Request 参与项目建设。
最后想问问大家:平时管理 OSS、S3、COS、MinIO 等对象存储时,最希望桌面客户端解决什么问题?
欢迎一起交流!
GitHub:https://github.com/devlive-community/bucketforge
官网:https://bucketforge.devlive.org/