Elixir → JavaScript Porting Initiative
TL;DR: We need help completing Elixir's client runtime. No deep knowledge of internals required - just follow existing patterns. Tasks range from 15 minutes to a few hours. AI tools encouraged.
The Mission
Hologram automatically transpiles Elixir to JavaScript for browser execution, but here's the thing: many Elixir standard library functions depend on underlying Erlang functions that must be manually ported to JavaScript.
We're focusing on Phase 1: full-stack web and basic local-first applications. Functions for processes, file system, and OS operations are deferred to later phases. Right now, we need to port the remaining Erlang functions that power — state management, data transformation, strings, collections, dates, and times.
The good news? For Phase 1, we're already 34% done with Erlang functions (92 ported), and the Elixir stdlib is at 74% completion.
The challenge? We have 171 Erlang functions waiting to be ported to complete Phase 1.
The opportunity? Each function you port unlocks multiple Elixir stdlib functions. Your contribution has a multiplier effect that benefits the entire Elixir community.
I Need Your Help
I'm Bart Blast, Hologram's creator. This project is bigger than one person, and I'm rallying the community because every contribution matters.
Whether you port one function or twenty, you're contributing to something meaningful. You're helping build a future where Elixir is as powerful in the browser as it is on the server.
Can't contribute right now? Share this post in your network. Help us reach developers who might be looking for exactly this kind of opportunity. Tweet it, post it in Slack/Discord, mention it at meetups.
"But I Don't Know Erlang!" (You Really Don't Need To)
This is the most common concern, and here's the reality: you don't need Erlang knowledge. You just need basic JavaScript and Elixir skills, the ability to read documentation, and a willingness to follow patterns from already-ported functions.
The Contributing Guide includes detailed examples showing exactly how to structure functions, handle boxed types, write tests, and validate inputs. You're never starting from scratch — just following established patterns.
AI Is Your Secret Weapon
Let's be practical: this is an excellent use case for AI tools.
LLMs are surprisingly effective at:
- Translating Erlang logic to JavaScript
- Understanding what Erlang documentation means
- Generating comprehensive test cases
- Spotting edge cases you might overlook
Think of AI as your pair programming partner. Use it to understand the function, generate an initial implementation, and create test cases — then verify everything against actual OTP behavior and Hologram conventions.
What You'll Gain
Beyond the satisfaction of contributing to open source:
- Insight into Elixir's internals - see how stdlib functions rely on Erlang under the hood
- Understanding of transpilation — learn how BEAM languages translate to JavaScript
- Practice with open source workflows — forking, branching, PRs, code review
- Experience reading specs and understanding function behavior from documentation
- Your name in the commit history of a project helping developers worldwide
Oh, and bragging rights. You're literally enabling Elixir in the browser - that's pretty cool ;)
Getting Started
Ready to contribute? Here's how:
- Read the Contributing Guide - Complete step-by-step instructions with code examples, gotchas to avoid, and helpful resources
- Pick a function from the Erlang Functions Reference - Look for todo badges
- Claim it by creating a GitHub issue - This prevents duplicate work
- Port the function following the patterns in the Contributing Guide
- Submit your PR to the Hologram repository
Helpful resources: Check the Client Runtime Reference to see porting status across all modules. Join the Hologram Forum discussion to ask questions and share your progress.
Start with something small to get comfortable, then tackle bigger functions as you get the hang of it.
Let's Build This Together
171 functions. Some take 15 minutes. Some take a few hours. But each one brings us closer to comprehensive Elixir stdlib coverage in the browser.
Let's tackle the rest of this Erlang porting together. There are tasks of all sizes waiting — find the one that fits your schedule.
Share this initiative and help us reach more contributors!
- Bart