Groundline GraphDB with IPFS persistence
npm install @shubhamrasal/groundlineA powerful decentralized graph database with IPFS persistence, CRDT-based collaboration, and seamless integration with multiple knowledge graph sources.
- 🔄 CRDT-Based Collaboration - Built on Yjs for real-time collaborative graph editing
- 📦 IPFS Integration - Decentralized storage with Helia and optional Filecoin pinning
- 🌐 Knowledge Graph Integration - Native support for:
- Wikidata
- DBpedia
- OpenAlex
- 🔗 JSON-LD Support - Semantic web compatibility with JSON-LD context
- 📊 Rich Graph Operations - Comprehensive API for graph manipulation and querying
- 📝 Provenance Tracking - Track changes and maintain version history
``bash`
npm install @shubhamrasal/groundline
`typescript
import { createGraphDB, createGraphIPFSManager } from '@shubhamrasal/groundline';
async function main() {
// Initialize graph database with multiple adapters
const graphDB = createGraphDB({
enabledAdapters: ['wikidata', 'dbpedia', 'openalex']
});
await graphDB.initialize();
// Import data from external knowledge graphs
const wikidataResults = await graphDB.importExternalKG('wikidata', {
query: 'your-sparql-query'
});
// Initialize IPFS storage with custom config
const ipfsManager = createGraphIPFSManager({
// Optional IPFS configuration
pinningService: 'filecoin', // Enable Filecoin pinning
ipnsKey: 'your-ipns-key' // For mutable pointers
});
await ipfsManager.initialize();
// Store graph snapshot in IPFS
const snapshot = await ipfsManager.snapshotToIPFS();
console.log('Graph stored in IPFS with CID:', snapshot.cid);
// Load graph from IPFS
await ipfsManager.loadFromIPFS(snapshot.cid);
// Get current graph state
const state = ipfsManager.getGraphState();
}
main().catch(console.error);
`
The library provides adapters for major knowledge graph sources:
`typescript
import {
WikidataAdapter,
DBpediaAdapter,
OpenAlexAdapter,
type KGAdapter
} from '@shubhamrasal/groundline';
// Initialize with specific adapters
const graphDB = createGraphDB({
enabledAdapters: ['wikidata', 'dbpedia', 'openalex'],
adapterConfig: {
wikidata: {
endpoint: 'https://query.wikidata.org/sparql'
},
dbpedia: {
endpoint: 'https://dbpedia.org/sparql'
}
}
});
// Custom adapter implementation
class CustomAdapter implements KGAdapter {
// Implement adapter interface
}
`
The library uses a property graph model with support for rich entity and relation types:
`typescript
import type { Entity, Relation } from '@shubhamrasal/groundline';
// Entity example
const entity: Entity = {
name: "Tim Berners-Lee",
entityType: "Person",
observations: [
"Inventor of the World Wide Web",
"Director of W3C"
],
properties: {
birthDate: "1955-06-08",
nationality: "British"
}
};
// Relation example
const relation: Relation = {
from: "tim-berners-lee",
to: "world-wide-web",
relationType: "invented",
properties: {
year: 1989,
location: "CERN"
}
};
`
Store and retrieve graphs using IPFS with optional Filecoin pinning:
`typescript
import { createGraphIPFSManager, type IPFSConfig, type GraphSnapshot } from '@shubhamrasal/groundline';
// Initialize IPFS manager
const ipfsManager = createGraphIPFSManager({
pinningService: 'filecoin',
ipnsKey: 'your-ipns-key'
});
await ipfsManager.initialize();
// Create and store snapshot
const snapshot: GraphSnapshot = await ipfsManager.snapshotToIPFS();
// Load specific version
await ipfsManager.loadFromIPFS(snapshot.cid);
// Get latest version via IPNS
const latest = await ipfsManager.resolveLatest();
`
1. Clone the repository
2. Install dependencies:
`bash`
npm install
`
3. Build the project:
bash`
npm run build
`
4. Run tests:
bash`
npm test
`
5. Format code:
bash`
npm run format
`
6. Run linter:
bash``
npm run lint
- Node.js >= 18.0.0
- NPM or compatible package manager
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
ISC
Shubham Rasal (@Shubham-Rasal)