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 Knex

Datasource 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...
}
G

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>
C

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>
S

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>