By Matt
Published Mar 12
52 cards
Improvements to CouchDB
4
Custom DB
2
Pocketbase
Replicache
replicache.dev
InstantDB
Datascript 2
Initial load
One downside of a local-first approach is that the initial load of an app is often slower than a pure-cloud app.
Blitz.js
A “zero-api” framework. Backend actions can be "imported" and used in the front end. I guess this would be similar to using the same re-frame event in both the front-end and back-end.
RxDB GraphQL replication
The graphql replication works by storing a last
updated_at
timestamp on the client. The client then sends a request to the server for all documents updated past that timestamp. The same works for pushes from the client to the server.InvaliDB
Reactive queries
CouchDB access control
Asami
An in-memory graph database, for Clojure and ClojureScript.
Datalevin
Datalevin is a simple durable Datalog database.
Hasura access control
In Hasura access-control rules are defined on the row and column level.
Firebase Security Rules
Crux
Crux is a general purpose database with graph-oriented bitemporal indexes. Datalog, SQL & EQL queries are supported, and Java, HTTP & Clojure APIs are provided.
etebase
An end-to-end encrypted open source version of firebase.
hypercore
Hypercore is a secure, distributed append-only log.
Access Control
CouchDB
Caching
Datalog
Automerge
A JSON-like data structure (a CRDT) that can be modified concurrently by different users, and merged again automatically.
CRDT
Materialized views
A materialized view is a bit like a cached query that, in most cases, needs to be updated manually.
Materialize
Incrementally-updated materialized views - in ANSI Standard SQL and in real time.
Feeding data to components
It is a common pattern in React to create a data "provider" component that wraps a pure component. The impure data provider component grabs its data side band and passes it as props to the pure component.
Relay in CLJS
Sample of a relay-like system for building a query graph from component fragments.
Relay
A "GraphQL client for React." Built by facebook, the key insight of Relay is that is co-locates GraphQL fragments with the components that use them. The component tree is wrapped in a
QueryRenderer
which combines all of the fragments in the tree into a single GraphQL query.Data prefetching
This refers to a technique in which application state is pre-fetched server-side and injected into a server-side rendered page. Many frameworks integrate with GraphQL to handle this automatically.
PostgREST
Similar to Hasura, PostgREST is a REST API over top of a Postgres database. It is used by supabase, an open source alternative to firebase.
Hasura
Hasura is a GraphQL API on top of a Postgresql database. It embraces the idea of the client querying the database directly.
CouchDB
CouchDB is a JSON Document store with robust replication capabilities. It is fairly common that each users has their own database when using CouchDB.
PouchDB
PouchDB is a javascript implementation of CouchDB that runs in the browser and node.
Datahike
Datomic
re-frame
re-frame uses subscriptions to fetch data from the
app-db
. Subscriptions are reactive queries depending on their "input signals". The input signal can either be the app-db
itself, or another query.Event reduce
An algorithim that optimizes the re-running of queries based on some mutation event. It is used by rxdb to create reactive queries.
Reactive queries
Queries that can be watched and automatically re-run when the underlying data changes.
RxDB
A reactive database that supports reactive queries.
Datalog
Pathom
In a nutshell: GraphQL, but in Clojure.
GraphQL
Datomic pull syntax
Contrast to Datalog
EQL
EDN Query language is a bit like Datomic pull syntax or GraphQL.