What Elixir related stuff are you doing?

Building a multi agent orchestration framework

1 Like

No longer a wrapper, had been working on Elixir implementation on the side and decided to paste those instead.

Going to continue working with it through the year, battle test most of the algorithms with real-world graphs and networks. Perhaps might also experiment with Rustler.

(Very WIP) Here’s a fun little Kino Smart Cell: GitHub - code-shoily/kino_yog: Kino smart-cells to work with Yog graphs in LiveBook · GitHub

https://github.com/yoavgeva/ferricstore
Building distributed, crash-safe key-value store

Hi all,

I’ve been working on something a bit unusual and wanted to get some perspective from people who actually build things on the BEAM.

Short version: I built a small language called Vor that compiles to gen_server/gen_statem. You declare states, message protocols, and safety invariants, and the compiler verifies the invariants against your actual handlers before producing BEAM bytecode. At runtime it’s just normal OTP.

The problem I’m interested in (I come from telecom/distributed systems) is state machine bugs that don’t crash — missing handlers, illegal transitions, two GenServers that disagree on the message format. Tests catch some of it, but the combinatorial explosion of states and message sequences makes it hard to be confident. I wanted the compiler to check those properties exhaustively instead of hoping my tests covered every path.

So far it can prove safety invariants at compile time (“never emit grant when lock is held”), monitor liveness with declared recovery (“lock must release within 5s or auto-recover”), and check that connected agents agree on their message protocols. There’s Gleam interop where the compiler validates extern types against package-interface.json. Some working examples include Raft consensus and a few CRDT types.

It’s meant to complement Elixir and Gleam - Vor handles the coordination layer, Elixir/Gleam handles data processing via extern calls.

Honestly curious if others have run into similar state machine correctness problems and what approaches you’ve found work.

github.com/vorlang/vor
vorlang.org

Cheers,
James

1 Like

Hi again :waving_hand:

I co-founded a tiny software company called Moss Piglet, just me on the dev side, and it’s focused on making privacy-first web apps in Elixir and Phoenix Live View.

I’ve shared on here a bit about our social network with private journal and Bluesky interop, Mosslet — and now we just released our latest product/service called Metamorphic — which is a zero-knowledge, privacy-first habit tracker.

The zero-knowledge bit was inspired by our asynchronous encryption architecture from Mosslet that used the :enacl library, we spun that similar password-derived public-key cryptography logic into the browser with JS to enable zero-knowledge direct messaging in Mosslet (after Meta announced removing their E2EE), and then I was inspired to utilize that same zero-knowledge browser logic into an entire app flow.

I feel habit-tracking and goal-setting is deeply personal, and a simple, privacy-first approach makes sense to protect people’s personal data and mindset. Both of the projects are SaaS with Mosslet having a one-time payment option for life and Metamorphic having a free tier (if you don’t want to do a subscription).

And for being here and part of the community, you can use ELIXIRFORUM20 to get 20% off either service forever. Hope they’re helpful to someone. :blush:

Other things I worked on:

1 Like

Been a fun few weeks and got the last of my Localize updates out this morning. A lot of work over the last year has come together in a bit of a torrent but it’s been amazing fun. And despite all the quirks, I’m finding working with LLMs is increasing my joy factor. And productivity too. I might have even got myself up to around 0.6 José (where a José is a unit of productivity). Yeah, just made that up - not enough coffee yet.

After 8 years I still find Elixir such a joy to work in, the community a great place to be part of and writing software very fulfilling - especially when people actually use it!

What I’ve published recently:

New and updated libraries

  • Updated Astro to do moonrise/set so I could implement Islamic and Hebrew calendars
  • Finally finished up Color which I badly wanted to do forever. And needed to do to have any chance of getting Image to 1.0 release (nearly there).
  • Launched a bunch of Localize libraries this week and probably got a lot of “groan, not another post” vibes from the community
  • Calendrical which is a set of 17 calendars and custom calendar toolkit.
  • Unity which is a Unix units clone

New web sites

For the first time in years I’ve written actual apps and am running them for public consumption:

  • Elixir Color which is a color palette generator and gamut visualizer
  • Localize Playground which is a place to experiment with some of the capabilities of Localize and CLDR.

What’s next

  • Updates to ex_money and digital_token will be out early next week
  • Get syntax highlighting launched for MF2 messages in various text editors. The coding is done (tree-sitter parser, editor extensions) but it’s a new testing environment for me to navigate and lots to learn. Collaborators very welcome.
  • Open a PR to Gettext to make message storage and retrieval pluggable. I want to build a translation workbench where product managers, developers and translators can collaborate on localising/translating messages and have that tightly integrated into code.
  • Fix a few issues in ex_cldr and friends (thanks for your patience)
  • Spend more time writing at Elixir Localize
  • Sleep.
7 Likes

Working on Norns, a durable execution runtime for AI agents built on OTP.

The basic problem is that agents are fragile. They crash, network calls fail, model providers go down, and most of the time that means you lose the run and start over. Norns keeps enough state around to resume after failure instead of throwing the whole thing away.

Right now it’s basically one GenServer per agent, supervised with DynamicSupervisor, with the run persisted as an event log in Postgres. Python and Elixir SDKs talk to it over WebSocket.

Still pretty early, but the core loop is there. You can kill -9 the runtime mid-run and it’ll pick back up on restart.

metastatic is a MetaAST library aiming to build a MetaAST on top of per-language ASTs, blog
Cure language is now Elixir-based, utilizing MetaAST as it’s native AST, site, blog, makeup_cure
marcli is a Markdown formatter for CLI, blog
yeesh is a LiveView wrapper for xterm.js, blog

I have been using what I call my admin in various forms and programming languages since 2008, it helps me manage my day-to-day business, invoicing, customers, nowadays Peppol, you know what I mean.

Recently I took a stab at a new version, using Ash and made it multi-tenant, multi-lingual, thank you @kip for the timely release of Localize. You can find it at https://multiadmin.octarion.eu.

Then I had a long conversation with Claude Code that led to a Nerves version for the OpenWRT One, nerves_system_openwrt_one | Hex . It is not complete, but please try it if you have the device.

3 Likes

Kino Vizjs - a VizJS based GraphViz rendering system for LiveBook.

1 Like

Been doing lots of work on infrastructure to support MF2 messages - focused on syntax highlighting and syntax aware editing for now.

  • Published my first ever nom package, tree-sitter-mf2 which is a tree sitter parser for Unicode Message Format 2 messages. These are supported in Localize but editing in a browser needed something more. Its fully conferment to the MF2 standard, parses all the conformance tests and includes all the editor bindings.

  • Built mf2_wasm_editor which is an in-browser, wasm-based editor for MF2 messages that uses the tree-sitter-mf2 parser. You can see an example running on the updated Localize Playground. Not ready yet to publish as a separate npm package. But it might be useful to someone else. I have taken more care than usual to document how to wire it up, how to use themes and so on.

  • Built an Elixir NIF-based tree-sitter parser for MF2 as well. I thought that might be enough to support an editor in liveview but it was too slow. Might still be useful to someone.

  • Working now on editor extensions for Zed, NeoVIM and others. Apart from syntax-aware editing of .mf2 files, the idea is for the extensions to recognise Elixir ~M sigils and invoke the MF2 extension on them so you can edit messages within Elixir text with auto-completion and syntax highlighting. I think that’s going to be cool.

1 Like