Datasources
Connect to server-side data backends like Gremlin, CosmosDB, and SQL databases.
Server-Side Datasources
Datasource packages are server-side implementations of the DataAdapter interface. They connect directly to databases and provide the same 7-method contract, plus a managed connection lifecycle (connect/disconnect/isConnected).
Install datasource packages (pick one or more)
$ pnpm add @inferagraph/gremlin-datasource # Apache TinkerPop$ pnpm add @inferagraph/cosmosdb-datasource # Azure Cosmos DB$ pnpm add @inferagraph/sql-datasource # SQL via KnexDatasource Base Class
All datasource packages extend the abstract Datasource class, which adds a connection lifecycle on top of the DataAdapter interface.
import { Datasource } from '@inferagraph/core';
// All datasources share a lifecycle contract
abstract class Datasource implements DataAdapter {
abstract connect(): Promise<void>;
abstract disconnect(): Promise<void>;
abstract isConnected(): boolean;
// Plus all 7 DataAdapter methods...
}Gremlin Datasource
@inferagraph/gremlin-datasource
Connect to any Apache TinkerPop-compatible graph database, including Azure Cosmos DB Gremlin API, Amazon Neptune, and JanusGraph.
import { GremlinDatasource } from '@inferagraph/gremlin-datasource';
import { GraphProvider, InferaGraph } from '@inferagraph/react';
const ds = new GremlinDatasource({
endpoint: 'wss://biblegraph.gremlin.cosmos.azure.com:443/',
key: process.env.GREMLIN_KEY,
database: 'biblegraph',
container: 'graph',
});
await ds.connect();
// Use as a DataAdapter
<GraphProvider adapter={ds}>
<InferaGraph />
</GraphProvider>CosmosDB Datasource
@inferagraph/cosmosdb-datasource
Connect to Azure Cosmos DB using the NoSQL (document) API. Store nodes and edges as JSON documents with automatic partition key management.
import { CosmosDbDatasource } from '@inferagraph/cosmosdb-datasource';
import { GraphProvider, InferaGraph } from '@inferagraph/react';
const ds = new CosmosDbDatasource({
endpoint: 'https://biblegraph.documents.azure.com',
key: process.env.COSMOS_KEY,
database: 'biblegraph',
container: 'nodes',
});
await ds.connect();
// Use as a DataAdapter
<GraphProvider adapter={ds}>
<InferaGraph />
</GraphProvider>SQL Datasource
@inferagraph/sql-datasource
Connect to PostgreSQL, MySQL, SQLite, or MSSQL via Knex. Supports automatic table creation
with autoMigrate and stores node attributes as JSON columns.
import { SqlDatasource } from '@inferagraph/sql-datasource';
import { GraphProvider, InferaGraph } from '@inferagraph/react';
const ds = new SqlDatasource({
dialect: 'postgres', // or 'mysql', 'sqlite', 'mssql'
connection: process.env.DATABASE_URL,
autoMigrate: true, // auto-create tables
});
await ds.connect();
// Use as a DataAdapter
<GraphProvider adapter={ds}>
<InferaGraph />
</GraphProvider>Composing Datasources
Mix and match datasources by spreading one adapter and overriding specific methods. For example, use Gremlin for graph traversal and Cosmos DB for rich content.
import { GremlinDatasource } from '@inferagraph/gremlin-datasource';
import { CosmosDbDatasource } from '@inferagraph/cosmosdb-datasource';
import { GraphProvider, InferaGraph } from '@inferagraph/react';
// Compose datasources: graph from Gremlin, content from Cosmos DB
const graphDs = new GremlinDatasource({ /* ... */ });
const contentDs = new CosmosDbDatasource({ /* ... */ });
const composedAdapter: DataAdapter = {
...graphDs,
getContent: (id) => contentDs.getContent(id),
};
<GraphProvider adapter={composedAdapter}>
<InferaGraph />
</GraphProvider>Custom Datasource
Extend the Datasource base class to build your own server-side data source for any backend.
import { Datasource } from '@inferagraph/core';
import { GraphProvider, InferaGraph } from '@inferagraph/react';
class BibleDatasource extends Datasource {
async connect() { /* open connection */ }
async disconnect() { /* close connection */ }
isConnected() { return true; }
async getInitialView() {
// Return the initial graph for your data source
return { nodes: [...], edges: [...] };
}
// Implement remaining DataAdapter methods...
}
const ds = new BibleDatasource();
await ds.connect();
<GraphProvider adapter={ds}>
<InferaGraph />
</GraphProvider>