> ## Documentation Index
> Fetch the complete documentation index at: https://forest-chore-open-api.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Add datasources to your project

> Connect one or multiple data sources - SQL databases, MongoDB, APIs, or custom connectors

Forest connects to your data through datasources. You can add one or multiple datasources to your project, each representing a database, an API, or any data source you need to manage.

## Adding a datasource

Use your back-end's method to add a datasource:

<CodeGroup>
  ```javascript Node.js theme={null}
  import { createAgent } from '@forestadmin/agent';
  import { createSqlDataSource } from '@forestadmin/datasource-sql';

  const agent = createAgent(options);

  agent.addDataSource(
    createSqlDataSource('postgresql://user:pass@localhost:5432/mydb')
  );
  ```

  ```ruby Ruby theme={null}
  # app/lib/forest_admin_rails/create_agent.rb
  module ForestAdminRails
    class CreateAgent
      def self.setup!
        datasource = ForestAdminDatasourceActiveRecord::Datasource.new(
          Rails.configuration.database_configuration[Rails.env]
        )

        @create_agent = ForestAdminAgent::Builder::AgentFactory.instance.add_datasource(datasource)
        customize
        @create_agent.build
      end

      def self.customize; end
    end
  end
  ```
</CodeGroup>

Your data is now surfaced to Forest, allowing you to browse, search, edit, and manage your records.

## Adding multiple datasources

You can connect multiple datasources to create a unified back-office across different databases, APIs, or systems:

<CodeGroup>
  ```javascript Node.js theme={null}
  const agent = createAgent(options);

  // Primary PostgreSQL database
  agent.addDataSource(
    createSqlDataSource('postgresql://user:pass@localhost:5432/main')
  );

  // MongoDB for analytics
  agent.addDataSource(
    createMongooseDataSource(mongoConnection)
  );

  // External API
  agent.addDataSource(
    createCustomDataSource(apiConfig)
  );
  ```

  ```ruby Ruby theme={null}
  # app/lib/forest_admin_rails/create_agent.rb, inside CreateAgent.setup!
  factory = ForestAdminAgent::Builder::AgentFactory.instance

  # Primary PostgreSQL database
  factory.add_datasource(
    ForestAdminDatasourceActiveRecord::Datasource.new(
      Rails.configuration.database_configuration[Rails.env]
    )
  )

  # MongoDB for analytics
  factory.add_datasource(ForestAdminDatasourceMongoid::Datasource.new)

  @create_agent = factory
  ```
</CodeGroup>

All collections from all datasources will appear in your Forest interface, giving you a unified view across your entire data landscape.

### Cross-database relationships

You can define relationships between collections from different datasources:

<CodeGroup>
  ```javascript Node.js theme={null}
  agent.customizeCollection('orders', collection => {
    collection.addManyToOneRelation('user', 'analytics_users', {
      foreignKey: 'user_id'
    });
  });
  ```

  ```ruby Ruby theme={null}
  agent.customize_collection('orders') do |collection|
    collection.add_many_to_one_relation('user', 'analytics_users',
      foreign_key: 'user_id'
    )
  end
  ```
</CodeGroup>

This allows you to navigate between related data even when it lives in different databases or systems.

[Learn more about relationships →](/product/process/relationships/overview)

## Available datasources

* **[SQL](/get-started/connect/data-sources/sql)** - PostgreSQL, MySQL, MariaDB, SQL Server with automatic schema introspection
* **[Sequelize](/get-started/connect/data-sources/sequelize)** - Connect through your existing Sequelize ORM models
* **[Mongoose](/get-started/connect/data-sources/mongoose)** - MongoDB via Mongoose ODM with schema support
* **[Dummy](/get-started/connect/data-sources/dummy)** - Generate fake data for testing and prototyping
* **[Hubspot](/get-started/connect/data-sources/hubspot)** - Connect to Hubspot CRM (Contacts, Companies, Deals, Tickets)
* **[Elasticsearch](/get-started/connect/data-sources/elasticsearch)** - Query Elasticsearch indices
* **[Airtable](/get-started/connect/data-sources/airtable)** - Connect Airtable bases
* **[Stripe](/get-started/connect/data-sources/stripe)** - Connect Stripe account data
* **[RPC](/get-started/connect/data-sources/rpc)** - Connect remote data sources via RPC
* **[GraphQL / Hasura](/get-started/connect/data-sources/graphql-hasura)** - Connect GraphQL APIs or Hasura instances
* **[CosmosDB](/get-started/connect/data-sources/cosmosdb)** - Connect Azure CosmosDB

### Custom datasources

Build custom datasources for proprietary systems, legacy databases, REST APIs, or any data source without an existing connector:

* **[Replication](/get-started/connect/data-sources/custom-datasources/replication)** - Replicate external data into Forest
* **[Translation](/get-started/connect/data-sources/custom-datasources/translation)** - Transform and adapt data from any source

<Note>
  **Don't see the datasource you need?** [Contact us](https://www.forestadmin.com/contact) to request a datasource, and we'll help you connect it.
</Note>
