---
title: "Installation"
description: "Add forges to your project and choose how to import it."
canonical_url: "https://forges.link/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. Bundlers drop the providers you don't use when you import from the root, but a subpath import is more explicit, because it names the one forge you depend on:

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

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://forges.link/providers">
        Providers
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        forges/env
      </code>
    </td>
    
    <td>
      <a href="https://forges.link/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://forges.link/guides/testing">
        tests
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        forges/testing
      </code>
    </td>
    
    <td>
      Fixture replay and webhook signing for <a href="https://forges.link/guides/testing">
        tests
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        forges/schema
      </code>
    </td>
    
    <td>
      <a href="https://forges.link/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://forges.link/contributing/write-a-provider">
        writing a provider
      </a>
    </td>
  </tr>
</tbody>
</table>

## Browsers

A browser never receives webhook deliveries, so the code that verifies and translates them would only add weight to your bundle. To avoid that, every provider except Pushin.eu and Cloudflare Artifacts comes with a second factory that leaves the webhook code out, such as `githubLite()` next to `github()`. If you are building for the browser, use the Lite factory. The [Bundling](https://forges.link/guides/bundling) guide has the details and the bundle sizes.


## Sitemap

See the full [sitemap](https://forges.link/sitemap.md) for all pages.
