{"id":26241217,"url":"https://github.com/repetere/lowkie","last_synced_at":"2025-04-23T04:37:56.285Z","repository":{"id":80746569,"uuid":"84615915","full_name":"repetere/lowkie","owner":"repetere","description":"Lowkie is an ORM for LokiJS. LokiJS is a document oriented database written in javascript. LokiJS is used to store javascript objects as documents and follows familiar nosql paradigms to query and retrieve documents. Lowkie by default saves data to disk but for client-side usage, data persists in-memory or client side storage (e.g., a session store / localstorage)","archived":false,"fork":false,"pushed_at":"2019-12-02T21:28:48.000Z","size":4444,"stargazers_count":9,"open_issues_count":2,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-22T14:07:22.322Z","etag":null,"topics":["database","javascript","localstorage","lokijs","lokijs-collections","lokijs-connector","memcached"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/repetere.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-11T01:51:40.000Z","updated_at":"2024-08-06T00:33:02.000Z","dependencies_parsed_at":"2023-03-12T12:07:16.301Z","dependency_job_id":null,"html_url":"https://github.com/repetere/lowkie","commit_stats":null,"previous_names":["typesettin/lowkie"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/repetere%2Flowkie","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/repetere%2Flowkie/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/repetere%2Flowkie/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/repetere%2Flowkie/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/repetere","download_url":"https://codeload.github.com/repetere/lowkie/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250372636,"owners_count":21419720,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["database","javascript","localstorage","lokijs","lokijs-collections","lokijs-connector","memcached"],"created_at":"2025-03-13T08:19:52.283Z","updated_at":"2025-04-23T04:37:56.262Z","avatar_url":"https://github.com/repetere.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Lowkie\n[![Build Status](https://travis-ci.org/typesettin/lowkie.svg?branch=master)](https://travis-ci.org/typesettin/lowkie) [![NPM version](https://badge.fury.io/js/lowkie.svg)](http://badge.fury.io/js/lowkie) [![Coverage Status](https://coveralls.io/repos/github/typesettin/lowkie/badge.svg?branch=master)](https://coveralls.io/github/typesettin/lowkie?branch=master)  [![Join the chat at https://gitter.im/typesettin/lowkie](https://badges.gitter.im/typesettin/lowkie.svg)](https://gitter.im/typesettin/lowkie?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n### Description\nLowkie is a lokijs object modeling tool designed to work in an asynchronous environment.\n\n\u003cp style=\"text-align:center;\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/typesettin/lowkie/master/doc/lowkie.png\" alt=\"Promisie Logo\" width=\"300px\" height=\"auto\" style=\"margin:auto; text-align:center;\"\u003e\u003c/p\u003e\n\n\n### Installation\n```sh\n$ npm i lowkie\n```\n\n### [Full Documentation](https://github.com/typesettin/lowkie/blob/master/doc/api.md)\n\n### Usage (basic)\n```javascript\n//lowkie singleton\nconst lowkie = require('lowkie');\n\n//connect to lowkie (includes loki connection configuration), options can include other loki adapters besides structured file adapters\nlowkie.connect(path.join(__dirname, './sampledb.json'),options)\n  .then((db) =\u003e { \n    console.log('connected db');\n  })\n  .catch(e =\u003e {\n    console.log('connection error', e);\n  });\n\n//listen for connection errors\nlowkie.connection.on('connectionError', (e)=\u003e{\n  console.log('error connecting to the db',e);\n});\n\n//listen for connecting status, dbname is the path to the db json file\nlowkie.connection.on('connecting', (dbname, options)=\u003e{\n  console.log('now trying to connect to db');\n});\n\n//once connected, create models, query the db, etc\nlowkie.connection.once('connected', (db, options)=\u003e{\n  console.log('now connected to db');\n  //create a new schema\n  const UserSchema = lowkie.Schema({\n    email:String,\n    username:String,\n    age:Number,\n  });\n  //register db models, each model is a proxied loki collection with additional helpers\n  const User = lowkie.model('User',UserSchema);\n\n  //write data to db\n  User.insert({\n    email:'test@domain.com',\n    username:'testuser',\n    age:30,\n    invalidProp:'whatever', //removes invalid schema props on creates\n  })\n    .then(newuser =\u003e {\n      //created db\n      /*\n      {\n        \"_id\":\"fbd8080a9272ecaa15d1bb6d0f4b3314\",\n        \"email\":\"test@domain.com\",\n        \"username\":\"testuser\",\n        \"age\":30,\n        \"meta\":{\n          \"revision\":0,\n          \"created\":1490576236063,\n          \"version\":0\n        },\n        \"$loki\":201\n      }\n      */\n      console.log({ newuser });\n    })\n    .catch(e =\u003e { \n      console.log(e);\n    });\n  \n  //insert multiple documents\n  User.insert([\n    {\n      email:'john@domain.com',\n      username:'jsmith',\n      age:37,\n    },\n    {\n      email:'jane@domain.com',\n      username:'jdoe',\n      age:45,\n    },\n    {\n      email:'chris@domain.com',\n      username:'clane',\n      age:17,\n    },\n  ])\n    .then((newusers)=\u003e{\n      console.log(newusers);\n    })\n    .catch(e =\u003e{\n      console.log(e);\n    })\n  \n  //query loki for data\n  let userQueryResults = User.find({ id: { '$gte': 1 } });\n  console.log({userQueryResults}) //result of user query\n});\n\n```\n### Development\n*Make sure you have grunt installed*\n```sh\n$ npm i -g grunt-cli jsdoc-to-markdown\n```\n\nFor generating documentation\n```sh\n$ grunt doc\n$ jsdoc2md lib/**/*.js index.js \u003e doc/api.md\n```\n### Notes\n* Check out [https://github.com/typesettin/lowkie](https://github.com/typesettin/lowkie) for the full Lowkie Documentation\n\n### Testing\n```sh\n$ npm i\n$ grunt test\n```\n### Contributing\nfork and create a pull request!\n\n![Loki Party](https://raw.githubusercontent.com/typesettin/lowkie/master/doc/img/loki-party.gif)\n\nLicense\n----\n\nMIT","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frepetere%2Flowkie","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frepetere%2Flowkie","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frepetere%2Flowkie/lists"}