Quay

Sync local folders with GitHub.

Getting started

1. Sign in with GitHub

Click the Quay icon in the menu bar (circular arrows). On first launch, an onboarding screen appears.

Alternative: Personal access token

If you prefer, click "Use a personal access token instead" during onboarding. You'll need a token with the repo scope (classic) or Contents: Read and write permission (fine-grained). Create one at github.com/settings/tokens.

2. Add a repository

Click + in the bottom toolbar:

3. Sync


How sync works

Fetch latest changes from GitHub. Pull with fast-forward only (no merge commits). Safety checks — refuses files over 50 MB or unignored secrets (.env, .pem, .key, etc.). Stage all changes. Commit with an auto-generated message. Push to GitHub.

If local and remote have diverged, Quay reports a conflict and offers four resolution strategies:


GitHub activity

Each repo row shows the number of open issues and pull requests. Click the counts to open the corresponding page on GitHub. Counts refresh automatically after each sync and once per hour.

Repos also display ahead/behind commit counts (e.g. ↑2 ↓3) so you can see at a glance whether you have unpushed commits or need to pull. A CI status badge shows the latest GitHub Actions result — click it to open the Actions page.


Settings

Click Manage... in the bottom toolbar:


Where data is stored

All data lives inside the macOS app sandbox container:

~/Library/Containers/Quay/
FileContents
credentialYour GitHub credential (file permissions 0600)
config.jsonTracked repos, bookmarks, sync state
events/*.jsonSync history per repo

Your credential is stored locally and never sent anywhere except GitHub's API and to git via a temporary script that is deleted after each sync.


Troubleshooting

"Git not found" — Install Xcode Command Line Tools: xcode-select --install

"Authentication failed" — Your GitHub connection may have expired. Go to Settings > Change GitHub Connection to sign in again.

"Local and remote have diverged" — Click the error icon and choose a resolution strategy: Merge, Rebase, Fresh Branch, or Reset.

"File is too large" — Remove the file or add it to .gitignore.

"Unignored secrets found" — Add the flagged files to .gitignore.