Request for deep dive: Phoenix Presence, a CRDT for mortals

We’re enamored with CRDTs. And also excited that Phoenix includes a CRDT implementation for Presence. We’re pretty sure that future full stack apps will need more CRDTs – everyone has a distributed systems problem. This is true for almost any kind of app that could benefit from offline or collaboration features. Basically, all apps.

The problem is, CRDTs are high concept math and there isn’t much out there connecting that high concept math to practical developer problems. Which is why Phoenix Presence is so cool.

What we’d like is a CRDT deep dive that starts with Presence, goes deep on CRDTs, and tells full stack devs what kinds of problems they can solve once they wrap their head around them.

We have a couple of deep dive blog posts about Docker and Firecracker that are good examples of what we’re after. If you think you can write at that level, understand Phoenix, and can go really deep on CRDTs, post here! Alternatively, you can email editors@fly.io (though we’d prefer you work in the open through our forum).

This is a difficult article. We’re paying $2,500 for it. If you aren’t yet an experienced writer, you should skip this one (we’ll have future options that are a little easier to tackle).

2 Likes

Look forward to this! When I saw a brief mention of the same topic at Requests for articles: full stack Elixir guides and technical deep dives I was tempted to have a crack myself. But it’s beyond my current Elixir/Phoenix level (currently teaching myself and while there’s not much particularly difficult or novel in it, Phoenix does have a fair bit of surface area to get familiar with). Fascinating topic though, and as you say, underserved.

I’m impressed with the standards you are setting for documentation and these tech backgrounder posts.

1 Like

We’re actually looking for content based on other stacks as well! If you want to do a deep dive on something from your preferred runtime you should definitely post about it. We love, love, love theoretical technical topics turned practical.

1 Like

I’ll keep my feelers out for something interesting & tractable in the BEAM/Elixir/Phoenix/LiveView arena. Although I am new to the stack, it has my full attention right now (ie. I’m in a rush to acquire fluency with it!). There’s a lot there I’m keen to explore, and if I can combine some of that exploration with something of interest to you, all the better.

Hey @kurt, did anything ever come of this?

It’s a post I’d love to read.

1 Like

+1

If someone did not write that blog, i would like to assess my capabilities for doing the same. I am willing to write it, just haven’t had a experience with CRDT yet.

I have a maths background. Please share a few details on what needs to be read for starters. Like a research paper or codebase?
Would love to give it a try.

A while back (before I concluded that this was, ahem, somewhat ahead of my Elixir/Phoenix capabilities), I read through the resources pasted below. It’s all general CRDT background. If you want to look at Elixir-specific stuff, grab the Phoenix code from github and investigate therein (this is what tripped me up - I couldn’t get through it). The Phoenix.Tracker.State module is the guts of the CRDT implementation (an ORSWOT IIRC?). There are also some CRDT libraries on hex.pm if you want to compare.

I hope this is useful as I’d like to see the article! It’s really interesting stuff. Best of luck.

Misc background

About CRDTs • Conflict-free Replicated Data Types

CRDTs and the Quest for Distributed Consistency - YouTube

hupel, An introduction to Conflict-Free Replicated Data Types

A Look at Conflict-Free Replicated Data Types (CRDT) | by Nezih Yigitbasi | Medium

Introduction to Conflict Free Replicated Data-type | by Pierre Hedkvist | The Startup | Medium

Papers

Almeida, Efficient State-based CRDTs by Delta-Mutation

Nuno Preguica, Conflict-free Replicated Data Types

Shapiro, precuica et al, A comprehensive study of Convergent and Commutative Replicated Data Types - Inria

Thank you for articles. That’s a good head start.

I’ll read the Misc first. Then maybe move on to Phoenix.

Is it okay to post questions and take help here? I am not sure how this “writing blog” thing works.

Anyway, time for some theory. Hoping to have fun.

1 Like

That is a very intense reading list!

I will add a few to it:

Martin Kleppman’s talk: CRDTs: The Hard Parts - YouTube
https://docs.yjs.dev/
Introduction to SyncedStore | SyncedStore - Javascript CRDT based real-time sync
Where is the CRDT for syntax trees
CRDTs go brrr
I was wrong. CRDTs are the future
Local-first software: You own your data, in spite of the cloud

And please… don’t approach this as an Elixir thing. There’s growing interest in the Ruby community and several significant JS projects as well.

2 Likes