sheharyarn

sheharyarn

Delta – Track Contents & Changes, Operational Transform in Elixir

Delta :high_voltage:

An expressive format to describe documents’ contents and how it changes over time :card_file_box: :hourglass_not_done:

The Delta format is a strict subset of JSON, is human readable, and easily parsible by machines. Deltas can describe any rich-text document, includes all text and formatting information, without the ambiguity and complexity of HTML.

It is also suitable for Operational Transform and can be used in real-time, collaborative document editors (e.g. Slab, Google Docs). A walkthough of the motivation and design thinking behind Deltas are on Designing the Delta Format.

While the package is still v0.1.0 on Hex.pm, we’ve been using it in production for almost 4 years before we open-sourced it, so we’re very confident in our implementation. Feel free to drop any feedback or questions you might have!

Most Liked

sheharyarn

sheharyarn

You’re absolutely right. We’re still working on the docs at the moment, but OT itself is such a complex subject, that I believe it’s better to use real-world examples to show how it works and the different pieces connect.

I recently published a post that gives an overview of some of the features and how they can be used:

I’m currently working on another post that will dive into more detail into the real-time collaboration part using Phoenix channels.

sheharyarn

sheharyarn

On the frontend, we do in fact use Quill to render the content. We don’t prerender it on the server, and keep the format as-is to for receiving changes, transforming the contents and sending it to clients.

gdub01

gdub01

This looks awesome!

Out of curiosity, how do you render this content? Like, do you render this to HTML using Quill in javascript or do you have different ways to render this content on the server to a particular target such as HTML?

For example I think flutter has a library to render quill’s format which I think this mirrors? So I’m wondering if you render this in a way that a client can display it client-side only or also on the server?

kokolegorille

kokolegorille

That looks incredibly useful :slight_smile:

Thanks for the hard work.

paulstatezny

paulstatezny

@sheharyarn If I may offer some constructive feedback, I think the lack of any documentation is going to be an obstacle for a majority of people to try this out.

I mean that in the kindest way possible! :heart:

My curiosity was piqued by your post, but when I went to look in HexDocs all of the functions were completely undocumented and there wasn’t a main page that said anything about the project.

I’d love to learn more about what the project does without having to dig through the codebase. :sweat_smile:

Edit: Just realized that there is some information available in the README on GitHub.

Where Next?

Popular in Libraries Top

devonestes
Introducing assertions, the library that helps you write really great test assertions! GitHub: https://github.com/devonestes/assertions ...
New
KronicDeth
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine) This is a plugin that adds support for Elixir to JetBrains IntelliJ...
289 35421 110
New
tmbb
I’ve published the first version of my Makeup library. It’s a syntax highlighter for Elixir in the spirit of Pygments, Currently it highl...
New
martinthenth
Hello everybody :wave: Recently, some of my colleagues talked about database ids and uuids and their problems, and I remembered the pain...
New
mbuhot
EctoJob A transactional job queue built with Ecto, PostgreSQL and GenStage Available on Hex.pm: ecto_job | Hex Docs: API Reference — ec...
New
ahamez
Hi everyone, I’ve been working on this protobuf library for 3 years. We use it in the company I work for, EasyMile, to communicate with ...
New
ericlathrop
I built a silly site for Halloween that uses Phoenix Channels on the backend, and React on the frontend. I had many problems integrating ...
New
Hal9000
Here is my first stab at this. README pasted below. https://github.com/Hal9000/elixir_random Comments and critiques are welcome. Th...
New
KallDrexx
For a good number of months I've been working on creating a very basic RTMP live video streaming server. Now that I have a very, very ba...
New
maltoe
Hello! Came here to announce ChromicPDF, a pet project PDF generator I’ve been working on for the past few months. Why another PDF gener...
New

Other popular topics Top

sergio
In Ruby, I can go: User.find_by(email: "foobar@email.com").update(email: "hello@email.com") How can I do something similar in Elixir? ...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New
William
I would like to know that is there any online source for learning Phoenix Framework for building E-Commerce Store? Any advantage on build...
New
sergio_101
I am VERY much an elixir newbie. I have taken one elixir course and one phoenix course on Udemy. During that course, I saw the instructor...
New
chrismccord
This release brings a number of exciting features, including integration with the new Phoenix LiveDashboard and Phoenix LiveView. There h...
New
lastday4you
I wanted to check elixir version in phoenix because i found that my elixir is 1.5 but when i use Enum.chunk_by it said the function is un...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New

Sub Categories:

We're in Beta

About us Mission Statement