Privacy Policy
Steer has no analytics, no telemetry, and no account. Controller input is processed entirely on-device and never leaves your Mac. The app reaches the network in three situations, all either licensing or something you start: licence activation and checks, update checks you start yourself, and, only if you import a profile from a link, fetching that one file. Each is described in full below.
Controller input
Everything Steer does with your controller (cursor, keystrokes, button settings, customizations, macros) happens locally, and none of it is transmitted. One thing does write your input to disk, and only because you asked for it: recording a macro saves what the controller was doing, frame by frame, so the macro can play it back. That is the buttons, the stick and trigger positions, the touchpad, the motion sensor and the battery reading, for up to thirty seconds at a time, in a file on your Mac. You start the recording yourself in Settings, and you can delete the macro there too.
Purchases and licensing
Steer is sold through Lemon Squeezy, which takes the payment and is legally the seller. Checkout happens on their pages: your name, email address, payment details and billing information go to Lemon Squeezy, which is legally responsible for that purchase data under its privacy policy. I receive the order details needed for support and refunds; I never see your payment details.
When you activate a licence, and afterwards when the app confirms a stored licence is still valid, Steer sends your licence key and the instance name “Steer (macOS)” to Lemon Squeezy's licence server at api.lemonsqueezy.com. As with any internet request, the server also sees your IP address. That is the entire exchange. Your licence key is stored in the macOS Keychain, not in a plain-text file, and if the server can't be reached the app keeps working for a while rather than locking you out.
Updates and downloads
Update checks are user-initiated only. Steer never contacts the update feed on launch or on a schedule; nothing happens until you choose “Check for Updates…”. When you do, the app fetches the update feed from steer.seanfloyd.dev and, if you install, downloads the new version from GitHub. This site is served by GitHub Pages and the app itself is hosted on GitHub Releases, so GitHub sees the standard request data any web host does, including your IP address, whenever you download or update Steer.
Importing a customization
Steer never fetches customizations on its own. If you paste a link to import someone else’s setup, the app fetches that one file from the URL you gave it, and that host sees the standard request data any web host does, including your IP address. Nothing is fetched unless you paste a link.
Diagnostics
Steer collects crash and performance reports through Apple's own reporting system (MetricKit) and stores them on your Mac only. Nothing is uploaded automatically. A report leaves your machine only when you choose “Report a Problem”, which drafts an email in your own mail client with the diagnostics attached; you see exactly what's in it before deciding to send.
Permissions
Steer requests these macOS permissions:
- Accessibility: required to move the cursor and dispatch keyboard events on your behalf.
- Automation: permission to control System Events, the automation helper macOS ships with. The first-run wizard asks for it, and so does the first time you open another app's menus, start Dictation, or click something in an app you weren't already using. Steer is sandboxed and cannot reach another app's menu bar itself, so System Events does it; that is the name the prompt shows you.
Steer doesn’t ask for Input Monitoring. Accessibility covers listening for the events Steer needs, per Apple’s developer support. A DualSense was also read over both USB and Bluetooth with the permission switched off, and kept working. That is one controller, not a general rule about every device. A DualSense Edge’s two rear paddles are untested, for want of an Edge to test on.
Accessibility is mostly an output permission here: it is what lets Steer post the cursor, scroll and keyboard events your controller stands in for. Some features also reach into the app you're using. The ones you turn on only do it while you are using them: the menu palette reads the menu bar of the app you're using to list the menus for you and activates the item you pick, and the Dictation binding presses that app's own Dictation menu item. One reach is not something you turn on: macOS never brings an app forward for a click Steer synthesized, so after a click that lands in an app you weren't already using, Steer asks for its window to be raised. All of that goes through System Events, which is what the Automation permission is for.
Steer never transmits your input, never watches your keystrokes, and never reads the contents of your documents or your screen. It reads the clipboard only where you would expect it to: selecting text or a link in another app and choosing Services → “Bind to Steer” sends that selection to the binding editor, and copying and pasting a binding inside the bindings editor checks the clipboard for one.
Who runs Steer
Steer is built and operated by Sean Floyd in Ottawa, Canada. For anything privacy-related, including a copy or deletion of what little I hold (support emails and order records), write to steer@seanfloyd.dev.
