Download KeystrokePro
Unreleased builds for internal testing. They are unsigned, they point at the staging API, and they will not run without the setup below.
Version —
Run it on macOS
Drag the app into Applications first. The second line is one command — it clears Gatekeeper's quarantine flag, then launches with your Access token in the environment.
xattr -dr com.apple.quarantine "/Applications/KeystrokePro (staging).app"
CF_ACCESS_CLIENT_ID=your-client-id CF_ACCESS_CLIENT_SECRET=your-client-secret \
"/Applications/KeystrokePro (staging).app/Contents/MacOS/KeystrokePro (staging)" Check your token first
200 means Access accepted the pair and the API verified it. 302 means it was not recognised — the token is wrong, or no Service Auth policy allows it yet.
curl -s -o /dev/null -w "%{http_code}\n" \
-H "CF-Access-Client-Id: your-client-id" \
-H "CF-Access-Client-Secret: your-client-secret" \
https://api-staging.keystrokepro.io/health These builds are unsigned
Code signing is a later milestone, so each OS will try to stop you.
- macOS
- Gatekeeper reports the app as damaged on Apple Silicon, because nothing has signed it. Clearing the download quarantine flag is what gets past that — it is the first line of the macOS command above.
- Windows
- SmartScreen shows a blue warning. Choose More info → Run anyway.
- Linux
-
Prefer the
.deb. Ubuntu 24.04's AppArmor policy blocks the AppImage sandbox, so the AppImage needs--no-sandbox.
You must launch them from a terminal
The staging API sits behind Cloudflare Access. The app reads an Access service token from the environment of whatever launched it, and never bundles one — so opening it from Finder, the Start menu or a dock icon leaves every API call rejected and sign-in failing.
Ask for a service token, then use the macOS command above — it passes both values through to the app. Verify the pair first with the check above.
Full per-OS instructions live in
docs/desktop-staging-distribution.md.