
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
git-documentdb
Advanced tools
TypeScript Ready Offline-first Database that Syncs with Git
Use GitDocumentDB to ...
:nut_and_bolt: Develop offline-capable applications using Git.
:green_book: Manage JSON documents in Git repository by CRUD and collection APIs.
:rocket: Synchronize automatically with remote repositories.
(No need to resolve conflicts manually!)
:arrows_counterclockwise: Integrate CI/CD pipelines through GitHub.
:dromedary_camel: Get the revision history of a document.
https://gitddb.com/docs/api/git-documentdb.gitdocumentdb
Node.js v12 - v16
npm i git-documentdb
import { GitDocumentDB } from 'git-documentdb';
const gitDDB = new GitDocumentDB({
db_name: 'db01', // Git working directory
});
/**
* Open a database
*/
await gitDDB.open();
/**
* Create a document
*/
await gitDDB.put({ _id: 'nara', flower: 'cherry blossoms', season: 'spring' });
console.log(`$ gitDDB.put({ flower: 'cherry blossoms' ... }) # Create`);
console.log(await gitDDB.get('nara'));
// log: { _id: 'nara', flower: 'cherry blossoms', season: 'spring' }
/**
* Update a document if it exists.
*/
await gitDDB.put({ _id: 'nara', flower: 'double cherry blossoms', season: 'spring' });
/**
* Read a document
*/
const doc = await gitDDB.get('nara');
console.log(`\n$ gitDDB.put({ flower: 'double cherry blossoms' ... }) # Update`);
console.log(doc);
// log: { flower: 'double cherry blossoms', season: 'spring', _id: 'nara' }
/**
* Delete a document
*/
await gitDDB.delete('nara');
console.log(`\n$ gitDDB.delete('nara') # Delete`);
console.log(await gitDDB.get('nara'));
// log: undefined
/**
* Use an auto-generated _id
*/
const appleResult = await gitDDB.put({ name: 'apple' }); // _id does not exist.
const apple = await gitDDB.get(appleResult._id);
console.log(`\n_id of the JSON document is automatically generated`);
console.log(apple);
// log: { name: 'apple', _id: 'XXXXXXXXXXXXXXXXXXXXXXXXXX' }
/**
* Revisions
*
* getOldRevision(id, 2) returns a document two revisions older than the latest.
*
* #0 (latest): undefined (deleted)
* #1: 'double cherry blossoms'
* #2: 'cherry blossoms'
*/
const oldDoc = await gitDDB.getOldRevision('nara', 2);
console.log(`\n$ gitDDB.get('nara', 2) # Get a document two revisions older than the latest.`);
console.log(oldDoc);
// log: { _id: 'nara', flower: 'cherry blossoms', season: 'spring' }
await gitDDB.sync({
live: true,
remote_url: 'https://github.com/enter_your_accunt_name/git-documentdb-example.git',
connection: { type: 'github', personal_access_token: 'Enter your personal access token with checked [repo]' },
});
(You can find more examples in examples/src/sync.ts)
/**
Create documents under sub-directories
git-documentdb
└── db01
├── nara
│ ├── nara_park.json
│ └── tsukigase.json
└── yoshino
└── mt_yoshino.json
*/
await gitDDB.put({ _id: 'nara/nara_park', flower: 'double cherry blossoms' });
await gitDDB.put({ _id: 'nara/tsukigase', flower: 'Japanese apricot' });
await gitDDB.put({ _id: 'yoshino/mt_yoshino', flower: 'cherry blossoms' });
// Read
const flowerInYoshino = await gitDDB.get('yoshino/mt_yoshino');
console.log(flowerInYoshino);
// log:: { flower: 'cherry blossoms', _id: 'yoshino/mt_yoshino' }
/**
* Prefix search
*
* Read all the documents whose IDs start with the prefix.
*/
const flowersInNara = await gitDDB.find({ prefix: 'nara/' });
console.log(flowersInNara);
/* log:
[
{ flower: 'double cherry blossoms', _id: 'nara/nara_park' },
{ flower: 'Japanese apricot', _id: 'nara/tsukigase' }
]
*/
// destroy() closes DB and removes
// both the Git repository and the working directory.
await gitDDB.destroy();
// Try sub-directories again by another way.
await gitDDB.open();
// Use Collection Class to make them easier.
const nara = gitDDB.collection('nara');
const yoshino = gitDDB.collection('yoshino');
await nara.put({ _id: 'nara_park', flower: 'double cherry blossoms' });
await nara.put({ _id: 'tsukigase', flower: 'Japanese apricot' });
await yoshino.put({ _id: 'mt_yoshino', flower: 'cherry blossoms' });
// Read
const flowerInYoshinoCollection = await yoshino.get('mt_yoshino');
console.log(flowerInYoshinoCollection);
// { flower: 'cherry blossoms', _id: 'mt_yoshino' }
// Read all the documents in nara collection
const flowersInNaraCollection = await nara.find();
console.log(flowersInNaraCollection);
/* log:
[
{ flower: 'double cherry blossoms', _id: 'nara_park' },
{ flower: 'Japanese apricot', _id: 'tsukigase' }
]
*/
await gitDDB.close();
(You can find more examples in examples/src/collection.ts)
See examples directory.
$ npm run build
$ cd examples
$ npm i
$ npm start
$ npm run sync
$ npm run collection
https://github.com/sosuisen/sosuisen-my-inventory-gatsby
https://github.com/sosuisen/inventory-manager
Connect to GitHub with OAuth
Work on browser
Sync any data types
Replication
Transaction (bulk)
GitLab and Bitbucket
Push server
Migration
FAQs
Offline-first database that syncs with Git
The npm package git-documentdb receives a total of 15 weekly downloads. As such, git-documentdb popularity was classified as not popular.
We found that git-documentdb demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.