Skip to content
Buy · $14.99 Opens the GitHub repository in a new tab. The signed build is a separate download; see the README for what is in each.

Privacy

Bastion is a local daemon that holds every credential you own. The only defensible privacy posture for that is to send nothing, and the only way to make the claim worth anything is to say what would falsify it. Everything below is checkable in the source.

What the app sends

An update check Only after you turn updates on, then once a day.
Sparkle fetches an appcast from GitHub. `SUSendProfileInfo` is false and `SUEnableAutomaticChecks` is present-and-false in the Info.plist rather than absent, because an absent key is what makes Sparkle ask on second launch — this way a fresh install has already answered, and the answer is no.

That is the only connection the app opens on its own. The app sends no analytics, no telemetry, no crash reporter and no first-run ping. (The website is a separate matter, and counts page views — see This site below.) scripts/audit-listener.sh asserts the gateway binds loopback and nothing else; the update check is off until you switch it on.

Installing a server, or pressing Check for Updates on one, reaches the npm registry for that package. That happens when you press the button and never on a timer, at launch or on a schedule.

Help ▸ Send Feedback is not a second entry. It opens the feedback form in your browser with the app version, macOS version, Mac model and language in the address bar, and the app sends nothing itself. Whether anything is sent after that is up to you and the Send button.

What never leaves

Your credentials
They are in the Keychain, handed to a child process at spawn and never anywhere else. Nothing in the app and nothing any client can call returns one once it is set. The built-in server can say which secrets a profile has; it cannot say what they are.
The activity log
A ring buffer in memory, cleared when the app quits. No argument and no result is written to disk unless you turn on the audit log in Settings › Activity, which keeps hash-chained segments under Application Support readable only by you — and nothing uploads it either way. Arguments are redacted before a row is recorded rather than filtered out afterwards.
Your usage statistics
Bastion keeps a usage rollup on disk, on by default, and it holds counts rather than content: per day, per profile and per tool, how many calls, how many bytes came back, how long they took, how many failed, how many times a server restarted. No arguments, no results, no resource paths, no identifiers. Tens of kilobytes a day at most, readable only by you, kept ninety days, never uploaded. Settings › Activity turns it off and deletes it.
Everything the servers do
A supervised server talks to whatever API it is for, using the credentials you gave that profile. Bastion is the process holding the credential, not a proxy for the traffic — it never sees or forwards a response body to anyone but the client that asked.
Your licence key
Verification is an Ed25519 signature check on your own Mac. There is no activation call, no licence server, and nothing that phones home to count installs.

Buying a licence

Apart from anything you choose to write to us, this is the one place personal data exists at all, and it exists because a licence has to be deliverable and a refund has to be traceable back to a sale.

Checkout is handled by Stripe, who take the payment details — this site never sees a card number. What is kept afterwards is your email address, the Stripe session and payment identifiers, and the licence issued against them. The email is used to send you the key and to find the licence again if you ask for it or if a refund or dispute has to revoke it. It is not used for anything else, and there is no mailing list to be added to.

The app itself never sends your email anywhere. A key is checked offline, so an installed copy has no idea who bought it.

This site

Static files on Cloudflare, with no cookies and no third-party embeds. It loads no fonts and no images from anywhere else: the content security policy in astro.config.mjs names the two third-party origins this site is allowed to reach, and any other request would not merely be absent, it would be refused by the browser. Cloudflare keeps its own request logs, as any host does.

The first is Cloudflare Web Analytics, which counts page views. It sets no cookie and stores nothing on your device, so there is no banner asking you to accept it. What it records is the page address, the referring page, your browser and operating system, your screen size, how long the page took to load, and the country the request came from. It never receives your IP address, and there is no identifier that would let one visit be joined to another or to you. You can block it with any content blocker and the page works unchanged.

The second is feedback.mgcrea.io, a small worker of ours that the feedback form posts to. It receives what you typed and the four diagnostic fields shown beside it, only when you press Send, and it keeps the report so it can be answered. The email address is optional and used only to reply to you. No other page on this site talks to it.

Asking

To get a copy of what is held against your email, or to have it deleted, write to support@mgcrea.io. Deleting the record revokes the licence it belongs to, because the record is the licence — there is nothing else it could mean.