Security

Last updated 16 July 2026

The short version

  • Our GitHub app is read-only. It cannot change anything in your repositories.
  • The only file contents we fetch are package manifests — the package.json files and workspace config. We parse them, keep the package and tool names, and throw the files away.
  • Your GitHub and Slack access tokens are encrypted at rest.

Why the GitHub app asks to read your code

When you install our app, GitHub shows a permission that sounds broader than what we do: read access to your repository contents. That deserves an explanation.

To build your digest we need one thing from a repository: the names of the packages and tools it depends on, which live in its manifests. GitHub's permissions don't come in that shape. Repository contents is a single permission covering every file, and the only narrower option GitHub offers is access to one file at a fixed path. That can't work here, because in a monorepo the manifests sit at paths like packages/*/package.json that differ from project to project and can't be known in advance.

So we have to ask for read access to everything in order to fetch manifests. The permission is wide; what we do with it is narrow, and the rest of this page describes it exactly.

What we actually read

From each repository you connect, we fetch the contents of at most three kinds of file:

  • package.json at the repository root.
  • pnpm-workspace.yaml, if it exists.
  • The package.json of each workspace package, if the repository is a monorepo.

In a monorepo we fetch one more thing to find the workspace manifests: the repository's file listing — the paths of every file on the default branch, though not their contents — and match it against the workspace patterns from your config. Then we fetch the matching package.json files, parse them, keep the package and tool names, and discard the files. No other file's contents are ever fetched, and no file's contents are ever stored.

Read-only means read-only

The GitHub app holds no write permission of any kind. It cannot push commits, open pull requests, edit files, or change repository settings — GitHub enforces that, not just our code.

What our Slack app can do

Connecting Slack lets the app list your channels — including private ones you invite it to — so you can pick where digests go, join a public channel it needs to post in, and post digests to the channels you choose. It cannot read your messages: it does not hold the permission needed to.

How we store your tokens

Connecting GitHub and Slack gives us an access token for each, and those tokens are the most sensitive thing we hold. We store them encrypted at rest with AES-256-GCM, and the encryption key lives outside the database — so a copy of the database alone does not expose your tokens.

You can revoke either token at any time — from GitHub's application settings, and from your Slack workspace's app settings — and doing so immediately cuts off our access.

Infrastructure

The app and the database run on Render in an EU region, traffic is encrypted in transit, and access to production is limited to the people who need it. What data we hold and for how long is covered by our privacy policy.

Reporting a vulnerability

If you find a security problem in Stack Robot, write to hello@stackrobot.dev and we'll respond quickly. We'd much rather hear about it from you than discover it later.