Hive Hive
Sign in

docs: typed Starlark for build files and plugins; drop WASM

GitHub issue · Closed

Metadata
Source
tuist/once #7
Updated
Jul 5, 2026
Domains
Once
Details

Summary

Settles two open design questions: the build definition language and plugin isolation. Both layers are typed Starlark via starlark-rust (Buck2 dialect), evaluated in-process. Impure work (subprocess execution, output parsing, depfile handling) lives in named Rust handlers in the substrate. WASM is dropped from the design and roadmap; revisit only if a third-party plugin author needs untrusted-code isolation.

Also introduces the two-mode story for language plugins:

  • Declared mode (rust_binary, rust_library, rust_test): targets in .fabrik files, Fabrik is the source of truth, hermeticity defaults to strict. What self-hosting Fabrik uses.
  • Adopted mode (rust_workspace): points at a Cargo.toml, cooperative resolution via cargo metadata, generates declared-mode targets internally. The drop-in adoption story.

Same plugin, two faces. Cache namespaces are kept separate so the same crate built two ways doesn’t accidentally share entries. Integration mode is visible in queries and fabrik cache stats.

Roadmap impact

  • Phase 1: Starlark frontend plus declared rust_binary. No Cargo.toml reading at this point.
  • Phase 2: Fabrik’s own crates described in hand-written .fabrik files for self-hosting.
  • Phase 4 (was “extract plugin contract”): adopted-mode rust_workspace plus a second built-in plugin (command) to triangulate the SDK against two real implementations.
  • Phase 5 (was “build definition language”): scoped down to DSL maturity (profiles, LSP, schema registry) since the language itself is settled.
  • Phase 6 (was WASM plugin host): removed. Subsequent phases renumbered.

Test plan

  • Read docs/design.md and docs/roadmap.md end to end for coherence.
  • Confirm the Starlark code samples in §3 and §4 of the design doc reflect the intended target/plugin shape.
  • Confirm the Phase 1 exit criterion is the right forcing function for the next sprint.

🤖 Generated with Claude Code

Flights

Investigate, reproduce, or fix this item in an isolated repository. Each Flight preserves its outcome and agent session.

New Flights are paused Configure model inference, GitHub, and a sandbox provider to start another Flight. Existing results remain available below.
No Flights yet

Start a Flight and preserve its objective, outcome, and session here.

Comments

No GitHub comments yet.