---
title: "Environment variables"
description: "The variables that providersFromEnv() and forgesFromEnv() read."
canonical_url: "https://docs-oquac2tli-poetry.vercel.app/reference/environment-variables"
---
# Environment variables

> The variables that providersFromEnv() and forgesFromEnv() read.

`providersFromEnv()` and `forgesFromEnv()` from `forges/env` read variables named `FORGES_<KIND>_<FIELD>`. Add `_<SUFFIX>` to a name to configure another instance of the same forge. See [Configure from the environment](https://docs-oquac2tli-poetry.vercel.app/guides/environment).

## Kinds

`GITHUB`, `GITLAB`, `BITBUCKET`, `FORGEJO`, `GITEA`, `GITEE`, `AZURE_DEVOPS`, `CURSOR_ORIGIN`, `TANGLED` and `PUSHIN`.

## Fields

<table>
<thead>
  <tr>
    <th>
      Field
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        TOKEN
      </code>
    </td>
    
    <td>
      A token credential
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        USERNAME
      </code>
      
      , <code>
        PASSWORD
      </code>
    </td>
    
    <td>
      Basic credentials for Bitbucket and Azure DevOps
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        APP_ID
      </code>
      
      , <code>
        PRIVATE_KEY
      </code>
      
      , <code>
        INSTALLATION_ID
      </code>
    </td>
    
    <td>
      App credentials. GitHub and Cursor Origin. Write line breaks in <code>
        PRIVATE_KEY
      </code>
      
       as <code>
        \n
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        IDENTIFIER
      </code>
      
      , <code>
        PASSWORD
      </code>
      
      , <code>
        PDS
      </code>
    </td>
    
    <td>
      Tangled app password credentials, and the PDS to use
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        ORGANIZATION
      </code>
    </td>
    
    <td>
      Azure DevOps organisation. Required for that forge
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        BASE_URL
      </code>
    </td>
    
    <td>
      The API base URL of the instance
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        INSTANCE
      </code>
      
      , <code>
        INSTANCE_VERSION
      </code>
    </td>
    
    <td>
      The host to use in refs, and the version of the instance
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        API_URL
      </code>
      
      , <code>
        NOTIFICATIONS_URL
      </code>
    </td>
    
    <td>
      Tangled service URLs
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        WEBHOOK_SECRET
      </code>
    </td>
    
    <td>
      The secret used to verify deliveries
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        READ_ONLY
      </code>
    </td>
    
    <td>
      <code>
        1
      </code>
      
       or <code>
        true
      </code>
      
       creates the provider with <code>
        readOnly: true
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        ENABLED
      </code>
    </td>
    
    <td>
      <code>
        1
      </code>
      
       or <code>
        true
      </code>
      
       creates an anonymous provider when no credential is set. <code>
        0
      </code>
      
       or <code>
        false
      </code>
      
       skips the set
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        DEMO_REPO
      </code>
    </td>
    
    <td>
      A repository as <code>
        owner/name
      </code>
      
      , for tools that need one to show. GitLab owners can contain slashes. A set with a <code>
        DEMO_REPO
      </code>
      
       is anonymous when it has no credential
    </td>
  </tr>
</tbody>
</table>

## What each forge needs

<table>
<thead>
  <tr>
    <th>
      Forge
    </th>
    
    <th>
      Credentials
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      GitHub
    </td>
    
    <td>
      <code>
        TOKEN
      </code>
      
      , or <code>
        APP_ID
      </code>
      
       and <code>
        PRIVATE_KEY
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      GitLab, Forgejo, Gitea, Gitee, pushin.eu
    </td>
    
    <td>
      <code>
        TOKEN
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      Bitbucket
    </td>
    
    <td>
      <code>
        TOKEN
      </code>
      
      , or <code>
        USERNAME
      </code>
      
       and <code>
        PASSWORD
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      Azure DevOps
    </td>
    
    <td>
      <code>
        ORGANIZATION
      </code>
      
      , and <code>
        TOKEN
      </code>
      
      , or <code>
        USERNAME
      </code>
      
       and <code>
        PASSWORD
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      Cursor Origin
    </td>
    
    <td>
      <code>
        TOKEN
      </code>
      
      , or <code>
        APP_ID
      </code>
      
       and <code>
        PRIVATE_KEY
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      Tangled
    </td>
    
    <td>
      None for reads. <code>
        IDENTIFIER
      </code>
      
       and <code>
        PASSWORD
      </code>
      
       for writes
    </td>
  </tr>
</tbody>
</table>

Without a credential, a set is skipped unless `ENABLED` is on. Cursor Origin cannot be anonymous, and Tangled has no skip condition.


## Sitemap

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