Static types are the reason to choose Gleam
Gleam compiles one small functional language to Erlang or JavaScript. The Erlang target gives programs access to the BEAM virtual machine, OTP libraries, lightweight processes, and the operational model behind Erlang and Elixir systems. The JavaScript target lets the same language reach browsers and JavaScript runtimes. Gleam adds algebraic data types, exhaustive pattern matching, inferred types, and compiler diagnostics intended for application developers rather than language researchers.
That combination is specific enough to drive a decision. An Elixir team gains static checking without leaving the Erlang VM, while a TypeScript team gets a functional language that can share code across server and browser targets. The repository we inspected had 5,282 files and roughly 242,386 lines of source, so this is a full compiler and toolchain, not a thin transpiler. It includes a compiler, build tool, package manager integration, formatter, documentation generator, and language server work.
Erlang interoperability is useful, but migration still costs
Gleam can call Erlang and Elixir code through its foreign-function interface, which changes the adoption calculation. A team does not need Gleam-native replacements for every database driver or OTP component before writing its first service. JavaScript projects have a comparable escape hatch for code on that target. The type checker cannot make foreign code safe by itself, though. Boundary declarations must match what the called function returns, and mistakes surface at runtime.
The language's smaller package market remains the practical tradeoff. Gleam packages use the Hex ecosystem, and existing BEAM libraries fill many gaps, but their APIs may feel less natural than libraries designed around Gleam types. Version 1.18.1 was the latest GitHub release we fetched, published on 2026-08-01. Teams should check the exact packages needed for authentication, databases, observability, and deployment before treating interoperability as a complete migration plan.
The language stays deliberately small
Gleam avoids several features developers may expect from larger languages. Its value comes partly from what is absent: less metaprogramming, fewer ways to express the same control flow, and compiler-enforced handling of data variants. That can make review easier and error messages more useful. It can also frustrate developers who rely on macros, inheritance, exceptions as normal control flow, or runtime reflection. This is a design choice, not a missing checkbox.
The two compilation targets also impose discipline. A package can target Erlang, JavaScript, or both, and foreign code can tie it to one side. Cross-target libraries need to stay within the shared language surface or maintain separate implementations. Gleam's promise is portable source, not identical runtime behavior across 2 ecosystems. Teams planning shared browser and server code should verify each dependency's supported targets instead of assuming every Hex package works everywhere.
What happened when we ran it
Our install completed in 33 seconds and pulled 493 Rust packages. Building the compiler then succeeded in 235 seconds inside an unprivileged container with 3 CPUs and 12 GB of RAM. The checkout at commit 0de3c7a occupied 11.3 MB and contained about 242,386 source lines. Those figures describe compiler development from source, not the simpler experience of installing a published Gleam binary.
The test step failed after 120 seconds with exit code 101. Cargo reported 12,129 passing tests and 8 failures out of 12,137. The supplied log tail shows several suites completing cleanly, then a result with 4 failures in the test-commands library and the rerun hint -p test-commands --lib. It does not include the failed test names or error messages, so we cannot responsibly assign a cause.
Five CI workflow files and a dedicated tests directory show that maintainers exercise the project through automation. There is no Dockerfile in the repository. A contributor who needs exact parity with upstream CI must therefore follow its workflow configuration or construct a matching environment. The failed sandbox run is a reason to reproduce the command and inspect the full failure output before submitting compiler changes, not evidence that normal Gleam programs cannot run.
Current activity supports adoption better than the README does
The repository was pushed on 2026-08-25, one day before this review, and GitHub reported 21,819 stars. Its open count was 219 issues and pull requests combined. Recently updated work included language-server function labels, module import behavior, compiler warnings, and a JavaScript code-generation bug involving bit arrays. That spread suggests active work across editor support and compiler correctness rather than maintenance limited to dependency updates.
The main README is only 906 bytes and sends readers to the official website for useful documentation. The website is where installation, language syntax, package publishing, JavaScript compilation, and Erlang interoperability are explained. That split is fine for users, but it makes the GitHub landing page a weak guide for a contributor deciding how the repository fits together. The 5 CI workflows provide more concrete development evidence than the README's short pitch.
Choose Gleam for the type system, not novelty
Gleam makes the most sense when a team already values the Erlang VM but wants the compiler to catch missing cases and mismatched data before deployment. It is also appealing for functional full-stack experiments where a JavaScript target matters. The Apache 2.0 license is friendly to commercial use, and current push plus issue activity lowers the risk of adopting an idle language project.
The decision becomes harder for an established Elixir codebase with productive conventions and no type-related pain. Rewriting working services for static types alone rarely pays. Start with a bounded service, check its required Hex packages, and make the team operate it through one release cycle. For compiler contributors, first rerun the 12,137-test suite and resolve whether the 8 failures are environment-specific. That result matters more than the star count.

