VibeLang improvement proposals
Will decides each VibeLang language decision as a VIP, one at a time. Nothing is part of the language until an accepted VIP or one of its public amendments states it; old VibeLang is only a reference. The most fundamental decisions come first, and the most controversial come next. Each accepted VIP is recorded here with Will's words. Where an accepted VIP or its public amendment disagrees with the specification, the VIP wins until the specification is rewritten to match it. Authorized clarifications are recorded in public amendments to the relevant VIP and its affected chapter, including the applicable pinned references and explicit reconciliation notes. VIPs never contradict each other: a later VIP that changes an earlier one also updates it.
VIP Title Status 1 effect and async functionsaccepted 2026-10-28 2 effect { } blocks, and do { } as TC39 defines itaccepted 2026-10-28 3 A!E!R is an alias for Effect<A, E, R>accepted 2026-10-28 4 throw, and calls that may throwaccepted 2026-10-28 5 try runs an Effect; await is only for Promisesaccepted 2026-10-28 6 Effect's functions are globals accepted 2026-10-28 7 match is TC39 pattern matching, plus a compile-time exhaustiveness checkaccepted 2026-10-28 9 service declarationsaccepted 2026-10-28 12 provide blocksaccepted 2026-10-28 13 error declarationsaccepted 2026-10-28 14 Effect's modules are in scope without an import accepted 2026-10-28 15 schema declarationsaccepted 2026-10-28 16 data declarations (tagged unions)accepted 2026-10-28 17 fork and joinaccepted 2026-10-28 18 Running Effects concurrently: try.all, try.race, try.any, try.allSettled accepted 2026-10-28 19 for concurrentaccepted 2026-10-28 20 Iterating a Stream with for try accepted 2026-10-28 21 Producers: effect function* returns a Stream accepted 2026-10-28 22 Interruption blocks accepted 2026-10-28 23 The pipe operator |> accepted 2026-10-28 26 Top-level await, and no magic main accepted 2026-10-29 27 Declaration output and @throws accepted 2026-10-29 28 Generic data unions accepted 2026-10-29 29 Serializable errors: schema error accepted 2026-10-29 30 Config files: vibe.config.json, tsconfig.json, jsconfig.json accepted 2026-10-29 31 Runtime guarantees accepted 2026-10-29 32 One pinned Effect version during alpha accepted 2026-10-29 33 The platform standard library accepted 2026-10-29 34 Compiler and tooling requirements accepted 2026-10-29 38 Effect's type-aware lint is built into VibeLang accepted 2026-10-29 39 .vibex: VibeLang with JSXaccepted 2026-10-31 40 module declarations: TypeScript inside a .vibe fileaccepted 2026-11-03 41 TC39 throw expressions accepted 2026-11-02
Denied
VIP Title Status 8 Special syntax for Effect resources (using, a scoped keyword) denied 2026-10-28 10 The Users.find(id) shorthand denied 2026-10-28 11 Trailing blocks denied 2026-10-28 24 wire, automatic layer compositiondenied 2026-10-28
Superseded
VIP Title Status 25 Inline module declarations as a TypeScript escape superseded by accepted VIP-40 , 2026-11-03; denial is historical
Open
Listed for a future decision; not part of the language.
VIP Title Status 35 Effect handlers (control, handle, resume, abandon) open 2026-10-29 36 The declaration manifest open 2026-10-29 37 Effectify the universe open 2026-10-29 — From the proposals page (site/src/pages/proposals.mdx), each to get its own VIP: Durable execution , Compile-time evaluation (comptime) , Build-time host selection , Validators derived from types , Typed asset imports , Custom loaders , Rust and Zig source imports , Coding-agent library , Typed workers , Shared structs , Declarations in conditionals , Toolchain commands , Bundler plugins , Mandatory compiler options , TC39 adopt-early list open 2026-10-29