Electric Clojure: Differential Dataflow for UI


Details
Welcome back to Clojure/nyc and a new year of events. We'll open the year with a talk by Dustin Getz on Electric Clojure and its evolution: Differential Electric. Here's the abstract:
---
One year ago we publicly launched Electric Clojure, a "network transparent" Clojure DSL that represents interactive client/server web apps as a single unified reactivity graph spanning both frontend and backend, and then feeds that DAG into a compiler macro to automatically coordinate network state distribution across the frontend/backend boundary.
This talk is about solutions to the problems encountered in the first year of production usage. Electric's network performance has overall been excellent in practice, dramatically out-performing other sync approaches like dataloaders and client databases. Deep tree hierarchy (such as in a complex datagrid) is one area where Electric v2's algorithm, while still outperforming alternatives in both simple and complex apps, had room for improvement.
Differential Electric improves upon Electric Clojure by propagating incremental state changes through the DAG in the form of diffs. In this new "differential" strategy, what propagates over the wire is precise and fine-grained client/server state differences, resulting in a correct and consistent glitch-free view out of the box, with zero collection reloads, overfetching, underfetching or other data sync waste.
This is an example-driven talk. We'll start with the Electric hello world, to understand the basic premise of compiler managed network, and then progress through a series of interesting real-world scenarios, demonstrating by example how algorithmically optimal network management falls out of differential dataflow basically for free.
Dustin Getz is a UI development consultant specializing in ultra-rich user interfaces such as IDEs, productivity tools, streaming datagrids, and complex business applications.
COVID-19 safety measures

Sponsors
Electric Clojure: Differential Dataflow for UI