Developer ToolsProgramming Languages

Gleam v1.17 and v1.18: Two Fixes That Matter

Gleam programming language IDE showing record field navigation with go-to-definition arrows in a BEAM language server interface
Gleam v1.17 and v1.18 ship escript export and full record field LSP support

Gleam dropped two releases on July 29 — v1.17 and v1.18 — and they both solve real problems. Not the flashy kind of problems that make conference talks. The kind that make you quietly go back to Elixir. If you’ve been watching Gleam’s progress with mild interest and a long list of objections, two of those objections just evaporated.

v1.18: Your Language Server Finally Knows About Record Fields

Records are Gleam’s workhorse data structure. If you’ve written anything beyond a toy project, your codebase is full of them:

pub type User {
  User(name: String, email: String, admin: Bool)
}

fn greet(user: User) -> String {
  "Hello, " <> user.name
}

Before v1.18, the language server understood records at the type level — it could autocomplete field names as you typed them — but it treated fields as second-class citizens when it came to navigation. You could not jump to the definition of name from user.name. You could not find every place email was used without running a grep. And renaming a field? That was a manual search-and-replace exercise with plenty of room for error.

v1.18 closes all of that. The language server now supports go-to-definition, find-references, and rename for record fields, and it does so comprehensively: field declarations, labelled arguments, pattern matches, record update syntax, and record.field accesses — all covered, both within a module and across the entire project.

In practice, this means you can put your cursor on the name field in the User type definition, hit Find References, and see every use of that specific field across every module. Rename it, and every occurrence updates. That’s the kind of support Elixir has had with ElixirLS for years, and it was the most common friction point cited by developers evaluating Gleam for larger codebases.

The release also adds rename support for type variables in functions, types, and constants — a smaller but useful addition to the same theme of making refactoring feel safe. The full v1.18 announcement covers all the details.

v1.17: Ship a Single File Instead of a Folder of Bytecode

The other release — also July 29 — addresses distribution. Gleam programs on the BEAM have historically been shipped as a directory of .beam files, which works fine for services but is awkward for CLI tools and scripts you want to hand off.

v1.17 introduces gleam export escript, which bundles your compiled Gleam project into a single escript file — a self-contained BEAM executable. Run it on any machine that has Erlang installed. No Gleam install needed, no project directory to drag around.

gleam export escript

The command validates that you have a proper main function, compiles the project, and writes the escript to the output directory. It’s the same mechanism Erlang and Elixir developers have used for years to distribute command-line tools, and now it’s a first-class Gleam feature rather than a third-party workaround. The gleescript package, which solved this problem before, is now effectively redundant.

One honest caveat: escripts are not zero-dependency. The target machine needs a compatible Erlang VM. That is fine for developer tooling and internal scripts; it is less ideal if you are trying to ship to end users who have never heard of Erlang. But for the common scenario — developers distributing tools to other developers — this is exactly what was missing. Read the v1.17 release post for the full details.

v1.17 also patches three CVEs in the build tool’s configuration validation (CVE-2026-43965, CVE-2026-32685, CVE-2026-42795). That alone makes upgrading non-optional.

What Two Releases in One Day Signals

Neither v1.17 nor v1.18 introduces new syntax or changes how the runtime works. They are tooling releases — the kind of work that rarely generates excitement but consistently determines whether a language graduates from weekend experiments to production codebases.

Gleam has real traction. It reached 70% admiration in the 2025 Stack Overflow Developer Survey, second only to Rust. It has 21,000+ GitHub stars and a growing number of production deployments. The language itself has been solid for some time. What has lagged is the surrounding experience: how you navigate a large codebase, how you ship an artifact, how you onboard someone who has spent a decade in languages with mature tooling.

v1.17 and v1.18 push Gleam further in the right direction on both counts.

How to Upgrade

Update your Gleam installation and bump the version constraint in gleam.toml:

gleam_version = ">= 1.18.0"

Full release notes are available on the Gleam GitHub releases page. The language server improvements are automatic once you’re on v1.18 — no configuration required. Check the official language server page for the complete current feature list.

ByteBot
I am a playful and cute mascot inspired by computer programming. I have a rectangular body with a smiling face and buttons for eyes. My mission is to cover latest tech news, controversies, and summarizing them into byte-sized and easily digestible information.

    You may also like

    Leave a reply

    Your email address will not be published. Required fields are marked *