Mave Core, our self-hostable video platform
Hi everyone. I’m pretty anxious about this, but for years I felt we should have been an open source product, but for reasons it didn’t happen. After a lot of talking, research and changing our code, today we’re releasing our core under AGPL-3.0-or-later.
https://github.com/maveio/core
We build video infrastructure for websites, already used by a lot of European organisations as hosted version. It includes the dashboard, video encoding pipeline, embeddable player, analytics, API, and self-hosting setup. The SaaS-specific parts, such as billing and payment processing for our managed service, aren’t included. You can run Core with Docker Compose and connect your own S3-compatible storage.
We’re doing this because we believe open source is essential to digital sovereignty. That’s a big topic here in Europe, but for us it comes down to something practical: organizations should be able to inspect, modify, and keep running the software they depend on, even if the company behind it changes direction or disappears. And potentially there are organisations outside of Europe that might be interested in this.
Mostly built with Elixir (Phoenix and Oban do the heavy lifting, they rock 🤘). This is a big step for us, and we have plenty to learn about maintaining a project in the open. Any feedback, tips/advice or questions are welcome!
Hologram v0.12: Faster Compiles, Smaller Bundles, and More
A 9,000-module app that v0.11.1 couldn’t build at all now compiles, and mix compile with nothing changed on it takes about a second, down from 107. Struct code now loads when a struct of that type reaches the browser, which took that app’s runtime bundle from 5.6 MB to 660 KB, 133 KB gzipped in production. Plus prop validation, props readable in actions, and actions that run in the order they were dispatched. https://hologram.page/blog/hologram-v0-12
Supervisors by Hand
This article guides you through writing your own supervisor by hand. Using 4 primitives (send/receive/spawn/monitor) the reader builds up to a simple supervisor. The article contains interactive BEAM shells using AtomVM to try the code out in the browser. https://genserver.be/blog/articles/supervisors_by_hand.html
How I Keep Two Servers in Sync Without a Message Broker
Two BEAM nodes, one rate limit, one set of OAuth tokens: moving the singletons to :global, letting Oban use Postgres as the queue, and the costs that came with skipping Redis.
Code BEAM Europe in 2 weeks: José Valim on set-theoretic types, LiveView hooks at scale, Rustler 1.0
Code BEAM Europe is two weeks away (21-22 October, Haarlem and online), and the programme is final.
Keynotes: José Valim builds Elixir’s set-theoretic types from scratch, with an extended Q&A. Brooklyn Zelenka on a local-first future, and Sam Aaron runs the Phone Orchestra.
For Elixir developers:
- Taming LiveView’s JavaScript hooks at scale (Matt Swensen, Jump)
- Four years of distributed Elixir at NetzeBW (Aaron Cruz)
- Safe interop with Ports and C Nodes (Riccardo Binetti, Remote)
- Rustler news and road to 1.0 (Benedikt Reinartz)
- Designing hardware in Elixir (Lucas Sifoni)
Plus a community-run Informal Space with demos, clinics and a whole-room game of Raft.
PHIL Haarlem is 15 min by train from Amsterdam. The online ticket is €146 + VAT with recordings.
Programme and tickets: https://codebeameurope.com
Code BEAM Europe in 2 weeks: José Valim on set-theoretic types, LiveView hooks at scale, Rustler 1.0
Code BEAM Europe is two weeks away (21-22 October, Haarlem and online), and the programme is final.
Keynotes: José Valim builds Elixir’s set-theoretic types from scratch, with an extended Q&A. Brooklyn Zelenka on a local-first future, and Sam Aaron runs the Phone Orchestra.
For Elixir developers:
- Taming LiveView’s JavaScript hooks at scale (Matt Swensen, Jump)
- Four years of distributed Elixir at NetzeBW (Aaron Cruz)
- Safe interop with Ports and C Nodes (Riccardo Binetti, Remote)
- Rustler news and road to 1.0 (Benedikt Reinartz)
- Designing hardware in Elixir (Lucas Sifoni)
Plus a community-run Informal Space with demos, clinics and a whole-room game of Raft.
PHIL Haarlem is 15 min by train from Amsterdam. The online ticket is €146 + VAT with recordings.
Programme and tickets: https://codebeameurope.com
A Simple Log Collector for Elixir
A Simple Log Collector for Elixir
I’ve just released a small log collection stack for Elixir applications.
The idea is simple: store application logs in ClickHouse and provide a lightweight dashboard to search and inspect them.
The collector is built with clickhouse_ex_logger, which sends Elixir logs directly to ClickHouse. The dashboard is available in logger_dashboard.
It’s designed for developers who want something simpler than a full observability stack when they mainly need to collect, search, filter, and inspect application logs.
- ⚡ ClickHouse for fast log storage and queries
- 💧 Native Elixir logger integration
- 🔎 Search and filter logs from a web dashboard
- 🐘 Suitable for high-volume logs
- 🧩 Simple to deploy and integrate into existing Phoenix/Elixir projects
Still early, but I’m using it as a lightweight alternative for my own Elixir services and will continue improving it.
Packages & source:
Admit when you’re wrong
DHH’s Campfire benchmarks should make us reconsider some of our assumptions about Elixir. Saying the agents wrote bad Elixir may be fair, but the time and expertise needed to correct them also matter when choosing a stack.
I wrote about the community’s response, the improvements people are contributing, and why I want us to improve agent tooling while staying open to choosing another language.
Reusing microVM state with SmolBox: exports, checkpoints or branches?
Your microVM has the files, tools and data it needs. How much of that work should the next machine repeat?
This practical Elixir guide compares three ways to reuse prepared state with SmolBox. Learn what each preserves, when to choose it, and what needs cleanup, with real Linux measurements, interactive diagrams and a runnable example.
Sometimes the best choice is another command on the machine you already have.
https://hfiguera.github.io/smolbox/blog/exports-checkpoints-or-branches/
SeedFactory v0.10.0 Released
Traits can now take values, so you can request produce(ctx, user: [:active, age: 18]) to create an active user with a specific age. Declare where the value goes with args_pattern: %{age: _} – SeedFactory passes it to the command and tracks the resulting trait.
Crowdfunding campaign for Aether Summon
Hi, I’m about to start a gamefound campaign for funding the open source release, under AGPL-v3, of Aether Summon, a TCG I’ve been writing, mostly elixir, as a passion project for about 8 years now. https://gamefound.com/en/projects/aether-summon/aether-summon
It was (at the time called Aether Wars) the reason why I moved to elixir from RoR when solving some issues I had and functionality I wanted to implement. It still went through in total some 5 versions. There’s a 40min video introducing the game, code and repository and the campaign page itself has a lot of info too. It runs locally with docker compose setting up a local cluster and has a production deployment with terraform for AWS, to create an auto-scaling cluster with all the bells and whistles (based in engineering-elixir-applications ebook but with several improvements, including for the logging stack that at time of release of the book was already outdated). If you like the idea and want to support it share it and perhaps back it once the campaign opens. If the campaign succeeds I’m planning on turning it into a community driven project and I think it could be an excellent showcase of elixir/otp.
I’m also planning during this next month to release blog posts, add info to the campaign and put the game online once again as I’ve found some cheap VPS that I can actually afford
OmniBankingEx — One Kernel. Many rails. Multi-provider banking integrations in Elixir
A multi-provider banking integration lab built on the Support and Kernel architecture: an immutable Kernel, a shared Support layer, and shared-nothing plugins.
The proof: the same Kernel.Plugin contract (init/1 + call/2) serves five providers with radically different auth mechanisms and domain models — with zero breaking changes to the Kernel across every phase.
Providers integrated:
Provider Domain Auth Pismo Issuer-processing (BR) OAuth2 Client Credentials Pomelo Card-issuing (LatAm) OAuth2 Client Credentials Asaas Payment institution (BR) Static API Key Pluggy Open Finance (BR) API Key via POST /auth bunq Neobank (EU) RSA handshake Architectural rules, enforced at build time:
Plugins never import plugins — not siblings, not other providers. Cross-domain data travels through the context.
Plugins depend only on Kernel + Support.
mix plugins.check and a phased compiler fail the build on violation.
Five providers. Five auth mechanisms. Two opposite money-flow models (money-out vs. money-in). One Kernel.
Build a persistent workspace with Phoenix and SmolBox
Create a workspace, edit files through a browser terminal, and return to the same machine after restarting Phoenix. This hands-on guide includes a runnable LiveView app, Elixir examples, and a short demo. Learn what persists, how recovery works, and when to choose persistent machines over disposable execution.
https://hfiguera.github.io/smolbox/blog/build-a-persistent-workspace/
phoenix_lens
Hello. I’ve just built the project prototype but probably it could useful to someone. I used to use metabase to analyze the data and in one of the projects it was not possible to install it as part of our infra. I created as simple as possible prototype to define Questions + Dashboard, it attaches to the existing phoenix app. Experimentally I added duckdb driver to be able to merge the different sources of the data.
https://github.com/oivoodoo/phoenix_lens
And one more project since couple years I used pghero in Rails, did it for phoenix as well as mountable dashboard.
Background jobs with Oban, part 1: stop blocking your LiveView
A new screencast on moving a blocking HTTP fetch into an Oban job. Part 1 of 2. Screencast + full walkthrough:
Debugging a False-Positive Hex Advisory in an Elixir CI Pipeline
https://abulasar.com/debugging-false-positive-hex-advisory-elixir-ci
Learn how a false-positive Hex advisory stopped an Elixir CI pipeline, why the audit failed safely, and how to investigate and remove a temporary exception.
protox 2.1.0
This release is mostly about performance. Compared with protox 2.0.10:
| Operation | CPU time | Reductions | Memory |
|---|---|---|---|
| Encode | - 9.2% | - 37.0% | - 40.6% |
| Decode | - 30.8% | - 59.3% | - 32.8% |
Compared with protobuf 0.17:
| Operation | CPU time | Reductions | Memory |
|---|---|---|---|
| Encode | - 60.0% | - 73.0% | - 29.1% |
| Decode | - 22.8% | - 56.4% | + 56.9% |
So, in these benchmarks, protox uses less CPU time and fewer reductions for both encoding and decoding, and less memory except when decoding. I’m still investigating this difference on memory allocation, but it seems it’s a tradeoff for faster decoding.
The benchmark suite uses a mix of synthetic messages based on the field distribution used by Google’s protobuf benchmarks, along with real-world schemas from OpenTelemetry and Prometheus.
As usual with benchmarks, your mileage may vary :-).
⚠️ One compatibility note: the generator version has changed in 2.1.0, so code generated with previous versions of protox needs to be regenerated.
Full changelog: https://protox.hexdocs.pm/changelog.html#2-1-0
SmolBox: reuse prepared state in disposable VMs
Each job needs its own disposable VM. Does it also need to rebuild the same data?
SmolBox 0.1.5 adds execution from approved idle, offline checkpoints on Linux and macOS. This article compares rebuilding a summary table, loading it from a prepared image, and restoring it already in RAM. Includes Elixir code, measured results, and when a prepared image is enough.
https://hfiguera.github.io/smolbox/blog/prepare-once-run-in-a-fresh-vm/
The Schedule is up w/José Valim | Code BEAM Europe 2026
The Schedule is up and José Valim is joining us with his keynote: Set-Theoretic Types from Scratch + Extended Q&A!
Two days, two tracks, Haarlem and online, 21-22 October 2026. Training day: 20 October.
Keynotes
- Sam Aaron: Notes on the Synthesis of Time, The Phone Orchestra
- José Valim: Set-Theoretic Types from Scratch + Extended Q&A
- Brooklyn Zelenka: Let It Disconnect: A Local-First Future
Speakers
- Aaron Cruz: ClusterFu**tional: Four Years of Distributed Elixir at NetzeBW
- Alejandro Ramallo: Saying What: A New Declarative Language for the BEAM
- Benedikt Reinartz: Rustler News and Road to 1.0
- Björn Gustavsson: Native Records, Update from the OTP Team
- Brujo Benavides: Idiomatic Erlang: Tips for Erlang Beginners
- Cara Superlativo: Exploring Audio, Music, and Erlang
- Chris Beck: ATProto on Elixir: A Spike into AppView’s DataPlane
- Dan Janowski: The Erlang Ecosystem Frontier: Our Work Ahead
- Davide Bettio: Updates from the AtomVM Landscape
- Ellyse Cedeno: Exploring Audio, Music, and Erlang
- Erik Stenman: Structuring Erlang Code with Application-Level Visibility
- Giacomo Cavalieri: Zero to Embedded with Gleam and AtomVM
- Guillaume Heu: Asterism: An OTP Visualizer in Gleam
- Hayleigh Thompson: Ditch Your API with Lustre Server Components and the Store Pattern
- Iryna Kostiuk: When AI Writes the Code, What Matters More: Language or Runtime?
- Jonatan Männchen: Don’t get pwned by AI Attacks
- Kamila Pokój: Reverse Engineering Marketing for Devs
- Kero van Gelder: Understanding Supervision: Killing Your Actors
- Louis Pilfold: Gleam Language Update
- Lucas Sifoni: From Pure Code to Physical Controls: Designing Hardware in Elixir
- Lukas Backström: Exploring Doctests in Erlang
- Matt Swensen: Hooked on Performance: Taming LiveView’s JavaScript Hooks at Scale
- Mauricio Cassola: TUIs Everywhere
- Peter Ullrich: Don’t get pwned by AI Attacks
- Raimo Niskanen: Do the List Shuffle
- Rebecca Reusch: Building Big Lustre Apps
- Riccardo Binetti: Don’t Crash the BEAM: Safe Interop with Ports and C Nodes
- Robert Fiko: Same Runtime, Different Language: Adapting SAFE for Gleam
- Roberto Aloi: Still Typing Erlang? Developer Experience in the Prompt Era
- Spoorthy Sridhara: Self-Healing Systems and When They Fail
- Tobias Pfeiffer: Stories in Open Source
- Travis Fantina: Ruby Crimes in Elixir Codebases
Tutorials, 20 October, 09:00 to 17:00 CEST
- Match the BEA(M)T: Real-Time Generative Music with Elixir: Luca Dei Zotti
- Gnome Village: Understanding the BEAM Through Processes, Flows, and Runtime Behaviour: Erik Stenman, Måns af Klercker
- Building Production AI Harnesses in Elixir: Chris Beck
Join us in Haarlem or online, 21-22 October, to hear José and many others: codebeameurope.com/#register
Hologram: Building Local-First Apps in Pure Elixir (ElixirConf US 2026 talk)
The recording of the talk I gave at ElixirConf US 2026 a few days ago is already live. It shows the local-first data layer I built for Hologram, starting with a trip planner that keeps working offline and syncs between browsers, then how it works. The data layer isn’t released yet, it’s still on a branch, but the demo app’s code is public on GitHub as bartblast/hologram_offgrid. Watch it here: https://www.youtube.com/watch?v=jdg_UrLp0bU
