stefan_z
Hello everyone!
I’m excited to share Chord, an Elixir library I’ve been working on that simplifies real-time context management and state synchronization for distributed and real-time applications. It’s designed to be both flexible and efficient, with an API that’s easy to use and integrate.
Why Chord?
Chord was born out of the need to streamline state synchronization and lifecycle management for real-time systems, where contexts change frequently. Whether you’re building a collaborative application, a real-time dashboard, or a messaging system, Chord provides the tools to manage state seamlessly.
Key Features
- Context Management: Create, update, synchronize, and delete contexts effortlessly.
- Delta Tracking: Minimize data transfer by only sending changes.
- Flexible Backends: Use ETS (in-memory) or Redis (distributed) for storage.
- Partial Updates: Update specific fields within a context without replacing the entire structure.
- Customizable Cleanup: Automatically or manually clean up expired data.
- Context Export & Restore: Export contexts to external storage or restore them when needed.
- Pluggable Architecture: Use custom modules for time providers, delta formatting, and external state restoration.
Open to Feedback
This is the first release of Chord, and I’d love to hear your thoughts! Is there something you’d like to see added or improved? Are there edge cases I haven’t considered? Your feedback would mean a lot and help make Chord even better.
You can find the project on Hex.pm and GitHub:
- Hex: chord | Hex
- GitHub:
https://github.com/stefanzvkvc/chord
Thank you for checking it out, and I’m looking forward to hearing your feedback! ![]()
Trending in Announcing
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #ai
- #elixirconf-us
- #blog-post
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #elixirconf-eu
- #metaprogramming
- #hex










Showing Posts 1 to 10- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
asianfilm
Thanks for sharing. And looks like it would be quite straightforward to add a custom backend for CubDB. The most interesting stuff seems to be the delta management, which I guess is particularly useful for non-Ecto backends like the provided ETS and Redis.
dimitarvp
Thanks for posting this. Quick feedback: a few more examples, and more real-world-like, would be very appreciated.
l3nz
Agreed - not sure what/where it is supposed to be. What is a “context”?
stefan_z
Hi everyone,
Thank you so much for your feedback!
@dimitarvp I completely agree with you. I’ll be adding more real-world examples to the documentation soon. I’m also working on an interactive tool for Chord that will demonstrate its potential in a hands-on way, making it easier to understand its use cases.
@l3nz , great question! I chose the term “context” because it’s a flexible concept that can represent a different scenarios such as a group chat, VOIP call, video game session, and more. This flexibility ensures the library can be adapted to diverse scenarios without being tied to a specific domain.
Thanks again for sharing your thoughts, I really appreciate it!
venkatd
Hi @stefan_z
This looks very interesting! I have a few questions
What do you mean by context? Context tends to be a word that has many meanings so would be helpful to clarify what that means. Is it just a container for state?
We currently have a bespoke solution over phoenix channels where we sync GenServer state from our server over to the client using json diffs. Would chord be a potential replacement to our solution?
l3nz
I think I see what you mean, but in the end if I get it right it looks a bit like an Elixir
Agent? I see there are mentions of deltas and collection of unused/expired ones, but what is the advantage of using those? I’m sure there is one, I just don’t see it in the docs.stefan_z
Hi @venkatd,
You’re absolutely right, “context” is a term that can mean many things depending on the domain. In Chord, a context is indeed a container for state. For example:
From what you describe, Chord sounds like a strong candidate for your use case. It provides:
To make things easier to understand, I’ve also created a test tool called ChordLab, where you can see Chord in action. Currently, it demonstrates a chat simulation that includes public and private conversations, real-time syncing, and more. You can find the repository and instructions for running it on GitHub:
https://github.com/stefanzvkvc/chord_lab
stefan_z
Hi @l3nz,
I see what you mean about it resembling an Elixir Agent, but there are a few key differences and advantages that Chord brings, especially with deltas and their management:
Let me know if there are specific points you’d like to see covered more in-depth in the docs!
l3nz
If I were you I’d use that as theproject description on GitHub
stefan_z
Hi @l3nz ,Thanks for the feedback! You’re absolutely right
. I’ve updated the README with comprehensive examples to make it easier to understand and use. Feel free to check it out and let me know if there’s anything else you’d like to see!