Hologram v0.7.0: From 34% to 96% Coverage in 3 Months
#Dev

Hologram v0.7.0: From 34% to 96% Coverage in 3 Months

AI & ML Reporter
4 min read

The porting initiative delivers massive Erlang function coverage, bringing browser-side Elixir capabilities to near-completion with 150 new ports and 700+ commits.

The Hologram team has delivered a major milestone with version 0.7.0, achieving 96% coverage of Phase 1 Erlang functions needed for browser-side Elixir applications. This release represents nearly three months of focused work, with 150 newly ported functions across 19 modules pushing the project from 34% to 96% coverage.

Featured image

The numbers tell the story: 700+ commits, 49 contributors, and a jump from 92 to 228 ported functions. The Elixir standard library readiness has grown from 74% to 87%, meaning the vast majority of functions needed for full-stack web and basic local-first apps now work in the browser.

What Got Ported

The porting work touched critical modules across the Erlang ecosystem:

  • :erlang - 57 functions including core operations
  • :lists - 19 functions for collection manipulation
  • :binary - 13 functions for binary and bitstring operations
  • :sets - 13 functions enabling full MapSet support
  • :math - 5 functions including Float.ceil/1, Float.floor/1, power, logarithm, and exponent
  • :filename - 10 functions for path manipulation
  • :unicode - 5 functions for normalization and grapheme segmentation

Plus 13 other modules contributing essential functionality.

What This Unlocks

With these ports in place, developers can now use previously unavailable functionality client-side:

String processing - String.split/3, String.replace/4, String.length/1, String.jaro_distance/2, and titlecase operations

Collections - Full Enum and List functionality backed by ported :lists functions (sorting, filtering, folding, key-based operations on keyword lists)

Sets - Complete MapSet support via ported :sets functions - create, filter, intersect, union, and membership checking

Binary & bitstring operations - Pattern matching, splitting, replacing, and searching within binaries

Unicode - NFC, NFD, NFKC, and NFKD normalization, plus grapheme cluster segmentation

Math - Float.ceil/1, Float.floor/1, power, logarithm, and exponent functions

Time operations - Monotonic time, system time, time unit conversion, and time offsets

File paths - Path.join/2, Path.basename/1, Path.dirname/1, Path.extname/1 for client-side path manipulation

Performance and Compatibility Improvements

Beyond the porting work, this release includes several key enhancements:

Faster compilation - Compiler mutations are now asynchronous via Agent.cast/2, resulting in measurable compile speed improvement

Cross-platform setup - Added a setup task for Hologram contributors that works on macOS, Linux, and Windows

NixOS compatibility - Automatic fallback to system-installed Biome when the dynamically-linked Biome dependency binary can't run

Enhanced float formatting - :erlang.float_to_binary/2 now supports :decimals, :compact, and :scientific formatting options

Raw HTML blocks - :raw blocks are now emitted from the Parser, enabling more accurate source reconstruction

Bug Fixes That Matter

Several critical issues were resolved in this release:

Quota management - Fixed DOMException: The quota has been exceeded by implementing hybrid storage strategy with OPFS

Map immutability - :maps.remove/2 and :maps.put/3 no longer mutate the original map, preserving Erlang's immutability semantics

Template interpolation - Templates now use the String.Chars protocol for interpolation, matching how Elixir string interpolation works

Pattern matching - Patterns like :top = _position now work correctly in transpiled code

Form events - Fixed form-level change event detection and submit event form data collection

URL parameter encoding - page_path/2 now properly encodes URL parameters, and query params are correctly decoded on navigation

Infrastructure for the Future

Under the hood, this release lays groundwork for upcoming features:

Client-side ERTS - New runtime system class with node table, sequence generators, binary pattern registry, and UTF-8 decoder

Reference type overhaul - Redesigned internal format and serialization of reference terms to better mirror Erlang behavior

ETS infrastructure - Foundational support for ETS, including state preservation when navigating away from the app

Page snapshot improvements - Three-tier storage strategy: in-memory caching for fast access, async OPFS persistence, and session storage as fallback

The Human Side

This release represents the work of 49 contributors, with special recognition for:

  • @mward-sudo (Michael Ward) - Single-handedly ported several modules with complex code
  • @tenkiller (Brett Fincher) - Contributed multiple ports
  • @Sorc96 - Contributed multiple ports
  • @Lucassifoni (Lucas Sifoni) - Contributed multiple ports and fixed map immutability
  • @ideaMarcos (Marcos) - Contributed multiple ports and float formatting options
  • @Petarj123 (Petar Jankovic) - Contributed multiple ports

What's Next

With 96% of Erlang functions needed for client-side web apps already ported, Hologram is steps away from having a reliable and comprehensive Elixir runtime in the browser. The team plans more granular and frequent minor releases as they finish the last few pieces of the puzzle and shift focus to polish and stability.

To upgrade: Update the Hologram dependency in your mix.exs to {:hologram, "~> 0.7.0"} and run mix deps.update hologram

From 34% to 96%: The Porting Initiative Delivers - Hologram v0.7.0 - Hologram

The porting initiative has transformed Hologram from a promising experiment to a production-ready platform for building full-stack Elixir applications that run seamlessly in the browser. With Phase 1 nearing completion, the focus now shifts to refining the developer experience and preparing for the more complex process-related functionality planned for Phase 2.

Comments

Loading comments...