Gleam v1.18.0 Brings Field-Level Code Navigation and JavaScript Performance Gain

Gleam v1.18.0 was released on July 29, 2026, delivering significant upgrades to its language server and a JavaScript compiler optimization, as announced in the official release post (gleam.run). The release had been preceded by a v1.18.0-rc1 candidate for testing.
The headline changes land in Gleam's language server, the tool that powers features like auto-complete, error highlighting, and code navigation inside editors such as VS Code. It now supports go-to-definition, find-references, and rename operations for record fields. Record fields are the named components of a data structure — think of them as the columns in a row of a spreadsheet, each with a label and a value. Being able to jump to where a field is defined, find every place it is used, and rename it across an entire codebase has long been standard in mature languages like TypeScript or Rust. Gleam was missing this, and its absence was a real friction point for developers working in larger projects.
Type variable renaming has also been added, covering functions, types, and constants. Type variables are placeholders for types that get filled in later — similar to how a template might leave blanks that different values can be slotted into. A developer can now rename a type parameter in a function signature and have the change propagate across all references within the relevant scope. This is the kind of improvement that goes unnoticed once it exists but is felt acutely in its absence, particularly in codebases that make heavy use of generic types.
The language server gained two further features. First, renaming a module file now automatically updates import statements across all modules that depend on it, removing a class of mechanical edits that are both tedious and error-prone. Second, a "pattern match on value" code action can be triggered on function calls and their returned values, generating a skeleton case expression against the expected result type. Pattern matching — Gleam's primary way of branching logic based on the shape of data — is central to how the language works, so having the editor draft the structure for you reduces repetitive boilerplate.
On the compiler side, the JavaScript backend received an optimization around data singletons. When every instance of a particular data structure is equivalent — meaning they all hold the same values — the compiler now reuses a single copy instead of creating a new one each time the code runs. This reduces memory allocation pressure in the generated JavaScript, which matters for Gleam code running in browsers or Node.js, where frequent garbage collection pauses can make applications feel sluggish. The optimization is conceptually straightforward, but the compiler must prove that all instances are truly equivalent at compile time before it can safely skip creating new ones.
Gleam occupies a specific niche: a statically typed, functional language that compiles to both Erlang/BEAM and JavaScript. The BEAM target — Erlang's runtime system — gives developers Erlang's well-regarded concurrency model for handling many simultaneous processes. The JavaScript target extends Gleam's reach to environments like web browsers and Node.js, where running a BEAM runtime would be impractical. The v1.18.0 changes touch both sides: the language server improvements deepen the developer experience around the type system's constructs, while the JS optimization improves the quality of one compilation target's output.
Looking at what this means for Gleam's adoption trajectory, the language server work is the more consequential set of changes. Developer experience in the editor is a primary driver of whether a language gains traction, and the absence of field-level navigation and rename support has been a concrete limitation for teams evaluating Gleam against more established typed functional languages. The "pattern match on value" code action fits Gleam particularly well, since pattern matching is the dominant control-flow construct in the language, not a niche feature. The JS singleton optimization is a meaningful but incremental improvement; it will show up in profiling traces and benchmark suites more than in everyday developer workflow.
The release follows a steady cadence of versioned improvements to Gleam's tooling, with each release narrowing the gap between the language's type-system ambitions and the practical experience of working with it day to day. Whether that narrowing translates into broader adoption depends on factors well beyond any single release, but v1.18.0 removes friction in the places developers spend the most time: the editor and the generated output.


