A javascript REST ORM that is offline and real-time capable
Rekord is an ORM - a way to define properties and relationships - that interacts with local storage, a RESTful service, and a real-time service. Rekord does this in a generic way so you can use any libraries you wish or your own implementation - making it very easy to integrate into your existing projects. Rekord's design allows for offline capable and real-time applications if desired - offering complete control over how and where your data is stored. Rekord is the most powerful client-side Model/Active Record/ORM you'll find guaranteed - or your money back!
Download Stats
Features
hasOne
, belongsTo
, hasMany
, hasManyThrough
, hasRemote
, hasList
, & hasReference
hasOne
, belongsTo
& hasMany
extend
option)shard
ingupdated_at
and created_at
timestamps and their automatic behavior with a single optionmodel.boot( model or array of models )
model.search( query, options, ... )
Rekord.store
interface (ex: storkjs)Rekord.rest
interface (ex: angular, jquery, ajax, pouchdb, firebase, knexjs)Rekord.live
interface (ex: pubsub, pouchdb, firebase)FAQ (client-side usage)
Does Rekord directly interact with a database?
No, of course not. It interacts with a REST API.
Why do I need to use Rekord?
Working with relational data in javascript can be painful. Rekord eases that pain by allowing you to use plain looking objects that can have any type of relationship with other objects. Rekord takes into consideration things like foreign keys - where you need object A successfully remotely saved before you can save object B. These types of constraints are ugly and bothersome to handle yourself and easily result in bugs. If you're familiar with server-side ORMs, then Rekord should be really easy to pick up. You'll find all the same features and even more!
How are ID collisions avoided?
The key for a model can be given when creating a model - otherwise the key will be given a UUID. This is necessary to be offline capable, models need keys so related models can reference it. If the keyChanges
option is used the server can return a different key (like an auto-incrementing value) and the key changes will be propagated to all references to that model (foreign keys).
What do you mean by capable?
Caching data/changes locally and real-time behavior is optional - if you don't want either feature then you don't need to include an implementation.
Rekord can handle horizontal scaling via sharding?
Yes! You can say models of type X can exist on REST endpoints A, B, & C. You can provide a function which takes a model and returns the set of REST endpoints that need to be sent saves/removes. When you query on a sharded type it can contact all REST endpoints and combine the results.
Why do some functions in the API start with $?
The Rekord.Model
and Rekord.Search
classes can have custom properties therefore to avoid collisions the functions and private variables start with $
. If your design includes properties like status
, operation
, db
, relations
, etc it won't interfere with Rekord.
Installation
The easiest way to install rekord is through bower via bower install rekord
.
rekord.js
is 387KB
(68KB
gzipped)rekord.min.js
is 115KB
(29KB
gzipped)Examples
Examples exist in a separate project: https://github.com/Rekord/rekord-examples
Bindings
Bindings are used to implement core pieces of functionality in rekord - these interfaces allows any library to work with rekord.
Rekord.rest
and adds Rekord.Sync
Rekord.Sync
Rekord.store
Rekord.live
Rekord.store
, Rekord.rest
, & Rekord.live
Rekord.store
, Rekord.rest
, & Rekord.live
Rekord.rest
Rekord.rest
, dependency freeRekord.rest
on the server-sideRekord.debug
Add-Ons
Add-Ons add new functionality to Rekord.
validation
optionRekord.migration
functionRekord.Session
classRekord's Life Cycle:
Documentation
The main documentation is located here. Additional documentation can be found here: