# @probot/get-private-key

> Get private key from a path, environment variables, or a `*.pem` file in the current working directory

Latest version **2.1.1** (published 2025-07-31) · ISC license · 0 weekly downloads

## Install

```sh
npm install @probot/get-private-key
pnpm add @probot/get-private-key
yarn add @probot/get-private-key
bun add @probot/get-private-key
```

## Health

**Score 50/100 (C)** — status: stable.

Positive: has types; esm support; no vulnerabilities; high maintenance score.

Warnings: low downloads.

Negative: stale.

## Facts

| | |
|---|---|
| Version | 2.1.1 |
| Published | 2025-07-31 |
| First published | 2020-11-18 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >= 18 |
| Dependencies | 0 |
| Unpacked size | 16.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 10 |
| Author | Gregor Martynus |
| Maintainers | bkeepers, hiimbex, lee-dohm, tcbyrd, jasonetco, gr2m, probotbot |
| Keywords | github-app, probot |

## Links

- npm: https://www.npmjs.com/package/@probot/get-private-key
- Repository: https://github.com/probot/get-private-key
- Homepage: https://github.com/probot/get-private-key#readme
- Issues: https://github.com/probot/get-private-key/issues
- npm.io page: https://npm.io/package/@probot/get-private-key

## Recent versions

- 2.1.1 (latest) — 2025-07-31
- 1.2.1 (release-1.x) — 2025-06-04
- 2.0.0-beta.1 (beta) — 2024-07-21
- 1.2.0 — 2025-06-04
- 2.1.0 — 2025-06-04
- 2.0.0 — 2024-08-03
- 1.2.0-beta.1 — 2024-07-21
- 1.1.2 — 2023-11-11
- 1.1.1 — 2021-07-13
- 1.1.0 — 2020-11-18
- 1.0.0 — 2020-11-18

## README

# @probot/get-private-key

> Get private key from a file path, environment variables, or a `*.pem` file in the current working directory

[![@latest](https://img.shields.io/npm/v/@probot/get-private-key.svg)](https://www.npmjs.com/package/@probot/get-private-key)
[![Build Status](https://github.com/probot/get-private-key/workflows/Test/badge.svg)](https://github.com/probot/get-private-key/actions?query=workflow%3ATest)

Finds a private key through various user-(un)specified methods. Order of precedence:

1. Explicit file path option
2. `PRIVATE_KEY` environment variable or explicit `env.PRIVATE_KEY` option. The private key can optionally be base64 encoded.
3. `PRIVATE_KEY_PATH` environment variable or explicit `env.PRIVATE_KEY_PATH` option
4. Any file w/ `.pem` extension in current working dir

Supports both PKCS1 (i.e `-----BEGIN RSA PRIVATE KEY-----`) and PKCS8 (i.e `-----BEGIN PRIVATE KEY-----`).

## Usage

<table>
<tbody valign=top align=left>
<tr><th>
Browsers
</th><td width=100%>

`@probot/get-private-key` is not compatible with browser usage

</td></tr>
<tr><th>
Node
</th><td>

Install with <code>npm install @probot/get-private-key</code>

```js
import { Probot } from "probot";
import { getPrivateKey } from "@probot/get-private-key";
```

> [!IMPORTANT]
> As we use [conditional exports](https://nodejs.org/api/packages.html#conditional-exports), you will need to adapt your `tsconfig.json` by setting `"moduleResolution": "node16", "module": "node16"`.
>
> See the TypeScript docs on [package.json "exports"](https://www.typescriptlang.org/docs/handbook/modules/reference.html#packagejson-exports).<br>
> See this [helpful guide on transitioning to ESM](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c) from [@sindresorhus](https://github.com/sindresorhus)

</td></tr>
</tbody>
</table>

```js
const probot = new Probot({
  appId: 123,
  privateKey: getPrivateKey(),
});
```

## Options

<table>
  <thead align=left>
    <tr>
      <th>
        name
      </th>
      <th>
        type
      </th>
      <th width=100%>
        description
      </th>
    </tr>
  </thead>
  <tbody align=left valign=top>
    <tr>
      <th>
        <code>options.filepath</code>
      </th>
      <td>
        <code>string<code>
      </td>
      <td>

Pass a path to a `*.pem` file. A relative path will be resolved to the current working directory (which you can set with the `cwd` option)

```js
const privateKey = getPrivateKey({
  filepath: "private-key.pem",
});
```

</td>
    </tr>
    <tr>
      <th>
        <code>options.cwd</code>
      </th>
      <td>
        <code>string<code>
      </td>
      <td>

Defaults to `process.cwd()`. Used to resolve the `filepath` option and used as folder to find `*.pem` files.

```js
const privateKey = getPrivateKey({
  cwd: "/app/current",
});
```

</td>
    </tr>
    <tr>
      <th>
        <code>options.env</code>
      </th>
      <td>
        <code>object<code>
      </td>
      <td>

Defaults to `process.env`. Pass `env.PRIVATE_KEY` or `env.PRIVATE_KEY_PATH` to workaround reading environment variables

```js
const privateKey = getPrivateKey({
  env: {
    PRIVATE_KEY: "-----BEGIN RSA PRIVATE KEY-----\n...",
  },
});
```

</td>
    </tr>
  </tbody>
</table>

## LICENSE

[ISC](LICENSE)

---
_Source: https://npm.io/package/@probot/get-private-key · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
