GitHub Explorer
📰 公众号已发布 2026-07-24

GitHub 推荐:9.3K stars 的 Rust 写 Minecraft 服务器:Pumpkin 的 DAG 调度与 WASM 插件野心

GitHub: https://github.com/pumpkin-mc/pumpkin

一句话总结

Pumpkin 用 Rust 完整重写了 Minecraft 服务器(Java + Bedrock 双协议),靠自研的「DAG 阶段调度 + 跨线程 MPMC 通道」架构把 5ms 启动 / 100MB 内存当成基线,并以 WASI Preview 2 + WIT 契约探索跨语言插件生态。

值得关注的理由

  • 真·性能架构:不是简单「换 Rust」,而是把 chunk 流水线拆成 DAG 节点(位置+阶段为粒度),用 rayon + crossfire::compat 通道 + tokio 三池协作,IO / 生成 / 写盘全并行 —— 这套架构在 Folia/MCHPRS 之外独立开辟了一条路。
  • 原生双协议:一个二进制同时跑 Java TCP(TcpListener + CFB8 加解密)和 Bedrock UDP(RakNet),select! 单循环分支,不需要 GeyserMC 中转。
  • Plugin ABI 走 WIT Component Model:用 wasmtime::component::bindgen! 把 24 个接口绑成 WIT v0_1 子模块,per-permission 字段级门控(如 get_sys_info 的 CPU 数要 SYS_INFO_CPU 权限才返回),是国内 Rust 项目里少见的 Component Model 落地。
  • CI 严格度同类罕见:workspace 级 clippy::all / nursery / pedantic / cargo 全 deny + RUSTFLAGS=-Dwarnings + machete 死依赖检测 + typos 拼写检查,工程化水准显著高于 Paper/Cuberite/Valence 同类项目。

项目展示

Pumpkin Chunk Loading

仓库 README 唯一展示图(README 误写 .gif,实际是 .webp)—— 演示 Vanilla/Linear/Pump 三种 chunk 编码格式下的区块加载行为。

仓库其他媒体均为 badge 图标或服务端图标(assets/default_icon.png),无更高分辨率演示素材。

项目画像

