---
title: "Installation"
description: "Add forges to your project and choose how to import it."
canonical_url: "https://forgeslink-3mwmle35v-poetry.vercel.app/getting-started/installation"
---
# Installation

> Add forges to your project and choose how to import it.

You can install `forges` from npm with the package manager of your choice:

<code-group>

```sh [pnpm]
pnpm add forges
```

```sh [npm]
npm install forges
```

```sh [yarn]
yarn add forges
```

```sh [bun]
bun add forges
```

</code-group>

The package requires Node.js 22.18 or later. It is ESM only and ships its own types, so you don't need to install anything extra for TypeScript. `forges` has no runtime dependencies and sends its requests with the global `fetch`. If you want to use a different implementation, for example in a test or on a runtime that has no global `fetch`, pass it to a provider with the `fetch` option.

## Import paths

The root entry exports every provider along with the shared helpers, so a single import is enough to get started:

```ts
import { createForges, github } from 'forges'
```

Each provider also has a subpath of its own:

```ts
import { github } from 'forges/github'
```

Bundlers drop the providers you don't use from either entry. The subpath matters for a server build that copies dependencies instead of bundling them, because it then copies only the one forge and the shared core. See [Server builds](https://forgeslink-3mwmle35v-poetry.vercel.app/guides/bundling#server-builds).

Besides the providers, the package has a few more subpaths for specific jobs:

<table>
<thead>
  <tr>
    <th>
      Subpath
    </th>
    
    <th>
      Contents
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        forges/github
      </code>
      
      , <code>
        forges/gitlab
      </code>
      
       and so on
    </td>
    
    <td>
      One provider. See <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/providers">
        Providers
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        forges/env
      </code>
    </td>
    
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/guides/environment">
        Configure providers from the environment
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        forges/fake
      </code>
    </td>
    
    <td>
      An in-memory forge for <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/guides/testing">
        tests
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        forges/testing
      </code>
    </td>
    
    <td>
      Fixture replay and webhook signing for <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/guides/testing">
        tests
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        forges/schema
      </code>
    </td>
    
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/json-schemas">
        JSON Schemas
      </a>
      
       for the model types
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        forges/kit
      </code>
    </td>
    
    <td>
      Building blocks for <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/contributing/write-a-provider">
        writing a provider
      </a>
    </td>
  </tr>
</tbody>
</table>

## Browsers

A browser never receives webhook deliveries, so each provider loads the code that translates them only when `webhooks.ingest()` first needs it. A bundler puts that code in a chunk of its own, which a browser doesn't download unless you ingest a delivery. The [Bundling](https://forgeslink-3mwmle35v-poetry.vercel.app/guides/bundling) guide has the details and the bundle sizes.


## Sitemap

See the full [sitemap](https://forgeslink-3mwmle35v-poetry.vercel.app/sitemap.md) for all pages.
