Files
flying-jib/agent/ADRs/0002-choose-flying-squid-as-server-core.md
T
2026-07-30 23:02:00 -04:00

42 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ADR-0002: Choose Flying Squid as server core
- **Status:** Accepted (amended by [ADR-0013](./0013-bare-pear-only-runtime-and-distribution.md))
- **Date:** 2026-07-30
- **Amended:** 2026-07-30
## Context
We need an embeddable Java Editioncompatible server that runs locally inside our app lifecycle, supports plugins, Anvil worlds, and modern protocol versions — without operating a central host. Production runtime must be **Bare/Pear only** (no app-level Node.js).
## Decision
Use **[Flying Squid](https://github.com/PrismarineJS/flying-squid)** (`flying-squid` npm) as an **embedded library** via `createMCServer`, running **inside Bare** (in-process or Bare worker) via **`bare-node-runtime`** compatibility imports — **not** as a Node.js child process.
- Plugins: `module.exports.server` / `player` / `entity`
- Worlds: Anvil via `worldFolder` / prismarine-provider-anvil
- Default product target version: latest Squid-tested (e.g. 1.21.4), configurable
- Bind: always `127.0.0.1` ([ADR-0005](./0005-local-only-bind-invariant.md))
We will **not** fork Squid initially; prefer plugins, thin lifecycle wrapper, and Bare `imports` maps. Compatibility gaps → shims/patches, not Node spawn ([ADR-0013](./0013-bare-pear-only-runtime-and-distribution.md)).
## Consequences
### Positive
- JS/Prismarine ecosystem retained under Bare via holepunch compat layers
- Plugin surface for border detection, chat bridge, bind guard
- Broad version support (1.8.81.21.4 tested upstream)
- Fits single Bare executable / Pear OTA story
### Negative / tradeoffs
- Gameplay parity ≠ full vanilla Paper/Spigot
- Heavy dependency graph; Bare packaging + imports maps required
- Squid is Node-authored — Bare load is a critical spike (not free)
### Follow-ups
- [ ] Phase 1 Bare Squid manager + bind force under bare-node-runtime
- [ ] Document imports map for Prismarine stack
- [ ] Plugins `fj-bind-guard`, later mesh plugins