BucketForge 1.14.0 是一个"改名字"的版本:项目从 Nebula 更名为 BucketForge,包标识符(bundle identifier)随之从 org.devlive.nebula 迁移到 org.devlive.bucketforge——这是一处 breaking change,但 旧账号数据会在首次启动时自动迁移,不需要任何手动操作。功能上最值得关注的是社区贡献者在 PR #4 中 带来的指定 Bucket:只授权了单个桶、没有 ListBuckets 权限的最小权限 AK,现在也能正常接入,点开账号 直达该桶,全程不会调用它没权限的接口。此外修复了网格卡片塌陷、详情抽屉按钮溢出和工具栏换行三个界面 问题,补齐了英文和日文界面里残留的中文文案,并换上了全新的 BF 桶形标志。
BucketForge 1.14.0 is a “rename” release: the project moves from Nebula to BucketForge, and the bundle identifier changes from org.devlive.nebula to org.devlive.bucketforge — a breaking change, but existing accounts migrate automatically on first launch, with no manual steps required. The headline feature, contributed by a community member in PR #4, is the pinned bucket: least-privilege AKs that are authorized for a single bucket and lack ListBuckets can now connect normally, open directly at that bucket, and never touch an endpoint they have no permission for. This release also fixes three UI issues (collapsing grid cards, overflowing detail actions, toolbar wrapping), completes the English and Japanese translations that still had Chinese strings left, and introduces the new BF bucket mark.
版本信息 | Release Information
- 项目地址 | Repository:https://github.com/devlive-community/bucketforge
- 官方网站 | Official Website:https://bucketforge.devlive.org/
- 版本号 | Version:v1.14.0
- 发布日期 | Release Date:2026年10月13日 | October 13, 2026
项目更名与数据迁移 | Project Rename & Data Migration
- Nebula → BucketForge:旧名太通用,搜索引擎里找不到。产品、crate(bucketforge-provider / image / matting / pdf)、npm 包、仓库地址与官网域名全部改名。
- 包标识符变更为
org.devlive.bucketforge:数据目录、SQLite 文件与钥匙串条目随之换位置。 - 首次启动自动迁移:复制旧
nebula.db(含-wal/-shm/-journal伴随文件)与plugins/到新数据目录;钥匙串回退读取旧条目,再复制到新条目。旧数据原地保留,随时可以降级 回旧版本继续使用。 - 下载页对 1.14.0 之前的版本仍保留
Nebula_资源名前缀,旧链接不断。
The rename covers the product, crates (bucketforge-provider / image / matting / pdf), npm packages, repository URLs, and the website domain. The bundle identifier is now org.devlive.bucketforge, which relocates the data directory, the SQLite file, and the keychain entry. On first launch the app copies the old nebula.db (with its -wal / -shm / -journal side files) and plugins/ into the new data dir, and falls back to reading the old keychain entry before copying it to the new one. Old data is left in place so downgrading still works, and the download page keeps the Nebula_ asset prefix for releases before 1.14.0.
指定 Bucket | Pinned Bucket(PR #4)
- 账号表单新增可选字段「指定 Bucket」,为"最小权限"场景而生:很多团队给工具发的 AK 只授权了 一个桶(比如阿里云 RAM 策略里只写某个桶的读写),这样的 AK 能读写对象,但列不了账号下有哪些桶—— ListBuckets 是账号级操作,不在授权范围内,直接 403。此前这类 AK 在界面上表现为"连不上"。
- 点开账号直达该桶:侧边栏点账号、启动时默认打开、保存账号后、删除当前账号切到下一个,落点 都是这个桶的根。
- 桶根就是账号的根:「上一层」按钮、快捷键、命令面板的"上一层"都在桶根停住;面包屑点到账号 根、或书签 / 历史里残留的空路径,也会被拉回桶根。
- 全程不调 ListBuckets:其余调用保持不变,厂商权限错误原样透出,不会假装成功。
- 桶名可随时修改,无需重新输入凭据;留空则保持普通账号行为,与以前完全一致。
- 实现上不动任何厂商代码:通用包装器
PinnedBucketProvider只在根路径上拦下list/list_page并返回代表该桶的目录条目,其余几十个方法(读写、分片上传、ACL、标签、生命周期、 版本……)原样转发给内层 provider。
The account form gains an optional “pinned bucket” field, built for the least-privilege case: teams often issue an AK authorized for exactly one bucket, which can read and write objects but cannot list the account’s buckets — ListBuckets is an account-level operation and returns 403. Such AKs used to show up as “unable to connect” even though their permissions on the target bucket were fine. With a pinned bucket, opening the account lands directly at that bucket’s root (on startup, account switch, save, or account removal), the bucket root acts as the account’s effective root for upward navigation, and ListBuckets is never called. The bucket name stays editable without re-entering credentials, and an empty value preserves normal discovery. Implementation-wise, no vendor code changes: a generic PinnedBucketProvider wrapper intercepts list / list_page at the root path and forwards everything else to the inner provider.
界面修复 | UI Fixes(Closes #6, #7)
- 网格卡片塌陷:卡片有
overflow: hidden,自动最小高度为 0,条目一多,自动行把剩余高度平分, 卡片被压成细条。隐式行改为按内容取高(grid-auto-rows),不再塌陷。 - 详情抽屉按钮溢出:操作按钮改为两列布局,最后一个按钮不再被挤出 380px 宽的抽屉。
- 工具栏换行:工具栏允许换行,窄窗口下尾部按钮保持可见。
Grid cards use overflow: hidden, so their automatic minimum height is 0 — with many entries the auto rows split the leftover height and cards collapse into thin bars; implicit rows are now sized by content via grid-auto-rows. The details drawer lays its action buttons out in two columns so the last one is no longer pushed out of the 380px drawer. The toolbar now wraps, keeping trailing buttons visible in narrow windows.
国际化 | Internationalization
- 英文和日文用户此前仍会在账号表单、详情抽屉、更新弹窗、确认 / 输入弹窗、下拉占位符、应用 通知、文件选择器标题、欢迎页、厂商名称与存储类型标签里看到中文;这些文案全部接入
t()并 补齐 en / ja 词条。现在应用内用到的每个t()key 在两张语言表里都有对应翻译,厂商 id 占位符 的中文"例如"前缀也改为可翻译的e.g. {name}形式。
English and Japanese users still saw Chinese in the account form, the details drawer, the update dialog, the shared confirm/prompt dialogs and the select placeholder, as well as in app notices, file-picker titles, the welcome screen, vendor names, and storage-class labels. All of these are now wrapped in t() with en/ja entries added — every t() key used in the app now has a translation in both tables, and vendor id placeholders drop the Chinese “e.g.” prefix in favor of a translatable e.g. {name} pattern.
品牌与其它 | Branding & Other Improvements
- 全新 BF 桶形标志:替换旧星云徽章——应用图标(icns / ico / png 全套重生成)、启动画面、 侧边栏 logo、favicon、官网页头页脚 / 云厂商图与 OG 分享卡全部换新。
- 启动画面进度条改用标志同款蓝 - 青渐变色,替换原来的蓝 - 紫渐变。
- 依赖:async-trait 升到 0.1.92,修复 Rust 1.99 上的 clippy 告警。
The old nebula badge is replaced by the new BF bucket mark everywhere: app icons (icns/ico/png, regenerated as a full set), splash screen, sidebar logo, favicon, website header/footer and cloud-hub diagram, and the OG share card. The splash progress bar now uses the logo’s blue-to-teal colors instead of the old blue-to-purple gradient. async-trait is bumped to 0.1.92 to fix clippy on Rust 1.99.
立即下载 | Download Now
在 GitHub Releases 下载最新版本,或访问官方网站了解更多信息。
Download the latest version from GitHub Releases, or visit the Official Website for more information.