When developing a Probot App, you will need to have several different fields in a .env file which specify environment variables. Here are some common use cases:

Environment VariableProgrammatic ArgumentDescription
APP_IDnew Probot({ appId })The App ID assigned to your GitHub App. Required

(Example: 1234)

PRIVATE_KEY or PRIVATE_KEY_PATHnew Probot({ privateKey })The contents of the private key for your GitHub App. If you're unable to use multiline environment variables, use base64 encoding to convert the key to a single line string. See the Deployment docs for provider specific usage. When using the PRIVATE_KEY_PATH environment variable, set it to the path of the .pem file that you downloaded from your GitHub App registration.

(Example: path/to/key.pem)

Webhook options
WEBHOOK_PROXY_URLnew Server({ webhookProxy })Allows your local development environment to receive GitHub webhook events. Go to to get started.


WEBHOOK_SECRETnew Probot({ secret })The webhook secret used when creating a GitHub App. 'development' is used as a default, but the value in .env needs to match the value configured in your App settings on GitHub. Note: GitHub marks this value as optional, but for optimal security it's required for Probot apps. Required

(Example: development)

For more on the set up of these items, check out Configuring a GitHub App.

Some less common environment variables are:

Environment VariableProgrammatic ArgumentDescription
GHE_HOSTnew Probot({ Octokit: ProbotOctokit.defaults({ baseUrl }) })The hostname of your GitHub Enterprise instance.


GHE_PROTOCOLnew Probot({ Octokit: ProbotOctokit.defaults({ baseUrl }) })The protocol of your GitHub Enterprise instance. Defaults to HTTPS. Do not change unless you are certain.

(Example: https)

GH_ORG-The organization where you want to register the app in the app creation manifest flow. If set, the app is registered for an organization (, if not set, the GitHub app would be registered for the user account (
LOG_FORMAT-By default, logs are formatted for readability in development. You can set this to json in order to disable the formatting
LOG_LEVELconst log = require('pino')({ level })The verbosity of logs to show when running your app, which can be fatal, error, warn, info, debug, trace or silent. Default: info
LOG_LEVEL_IN_STRING-By default, when using the json format, the level printed in the log records is an int (10, 20, ..). This option tells the logger to print level as a string: {"level": "info"}. Default false
LOG_MESSAGE_KEYconst log = require('pino')({ messageKey: 'msg' })Only relevant when LOG_FORMAT is set to json. Sets the json key for the log message. Default: msg
SENTRY_DSN-Set to a Sentry DSN to report all errors thrown by your app.


PORTnew Server({ port })The port to start the local server on. Default: 3000
HOSTnew Server({ host })The host to start the local server on.
WEBHOOK_PATHnew Server({ webhookPath })The URL path which will receive webhooks. Default: /api/github/webhooks
REDIS_URLnew Probot({ redisConfig })Set to a redis:// url as connection option for ioredis in order to enable cluster support for request throttling.

(Example: redis://

For more information on the formatting conventions and rules of .env files, check out the npm dotenv module's documentation.

Found a mistake or want to help improve this documentation? Suggest changes on GitHub

Get occasional updates on new apps & features.


with by the Probot community

Code licensed ISC Docs licensed CC-BY-4.0