维度数据
GitHubhttps://github.com/pumpkin-mc/pumpkin
Star / Fork9,297 / 631
Watchers60(subscribers)
代码行数277 万行(Rust 162 万 + JSON 115 万 + 其他微量);1,704 个 Rust 文件 + 546 个 JSON
默认分支master(14 crate workspace)
项目年龄23.9 个月(2024-07-28 首次 commit)
最近提交2026-07-24
贡献者数256(git log)/ 30(gh API 口径,事实数据)
主语言Rust(100%)
LicenseGPL-3.0
Open issues / PRs215 / 86
最新 releasenightly(2026-07-24,6 个二进制 ARM64/X64 × Linux/macOS/Windows)
开发阶段密集开发(连续 24 个月活跃,近 12 个月 1,011 commits;fix/feature=46.5%/35%,refactor 仅 0.5%)
贡献模式核心少数 + 社区:Top1 Snowiiii 1,022 contributions(51.6%)+ 联合维护者 kralverde/Bryntet/lukas0008,前 4 人合计 ~65%
热度定位大众热门(Rust MC 服务器赛道星数第一,是次席 Valence 的 3 倍)
质量评级工程化 A / 单测密度 B-(437 个 #[test],主二进制 crate player/world 模块 0 单测)/ 文档 B(独立 Pumpkin-Docs 仓库承载)/ CI 严格度 A+

作者视角:为什么存在这个项目

创始人/作者背景

主创 Alexander Medvedev(GitHub: @Snowiiii),位于德国 Düsseldorf,账号 2020 年起活跃于 Minecraft 工具生态(历史仓库 MasterMind-Fabric、Packeto、Vent-Engine-OLD),长期浸淫 Fabric/Quilt 模组开发。

  • 核心维护团队:Snowiiii(1,022 commits,事实 lead maintainer)+ Bryntet(Edvin Bryntesson, Stockholm, 107)+ kralverde(99)+ lukas0008(84)+ GreenedDev / RB007 / Purdze / Commandcracker / DaniD3v 等 30 人活跃圈。
  • 组织账号晚于仓库 5 个月:仓库 2024-07-28 启动,pumpkin-mc Org 2024-12-28 才成立 —— 是「个人项目成长为组织」而非「公司驱动开源」。

问题判断

Snowiiii 看到的,是 Minecraft Java 版服务端生态被 Paper 主导(12.5k★)的失衡:性能差(单线程 tick,~10s 启动,~1.4GB 内存)、Java 运行时依赖重、与 Bedrock 跨版要靠 GeyserMC 中转(额外一层延迟与复杂度)。Valence(3.3k★)虽然也是 Rust,但定位是「框架」而非「成品服务器」,对最终用户价值间接。

时机为什么是现在:2023-2024 年 wasmtime Component Model 进入实用阶段(async + trappable imports),让「server-written-in-Rust + plugins-in-any-language」第一次有了 production-ready 的工程路径。同时 Minecraft 1.20+ 区块格式复杂化(Linear format)、原版世界生成重写到 noise_router,给纯 Rust 重写带来了「与上游同步实现难度可控」的窗口。

解法哲学

作者明确选择了什么:

  1. 真多线程,但把「真」放在 chunk pipeline 而不是 tick 调度 —— 与 Folia 的「把每区域 tick 拆线程」路线不同,Pumpkin 让 chunk IO / 生成 / 写盘全并行,但 gameplay tick 仍然是单线程经典模型(Ticker::run)。
  2. WIT Component Model 作为插件 ABI 的赌注 —— 放弃 PatchBukkit 这条 Bukkit 兼容路线(虽然官网文案宣传过,但代码里完全没有),赌未来语言生态。
  3. 自研 NBT,不依赖 fastnbt/simdnbt —— 因为需要 Java + Bedrock 字节序双支持 + 无 serde 的 raw NbtCompound API。

明确不做什么:

  1. 不做插件兼容层(Bukkit/Spigot/Paper 插件无法直接运行,issue #2299 已正面承认)。
  2. 不绑定 Java 运行时(无 JVM 依赖,单二进制部署)。
  3. 不做每 tick 多线程(chunk pipeline 才是并行层)。
  4. 不走 serde 路径处理 NBT(NbtCompound 一等公民 + put/get API)。

战略意图

  • 短期:1.0.0 收敛(issue #449 列了 6 个硬门槛:稳定 ABI、1000+ 玩家压测、20 TPS、内存泄漏审计、协议 fuzzing、移除 unwrap/expect),nightly release 提供多平台二进制降低试用成本。
  • 中期:WIT v0_1 → v1.0 冻结,让插件作者能基于稳定 ABI 投入。
  • 长期:成为「Bedrock + Java 一体化」的轻量化服务器,瞄准廉价 VPS 运维者(5ms 启动 + 100MB 内存 + 单二进制)。

⚠️ 战略意图与官网叙事存在 2 处张力 值得读者注意:

  1. 官网声称 PatchBukkit 兼容 Bukkit 插件,但代码树里完全没有这个 loader(只有 native libloading + WASM),截至本报告成稿无 patchbukkit crate、无 bukkit 重写器、无 plugin/loader/bukkit 模块。
  2. PR #2489 提到用 zlib-rs 替换 Java 协议压缩,但全仓库 grep -r "zlib-rs\|zlib_rs" 零匹配 —— 当前仍是 flate2 rust_backend,PR 状态需自行核实。

核心价值提炼

创新之处(按新颖度×实用性排序)

  1. DAG-of-(position, stage) chunk 调度器(新颖 6 / 实用 8)—— pumpkin-world/src/chunk_system/dag.rs 把每个 (ChunkPos, Stage) 建模为独立 Node(含 in_degree/in_queue/in_flight/edge),generation 依赖通过 Edge 显式建模(如 StructureReferences 阶段需要邻居区块同阶段先完成),BinaryHeap<TaskHeapNode> 按 ChunkLevel 排序出最近区块优先。waiting_for_chunks 集合管理被邻居阻塞的 task。这是 Mojang 现代区块流水线的 Rust 重写 + slotmap 键化,比 flat job queue 灵活得多。
  2. WIT Component Model 插件契约 v0_1(新颖 8 / 实用 6)—— 24 个 WIT 接口(block_entity/boss_bar/commands/entity/events/forms/gui/i18n/item_stack/java_dialogs/logging/permission/player/recipe/scheduler/scoreboard/server/text/uuid/world 等),wasmtime::component::bindgen!({ path: '../pumpkin-plugin-wit/v0.1', world: 'plugin', imports: { default: async | trappable } }),子模块独立 git 仓库,WIT 升级不会污染运行时。per-permission 字段级门控(如 get_sys_info 的 cpu_count 只在 SYS_INFO_CPU 权限下返回 Some)。
  3. 跨线程 MPMC 通道 + 三池协作(新颖 7 / 实用 7)—— tokio 跑 I/O + ticker + 插件生命周期,rayon 跑 CPU 密集型 chunk 生成,std::thread 跑 IO read/write/generation 专职 worker,三者通过 crossfire::compat::{MRx, MTx, Tx, MAsyncRx} 跨边界通信。main.rs:42 注释 // WARNING: All rayon calls from the tokio runtime must be non-blocking! 明确告诉贡献者「用 par_iter 必须先 spawn 到 rayon pool 再回传 channel」——这是 Rust 工程里少见的明确 async/sync 边界契约。
  4. IOLock = Arc<(std::sync::Mutex<HashMap>, tokio::sync::Notify)>(新颖 5 / 实用 8)—— 用同步 Mutex 做 cheap 的 per-chunk-pos 锁查询(hot path 同步检查),用 tokio Notify wake 异步等待者。比直接用 tokio::sync::Mutex 节省一次 await 调度开销。可直接迁移到任何 per-key 限流 / 写合并的 async 服务。
  5. 自研 NBT 覆盖 Java + Bedrock 双字节序(新颖 5 / 实用 8)—— NbtReadHelperJava / NbtReadHelperBedrock 对称,to_bytes / to_bytes_bedrock 双路径,MAX_ARRAY_LENGTH=2_000_000 防御性硬限,cesu8 处理 Java Modified-UTF8。NbtCompound 一等公民(put_byte/put_int/put_compound 直接 API)免去 derive Serialize 的样板。8 个 criterion bench(Java/Bedrock × serde/raw × serialize/deserialize)覆盖完整,但没有公开 fastnbt/simdnbt 对比数据。
  6. Workspace 级 clippy::all + nursery + pedantic + cargo 全 deny(新颖 4 / 实用 9)—— 配合 RUSTFLAGS=-Dwarnings,外加自定义 deny todo/unreachable/unimplemented/print_stdout/print_stderr,单测 437 个,能保持 24 个月不出现「lint 退化为建议」的状态。pumpkin-nbt/src/lib.rs:111 的 #[expect(clippy::unreachable)] 证明 lint 是真在跑、而非空配置。
  7. 单 select! 双协议监听(新颖 5 / 实用 8)—— PumpkinServer::unified_listener_task(pumpkin/src/lib.rs:438)一个 tokio::select! 同时分支 TCP accept(Java)+ UDP recv_from(Bedrock/RakNet)+ STOP_INTERRUPT.cancelled()。RAKNET_VALID 掩码区分 online / offline 包,同 SocketAddr 的 Bedrock 客户端在 Arc<Mutex<HashMap<SocketAddr, Arc<BedrockClient>>>> 里复用。
  8. 自适应 chunk 重光照(新颖 5 / 实用 7)—— worker_logic.rs::needs_relighting 检查 chunk 是否在非默认 LightingEngineConfig 下保存,且当前是默认模式 —— 仅在这种情况下排队重光照,避免「保存时用 dark/light 配置、读时按 default 配置计算」的常见 MC 服务器坑。

可复用的模式与技巧

模式在 Pumpkin 的位置如何迁移
DAG-of-(position, stage) chunk 流水线pumpkin-world/src/chunk_system/{dag,schedule,worker_logic}.rs任何有 location-based 依赖的流式数据管线(音频/视频 tile 处理、科学 stencil 模拟)都能用 slotmap-keyed DAG + priority heap pull 模式
crossfire::compat 跨 tokio ↔ std::thread 通道worker_logic.rs io_read/io_write/generation worker当你需要 CPU-heavy 工作(图像处理、编译、FFI)但其余是 async 应用时,spawn std thread 持有 channel 端点,回传用 MTx → MRx → tokio task,免去每次调用 spawn_blocking 的开销
IOLock = Arc<(Mutex<HashMap>, Notify)>pumpkin-world/src/chunk_system/mod.rs:13-16用 sync Mutex 做 hot-path 锁检查(cheap),Notify 处理 wake 异步等待者。比 tokio::sync::Mutex 在 hot path 上节省一次 await
WIT 子模块 + bindgen! + per-version 目录pumpkin-plugin-wit(独立 submodule)+ wasm_host/wit/v0_1/把 wire-format 契约(WIT)解耦到独立 submodule,submodule bump = 新 API surface,runtime 零改动。任何想要 sandboxed extensibility 的 host 都能复用
per-permission 字段级门控 host implwasm_host/wit/v0_1/server.rs::get_sys_info不返回胖对象让 plugin 自取,而是 per-field Option<T> 配权限。这样 plugin 在没有 SYS_INFO_CPU 时根本无法看到 CPU 数字,是真正可强制的能力模型
build.rs 字符串遍历生成 match-arm lookup fnpumpkin-world/build.rs → get_template_bytes / get_template_pool_json当你有几千个小资产文件(template pool、翻译表、sprite list),build 时遍历 emit 单 match fn 返回 Option<&'static [u8]>,省运行时 IO + 哈希查找,代价是更长编译时间
compile-time 特征切片pumpkin-data/Cargo.toml 53 个 feature + #[path] + #[cfg(feature=...)]巨型数据表永远不全用,拆成 Cargo feature,未用的 feature 零编译时间 / 零二进制体积代价

关键设计决策

决策动机Trade-off评价
三层 workspace(data → nbt → world → protocol → binary)允许领域 crate 独立演进;protocol 改动不触发 full pumpkin 重编译样板(re-export、version bump)、Arc<...> 链多对这个规模的项目是正确的选择;5k 行级项目就过度工程
Chunk 流水线建模为 DAG-of-stage,而非 single-tick-per-chunkgeneration 有序阶段依赖(Noise 需 Biomes、Features 需 Surface),独立 stage 节点让无关 chunk 的无关 stage 真正并行调度器复杂度暴涨;必须处理 DAG 环 + waiting_for_chunks这是 Pumpkin throughput 声明的「秘密」;对的抽象
sync std::thread workers + crossfire channel,非 all-tokiorayon + std thread 跑 CPU,tokio 只跑 IO;无 spawn_blocking 开销,无 async-in-rayon 脚枪手动 channel 管道;WARNING 注释证明它咬过贡献者性能上正确;这个 WARNING 注释值得接受
自研 NBT(pumpkin-nbt)替代 fastnbt/simdnbt需 Java+Bedrock 双字节序;需 raw NbtCompound API 而非 serde;需控制 fuzz target维护负担;错过 fastnbt/simdnbt 性能改进红利由 edition 对称性证明合理;性能没有公开 bench 证明没丢阵地
WASM Component Model 插件 API + WIT 子模块对冲「语言战争」;任何有 Component 能力的语言都能写 plugin;默认沙箱;per-permission 字段门控可执行不是每个语言有干净 Component story(Python「ship 整个运行时」问题);WIT 升级是 ABI break远见型押注;实际风险是太早 —— 但若 work out,插件将成为 MC 服务器开发最易部分
三种 world format(Vanilla / Linear / Pump)向后兼容现存世界(Vanilla)+ 大小优化(Linear)+ 前瞻自定义(Pump),不强迫迁移三个 codec 路径要维护;format dispatch 是必须测的代码路径业界标准 trade-off;强制迁移是运营商敌意
Workspace-level clippy all/nursery/pedantic/cargo deny + -Dwarnings强制代码地道 Rust;降低未来维护成本;review 时抓 API 设计问题贡献者摩擦高(每个 PR 跟 linter 打架);部分 #[expect(...)] 逃逸对长寿项目是强姿态;#[expect(clippy::unreachable)] 证明它在 bite 但被谈判绕过、而非禁用
unwrap/expect 全仓审计(1.0 阻塞项)issue #449 列为发布硬门槛;进程 panic 是单点故障数千处需手动评审 / 重写是负责任的做法;Folia/Paper 1.x 早期也曾做类似审计

竞品格局与定位

竞品对比矩阵

维度PumpkinPaper (Java, 12.5k★)Valence (Rust, 3.3k★)Ferrumc (Rust, 2.3k★)Cuberite (C++, 5.4k★)
定位成品 MC 服务器(Java + Bedrock)成品 MC 服务器(Java only)Rust 框架 / 库成品 MC 服务器(Java only)成品 MC 服务器(Java + Bedrock)
启动速度~5ms(实测基线)~10s取决于使用者数秒级秒级
内存占用~100MB~1.4GB库,零内存数百 MB~200MB
Tick 模型单线程 tick + chunk pipeline 并行单线程 tick + Folia 分叉可多线程自定义自定义单线程
插件生态WIT Component Model(v0_1,24 接口);无 Bukkit 兼容Bukkit/Spigot/Paper API 全兼容库,调用者自己写早期Lua
Java 依赖无需要 JRE 17+无无无
Bedrock 跨版原生(UDP/RakNet)需 GeyserMC 中转框架级支持不支持原生
LicenseGPL-3.0MIT + 各类插件许可证MITMITApache-2.0
成熟度0.x(nightly)1.21.x 稳定 10 年0.x 框架早期 0.x5+ 年 1.x
核心门槛1.0 收敛中已成熟已成熟早期已成熟

差异化护城河

  1. DAG chunk pipeline + 三池协作 —— 上面分析过的调度器是 Pumpkin 真正的护城河。其他 Rust MC 服务器要么没并行(Feather 已停)、要么只在 tick 层并行(Valence 让用户自己决定),没有把 chunk IO / generation / 写盘全异步并行的同代开源实现。
  2. WIT Component Model 插件契约 + 子模块化 —— 在所有 MC 服务器里最前瞻的插件设计,任何语言(Rust 走 native loader,任意支持 Component Model 的语言走 WASM loader)都能写插件。per-permission 字段门控是真正可执行的能力模型,比 Paper 的 sandbox 演进更现代。
  3. GPL-3.0 + 100% Rust + 单二进制 —— 廉价 VPS 5 秒部署,0 依赖(除系统 glibc / musl),冷启动到游戏服就绪 时间数量级领先 Paper/Folia。
  4. Java+Bedrock 原生 —— 单端口监听两种协议,RAKNET_VALID 掩码路由;运营商免部署 GeyserMC(少一个 JVM 进程、少一层延迟、少一层安全审计面)。

竞争风险

  1. 最可能被 Paper + Folia 替代:当 Folia 成熟到插件兼容率上来,运营商不会主动迁到 Pumpkin(生态引力 + 久经考验的稳定性)。Pumpkin 的赢面在于「新部署 / 廉价 VPS / 跨版需求」三个细分场景,而非抢 Paper 存量。
  2. 最可能被 ferruMC 替代(如果它加速):同样 Rust 路线、同代起步,星数差距 4 倍属于「后发者如果跑得快就能填」。Pumpkin 必须把 1.0 撞线作为护城河。
  3. 最可能被官方 Bedrock Dedicated Server 替代(极小概率):Minecraft 官方在 Bedrock 服上一直保守,但若微软发力 Bedrock Dedicated + Linux 容器化,会挤压 Cuberite/Pumpkin 的 Bedrock 路径。
  4. zlib-rs、PatchBukkit 期望管理:如果社区根据 PR #2489 / 官网文案预期 zlib-rs 已落地、PatchBukkit 已可用,会因缺失产生信任损耗。

生态定位

Pumpkin 在 Rust MC 服务器赛道领先(次席 Valence 是框架不是成品),但在更大的 MC 服务端红海(Paper 12.5k★)仍是后发挑战者。它的生态位是 「廉价 VPS + Java/Bedrock 跨版 + 跨语言插件」的差异化三人组 —— 不是抢 Paper 的存量市场,而是在 Paper 覆盖不到的场景里建立第一心智。

如果无明显竞品 / 新兴领域判断不适用:Pumpkin 不属于新兴领域(Minecraft 服务端 15 年历史),属于 「成熟红海里用新一代工程模型重做」的颠覆者。

套利机会分析

  • 信息差:✅ 低关注高质量成立。9.3k★ 不算被市场埋没,但工程深度被严重低估 —— 仓库 docs 仓库 + 官网 blog 几乎没有架构解读文章,外面只看到「5ms / 100MB」营销数字,真正的 DAG 调度、IOLock 模式、WIT 组件模型落地 几乎无报道。中文技术圈对 Rust 重写 MC 服务器的认知还停留在「Valence 框架」层。
  • 技术借鉴:
    • DAG-of-(position, stage) + priority heap 可直接迁移到任何 stream / 数据流管线(音频处理、视频 codec、科学模拟 stencil)。
    • crossfire::compat MPMC 跨 async ↔ sync 是 Rust 异步生态被严重低估的组件,比手卷 Arc<Mutex<...>> 或 tokio::sync::mpsc + spawn_blocking 干净得多。
    • IOLock = Arc<(Mutex, Notify)> 是「async 服务 + per-key 限流」的通用解。
    • WIT 子模块化 + per-permission 字段门控 是任何想接受第三方插件的项目(数据库、API 网关、IDE、CDN 边缘)的最佳实践模板。
  • 生态位:在 Rust + WASI Component Model 的交叉点,Pumpkin 是少数 production-grade 实现。对于正在评估「Rust 服务要不要走 WASM 插件」的团队,Pumpkin 是值得拆解的样板。
  • 趋势判断:
    • 增长在持续(近 12 个月 1,011 commits、月度稳定 80+ commits),未见衰减信号。
    • 符合技术趋势:wasmtime Component Model 进入实用阶段、WASI Preview 2 推广、Rust 在基础设施层的扩张。
    • 后发优势:相比 Feather 2024-04 停更,Pumpkin 是「同思路后跑出来」的胜者;相比 ferruMC,Pumpkin 有 4 倍时间 + 1,000+ commits 的工程深度积累。

风险与不足

  1. 1.0.0 未发布,仍处 nightly(issue #449 开放)—— unwrap/expect 审计未完成,chunk_system/mod.rs 顶部 4 个 TODO 还在(proto chunk dirty flag / better priority / lifetime on loading ticket / entity-not-unload),1000 玩家压测 / 协议 fuzz target 不在 tree 里。
  2. Panic-on-Level-variant —— chunk_system/generation_cache.rs::height()/bottom_y() 在错误 variant 时直接 panic!(),单 chunk 编码错误会让整个服务器进程崩溃。issue #449 的「移除 unwrap/expect」目标直指这类点。
  3. PatchBukkit 缺失 —— 官网 / README 声称支持 Bukkit 插件,但全仓库无 patchbukkit crate、无 bukkit 重写器、无 plugin/loader/bukkit 模块。这是营销文案与代码现实的最大张力。
  4. zlib-rs 状态不明 —— PR #2489 提到用 zlib-rs 替换 Java 协议压缩,但 grep -r "zlib-rs" 全仓库 零匹配。当前仍是 flate2 rust_backend。读者若依据 PR 信息预期会失望。
  5. WIT ABI 单版本无升级路径 —— 当前只有 v0_1 一个目录,未来版本要么 add v0_2 并行(爆炸性增长),要么 in-place 改(破坏插件),作者未明确升级策略。
  6. 插件作者门槛高 —— Rust 写 native 插件要走 #[plugin_method] proc-macro(实际是 GLOBAL_RUNTIME.block_on 包装),WASM 写插件要走 Component Model 学习曲线(虽然 WIT 本身很 human-readable),相比 Paper 的「写个 Java 类 extends JavaPlugin」是数量级上升。
  7. 单点维护者风险 —— Snowiiii 占 51.6% contributions,离职 / 倦怠会直接导致项目停摆(参照 Feather 的 2024-04 停更史)。
  8. 测试覆盖率偏低 —— 主二进制 crate pumpkin/src 的 entity/player.rs(422 commits)和 world/mod.rs(400 commits)核心模块 0 个 #[test],单测集中在 pumpkin-data / pumpkin-world / pumpkin-nbt,集成测试套件缺失。

行动建议

如果你要用它

  • 适合场景:廉价 VPS($5/月级别)跑 Java/Bedrock 跨版小服(10-30 玩家)、教育场景(冷启动到游戏服 < 5 秒对学生零摩擦)、开发服务器(nightly 频繁刷新不影响磁盘 IO)。
  • 不适合场景:300+ 玩家商业服(1000 玩家压测还没做)、强依赖 Bukkit 插件的运营服(PatchBukkit 不存在)、稳定性 > 性能的研究机构/学校机房(1.0 未发布 + nightly release 频繁)。
  • 部署建议:用 Nix flake(仓库自带)或 Docker,配置文件用 TOML;nightly release 提供 6 平台二进制,可先在 dev 环境跑一周再上生产。

如果你要学它

  • 必读 5 个文件:
    1. pumpkin/src/lib.rs —— PumpkinServer::new + unified_listener_task(lines 438+),看三池协作如何在一个 select! 里汇合。
    2. pumpkin-world/src/chunk_system/dag.rs —— DAG 节点 / 边 / priority heap 实现,看 ChunkLevel 排序如何驱动最近区块优先。
    3. pumpkin-world/src/chunk_system/schedule.rs —— GenerationSchedule 看 DAG 如何与 worker 通信,crossfire::compat::{MRx, MTx} 通道拓扑。
    4. pumpkin-world/src/chunk_system/worker_logic.rs —— IO read / generation / IO write 三个专职 worker 实现,看 std::thread::spawn + crossfire::compat::AsyncRx 模式。
    5. pumpkin/src/plugin/loader/wasm/wasm_host/wit/v0_1/mod.rs —— wasmtime::component::bindgen! 配置 + per-permission 字段门控。
  • 次读 3 个 crate:
    • pumpkin-nbt —— Java + Bedrock 双 NBT 自研实现 + 8 个 criterion bench。
    • pumpkin-protocol/src/lib.rs —— StreamDecryptor / StreamEncryptor(lines 117-241)的 CFB8 状态机,看 Rust 异步 I/O 如何处理流密码。
    • Cargo.toml(workspace 根)—— workspace lint 配置,看如何用 clippy::all/nursery/pedantic/cargo 全 deny + RUSTFLAGS=-Dwarnings。
  • 可借鉴 3 个测试技巧:
    • pumpkin-world/benches/{chunk_gen,chunk_gen_concurrent}.rs —— 同一个 chunk 生成逻辑分 sync vs 4-thread 两个 bench 看天花板。
    • pumpkin-nbt/benches/nbt.rs —— 8 个 criterion bench 覆盖 Java/Bedrock × serde/raw × serialize/deserialize。
    • pumpkin-nbt/fuzz/ —— NBT 反序列化 fuzz target,比纯单测更早发现字节序 bug。

如果你要 fork 它

可改进的方向:

  1. 补 PatchBukkit loader(如果市场真的需要 Bukkit 生态兼容)—— 写一个 pumpkin/src/plugin/loader/bukkit/ 模块,从 paper-api jar 反射出 Bukkit API 调用映射到 WIT v0_1 接口。工程量大但可填补最大营销/代码 gap。
  2. land PR #2489(zlib-rs 替换 flate2) —— 验证 PR 状态,如果还在 open 就 close,如果已 close 就重新 benchmark 重新开。
  3. 加 1000 玩家 stress harness —— 在 tests/ 下加一个 dummy_bot client 模拟 N 个 fake player 收发包,作为 1.0 发布硬门槛。
  4. 加协议 fuzz target —— pumpkin-nbt/fuzz/ 已有,pumpkin-protocol/fuzz/ 缺失,借鉴前者模板。
  5. 加 WIT v1.0 升级路径文档 —— 当前 v0_1 单版本无迁移路径,写一份「v0_1 → v1.0 迁移手册」给插件作者。
  6. 补 entity-not-unload 测试 —— chunk_system/mod.rs 顶部 TODO,需要一个测试证明玩家断线后实体确实被卸载(不是泄漏在内存里)。

知识入口

资源链接
DeepWiki未收录
Zread.ai未收录
关联论文无(应用型项目)
在线 Demo无(MC 服务器需自托管;官方提供 nightly 二进制 5 平台 6 资产)
官方文档站https://pumpkinmc.org/(已访问,价值主张清晰;docs/blog 子站未抓)
Discordhttps://discord.gg/wT8XjrjKkf(频道存在,shields badge 确认)
Wiki / Dev 文档https://pumpkinmc.org/docs(导航存在,内容未抓)
插件 WIT 合约仓库https://github.com/Pumpkin-MC/pumpkin-plugin-wit(独立 git submodule)
多语言绑定pumpkin-api-c(4★)/ pumpkin-api-py(6★)/ pumpkin-api-ts(13★)—— 孵化中

诚实备注:本报告对 PatchBukkit 兼容、PR #2489 zlib-rs 替换两项做了诚实核查 —— 两者在当前 main 分支都不存在,与官网/外部文档存在张力,读者引用本报告时请同步引用代码链接 pumpkin/src/plugin/loader/ 与 Cargo.toml 自行核实。

相关报告