Skip to content
a Hypermedia Function
Branch: master
Clone or download
Latest commit e2833be May 23, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
resources datomic facade May 16, 2019
src Remove dead import May 23, 2019
test fix tests May 23, 2019
.gitignore UI testing with reagent Mar 21, 2018
LICENSE Extract hypercrud-client into its own module Feb 12, 2015 Update Apr 12, 2019
build.boot Bump deps Mar 8, 2019
circle.yml Fix circle cache keys Oct 11, 2018
package.json Bump remark deps hyperfiddle/ Dec 8, 2018

hyperfiddle.cljc — a Hypermedia Function

Hyperfiddle isolates your web clients from I/O, so your code can stay pure. If React.js is managed DOM, Hyperfiddle is managed network and database. This enables a new kind of composable primitive for constructing web software, with paradigm-changing implications.

Dependency coordinates — Todo

[com.hyperfiddle/hyperfiddle "0.0.0"]


The hardest part of web dev is I/O: data sync between database, various services, UI and then back to the database. An async, slow, failure-prone concern wired throughout the full stack, and the reason why we all code the same web boilerplate over and over again, year after year.

Hyperfiddle makes data-sync invisible with immutability:

  • Fiddle graph captures service inter-dependencies as data (query X depends on queries Y and Z)
  • Fiddle graph captures application essense (API, UI, database) as one concern – no frontend/backend dichotemy
  • Optimizing I/O runtime – data sync reduces to a graph partitioning problem
  • Managed data sync – Userland is not concerned with effects, async, errors or latency
  • Transport layer independence – swap transport strategies (e.g. REST, websocket) without changing your app
  • Dynamic transport strategies can automatically balance caching and latency
  • Platform independence – run on any platform (e.g. browser, Node, mobile) without changing your app

Framework or library? Neither: Hyperfiddle is server infrastructure, like Apache or Nginx. There is a Clojure library for making custom servers (e.g. integrations and control over data sync) and a client library for talking to it.

How does it work?

The Cognitect stack has the right primitives to build "functional" data sync by orienting the entire stack around values and immutability.

  • Clojure/CLJC - Value-oriented programming on any platform
  • EDN - Extensible notation for values
  • Transit - Efficient value interchange between foreign systems
  • Datomic - Database as a value
  • (supplemented with React.js/Reagent)

Hyperfiddle uses the Cognitect stack as a basis to abstract over client/server data sync for APIs, by extending Datomic's immutable semantics to the API. Unlike REST/GraphQL/whatever, Hyperfiddle's data sync composes.

Managed I/O means, as a web dev, you are no longer concerned with remote data fetching or coding HTTP backends. In fact there is hardly any "web programming" left at all. But managed I/O is not the point. The point is: what does managed I/O make possible that wasn't possible before?

You can’t perform that action at this time.