Skip to content
LogoLogo

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.

VIPTitleStatus
1effect and async functionsaccepted 2026-10-28
2effect { } blocks, and do { } as TC39 defines itaccepted 2026-10-28
3A!E!R is an alias for Effect<A, E, R>accepted 2026-10-28
4throw, and calls that may throwaccepted 2026-10-28
5try runs an Effect; await is only for Promisesaccepted 2026-10-28
6Effect's functions are globalsaccepted 2026-10-28
7match is TC39 pattern matching, plus a compile-time exhaustiveness checkaccepted 2026-10-28
9service declarationsaccepted 2026-10-28
12provide blocksaccepted 2026-10-28
13error declarationsaccepted 2026-10-28
14Effect's modules are in scope without an importaccepted 2026-10-28
15schema declarationsaccepted 2026-10-28
16data declarations (tagged unions)accepted 2026-10-28
17fork and joinaccepted 2026-10-28
18Running Effects concurrently: try.all, try.race, try.any, try.allSettledaccepted 2026-10-28
19for concurrentaccepted 2026-10-28
20Iterating a Stream with for tryaccepted 2026-10-28
21Producers: effect function* returns a Streamaccepted 2026-10-28
22Interruption blocksaccepted 2026-10-28
23The pipe operator |>accepted 2026-10-28
26Top-level await, and no magic mainaccepted 2026-10-29
27Declaration output and @throwsaccepted 2026-10-29
28Generic data unionsaccepted 2026-10-29
29Serializable errors: schema erroraccepted 2026-10-29
30Config files: vibe.config.json, tsconfig.json, jsconfig.jsonaccepted 2026-10-29
31Runtime guaranteesaccepted 2026-10-29
32One pinned Effect version during alphaaccepted 2026-10-29
33The platform standard libraryaccepted 2026-10-29
34Compiler and tooling requirementsaccepted 2026-10-29
38Effect's type-aware lint is built into VibeLangaccepted 2026-10-29
39.vibex: VibeLang with JSXaccepted 2026-10-31
40module declarations: TypeScript inside a .vibe fileaccepted 2026-11-03
41TC39 throw expressionsaccepted 2026-11-02

Denied

VIPTitleStatus
8Special syntax for Effect resources (using, a scoped keyword)denied 2026-10-28
10The Users.find(id) shorthanddenied 2026-10-28
11Trailing blocksdenied 2026-10-28
24wire, automatic layer compositiondenied 2026-10-28

Superseded

VIPTitleStatus
25Inline module declarations as a TypeScript escapesuperseded by accepted VIP-40, 2026-11-03; denial is historical

Open

Listed for a future decision; not part of the language.

VIPTitleStatus
35Effect handlers (control, handle, resume, abandon)open 2026-10-29
36The declaration manifestopen 2026-10-29
37Effectify the universeopen 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 listopen 2026-10-29